Domanda

Come moderni compilatori ottimizzanti determinare quando applicare alcune ottimizzazioni, come loop di svolgimento e il codice inline?

Dal momento che entrambi questi influenzano la cache, ingenuamente inlining funzioni con meno di linee X, o qualunque altra euristica semplice, è in grado di generare il codice performante peggio. Quindi, come fare i compilatori moderni accordo con questo?

Sto avendo difficoltà a trovare informazioni su questo (in particolare le informazioni questo è ragionevolmente facile da capire ..), circa il migliore che ho trovato è il articolo di Wikipedia . Tutti i dettagli, i link ai libri / articoli / documenti sono molto apprezzate!

EDIT: Dal momento che le risposte si parla principalmente sui due ottimizzazioni che ho citato (inline e svolgimento del ciclo) Volevo solo chiarire che io sono interessato a tutti e le eventuali ottimizzazioni del compilatore, non solo quei due. Sono anche più interessato alle ottimizzazioni che possono essere eseguite durante la compilazione ahead-of-time, anche se l'ottimizzazione JIT è di interesse troppo (anche se in misura leggermente inferiore).

Grazie!

È stato utile?

Soluzione

Di solito con l'essere così ingenuo comunque e spero che sia un miglioramento.

Questo è il motivo per cui compilatore just-in-time è una strategia vincente. Raccogliere le statistiche poi ottimizzare per il caso comune.

References:

Altri suggerimenti

Si può guardare un spirale progetto.

In cima a quello, ottimizzazione è una cosa difficile da fare genericamente. Questo è, in parte, il motivo per cui ci sono così tante opzioni per il compilatore gcc. Se sapete qualcosa su cache e le pagine si possono fare alcune cose a mano e la richiesta che gli altri essere fatto attraverso il compilatore, ma non ci sono due macchine sono gli stessi in modo che il metodo deve essere adhoc.

Per brevi:! Meglio di noi

Si può avere uno sguardo a questo: http: //www.linux -kongress.org/2009/slides/compiler_survey_felix_von_leitner.pdf

Didier

Buona domanda. Ti stai chiedendo circa cosiddetti ottimizzazioni speculativi.

compilatori dinamici utilizzano sia l'euristica statica e delle informazioni del profilo. compilatori statici impiega euristiche e (off-line) le informazioni sul profilo. L'ultima è spesso fatto riferimento come PGO (Profilo ottimizzazioni guidate).

Ci sono un sacco di articoli su politiche inline. Il più completo è

Uno studio empirico del metodo Inlining per un Java Just-In-Time Compiler

Esso contiene anche riferimenti a lavori connessi e aspre critiche su alcuni degli articoli considerati (giustificato).

In generale, state-of-the-art compilatori cercano di usare analisi di impatto per stimare l'effetto potenziale di ottimizzazioni speculativi prima di applicarle.

P.S. srotolamento Loop è vecchia roba classica che aiuta solo per alcuni cicli stretti che esegue solo numero crunchng ops (nessuna chiamata e così via). Metodo inlining è l'ottimizzazione molto più importante nei compilatori moderni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top