我可以使用哪些进行曲/音乐选择?

时间:2018-11-05 15:01:14

标签: gcc command-line x86 compiler-flags micro-architecture

有没有办法让gcc输出可用的-march = arch选项?我遇到构建错误(尝试-march=x86_64),我不知道我的选择是什么。

我使用的编译器是gcc的专有包装,似乎不-march=skylake。标志应该是相同的,因此我假设要发送给gcc的所有选项以转储体系结构对于此包装器来说都是相同的。

我设法使gcc的参数错误,并转储了一个列表,但是现在我正在通过包装程序,所以我看不到它。

如何让gcc告诉我它支持什么?

2 个答案:

答案 0 :(得分:4)

使用gcc --target-help

-march=CPU[,+EXTENSION...]
                      generate code for CPU and EXTENSION, CPU is one of:
                       generic32, generic64, i386, i486, i586, i686,
                       pentium, pentiumpro, pentiumii, pentiumiii, pentium4,
                       prescott, nocona, core, core2, corei7, l1om, k1om,
                       iamcu, k6, k6_2, athlon, opteron, k8, amdfam10,
                       bdver1, bdver2, bdver3, bdver4, znver1, znver2,
                       btver1, btver2
...

通常不是像x86x86-64这样的通用体系结构,而是特定的微体系结构。但是,带有64位扩展名的通用x86 CPU有x86-64(不是x86_64)。每种架构的完整列表都可以在GCC's -march manual上找到。对于x86:

  
      
  • -march=cpu-type

         

    为计算机类型cpu-type生成指令。与-mtune=cpu-type仅针对指定的cpu-type调整生成的代码相反,-march=cpu-type允许GCC生成可能根本不在所示处理器上运行的代码。指定-march=cpu-type意味着-mtune=cpu-type

  •   
     

...

     

https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#index-march-13


-march的基准版本为-march=x86-64时,基准/默认调整选项为-mtune=generic。这样做的目的是在任何地方都不可怕,即使付出额外的指令或代码大小也可以避免性能下降。


-march=native 将为运行编译器的计算机选择正确的拱形并调整设置,如果编译器无法识别特定的CPU模型,则选择tune=generic它正在运行。

(例如,Skylake上的旧gcc,仍将启用-mavx2 -mpopcnt -mbmi2,依此类推,但会设置-mtune=generic而不是更合适的值。)

答案 1 :(得分:3)

使用gcc --target-help似乎是正确的主意,但列表不完整。

现代gcc版本的一种解决方法是将伪造的值传递给-march

$ gcc --target-help -march=foo
cc1: error: bad value (‘foo’) for ‘-march=’ switch
cc1: note: valid arguments to ‘-march=’ switch are: nocona core2 nehalem corei7 westmere sandybridge corei7-avx ivybridge core-avx-i haswell core-avx2 broadwell skylake skylake-avx512 cannonlake icelake-client icelake-server bonnell atom silvermont slm knl knm x86-64 eden-x2 nano nano-1000 nano-2000 nano-3000 nano-x2 eden-x4 nano-x4 k8 k8-sse3 opteron opteron-sse3 athlon64 athlon64-sse3 athlon-fx amdfam10 barcelona bdver1 bdver2 bdver3 bdver4 znver1 btver1 btver2 native
...

请注意,与--target-help的输出相比,还有更多的选择。