Je développe une application critique pour les processeurs Intel Atom.
Quels sont les meilleurs indicateurs d'optimisation gcc pour ce processeur?
GCC 4.5 contiendra les options -march = atome et -mtune = atome.
Il existe un cadre génial appelé Acovea (Analyse des options du compilateur via un algorithme évolutif) , de Scott Rober Ladd, l’un des pirates de GCC. Il s'agit d'un framework d'algorithme génétique/évolutif qui tente d'optimiser les indicateurs d'optimisation GCC pour un morceau de code spécifique via la sélection naturelle.
Cela fonctionne à peu près comme ceci: vous écrivez un petit morceau de code de référence (il vraiment doit être petit, car il sera recompilé et exécuté plusieurs milliers de fois) qui représente les caractéristiques de performance du programme plus large vous voulez optimiser. Ensuite, Acovea construit de manière aléatoire plusieurs dizaines de lignes de commande GCC différentes, compile et exécute votre point de référence avec chacune d’elles. Les meilleurs de ces lignes de commande sont ensuite autorisés à "s'accoupler" et à "reproduire" de nouveaux "enfants" qui (espérons-le) héritent des meilleurs "gènes" de leurs "parents". Ce processus est répété pendant une douzaine de "générations", jusqu'à ce qu'un ensemble stable d'indicateurs de ligne de commande apparaisse.
J'ai un script qui sélectionne automatiquement les indicateurs appropriés pour votre combinaison processeur/compilateur. Je viens de le mettre à jour pour prendre en charge Intel Atom:
http://www.pixelbeat.org/scripts/gcccpuopt
Mise à jour: J'ai précédemment spécifié -march = prescott pour Atom, mais un examen plus approfondi Montre qu'Atom est conforme à merom ISA. Par conséquent, -march = core2 est plus approprié. Notez cependant que les atomes sont des cœurs en ordre, le dernier de ceux-ci étant le pentium d'origine. Il est donc probablement préférable de -mtune = pentium également. Malheureusement, je n'ai pas Atom à tester. J'apprécierais vraiment si quelqu'un pouvait comparer le diff entre:
-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3
Mise à jour: Voici quelques articles de Nice sur l'optimisation de bas niveau pour Atom:
Eh bien, le wiki Gentoo dit pour le Prescott:
http://fr.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270
CHOST = "i686-pc-linux-gnu"
CFLAGS = "- mars = prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS = "$ {CFLAGS}"
De Intel, Premiers pas avec MID
Lorsque vous utilisez GCC pour compiler, quelques indicateurs recommandés sont à utiliser:
Juste comme pour Pentium 4:
-march=prescott -O2 -pipe -fomit-frame-pointer
Je ne sais pas si GCC possède encore des indicateurs d'optimisation spécifiques à Atom, mais le noyau Atom est supposé être très similaire au Pentium d'origine, avec l'ajout très significatif des jeux d'instructions MMX/SSE/SSE2/SSE3/SSSE3. Bien entendu, ils ne font une différence significative que si votre code est à virgule flottante ou à forte densité DSP.
Peut-être pourriez-vous essayer:
gcc -O2 -march = pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath = sse
i686 est le plus proche. N'allez pas pour core2.
GCC 4.1 -O3 -march = i686 GCC 4.3 -O3 -march = natif
GCC 4.1 -O4 -fast-math GCC 4.3 -O4 -fast-math
http://macles.blogspot.com/2008/09/intel-cc-compiler-gcc-and-intel-atom.html
voici quelques exemples de pollinisation croisée de blogs ... Ce que j'espérais vraiment, c'était un test de performance compilé par Firefox pour atome ...
Adresse: http: // ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html
"En fin de compte, gcc semble faire un travail très décent avec -mtune = native, et mtune = generic est plus qu'acceptable. Les gains les plus importants (dans ce test lourd en mathématiques) proviennent de l'utilisation de SSE pour les mathématiques, mais même ils sont détruits par le réglage pour pentium4.
"La différence entre l'optimisation la plus rapide et la plus lente est de 21%. L'impact de l'utilisation de mars au lieu de mtune est négligeable (pas assez de différence pour dire si cela aide ou non).
"(J'ai inclus k6 juste pour référence - je sais qu'Atom n'a pas 3dnow)
"Mise à jour tardive: Le réglage pour k8 (avec SSE et O3) donne un meilleur score légèrement supérieur, soit 182."