Tre*_*ith 1 gcc x86-64 simd compiler-optimization
对于 x86-64,有许多指令集可以加速代码执行。以下是 gcc wiki https://gcc.gnu.org/wiki/FunctionMultiVersioning的列表:
-O2?为了简单起见,我们只说问题是关于 gcc 版本 12(最新的主要版本)。但我想知道我需要做什么 gcc 命令开关/选项,以便我可以看到我的 gcc 版本的功能。
我认为 gcc 选择了“可移植”的东西,所以这可能意味着速度很慢。但这只是我的假设......我想知道这是否意味着像SSE4.2或没有?
如果您不传递命令行-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