gcc-march=native启用许多附加标志

gcc-march=native启用许多附加标志,gcc,optimization,Gcc,Optimization,我的任务是将生产构建从裸机服务器转移到基于虚拟机的解决方案上 以前,我们将在要部署应用程序的服务器上构建应用程序,因此使用-march=native-mtune=native 一旦我们转向基于虚拟机的解决方案,就不能保证ISA会匹配目标服务器,因此我需要将-march=native等替换为针对将部署应用程序的特定服务器的值(例如:-march=skylake-avx512-mtune=skylake-avx512) 为了测试我的假设,我在目标服务器()上运行了以下命令 相反,如果我明确指定-ma

我的任务是将生产构建从裸机服务器转移到基于虚拟机的解决方案上

以前,我们将在要部署应用程序的服务器上构建应用程序,因此使用
-march=native-mtune=native

一旦我们转向基于虚拟机的解决方案,就不能保证ISA会匹配目标服务器,因此我需要将
-march=native
等替换为针对将部署应用程序的特定服务器的值(例如:
-march=skylake-avx512-mtune=skylake-avx512

为了测试我的假设,我在目标服务器()上运行了以下命令

相反,如果我明确指定
-march=skylake-avx512
而不是
-march=native
,那么
-march=skylake-avx512
是我得到的唯一的标志

/.../cc1
  -E
  -quiet
  -v
  -
  -march=skylake-avx512
  • 为什么会这样
  • 我是否需要复制上述所有标志,以获得与在目标服务器上使用
    march=native
    相同的生成结果
  • 如何选择最佳的标志集
/.../cc1
  -E
  -quiet
  -v
  -
  -march=skylake-avx512
  -mmmx
  -msse
  -msse2
  -msse3
  -mssse3
  -mcx16
  -msahf
  -mmovbe
  -maes
  -mpclmul
  -mpopcnt
  -mabm
  -mfma
  -mbmi
  -mbmi2
  -mavx
  -mavx2
  -msse4.2
  -msse4.1
  -mlzcnt
  -mrtm
  -mhle
  -mrdrnd
  -mf16c
  -mfsgsbase
  -mrdseed
  -mprfchw
  -madx
  -mfxsr
  -mxsave
  -mxsaveopt
  -mavx512f
  -mavx512cd
  -mclflushopt
  -mxsavec
  -mxsaves
  -mavx512dq
  -mavx512bw
  -mavx512vl
  -mclwb
  --param l1-cache-size=32
  --param l1-cache-line-size=64
  --param l2-cache-size=25344
  -mtune=skylake-avx512
/.../cc1
  -E
  -quiet
  -v
  -
  -march=skylake-avx512