Xeon的gcc优化标志?

问题描述 投票:35回答:6

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

在mtune或march中没有'xeon',哪个是最接近的匹配?

c++ c optimization gcc compiler-flags
6个回答
7
投票

Xeon是一个营销术语,因此它涵盖了一长串具有非常不同内部的处理器。

如果您的意思是较新的Nehalem处理器(Core i7),那么this slide表示从4.3.1开始gcc应该使用-march = generic(尽管您自己对自己的应用程序的测试可能会发现其他设置超出此范围)。如果你想优化FP数学的那个方面,4.3系列还增加了-msse4.2。

这里是some discussion比较英特尔编译器和一些gcc标志的调整。


58
投票

最新GCC / Xeon的更新。

  • Sandy-Bridge-based Xeon(E3-12xx系列,E5-14xx / 24xx系列,E5-16xx / 26xx / 46xx系列)。 -march=corei7-avx为GCC <4.9.0或-march=sandybridge为GCC> = 4.9.0。 这使得Advanced Vector Extensions support以及Sandy Bridge的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-based 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)选项,同时还支持新的常春藤指令集:FSGSBASE,RDRNDF16C。从GCC选项页面: 英特尔酷睿CPU具有64位扩展,MMX,SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,AVX,AES,PCLMUL,FSGSBASE,RDRND和F16C6指令集支持。
  • Haswell-based 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选项页面: 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-based 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-based Xeon(E3-12xx v5系列)和KabyLake-based 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 Server 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-based Xeon(E-21xx):-march=skylake-avx512

要了解编译器将使用-march=native选项执行的操作,您可以使用:

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

20
投票

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


3
投票

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

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

我假设你要64位。


3
投票

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

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

确定procceor存在哪些优化的最佳方法不仅取决于模型,还取决于您正在编译的系统上的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


2
投票

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

OTOH,在i386上,至少针对i686可能是有意义的,或者,如果你想要SSE数学,至少是Pentium 4。

© www.soinside.com 2019 - 2024. All rights reserved.