I'm trying to work up some hidden markov code in c++ using the HMMlib library from
http://www.cs.au.dk/~asand/?page_id=152
I am using an ubuntu 12.04, with gcc / g++ 4.6
My compile step instruction is:
g++ -I/usr/local/boost_1_52_0 -I../ MAIN.cpp
This produces the following error:
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
I have absolutely no idea what these errors mean, and how to resolve them
You have to enable the sse3 intrinsics of gcc with a command line option. Try compiling with
g++ -msse3 -I/usr/local/boost_1_52_0 -I../ MAIN.cpp
or selecting instruction set by processor
g++ -march=core2 -I/usr/local/boost_1_52_0 -I../ MAIN.cpp
Reply to your comment: -march=native
selects the instruction set of the processor you are currently running.
Note that -msse3
already selects its subsets -msse2
and -msse