Cosa c'è di nuovo nelle tecniche di ottimizzazione del compilatore negli ultimi anni?


14

Sono interessato all'ottimizzazione del flusso di dati e ai grafici del flusso di controllo e in particolare a un livello di elaborazione più complesso. Ma sarà anche interessante conoscere le ultime invenzioni nel campo delle ottimizzazioni dello spioncino.


2
Nella mia tesi ( diapositive ) ho discusso e implementato l'appiattimento del call call in LLVM; fondamentalmente è una trasformazione interprocedurale che elimina la nozione di "funzione" perché unisce tutto il codice, consentendo un sacco di possibilità interessanti come il movimento del codice interprocedurale, convenzioni di chiamata ottimizzate per il sito, esecuzione senza stack e così via.
CAFxX,

@CAFxX: diapositive si sono schiantate su Open Office .. ti capita di avere delle foto online invece?
Yttrill,


Grazie, in grado di vederlo, anche se i grafici andavano bene per essere visibili, il testo era buono.
Yttrill

Risposte:


8

Non sono sicuro di quanto sia nuovo, o se sia troppo sul lato applicato per il tuo interesse, ma Hoopl mostra come un'ottimizzazione del controllo / flusso di dati può essere modularizzata, con la propagazione dei fatti sui vertici del grafico di controllo essere indipendenti dal lingua e ottimizzazione specifica.

Riferiscono un algoritmo del 2002 di Lerner, Grove e Chambers che compone semplici ottimizzazioni in una "superottimizzazione".



6

C'è stato un po 'di rinascita nei compilatori di ottimizzazione verificati. Oltre al documento di Lerner (menzionato in un commento precedente), potresti guardare al progetto CompCert guidato da Xavier Leroy. Hanno fatto alcune cose interessanti specificando le ottimizzazioni come prove controllabili dalla macchina (usando Coq ). Non ho ancora letto i documenti, ma il progetto The Verified Software Toolchain a Princeton sembra anche produrre risultati interessanti in questo settore.


1
Stiamo anche lavorando a un progetto simile a CompCert: CerCo ( cerco.cs.unibo.it ). A differenza di CompCert, ci proponiamo di produrre un compilatore verificato per la conservazione dei costi concreti per un ampio sottoinsieme di C (CompCert mostra solo che le proprietà estensioni del programma sorgente sono conservate dalla compilazione). Stiamo anche implementando nel compilatore alcune ottimizzazioni di loop moderatamente complesse, nonché ottimizzazioni "lievi" come impiega CompCert, che dovranno ovviamente essere verificate come risparmio di costi.
Dominic Mulligan,

5

Riconoscendo che baz [i] + = force (foo [i], foo [j]) in un doppio ciclo FOR ha risultati indipendenti per (i, j) e riordina le chiamate in una curva di riempimento dello spazio da (i, j) a abbattuto su cache miss.

Non abbastanza "spioncino" ma ottenere un comportamento ignaro della cache per "libero" è bello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.