我想要您输入在优化 Xeons 时使用哪些 gcc 编译器标志?
mtune 或 March 中没有“至强”,那么哪个是最接近的匹配?
我想要您输入在优化 Xeons 时使用哪些 gcc 编译器标志?
mtune 或 March 中没有“至强”,那么哪个是最接近的匹配?
最近 GCC / Xeon 的更新。
基于 Sandy-Bridge 的Xeon(E3-12xx 系列、E5-14xx/24xx 系列、E5-16xx/26xx/46xx 系列)。
-march=corei7-avx
对于 GCC < 4.9.0 或-march=sandybridge
对于 GCC >= 4.9.0。
这启用了高级矢量扩展支持以及 Sandy Bridge 的 AES 和PCLMUL指令集。以下是 GCC i386/x86_64 选项页面的概述:
具有 64 位扩展的 Intel Core i7 CPU、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AES 和 PCLMUL 指令集支持。
基于 Ivy-Bridge 的至强(E3-12xx v2 系列、E5-14xx v2/24xx v2 系列、E5-16xx v2/26xx v2/46xx v2 系列、E7-28xx v2/48xx v2/88xx v2 系列) .
-march=core-avx-i
对于 GCC < 4.9.0 或-march=ivybridge
对于 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)。
-march=core-avx2
对于 GCC 4.8.2/4.8.3 或-march=haswell
对于 GCC >= 4.9.0。
从 GCC 选项页面:
具有 64 位扩展的 Intel Haswell CPU、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 选项页面:
具有 64 位扩展的 Intel Broadwell CPU、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 位高级矢量扩展 SIMD 指令的 512 位扩展。
从 GCC 选项页面:
具有 64 位扩展的英特尔 Skylake 服务器 CPU、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 指令集支持。
基于 Coffee Lake 的Xeon (E-21xx)-march=skylake-avx512
:.
基于 Cascade Lake 的至强(Platinum 8200/9200 系列、Gold 5200/6200 系列、Silver 4100/4200 系列、Bronze 3100/3200 系列):(-march=cascade-lake
需要gcc 9.x)。
从 GCC 选项页面:
启用 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、CLWB、AVX512VL、AVX512BW、AVX512DQ、AVX512CD 和 AVX512VNNI。
AVX-512 矢量神经网络指令(AVX512 VNNI) 是 x86 扩展,是 AVX-512 的一部分,旨在加速基于卷积神经网络的算法。
基于 Cooper Lake 的Xeon(白金、金、银、铜):(-march=cooperlake
需要gcc 10.1)。
该开关启用 AVX512BF16 ISA 扩展。
要了解编译器将使用该-march=native
选项做什么,您可以使用:
gcc -march=native -Q --help=target
较新版本的 gcc 具有-march=native让编译器自动确定最佳-march
标志。
March=native 对你自己的机器没问题,但对二进制版本不好。
-march=nocona 建议用于 atom 330 (p4/64bit) -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 的经验是,每次我试图告诉 gcc 为特定的 CPU 类型进行优化时,性能都会比使用 -march=generic 时更差,而不是更好。当然,YMMV,但这些年来我一直在玩这样的东西很多次,而且一直都是这样。
OTOH,在 i386 上,至少以 i686 为目标可能是有意义的,或者,如果您想要 SSE 数学,至少是 Pentium 4。