2012-02-04 92 views
10

我遇到此錯誤的問題:「未啓用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 

其實我是想安裝涼亭-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

你忘了提到你在收到錯誤信息時想要做的事情。 – 2012-02-04 21:08:01

+7

嘗試將'-msse'傳遞給GCC。 '-msse2','-msse3'或任何你需要的。 – Mysticial 2012-02-04 21:08:28

+2

你試過gcc標誌-march = native還是-msse2/-msse3/-mssse3/-msse4.1? – Krystian 2012-02-04 21:10:18

回答

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

我剛剛建立了這個在FreeBSD在/usr/ports/audio/soundtouch加入這個以「生成文件」:

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

我希望「聲子的GStreamer」插件的其餘部分與此編譯。

2

我得到了同樣的錯誤,我想我找到了正確的解決方案!

問題是你包含了emmintrin.h。我也是這樣做的。什麼是如果我定義SSE2SSEMMX更含有該文件我得到了以下消息之前:警告:「SSE2」重新定義[默認啓用]

於是,我就查哪裏SSE2被定義和/或使用我發現這個文件被x86intrin.h包含。因此,請包含此文件並根據-msse標誌自動包含正確的* intrin.h文件!

它對我很好用(g ++ 4.7.2-5)。

我希望我能幫忙!

+0

像魅力一樣感謝 – 2016-03-11 15:55:32