gcc-Optimierungsflags für Xeon?

Lesezeit: 5 Minuten

Ich hätte gerne Ihre Eingabe, welche gcc-Compiler-Flags bei der Optimierung für Xeons verwendet werden sollen?

Es gibt kein ‘xeon’ in mtune oder march, was passt also am ehesten?

  • Vielleicht möchten Sie genauer angeben, auf welches Xeon Sie abzielen. Die Marke Xeon gibt es schon seit geraumer Zeit und umfasst eine Reihe sehr unterschiedlicher Architekturen.

    – Dan Formen

    3. Juni 2009 um 11:31 Uhr

manlios Benutzeravatar
manlio

Ein Update für aktuelle GCC / Xeon.

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

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

    Dies ermöglicht die Erweiterte Unterstützung für Vektorerweiterungen sowie die AES und PCLMUL Befehlssätze für Sandy Bridge. Hier ist die Übersicht von der GCC i386/x86_64-Optionsseite:

    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-basiert Xeon (E3-12xx v2-Serie, E5-14xx v2/24xx v2-Serie, E5-16xx v2/26xx v2/46xx v2-Serie, E7-28xx v2/48xx v2/88xx v2-Serie).

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

    Dazu gehören die Optionen von Sandy Bridge (corei7-avx) und die Unterstützung für die neuen Ivy-Befehlssätze: FSGSBASE, RDRND und F16C. Von der GCC-Optionsseite:

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

  • Haswell-basiert 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 bzw -march=haswell für GCC >= 4.9.0.

    Von der GCC-Optionsseite:

    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-Unterstützung.

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

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

    Von der GCC-Optionsseite:

    Intel Broadwell 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, F16C , RDSEED-, ADCX- und PREFETCHW-Befehlssatzunterstützung.

  • Skylake-basiert Xeon (E3-12xx v5-Serie) und KabyLake-basiert Xeon (E3-12xx v6-Serie):

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

    AVX-512 sind 512-Bit-Erweiterungen der 256-Bit-SIMD-Anweisungen der Advanced Vector Extensions.

    Von der GCC-Optionsseite:

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

  • Auf Coffee Lake-Basis Xeon (E-21xx): -march=skylake-avx512.

  • Cascade Lake-basiert Xeon (Platinum 8200/9200 Serie, Gold 5200/6200 Serie, Silber 4100/4200 Serie, Bronze 3100/3200 Serie): -march=cascade-lake (erfordert gcc 9.x).

    Von der GCC-Optionsseite:

    aktiviert MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW , CFLLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD und AVX512VNNI.

    Anweisungen für das neuronale AVX-512-Vektornetzwerk (AVX512 VNNI) ist eine x86-Erweiterung, Teil des AVX-512, die entwickelt wurde, um auf Faltungs-Neuralnetzwerken basierende Algorithmen zu beschleunigen.

  • Cooper Lake basiert Xeon (Platin, Gold, Silber, Bronze): -march=cooperlake (erfordert gcc 10.1).

    Der Schalter aktiviert die AVX512BF16 ISA-Erweiterungen.


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

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

neuere Versionen von gcc haben -march=einheimisch wodurch der Compiler automatisch das Optimale bestimmen kann -march Flagge.

  • Wenn Sie -mtune nicht explizit angeben, hat -march tatsächlich ein implizites -mtune, das dem übergebenen -march gemäß den gcc-Dokumenten entspricht.

    – user83255

    18. Juni 2009 um 5:18 Uhr

  • 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.

    – Bläser

    30. März 2016 um 3:43 Uhr

Benutzeravatar von ShuggyCoUk
ShuggyCoUk

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

Wenn Sie dann die neueren Nehalem-Prozessoren (Core i7) meinten diese Folie gibt an, dass ab 4.3.1 gcc -march=generic verwendet werden sollte (obwohl Ihre eigenen Tests Ihrer eigenen App möglicherweise andere Einstellungen finden, die diese übertreffen). Die 4.3-Serie hat auch -msse4.2 hinzugefügt, wenn Sie diesen Aspekt der FP-Mathematik optimieren möchten.

Hier ist einige Diskussion Vergleich der Abstimmung in Intels Compiler mit einigen gcc-Flags.

  • Die Diskussion ist ein defekter Link. Tatsächlich sind beide Verbindungen defekt. 🙂

    – Emily L.

    21. Oktober 2013 um 12:38 Uhr


march=native ist in Ordnung für Ihre eigene Maschine, aber schlecht für Binärversionen.

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

Ich gehe davon aus, dass du 64bit verwendest.

Das Folgende zeigt Ihnen alle Flags, die Ihr Prozessor unterstützt:

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

Der beste Weg, um festzustellen, welche Optimierungen speziell für Ihren Prozessor vorhanden sind, hängt nicht nur vom Modell ab, sondern auch davon, welche Version von gcc Sie auf dem System haben, das Sie kompilieren. Überprüfen Sie unbedingt, welche Version von gcc Sie haben, und verweisen Sie auf deren Dokumentation:

https://gcc.gnu.org/onlinedocs

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

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

Benutzeravatar von Ringding
Klingeln

Meine Erfahrung mit Intel-CPUs und x86_64 war, dass jedes Mal, wenn ich versuchte, gcc anzuweisen, 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 oft mit solchen Sachen herumgespielt, und das war schon immer so.

OTOH, auf i386 könnte es sinnvoll sein, mindestens i686 oder, wenn Sie SSE-Mathematik wollen, mindestens Pentium 4 anzustreben.

1390330cookie-checkgcc-Optimierungsflags für Xeon?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy