Xeon向けに最適化するときにどのgccコンパイラフラグを使用するかを入力したいですか?
Mtuneやmarchには「xeon」がないので、どれが最も近い一致ですか。
最近の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=skylake-avx512
。コンパイラが-march=native
オプションを使用して何を行うかを調べるには、次のコマンドを使用できます。
gcc -march=native -Q --help=target
gccの新しいバージョンには-march = nativeがあり、コンパイラーは自動的に最適な-march
フラグを決定できます。
march = nativeは自分のマシンでは問題ありませんが、バイナリリリースでは問題があります。
atom 330(p4/64bit))には-march = noconaが推奨されます-march = core2はcore2用です
私はあなたが64ビットに行くと仮定しています。
以下は、プロセッサがサポートするすべてのフラグを示しています。
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
Intel CPUとx86_64での私の経験では、特定のCPUタイプに最適化するようにgccに指示しようとするたびに、パフォーマンスは-march = genericを使用するよりも悪くなりました。もちろんYMMVですが、私は何年にもわたってこのようなことを何度も試してきましたが、いつもそうです。
OTOH、i386では、少なくともi686をターゲットにするのが理にかなっているかもしれません。または、必要な場合はSSE math、少なくともPentium 4です。