Domanda

Sto sviluppando un'applicazione critica per le prestazioni del processore Intel Atom.

Quali sono i migliori flag di ottimizzazione gcc per questa CPU?

È stato utile?

Soluzione

GCC 4.5 conterrà le opzioni -march = atom e -mtune = atom.

Fonte: http://gcc.gnu.org/gcc-4.5/changes. html

Altri suggerimenti

Esiste un fantastico framework chiamato Acovea (Analisi delle opzioni del compilatore tramite algoritmo evolutivo) , di Scott Rober Ladd, uno degli hacker di GCC. È un framework di algoritmi genetici / evolutivi che cerca di ottimizzare i flag di ottimizzazione GCC per un pezzo di codice specifico tramite selezione naturale.

Funziona in questo modo: scrivi un piccolo pezzo di codice di riferimento ( davvero deve essere piccolo, perché verrà ricompilato ed eseguito diverse migliaia di volte) che rappresenta le caratteristiche prestazionali del programma più grande che si desidera ottimizzare. Quindi Acovea costruisce in modo casuale alcune dozzine di diverse linee di comando GCC e compila ed esegue il benchmark con ciascuno di essi. Il meglio di queste linee di comando può quindi "accoppiare". e "allevare" nuovi "bambini" che (si spera) erediti i migliori "geni" dai loro "genitori". Questo processo viene ripetuto per un paio di dozzine di "generazioni", fino a quando non emerge un set stabile di flag da riga di comando.

Ho uno script che seleziona automaticamente i flag appropriati per la tua combinazione CPU e compilatore. L'ho appena aggiornato per supportare Intel Atom:

http://www.pixelbeat.org/scripts/gcccpuopt

Aggiornamento: In precedenza avevo specificato -march = prescott per Atom, ma ne esaminavo di più mostra che Atom è conforme a ISA Merom, quindi -march = core2 è più appropriato. Si noti tuttavia che gli atomi sono nuclei in ordine, l'ultimo dei quali è il pentium originale. Quindi è probabilmente meglio anche -mtune = pentium. Purtroppo non ho un atomo da testare. Gradirei davvero se qualcuno potesse confrontare il diff tra:

-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3

Aggiornamento: Ecco un paio di simpatici articoli sull'ottimizzazione a basso livello per Atom:

Bene, la wiki di Gentoo afferma per il prescott:

http://en.gentoo-wiki.com/wiki/Safe_Cflags/ Intel # Atom_N270

CHOST = " i686-pc-linux-gnu "

CFLAGS = " -march = prescott -O2 -pipe -fomit-frame-pointer "

CXXFLAGS = " $ {CFLAGS} "

Da Intel, Introduzione a MID

Quando si utilizza GCC per la compilazione, ci sono alcuni flag consigliati da usare:

  • -O2 o -O1: il flag O2 ottimizza per la velocità, mentre il flag -O1 ottimizza per le dimensioni
  • -msse3
  • -march = Core2
  • -mfpmath = sse

Proprio come per Pentium 4:

-march=prescott -O2 -pipe -fomit-frame-pointer

Non so ancora se GCC abbia qualche flag di ottimizzazione specifico per Atom, ma il core Atom dovrebbe essere molto simile al Pentium originale, con l'aggiunta molto significativa di MMX / SSE / SSE2 / SSE3 / SSSE3 set di istruzioni. Naturalmente, questi fanno una differenza significativa solo se il tuo codice è in virgola mobile o DSP pesante.

Forse potresti provare:

gcc -O2 -march = pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath = sse

ecco un po 'di pollinizzazione incrociata dei blog ... quello che speravo davvero fosse un benchmark firefox-compilato-per-atomo ...

Indirizzo: http: // ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html

" A quanto pare, gcc sembra fare un lavoro molto decente con -mtune = nativo e mtune = generico è più che accettabile. I maggiori guadagni (in questo benchmark matematico) derivano dall'utilizzo di SSE per la matematica, ma anche loro vengono distrutti sintonizzando il pentium4.

" La differenza tra l'ottimizzazione più veloce e quella più lenta è del 21%. L'impatto dell'uso di march invece di mtune è trascurabile (non c'è abbastanza differenza per dire se aiuta o no).

" (ho incluso k6 solo come riferimento - so che Atom non ha 3dnow)

" Late update: L'ottimizzazione per k8 (con SSE e O3) fornisce un punteggio migliore leggermente più alto di 182. "

i686 è il più vicino. Non andare per core2.

GCC 4.1 -O3 -march = i686 GCC 4.3 -O3 -march = native

GCC 4.1 -O4 -ffast-math GCC 4.3 -O4 -ffast-math

http: // macles .blogspot.com / 2008/09 / intel-cc-compilatore gcc--and-intel-atom.html

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