2012-01-14 14 views
22

J.M. Siskind's research statement stati:Altri riferimenti a come il compilatore di Stalin brutalmente ottimizza?

Stalin è un compilatore ottimizzato per schema che esegue l'analisi statica dell'intero programma e utilizza i risultati di tale analisi per generare il codice estremamente efficiente. Stalin utilizza una vasta collezione di tecniche di analisi statica. Esegue una nuova forma di analisi del flusso polivariante che utilizza l'analisi del flusso monovariant iterata per eseguire la suddivisione diretta dal flusso: clonazione di copie specializzate di procedure e assegnazione di bersagli per chiamata a tali cloni. Utilizza i risultati dell'analisi del flusso per eseguire analisi del tempo di vita, analisi di fuga, analisi da punto a punto e analisi del must-alias. Queste analisi supportano una nuova forma di conversione della chiusura leggera che elimina la maggior parte degli slot di chiusura, utilizzando tecniche come la globalizzazione e la localizzazione variabili, comprime il backchain statico e di solito elimina la maggior parte delle chiusure dai programmi. Inoltre, utilizza le analisi di cui sopra per supportare la gestione dello storage basata sul flusso orientata alla regione, in cui la garbage collection in fase di esecuzione viene sostituita con allocazione statica e deallocazione su base per-abstract-valore e per-punto-programma. Esegue anche la conversione CPS leggera diretta dal flusso, utilizzando estensioni delle tecniche sperimentate con Screamer, per supportare continuazioni di prima classe estremamente efficienti. Infine, supporta l'inlining diretto al flusso e la selezione della rappresentazione di basso livello per scegliere l'implementazione (o non implementazione) delle tag, il controllo dei tag e l'invio dei tag su base per-abstract-value e per-point-point. Ciò elimina la maggior parte dei tag di runtime, il controllo dei tag, il tagging, lo stripping dei tag, l'invio di tag, il boxing e l'unboxing dai programmi. Queste analisi e ottimizzazioni consentono a Stalin di generare codice estremamente efficiente che supera tutti gli altri compilatori Scheme per fattori compresi tra due e cento, in particolare per il codice intensivamente numerico. Stalin genera spesso un codice che sovraperforma il codice scritto a mano c e il codice Fortran.

sono stato in grado di trovare il seguente articolo molto interessante sulle chiusure funzione/chiamate implementazione: Flow-Directed Lightweight Closure Conversion. Ho anche inviato un'email all'autore per chiedere dei documenti sugli altri argomenti, che sono menzionati per essere scritti nel documento di conversione di chiusura:

Siskind, J. M. 2000a. Conversione CPS leggera diretta dal flusso. In preparazione.

Siskind, J. M. 2000b. Poligarianza diretta dal flusso. In preparazione.

Siskind, J. M. 2000c. Selezione della rappresentazione diretta dal flusso. In preparazione.

Siskind, J. M. 2000d. Gestione dello storage diretta al flusso. In preparazione

Sfortunatamente, non è mai riuscito a scrivere quei documenti. La mia domanda è: ci sono documenti alternativi o correlati che trattano questi argomenti? Sono molto interessato a sapere come Stalin (o altri compilatori) possono compilare un linguaggio di alto livello come Scheme che è garbage collection, tipizzato dinamicamente, supporta funzioni di prima classe, e anche continuazioni di prima classe, può essere compilato staticamente in un codice così efficiente .

+10

Mi chiedo, perché gli stretti voti qui? –

+0

Forse alcune persone pensano che sia uno scherzo a causa del titolo? Più probabilmente, pensano che sia troppo teorico. Non sono d'accordo. –

+0

Probabilmente perché la domanda è più adatta per il cstheory stackexchange. – erjiang

risposta

4

R. Kent Dybvig's publications list.

Edit: Una buona introduzione al Chez Scheme è il suo ICFP presentation e il paper that went along with that. Alcuni documenti riguardano specificamente Scheme (macro, valori multipli, continuazioni) e alcuni sono applicabili in modo più ampio (Register Allocation Using Lazy Saves, Eager Restores, and Greedy Shuffling).

+1

Qualcosa in particolare che si applica all'ottimizzazione dei compilatori Scheme? – spacemanaki

+0

Hai guardato la lista? – erjiang

+2

Sì, l'ho fatto, e alcuni titoli non sono ovviamente correlati all'ottimizzazione dei compilatori mentre altri potrebbero esserlo, ma non sono sicuro di dove sia un buon punto di partenza. Non stavo cercando di essere snarky, ero sinceramente curioso. C'è un solo foglio che pensi possa essere un buon inizio? – spacemanaki

Problemi correlati