Ich habe auf lokale Optimierung Compiler-Techniken gelesen, aber ich bekomme nicht, wie sie implementiert werden. Die Idee ist, dass der Optimierer jedes Mal ein "Fenster" des Codes betrachtet und Muster irgendwie erkennt und durch optimierte Versionen ersetzt.Guckloch Optimierungsmuster
Meine Frage ist, wie entdeckt man diese Muster? (Nehmen wir an, Ihre Plattform ist eine VM, die Assemblercode für einen erfundenen Computer ausgibt, wie Schocken's Hack).
Wird der Code tatsächlich manuell geprüft (mithilfe von Steuerungsflussdiagrammen oder DAGs oder was auch immer) und alle identifizierten Muster werden gesammelt und in den Optimierer codiert? Oder gibt es einen automatischen Weg?
Zum Beispiel füttern Sie den zu optimierenden Code in einem Analysator und spuckt diese Muster aus. Wenn ja, wie kann man damit anfangen?
Ich denke, das wird allgemein 'Inline-Caching' genannt. Sie werden viel Literatur für aktuelle JavaScript-Engines finden, die diese Technik zur Laufzeit verwenden. Siehe http://wingolog.org/archives/2012/05/29/inline-cache-applications-in-scheme. – leppie
Das ist interessant, das erste Mal, dass ich darauf stoße. Ich dachte generell an Operationen wie Kraftabbau, konstante Auswertung, Kontrollfluss opt., Etc .. – gfountis
Dies scheint auf "Laufzeit" ausgerichtet zu sein ja? Oder wird es verwendet, um engeren Assemblercode zu generieren? – gfountis