Ho letto le tecniche del compilatore di ottimizzazione locale, ma continuo a non capire come vengono implementate. L'idea è che l'ottimizzatore guardi ogni volta una "finestra" del codice e in qualche modo rilevi schemi e li sostituisca con versioni più ottimizzate.pattern di ottimizzazione dello spioncino
La mia domanda è: come si scoprono questi modelli? (supponiamo che la tua piattaforma sia una VM che emette codice assembly per un computer inventato, come Hack di Schocken).
Le persone ispezionano il codice manualmente (utilizzando i diagrammi di flusso di controllo o i DAG o altro) e quindi raccolgono tutti i modelli identificati e li codificano nell'ottimizzatore? O c'è un modo automatico.
Ad esempio, si alimenta il codice in fase di ottimizzazione in un analizzatore e si spiegano i suddetti motivi. Se è così, come si può iniziare a scriverne uno?
Penso che questo sia generalmente chiamato "cache in linea". Troverai molta letteratura per i recenti motori JavaScript che utilizzano questa tecnica in fase di esecuzione. Vedi http://wingolog.org/archives/2012/05/29/inline-cache-applications-in-scheme. – leppie
È interessante, la prima volta che mi imbatto in questo. Generalmente pensavo a operazioni come la riduzione della forza, la valutazione costante, il controllo del flusso opt, ecc. – gfountis
Questo sembra essere mirato al "runtime" sì? O è usato per generare un codice di assemblaggio più stretto? – gfountis