我正在与一家公司合作创建一组使用SSE指令的专用代码。他们正在使用Qt Creator IDE。我为他们提供了一个C头文件和相应的* .c文件,可以在XCode和Visual Studio中编译;他们不会在Qt Creator中编译。
如何更改相应的编译器设置,以便在Qt Creator中编译SSE指令?
导致第一个错误的行如下:
_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]
谢谢大家的帮助。
答案 0 :(得分:2)
像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以及使用它支持的扩展。