对于 gcc 编译器,当您在没有任何标志的情况下与 -O2 进行编译时,gcc 的目标是什么 x86-64 指令集?

Tre*_*ith 1 gcc x86-64 simd compiler-optimization

对于 x86-64,有许多指令集可以加速代码执行。以下是 gcc wiki https://gcc.gnu.org/wiki/FunctionMultiVersioning的列表:

  • 多媒体MX
  • 上证所
  • 上证2
  • SSE3
  • SSSE3
  • SSE4.1
  • SSE4.2
  • POPCNT
  • AVX
  • AVX2

对于 gcc 编译器,当您在没有任何标志的情况下编译时,gcc 的目标是什么 x86-64 指令集-O2

为了简单起见,我们只说问题是关于 gcc 版本 12(最新的主要版本)。但我想知道我需要做什么 gcc 命令开关/选项,以便我可以看到我的 gcc 版本的功能。

我认为 gcc 选择了“可移植”的东西,所以这可能意味着速度很慢。但这只是我的假设......我想知道这是否意味着像SSE4.2或没有?

Nat*_*dge 5

如果您不传递命令行-march选项,那么您将获得编译 gcc 时选择的任何内容。默认值是,-march=x86-64但它可能已被编译你的 gcc 的人(例如你的二进制包分发者)覆盖。请参阅https://gcc.gnu.org/install/configure.html并记下该--with-arch选项。

您可以编译以-v -Q查看正在使用什么选项。寻找线路options passed

您将-march=x86-64获得“最小公分母”代码,该代码将在每个已知的 x86-64 CPU 上运行,一直到 AMD K8。这包括 SSE2,它是原始 AMD64 规范的一部分,但不包括 SSE3 或更高版本。 popcnt也不会被包括在内。

该选项与诸如和标志-march之类的优化选项正交(例如)。无论使用什么优化选项,您始终都能获得与所选内容兼容的代码。然而,标志(如)可以允许使用超出所暗示的其他 CPU 功能,在这种情况下,您的代码只能保证在具有这些功能的 CPU 上运行。-O2-f...-funroll-loops-march-m-mavx-march