2009-06-03 9 views
31

Ich möchte Ihre Eingabe welche GCC-Compiler-Flags verwenden, wenn Sie für Xeons optimieren?gcc-Optimierungsflaggen für Xeon?

Es gibt kein 'Xeon' in Mtune oder März also welches ist die beste Übereinstimmung?

+3

Sie möchten genauer angeben, auf welches Xeon Sie zielen. Die Marke Xeon gibt es schon seit einiger Zeit und umfasst eine Reihe von sehr unterschiedlichen Architekturen. –

Antwort

7

Xeon ist ein Marketingbegriff, als solcher deckt er eine lange Liste von Prozessoren mit sehr unterschiedlichen Interna ab.

Wenn Sie die neueren Nehalem-Prozessoren (Core i7) gemeint haben, dann bedeutet this slide, dass ab 4.3.1 gcc sollte -march = generisch verwendet werden (obwohl Ihre eigenen Tests Ihrer eigenen App andere Einstellungen finden, die das ausführen). Die 4.3-Serie hat auch -mse4.2 hinzugefügt, wenn Sie diesen Aspekt der FP-Mathematik optimieren möchten.

Hier ist some discussion Vergleich der Abstimmung in Intels Compiler gegen einige GCC-Flags.

+4

Die Diskussion ist ein defekter Link. Tatsächlich sind beide Verbindungen unterbrochen. :) –

20

neuere Versionen von gcc haben -march = native, die der Compiler automatisch das optimale -march Flag bestimmen kann.

+1

Gebündle das mit -mtune = nativ und du bist fertig. – ismail

+14

tatsächlich, wenn Sie nicht -mtune explizit angeben, -march hat eine implizite -mtune gleich der übergebenen -march entsprechend der GCC-Dokumente. – user83255

+0

Beachten Sie, dass Code, der mit -march = native erstellt wurde, nicht unbedingt auf anderen CPUs als dem Host ausgeführt wird, auf dem er kompiliert wurde. – bleater

3

march = native ist in Ordnung für Ihre eigene Maschine, aber schlecht für binäre Versionen.

-march = nocona für Atom 330 (p4/64bit) vorgeschlagen -march = core2 ist für core2

Ich gehe davon aus Sie gehen 64bit.

2

Meine Erfahrung mit Intel CPUs und x86_64 war, dass jedes Mal, wenn ich versuchte gcc für einen bestimmten CPU-Typ zu optimieren, die Leistung schlechter wurde als mit -march = generic, nicht besser. YMMV, natürlich, aber ich habe im Laufe der Jahre so oft mit solchen Sachen herumgespielt, und das war schon immer so.

OTOH, auf i386 könnte es Sinn machen, zumindest i686 oder Ziel, wenn Sie wollen SSE Mathematik, mindestens Pentium 4.

51

Ein Update für den letzten GCC/Xeon.

  • Sandy-Bridge-based Xeon (E3-12xx Serie, E5-14xx/24xx-Serie, E5-16xx/26xx/46xx-Serie).

    -march=corei7-avx für GCC < 4.9.0 oder -march=sandybridge für GCC> = 4.9.0.

    Dies ermöglicht die Advanced Vector Extensions support sowie die AES und PCLMUL Befehlssätze für Sandy Bridge. Hier ist die Übersicht von der GCC i386/x86_64 Optionen Seite:

    Intel Core i7 CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1- SSE4.2, AVX, AES und PCLMUL-Befehlssatzunterstützung.

  • Ivy-Bridge-based Xeon (E3-12xx v2-Serie, E5-14xx V2/V2 24xx-Serie, E5-16xx v2/26xx V2/V2 46xx-Serie, E7-28xx v2/48XX v2/88xx v2-Serie).

    -march=core-avx-i für GCC < 4.9.0 oder -march=ivybridge für GCC> = 4.9.0.

    Dies beinhaltet die Sandy-Bridge-Optionen (cori7-avx) und unterstützt auch die neuen Ivy-Befehlssätze FSGSBASE, RDRND und F16C. Von GCC Optionen Seite:

    Intel Core CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1- SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND und F16C6 Anweisung Set-Unterstützung.

  • Haswell-based Xeon (E3-1xxx v3-Serie, E5-1xxx v3-Serie, E5-2xxx v3-Serie).

    -march=core-avx2 für GCC 4.8.2/4.8.3 oder -march=haswell für GCC> = 4.9.0.

    Von GCC Optionen Seite:

    Intel Haswell-CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1- SSE4.2, POPCNT, AVX, AVX2 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 und F16C Befehlssatz zu unterstützen.

  • Broadwell-based Xeon (E3-12xx v4 Serie, Serie E5-16xx v4)

    -march=core-avx2 für GCC 4.8.x oder -march=broadwell für GCC> = 4.9.0.

    Von GCC Optionen Seite:

    Intel CPU mit Broadwell 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1- SSE4.2, POPCNT, AVX, AVX2 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX und PREFETCHW Befehlssatz zu unterstützen.

  • Skylake-based Xeon (E3-12xx v5 Serie)

    -march=core-avx2 für GCC 4.8.x oder -march=skylake für GCC 4.9.x oder -march=skylake-avx512 für GCC> = 5.x

    Von GCC Optionen Seite:

    Intel Skylake Server-CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1- SSE4.2, POPCN T, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ und AVX512CD Befehlssatz zu unterstützen.

Um herauszufinden, was der Compiler mit der -march=native Option tun, werden Sie verwenden können:

gcc -march=native -Q --help=target 
3

Im Folgenden zeigen Ihnen alle Flags Ihr Prozessor unterstützt:

cat /proc/cpuinfo | grep flags | head -1 

Die beste Möglichkeit festzustellen, welche Optimierungen für Ihren Prozessor gelten, hängt nicht nur vom Modell ab, sondern auch davon, welche Version von gcc Sie haben auf dem System, das Sie kompilieren. Überprüfen Sie, welche Version von gcc Sie haben, und Querverweis auf ihre Dokumentation:

https://gcc.gnu.org/onlinedocs

dh ich habe Slackware 14.1 x 64, die gcc hat 4.8.2, also würde ich gehen hier:

https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options

Verwandte Themen