2011-08-24 248 views
6

我有一个Xeon W3550处理器,应该支持SSE4.2指令集,但是当我尝试在我的c程序中使用超过SSE2的任何东西时,出现编译器错误,例如在启用的CPU上不能使用SSSE3

#error "SSE4.2 instruction set not enabled" 

当我使用

$cat /procs/cpuinfo 

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

$cpuid 

只检测SSE和SSE2。

我的操作系统是ubuntu 11.04,内核为2.6.38-11-generic。

有关如何解决此问题的任何想法?谢谢。

编辑:基于史蒂夫o的评论下面的更新。头文件< * mmintrin.h>通过使用#ifndef预处理器指令,例如,执行与它们相关联的sse版本的检查。

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

所以我想这个问题是为什么这将回来错误,尽管CPU是SSSE3启用。

+0

听起来像GCC限制,指令汇编并不限于主机平台或体系结构。您只会注意到运行时的处理器限制,以及seg故障或类似情况。 –

回答

11

您是否尝试过与-msse4.2搭建?

  • 对SSE4.2内置函数和代码生成的支持是 通过-msse4.2可用。
  • SSE4.1和SSE4.2支持均可通过-msse4启用。

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

+1

不,我没有。这工作完美,我的代码现在正在使用SSE3命令成功编译和运行,谢谢! – NGaffney

+1

还有'-march = native',它可以根据你的CPU支持什么来启用。 – caf