12

我遇到了这个错误:“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()
4

3 回答 3

6

您的头文件之一检查以确保启用 SSE。您的 if 语句似乎不起作用。

如果您添加-march=native它,则应根据您的处理器选择最佳 CPU 架构和标志进行编译,或者您可以显式-march=corei7 -mavx -mpclmul使用distcc. 此外,-mfpmath=sse/-mfpmath=387将告诉编译器为浮点数学生成 SSE/x87 指令。根据您的处理器,两者都可能更快,但我认为英特尔处理器通常在 SSE 方面表现更好。

如果您想使用本机标志运行检查 gcc 启用的内容gcc -march=native -Q --help=target -v

于 2013-02-13T21:39:59.097 回答
2

我遇到了同样的错误,我想我找到了正确的解决方案!

问题是您包含在 emmintrin.h 中。我也这样做了。更重要的是,如果我在包含此文件之前定义了SSE2SSEMMX,我会收到以下消息:警告:“ SSE2 ”重新定义 [默认启用]

所以我试图调查SSE2是在哪里定义和/或使用的,我发现这个文件包含在 x86intrin.h 中。所以包含这个文件,根据 -msse* 标志,正确的 *intrin.h 文件将被自动包含!

它对我很有效(g++ 4.7.2-5)。

我希望我能帮上忙!

于 2014-05-23T23:54:21.847 回答
1

我刚刚在 FreeBSD 上通过将其添加到“Makefile”中来构建它/usr/ports/audio/soundtouch

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

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

于 2014-02-12T21:09:43.657 回答