web-dev-qa-db-ja.com

Xeonのgcc最適化フラグ?

Xeon向けに最適化するときにどのgccコンパイラフラグを使用するかを入力したいですか?

Mtuneやmarchには「xeon」がないので、どれが最も近い一致ですか。

35
Eugene Bujak

Xeonはマーケティング用語であり、非常に異なる内部構造を持つプロセッサの長いリストをカバーしています。

新しいNehalemプロセッサ(Core i7)を意味する場合、- このスライド は、4.3.1以降、gccを使用する必要があることを示します-独自のアプリの独自のテストで他の設定が見つかる可能性がありますこれを上回る)。 4.3シリーズは、FP mathsのその側面を最適化したい場合に、-msse4.2を追加しました。

以下は 一部の説明 インテルのコンパイラーと一部のgccフラグでのチューニングの比較です。

7
ShuggyCoUk

最近のGCC/Xeonのアップデート。

  • Sandy-Bridgeベース Xeon(E3-12xxシリーズ、E5-14xx/24xxシリーズ、E5-16xx/26xx/46xxシリーズ)。

    -march=corei7-avx for GCC <4.9.0または-march=sandybridge for GCC> = 4.9.0。

    これにより、Sandy Bridgeの Advanced Vector Extensions support とAESおよび [〜#〜] pclmul [〜#〜] 命令セットが有効になります。 GCC i386/x86_64オプションページの概要は次のとおりです。

    Intel Core i7 CPU、64ビット拡張、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AES、およびPCLMUL命令セットのサポート。

  • Ivy-Bridgeベース Xeon(E3-12xx v2-series、E5-14xx v2/24xx v2-series、E5 -16xx v2/26xx v2/46xx v2シリーズ、E7-28xx v2/48xx v2/88xx v2シリーズ)。

    -march=core-avx-i for GCC <4.9.0または-march=ivybridge for GCC> = 4.9.0。

    これには、Sandy Bridge(corei7-avx)オプションが含まれると同時に、新しいIvy命令セットのサポートも追加されます:FSGSBASE、 [〜#〜] rdrnd [〜#〜] および F16C 。 GCCオプションページから:

    64ビット拡張を備えたIntel Core CPU、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AES、PCLMUL、FSGSBASE、RDRNDおよびF16C6命令セットのサポート。

  • Haswellベース Xeon(E3-1xxx v3-series、E5-1xxx v3-series、E5-2xxx v3-series )。

    GCC 4.8.2/4.8.3の場合は-march=core-avx2、GCC> = 4.9.0の場合は-march=haswell.

    GCCオプションページから:

    Intel Haswell CPU、64ビット拡張、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、POPCNT、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、FMA、BMI、BMI2、F16C命令セットのサポート。

  • Broadwellベース Xeon(E3-12xx v4シリーズ、E5-16xx v4シリーズ)

    -march=core-avx2(GCC 4.8.xの場合)または-march=broadwell(GCC> = 4.9.0の場合)。

    GCCオプションページから:

    Intel Broadwell CPU、64ビット拡張、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、POPCNT、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、FMA、BMI、BMI2、F16C 、RDSEED、ADCX、およびPREFETCHW命令セットのサポート。

  • Skylakeベース Xeon(E3-12xx v5シリーズ)およびKabyLakeベース Xeon(E3-12xx v6シリーズ):

    -march=core-avx2(GCC 4.8.xの場合)または-march=skylake(GCC 4.9.xの場合)または-march=skylake-avx512(GCC> = 5.xの場合)

    AVX-512 は、256ビットAdvanced Vector Extensions SIMD命令の512ビット拡張です。

    GCCオプションページから:

    Intel Skylake Server CPU、64ビット拡張、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およびAVX512CD命令セットのサポート。

コンパイラが-march=nativeオプションを使用して何を行うかを調べるには、次のコマンドを使用できます。

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

gccの新しいバージョンには-march = nativeがあり、コンパイラーは自動的に最適な-marchフラグを決定できます。

20
user83255

march = nativeは自分のマシンでは問題ありませんが、バイナリリリースでは問題があります。

atom 330(p4/64bit))には-march = noconaが推奨されます-march = core2はcore2用です

私はあなたが64ビットに行くと仮定しています。

3
Brian

以下は、プロセッサがサポートするすべてのフラグを示しています。

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

プロセッサーにどの最適化が存在するかを判断する最良の方法は、モデルだけでなく、コンパイルしているシステムにあるgccのバージョンにも依存します。使用しているgccのバージョンを確認し、ドキュメントの相互参照を確認してください。

https://gcc.gnu.org/onlinedocs

つまり、Slackware 14.1 x64でgcc 4.8.2がインストールされているので、ここに移動します。

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

3
slugman

Intel CPUとx86_64での私の経験では、特定のCPUタイプに最適化するようにgccに指示しようとするたびに、パフォーマンスは-march = genericを使用するよりも悪くなりました。もちろんYMMVですが、私は何年にもわたってこのようなことを何度も試してきましたが、いつもそうです。

OTOH、i386では、少なくともi686をターゲットにするのが理にかなっているかもしれません。または、必要な場合はSSE math、少なくともPentium 4です。

2
Ringding