无法在启用的CPU上使用SSSE3

6

我有一台搭载Xeon W3550处理器的电脑,该处理器应该支持SSE4.2指令集,但是当我在C程序中尝试使用超过SSE2的内容时,编译器报错。

#error "SSE4.2 instruction set not enabled"

当我使用

$cat /procs/cpuinfo

它能检测到所有相关的SSE指令集,但是

$cpuid

只能检测SSE和SSE2。

我的操作系统是带有内核2.6.38-11-generic的Ubuntu 11.04。

有没有什么办法可以解决这个问题?谢谢。

编辑:根据Steve-o在下面的评论,更新了一下。头文件<*mmintrin.h>使用#ifndef预处理指令来执行与它们相关的sse版本的检查,例如

#ifndef __SSSE3__ 
#error "SSSE3 instruction set not enabled".

所以我猜问题是为什么尽管CPU启用了SSSE3,但这个值却返回false。


听起来像是GCC的限制,指令的编译不受主机平台或架构的限制。您只会在运行时注意到处理器限制,出现段错误或类似情况。 - Steve-o
我使用了gcc-4.8和g++-4.8,现在已经升级到gcc-7.5和g++-7.5 - 它的表现非常出色! - Ahmad AlMughrabi
1个回答

11

你尝试过使用-msse4.2编译吗?

  • 通过使用-msse4.2,可以获得SSE4.2内置函数和代码生成的支持。
  • 通过使用-msse4,可以同时开启SSE4.1和SSE4.2支持。

http://gcc.gnu.org/gcc-4.3/changes.html


1
没有,我没有。这个方法非常有效,现在我的代码已经可以使用SSE3指令编译和成功运行了,谢谢! - NGaffney
1
还有-march=native,它会根据您的CPU支持的内容启用相应功能。 - caf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接