Qt-Creator中的SIMD指令
我正在与一家公司合作,创建一套使用SSE指令的专用代码。他们正在使用Qt Creator IDE。我为他们提供了一个C头文件和相应的*.C文件,它们在XCode和Visual Studio中编译;它们不在Qt Creator中编译 如何更改适当的编译器设置,以便SSE指令在Qt Creator中编译 导致第一个错误的行如下所示:Qt-Creator中的SIMD指令,qt,sse,Qt,Sse,我正在与一家公司合作,创建一套使用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 alw
_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等编译器要求在编译使用内部函数和向量类型的代码时启用相关的指令集扩展。e、 g.
-msse2
。这还允许编译器使用SSE2自动矢量化
SSE2是x86-64的基线,所以我猜您是出于某种原因在构建一个32位二进制文件
我认为一些编译器(可能是MSVC)会允许您使用内部函数,而不会使编译器自动生成指令
如果您想执行运行时CPU调度,那么您有一些使用SSE4.1或AVX的函数,但需要您的程序在没有这些函数的计算机上工作:将SSE4和AVX函数放在单独的文件中,这样您就可以使用-msse4.1
和-mavx
构建这些编译单元
启用
-march=nehalem
或-march=haswell
也可以启用-mpopcnt
(如果这是您想要的),更重要的是设置-mtune=haswell
以针对可能的目标CPU进行优化,并使用其支持的扩展。Qt Creator不是编译器,这是一个IDE。编译器和IDE是不同的东西。请显示一些错误消息和有问题的代码,以便人们可以进行分析。@Velkan谢谢;我现在已经这样做了(我想),这取决于所选择的构建系统,以及如何传递编译器标志。那么它是一个qmake、cmake、纯手工编写的Makefile,还是一个什么样的项目呢?实际上这里有两个级别:也可以从命令行使用的构建系统,以及在QtC中构建时使用构建系统的Qt Creator项目。如果可能的话,您可能应该在第一个选项中添加必要的编译器标志。尝试用谷歌搜索错误消息“目标特定选项不匹配”。人们说,他们必须添加编译器标志,告诉编译器使用更多CPU功能是安全的:选项如-msse4.2
、-march=haswell
或-march=skylake
(nehalem、haswell、skylake等是英特尔处理器体系结构的名称)。