Qt Creator 中的 SIMD 指令

SIMD Instructions in Qt Creator

我正在与一家公司合作创建一组使用 SSE 指令的专用代码。他们正在使用 Qt Creator IDE。我为他们提供了一个 C 头文件和相应的 *.c 文件,这些文件在 XCode 和 Visual Studio 中编译;他们不在 Qt Creator 中编译。

如何更改适当的编译器设置,以便 SSE 指令可以在 Qt Creator 中编译?

导致第一个错误的行如下:

_mm_store_ps(outData, _mm_add_ps(*l, *r));

错误陈述如下:

Inlining failed in call to always_inline ‘__mm_add_ps’: target specific option mismatch
Inlining failed in call to always_inline ‘_mm_store_ps’: target specific option mismatch

我们也收到此警告:

SSE vector return without SSE enabled changes the ABI [-Wpsabi]

谢谢大家的帮助。

gcc 和 clang 等编译器要求在编译使用内在函数和向量类型的代码时启用相关的指令集扩展。例如-msse2。这也让编译器使用 SSE2 自动向量化。

SSE2 是 x86-64 的基线,所以我猜您出于某种原因正在构建 32 位二进制文​​件?

我认为某些编译器(可能是 MSVC)会允许您使用内部函数,而无需使编译器自动生成指令。

如果你想进行运行时 CPU 调度,那么你有一些使用 SSE4.1 或 AVX 的函数,但需要你的程序在没有这些的计算机上运行:将你的 SSE4 和 AVX 函数分开文件,因此您可以使用 -msse4.1-mavx.

构建这些编译单元

启用 -march=nehalem-march=haswell 通常是个好主意,同时启用 -mpopcnt 之类的东西(如果这是你想要的),更重要的是设置 -mtune=haswell 优化可能的目标 CPU 以及使用它支持的扩展。