35

我想要您输入在优化 Xeons 时使用哪些 gcc 编译器标志?

mtune 或 March 中没有“至强”,那么哪个是最接近的匹配?

4

6 回答 6

64

最近 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、RDRNDF16C。从 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=broadwellGCC >= 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=skylakeGCC 4.9.x 或-march=skylake-avx512GCC >= 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
于 2014-08-02T14:00:34.683 回答
21

较新版本的 gcc 具有-march=native让编译器自动确定最佳-march标志。

于 2009-06-03T12:17:25.053 回答
7

Xeon 是一个营销术语,因此它涵盖了一长串内部结构截然不同的处理器。

如果您指的是较新的 Nehalem 处理器(Core i7),那么这张幻灯片表明自 4.3.1 起 gcc 应使用 -march=generic(尽管您自己对自己的应用程序的测试可能会发现其他设置优于此设置)。如果您希望优化 FP 数学的这方面,4.3 系列还添加了 -msse4.2。

这是一些比较英特尔编译器调整与一些 gcc 标志的讨论。

于 2009-06-03T11:10:36.623 回答
3

March=native 对你自己的机器没问题,但对二进制版本不好。

-march=nocona 建议用于 atom 330 (p4/64bit) -march=core2 用于 core2

我假设您要使用 64 位。

于 2009-06-03T12:35:12.710 回答
3

以下将显示您的处理器支持的所有标志:

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

于 2014-10-07T00:28:42.567 回答
2

我使用 Intel CPU 和 x86_64 的经验是,每次我试图告诉 gcc 为特定的 CPU 类型进行优化时,性能都会比使用 -march=generic 时更差,而不是更好。当然,YMMV,但这些年来我一直在玩这样的东西很多次,而且一直都是这样。

OTOH,在 i386 上,至少以 i686 为目标可能是有意义的,或者,如果您想要 SSE 数学,至少是 Pentium 4。

于 2009-07-10T07:32:05.597 回答