基于Sandy Bridge的Pentium的特定架构特定选项(-m)是什么?

时间:2013-03-22 17:50:35

标签: gcc compiler-optimization compiler-flags

我正在尝试弄清楚如何正确设置-march选项,以查看使用gcc 4.7.2在我的电脑上启用和禁用选项之间的性能差异。

在尝试编译之前,我试图找到适用于我的PC的最佳-march选项。我的电脑有Pentium G850,其架构是Sandy Bridge。所以我提到the gcc 4.7.2 manual并发现-march=corei7-avx似乎是最好的 但是,我记得基于Sandy Bridge的Pentium缺少AVX和AES-NI指令集支持,true for Pentium G850。所以-march=corei7-avx不是一个合适的选择。

我提出了一些潜在的选择:

  1. -march=corei7-avx -mno-avx -mno-aes
  2. -march=corei7 -mtune=corei7-avx
  3. -march=native
  4. 考虑到我所掌握的信息,第一个选项看起来很合理,但我担心AVX和AES-NI之外可能缺少其他功能。第二个选项看起来很安全,但由于-march=corei7,它可能会错过Sandy Bridge上的一些小功能。第三个选项将解决我的所有顾虑,但我听说这个选项有时会误检测CPU的功能,所以我想知道如何手动执行此操作。
    我用Google搜索并搜索了StackOverflow和SuperUser,但我找不到任何明确的解决方案......
    应该设置哪些选项?

3 个答案:

答案 0 :(得分:14)

如果通过GCC检测,对于我(gcc-5.3.0)在i5-2450M CPU(联想e520)上,以下显示:

gcc -march=native -E -v - </dev/null 2>&1 | grep cc1


/usr/libexec/gcc/x86_64-pc-linux-gnu/5.3.0/cc1 -E -quiet -v - -march=sandybridge 
-mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 
-msahf -mno-movbe -maes -mno-sha -mpclmul -mpopcnt -mno-abm -mno-lwp 
-mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx 
-mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd 
-mno-f16c -mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr 
-mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd 
-mno-vx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves 
-mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma 
-mno-avx512vbmi -mno-clwb -mno-pcommit -mno-mwaitx --param 
l1-cache-size=32 --param l1-cache-line-size=64 --param 
l2-cache-size=3072 -mtune=sandybridge -fstack-protector-strong

答案 1 :(得分:2)

我建议使用-march=corei7-avx -mtune=corei7-avx -mno-avx -mno-aes。指定-mtune很重要,因为此选项告诉gcc它应该使用哪个CPU模型来调度生成的代码中的指令。

答案 2 :(得分:1)

我拥有基于英特尔(R)Celeron(R)CPU G530的Sandy Bridge。

在gentoo的CFLAGS中使用-march=native,然后编译media-video / ffmpeg-1.2.6(Gentoo中的当前稳定版本)时,使用mplayer播放视频时出现问题(非法指令) )。就像你说的那样,-mtune=native有时会误检测CPU的功能。

然后我改为-march=corei7-avx -mtune=corei7-avx -mno-avx -mno-aes,并重新编译ffmpeg-1.2.6和mplayer,到目前为止一切都还可以。