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

Я пытаюсь создать скрытый марковский код на С++, используя библиотеку HMMlib из

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

Я использую 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

Я совершенно не понимаю, что означают эти ошибки и как их решить.


person Aditya Sihag    schedule 15.02.2013    source источник
comment
Добавьте -march=native для компиляции для вашего собственного процессора или выберите соответствующую опцию -march из man gcc (это должен быть процессор, поддерживающий SSE3).   -  person Anton Kovalenko    schedule 15.02.2013


Ответы (1)


Вы должны включить встроенные функции sse3 gcc с параметром командной строки. Попробуйте скомпилировать с

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

person jpalecek    schedule 15.02.2013
comment
@AdityaSihag это тот случай творческого мышления, когда вы должны копировать и вставлять. Посмотрите здесь: -msse3. - person Anton Kovalenko; 15.02.2013