[英]gcc optimization flags for Xeon?
我希望您的输入在针对至强进行优化时使用哪些 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 的Xeon (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 系列、E5-1xxx v3 系列、E5-2xxx v3 系列)。
-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 位扩展的 Intel 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 的Xeon (Platinum 8200/9200 系列、Gold 5200/6200 系列、Silver 4100/4200 系列、Bronze 3100/3200 系列):-march -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
标志。
以下将向您显示处理器支持的所有标志:
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
March=native 适用于您自己的机器,但不适用于二进制版本。
-march=nocona 建议用于 atom 330 (p4/64bit) -march=core2 用于 core2
我假设你要去 64 位。
我使用 Intel CPU 和 x86_64 的经验是,每次我试图告诉 gcc 针对特定 CPU 类型进行优化时,性能都会比使用 -march=generic 更差,而不是更好。 YMMV,当然,但这些年来我一直在玩这样的东西很多次,而且一直都是这样。
OTOH,在 i386 上,目标至少是 i686 可能是有意义的,或者,如果您想要 SSE 数学,至少是奔腾 4。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.