2008-09-21 11 views

Antwort

31

GCC 4.5 enthält die Optionen -march = atom und -mtune = atom.

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

+1

Wenn Sie GCC 4.5 verwenden, sollten Sie auch -fexcess-precision = fast verwenden (siehe http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42376 für Details) –

30

Es gibt ein cooles Framework namens Acovea (Analysis of Compiler Options via Evolutionary Algorithm) von Scott Rober Ladd, einem der GCC-Hacker. Es ist ein genetisches/evolutionäres Algorithmus-Framework, das versucht, GCC-Optimierungsflags für ein bestimmtes Stück Code durch natürliche Selektion zu optimieren.

Es funktioniert so etwas: Sie schreiben ein kleines Stück Benchmark-Code (es wirklich muss wenig sein, weil es mehrere tausend mal neu kompiliert und ausgeführt wird), die die Leistungsmerkmale des größeren Programms darstellt Sie möchten optimieren. Dann konstruiert Acovea nach dem Zufallsprinzip einige Dutzend verschiedener GCC-Befehlszeilen und kompiliert und führt Ihren Benchmark mit jedem von ihnen aus. Die besten dieser Kommandozeilen dürfen dann neue "Kinder" "paaren" und "züchten", die (hoffentlich) die besten "Gene" von ihren "Eltern" erben. Dieser Prozess wird für ein paar Dutzend "Generationen" wiederholt, bis ein stabiler Satz von Befehlszeilen-Flags entsteht.

+6

Der Link funktioniert nicht – Max

+1

@Max: Sieht so aus, als ob Scott aufgehört hätte, daran zu arbeiten. –

1

Ich weiß nicht, ob GCC Atom-spezifische Optimierung Flags noch hat, aber der Atom-Kern soll sehr ähnlich zu dem ursprünglichen Pentium sein, mit der sehr signifikanten Ergänzung der MMX/SSE/SSE2/SSE3/SSSE3-Befehlssätze. Natürlich machen diese nur einen signifikanten Unterschied, wenn Ihr Code Fließkomma oder DSP-lastig ist.

Vielleicht könnten Sie versuchen:

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

+0

Während der Atom ist vergleichbar mit dem Pentium in, dass es eine In-Order-Architektur ist, ist die Pipeline-Struktur sehr unterschiedlich, und die Planung der Anweisungen für den Pentium würde wahrscheinlich ziemlich schlecht für die Leistung sein. – user57368

+0

Einverstanden, Sie wollen * nicht * -march = Pentium für etwas anderes als einen echten Pentium verwenden. – kquinn

2

Genau wie für Pentium 4:

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

Nun, die Gentoo Wiki Zustände für die 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}"

+1

Nicht mehr länger: http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270.2FN280 (aktualisierter Link) empfiehlt jetzt CFLAGS = "- O2-march = core2 -mtune = generisch -mssse3 -mfpmath = sse -fomit-frame-pointer -pipe " –

+1

... und CFLAGS =" - O2 -march = atom -mssse3 -mfpmath = sse -fomit-frame-pointer -pipe "für GCC 4.5 –

12

Ich habe ein Skript, das automatisch die passenden Flags für Ihre CPU und Compiler-Kombination auswählt. Ich habe es gerade aktualisiert Intel Atom unterstützen:

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

Update: I -march = prescott für Atom zuvor angegeben, aber auf der Suche mehr hinein zeigt, dass Atom merom ISA-kompatibel ist, also - märz = core2 ist angemessener. Beachten Sie jedoch, dass Atome Kerne in Ordnung sind, von denen die letzte das ursprüngliche Pentium ist. Deshalb ist es wahrscheinlich besser, -mtune = Pentium auch. Leider habe ich kein Atom zum testen.Ich würde wirklich schätzen, wenn jemand könnte Benchmark der Unterschied zwischen:

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

Update: Hier sind ein paar schöne Artikel auf niedrigem Niveau Optimierung für Atom:

+0

Ich glaube nicht, beides zu setzen '-march = core2' und' -mtune = pentium' funktionieren überhaupt: Ich bekomme 'arg.c: 1: error: Die ausgewählte CPU unterstützt keine x86-64 Befehlssätze' – moo

+0

Interessant. Unterstützt dein Atom 64 Bit? Wenn Sie das obige Skript ausprobieren, wird es Ihnen wahrscheinlich sagen, dass Sie auch -m32 hinzufügen müssen – pixelbeat

+1

ja, mein Atom unterstützt 64-Bit. – moo

0

hier ist einige cross-pollenation von blogs ... was ich wirklich gehofft hatte war ein firefox-kompiliert-für-atom benc hmark ...

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

„Wie sich herausstellt, gcc erscheint mach einen sehr guten Job mit -mtune = nativ, und mtune = generic ist mehr als akzeptabel. Die größten Gewinne (in diesem mathematisch schweren Benchmark) kommen von der Verwendung von SSE für Mathematik, aber selbst sie werden durch Tuning für Pentium4 zerstört.

„Der Unterschied zwischen dem schnellsten und dem langsamsten Optimierung ist 21%. Die Auswirkungen statt mtune mit Marsch vernachlässigbar (nicht genug Unterschied zu sagen, ob es oder nicht hilft) ist.

“ (Ich habe enthalten K6 nur als Referenz - Ich weiß, Atom hat 3dnow nicht)

"Late Update: Tuning für k8 (mit SSE und O3) ergibt eine etwas höhere Bestnote von 182."

3

von Intel, Getting Started with MID

Wenn GCC zu kompilieren, gibt es ein paar empfohlene Fahnen zu verwenden:

  • -O2 oder -O1: O2-Flag optimiert für Geschwindigkeit, während die -O1 Flagge optimiert für Größe
  • -msse3
  • -march = core2
  • -mfpmath = sse
1

Was Intel C Compiler (IStGH)? Zumindest auf den Benchmarks, die damit einhergehen, ist die Dominanz über gcc ziemlich auffällig ...