2013-02-15 38 views
4

我试图从C++ SSE3指令集未启用

http://www.cs.au.dk/~asand/?page_id=152 

在C工作的一些隐马尔可夫代码++使用HMMlib库我使用的是Ubuntu的12.04,与GCC/G ++ 4.6

我的编译步骤的指令是:

g++ -I/usr/local/boost_1_52_0 -I../ MAIN.cpp 

这将产生以下错误:

In file included from ../HMMlib/allocator_traits.hpp:25:0, 
      from ../HMMlib/hmm_table.hpp:25, 
      from MAIN.cpp:1: 
/usr/lib/gcc/i686-linux-gnu/4.6/include/pmmintrin.h:32:3: error: #error "SSE3  instruction set not enabled" 
In file included from ../HMMlib/hmm_table.hpp:25:0, 
      from MAIN.cpp:1: 
../HMMlib/allocator_traits.hpp:50:33: error: ‘__m128d’ was not declared in this scope 
../HMMlib/allocator_traits.hpp:50:40: error: template argument 2 is invalid 
../HMMlib/allocator_traits.hpp:77:32: error: ‘__m128’ was not declared in this scope 
../HMMlib/allocator_traits.hpp:77:38: error: template argument 2 is invalid 
In file included from ../HMMlib/hmm_table.hpp:26:0, 
      from MAIN.cpp:1: 
../HMMlib/operator_traits.hpp:112:32: error: ‘__m128d’ was not declared in this scope 
../HMMlib/operator_traits.hpp:112:39: error: template argument 2 is invalid 
../HMMlib/operator_traits.hpp:205:31: error: ‘__m128’ was not declared in this scope 
../HMMlib/operator_traits.hpp:205:37: error: template argument 2 is invalid 
In file included from ../HMMlib/hmm_table.hpp:27:0, 
      from MAIN.cpp:1: 
../HMMlib/float_traits.hpp:37:13: error: ‘__m128’ does not name a type 
../HMMlib/float_traits.hpp:43:13: error: ‘__m128d’ does not name a type 
In file included from ../HMMlib/hmm.hpp:34:0, 
      from MAIN.cpp:3: 
../HMMlib/sse_operator_traits.hpp:63:35: error: ‘__m128’ was not declared in this scope 
../HMMlib/sse_operator_traits.hpp:63:41: error: template argument 2 is invalid 
../HMMlib/sse_operator_traits.hpp:95:36: error: ‘__m128d’ was not declared in this scope 
../HMMlib/sse_operator_traits.hpp:95:43: error: template argument 2 is invalid 

我绝对不知道这些错误的意思,以及如何解决这些问题

+1

加上'-march = native'编译为自己的CPU,或者选择从'人gcc'适当'-march'选项(它应该是支持SSE3的CPU)。 – 2013-02-15 11:42:05

回答

7

您必须启用GCC的SSE3内在有一个命令行选项。试着用

g++ -msse3 -I/usr/local/boost_1_52_0 -I../ MAIN.cpp 

编译或选择指令由处理器

g++ -march=core2 -I/usr/local/boost_1_52_0 -I../ MAIN.cpp 

回复设为您的评论:-march=native选择您当前正在运行的处理器的指令集。

注意-msse3已经选择其子集-msse2-msse

+0

它返回说“g ++:错误:无法识别的选项'-sse3'” – 2013-02-15 11:42:02

+0

但-march =本地工作,但这是做什么? – 2013-02-15 11:43:14

+0

@AdityaSihag:这是我的错误,我纠正了 – jpalecek 2013-02-15 11:43:22