Набор инструкций SSE не включен

У меня возникают проблемы с этой ошибкой: "Набор инструкций 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()

Ответ 1

Один из ваших файлов заголовков проверяет, включено ли SSE. Похоже, что ваши операторы if не работают.

Если вы добавите -march=native, он должен выбрать лучшую архитектуру процессора и флаги для компиляции на основе вашего процессора или вы можете явно использовать -march=corei7 -mavx -mpclmul, что полезно для distcc. Кроме того, -mfpmath=sse/-mfpmath=387 сообщит компилятору для генерации инструкций SSE/x87 для математики с плавающей запятой. В зависимости от вашего процессора, это может быть быстрее, но я думаю, что процессоры Intel обычно лучше работают на SSE.

Если вы хотите проверить, что gcc разрешает, используя запуск встроенного флага gcc -march=native -Q --help=target -v.

Ответ 2

У меня такая же ошибка, и я думаю, что нашел подходящее решение!

Проблема в том, что вы включили emmintrin.h. Я сделал то же самое. Более того, если я указал SSE2, SSE и MMX, прежде чем включать этот файл, я получил следующее сообщение: warning: " SSE2" переопределено [включено по умолчанию]

Итак, я попытался выяснить, где SSE2 определен и/или используется. Я обнаружил, что этот файл включен в x86intrin.h. Таким образом, включите этот файл и в соответствии с -msse * flags правильные * intrin.h файлы будут включены автоматически!

Он отлично работает для меня (g++ 4.7.2-5).

Я надеюсь, что смогу помочь!

Ответ 3

Я только что построил это на FreeBSD, добавив это в "Makefile" в /usr/ports/audio/soundtouch:

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

Я надеюсь, что остальные плагины phonon-gstreamer скомпилируются с этим.