In che modo i moderni compilatori di ottimizzazione determinano quando applicare determinate ottimizzazioni come lo srotolamento del loop e l'inlining del codice?In che modo i moderni compilatori di ottimizzazione determinano quando ottimizzare?
Poiché entrambi influiscono sul caching, ingenuamente le funzioni di inlining con meno di X lines, o qualsiasi altra semplice euristica, è probabile che generi codice con prestazioni peggiori. Quindi, come si comportano i compilatori moderni con questo?
Sto avendo difficoltà a trovare informazioni su questo (soprattutto informazioni che è ragionevolmente facile da capire ..), il meglio che ho trovato è il wikipedia article. Qualsiasi dettaglio, link a libri/articoli/documenti sono molto apprezzati!
EDIT: Poiché le risposte stanno parlando principalmente delle due ottimizzazioni che ho citato (inlining e loop srotolamento) volevo solo chiarire che sono interessato a tutte le ottimizzazioni del compilatore e non solo a quelle due. Sono anche più interessato alle ottimizzazioni che possono essere eseguite durante la compilazione in anticipo, sebbene l'ottimizzazione JIT sia di interesse (anche se in misura leggermente inferiore).
Grazie!
JIT non ha sempre il tempo per alcune massicce ottimizzazioni, e le codepath a volte variano in modo massiccio sui dati, quindi le ottimizzazioni guidate dal profilo non sono nemmeno sempre nella giusta direzione. –