Esiste un metodo per trovare automaticamente le migliori opzioni del compilatore (su una determinata macchina), che risultano nell'eseguibile più veloce possibile?Trova automaticamente le opzioni del compilatore per l'exe più veloce su una determinata macchina?
Naturalmente, io uso g++ -O3
, ma ci sono altri flag che possono far funzionare il codice più velocemente, ad es. -ffast-math
e altri, alcuni dei quali sono dipendenti dall'hardware.
Qualcuno conosce un codice che posso inserire nel mio file configure.ac
(GNU autotools), in modo che i flag vengano aggiunti automaticamente al Makefile tramite il comando ./configure
?
Oltre a determinare automaticamente i migliori flag, sarei interessato ad alcuni utili flag del compilatore che sono buoni da usare come default per i file eseguibili più ottimizzati.
Aggiornamento: La maggior parte delle persone suggerisce di provare solo bandiere diverse e selezionare le migliori in modo empirico. Per quel metodo, avrei una domanda successiva: Esiste un'utilità che elenca tutti i flag del compilatore che sono possibili per il computer su cui sto lavorando (ad esempio, test se le istruzioni SSE sono disponibili, ecc.)?
Le opzioni di ottimizzazione "migliori" dipendono da ciò che effettivamente fa il codice. Solo tu lo sai. –
E per farlo 'andare alle undici' dovresti profilarlo. Ci sono pochi pranzi gratuiti a sinistra in termini di commutatori del compilatore. –
Ok, per adattarlo davvero al mio codice dovrei selezionare manualmente le opzioni e profilarle. Ma non può fare male aggiungere l'appropriato '-march = cpu-type' su quella macchina? E ci dovrebbero essere alcune categorie di programmi che traggono profitto da alcune altre bandiere di compilazione (dipendenti dall'hardware)? Ad esempio, il mio programma rientra nella categoria "usa molte operazioni in virgola mobile". – Frank