未启用SSE指令集

时间:2012-02-04 21:06:29

标签: c++ intrinsics sse2 sse3

我遇到此错误的问题:“未启用SSE指令集”。我怎么能搞清楚这一点?

我有ACER i7,Ubuntu 11.10,请任何人可以帮助我吗?

任何帮助将不胜感激!


同时运行:

 sudo cat /proc/cpuinfo | grep flags

给出:

flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clfl
ush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfm
on pebs bts xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl
vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 x2apic popcnt xsave avx lahf_lm 
ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid

实际上我正在尝试安装gazebo-1.0.0-RC2-x86_64,并收到此错误。

/usr/lib/gcc/i686-linux-gnu/4.6.1/include/emmintrin.h:32:3: error: #error "SSE2 
instruction set not enabled"
In file included from /home/bkhelifa/Downloads/software/gazebo-1.0.0-RC2-x86_64/
deps/opende/src/quickstep.cpp:39:0:
/usr/lib/gcc/i686-linux-gnu/4.6.1/include/xmmintrin.h:32:3: error: #error "SSE i
nstruction set not enabled"
/home/bkhelifa/Downloads/software/gazebo-1.0.0-RC2-x86_64/deps/opende/src/quicks
tep.cpp: In function ‘dReal dot6(dRealPtr, dRealPtr)’:
/home/bkhelifa/Downloads/software/gazebo-1.0.0-RC2-x86_64/deps/opende/src/quicks
tep.cpp:537:3: error: ‘__m128d’ was not declared in this scope
...

我的cmakefile中已经有了这个选项

if (SSE3_FOUND)
  set (CMAKE_C_FLAGS_ALL "${CMAKE_C_FLAGS_ALL} -msse3")
endif()
if (SSSE3_FOUND)
  set (CMAKE_C_FLAGS_ALL "${CMAKE_C_FLAGS_ALL} -mssse3")
endif()
if (SSE4_1_FOUND)
  set (CMAKE_C_FLAGS_ALL "${CMAKE_C_FLAGS_ALL} -msse4.1")
endif()
if (SSE4_2_FOUND)
  set (CMAKE_C_FLAGS_ALL "${CMAKE_C_FLAGS_ALL} -msse4.2")
endif()

3 个答案:

答案 0 :(得分:6)

您的一个头文件会检查以确保启用了SSE。您的if语句似乎无效。

如果你添加-march=native,它应该根据你的处理器选择最好的CPU拱门和标志进行编译,或者你可以明确地使用-march=corei7 -mavx -mpclmul,这对distcc很有用。此外,-mfpmath=sse/-mfpmath=387将告诉编译器为浮点数学生成SSE / x87指令。根据您的处理器,可能会更快,但我认为英特尔处理器在SSE上通常更好。

如果你想使用本机标志运行gcc -march=native -Q --help=target -v来检查gcc启用了什么。

答案 1 :(得分:2)

我得到了同样的错误,我认为我找到了合适的解决方案!

问题是你被包含在emmintrin.h中。我做了同样的事。更重要的是,如果我在包含此文件之前定义 SSE2 SSE MMX ,我会收到以下消息:警告:“ SSE2 < / strong>“重新定义[默认启用]

所以我试着调查定义和/或使用 SSE2 的位置我发现x86intrin.h包含了这个文件。因此,请包含此文件,并根据-msse *标志自动包含正确的* intrin.h文件!

它很适合我(g ++ 4.7.2-5)。

我希望我能帮忙!

答案 2 :(得分:1)

我刚刚在FreeBSD上构建了这个,将它添加到/usr/ports/audio/soundtouch中的“Makefile”:

CC=             gcc46
CXX=            g++46
CPP=            cpp46
CFLAGS+=        -msse

我希望其余的“phonon-gstreamer”插件能够用这个编译。