2013-09-05 17 views
9

Używam laptopa (coreI5) na Ubuntu-64bit 12.04LTS. Próbuję dostać się do AVX w celu generowania losowej liczby.Używanie AVX z GCC - brak avxintrin.h

W Eclipse-CDT stworzyłem nowy projekt C++ "Hello World" z wykorzystaniem Linuksa GCC. Dołączyłem immintrin.h i próbowałem załadować coś w typie __m256.

Compiler wyrzuca błąd:

Type '__m256' was not declared in this scope

Spojrzałem w immintrin.h i spojrzał na avxintrin.h, na wszelki wypadek, nie jest błąd w pisowni. Po kliknięciu otwartą deklarację o avxintrin.h Eclipse mówi:

Could not find include file 'avxintrin.h' on include paths 

allthow plik jest dostępny w /usr/lib/gcc/x86_64-linux-gnu/4.6/include/avxintrin.h.

Czy ktoś może mi podpowiedzieć, co robić? Nie ma zbyt wielu samouczków ani pomocy dotyczących AVX online. Myślę, że trzeba dokonać pewnych korekt w opcjach kompilatora lub coś takiego (!?)

Anyways Oto kod:

#include <immintrin.h> 
#include <iostream> 
using namespace std; 

int main() { 
    float out[8]; 
    float a[8] = { 0.0,1.0,2.0,3.0,4.0,5.0,6.0,7}; 
    __m256 test = _mm256_load_ps(&a[0]); 
    cout << "" << endl; // prints 
    return 0; 
} 

a tu błędy:

../src/seminar.cpp:15:2: error: '__m256' was not declared in this scope 
../src/seminar.cpp:15:9: error: expected ';' before 'test' 

Dzięki z góry!

+1

Czy dodajesz '-march = native' do flag GCC? Domyślnie GCC nie włącza instrukcji AVX. – Nemo

+0

Upewnij się, że kompilujesz z 'gcc -mavx ...'. –

+1

Ok, skompilowałem z -march = native i zadziałało. Dzięki ! Ale nadal nie wiem, jak dodać tę flagę w Eclipse? Jestem trochę leniwy, jeśli chodzi o tworzenie własnych plików Makefile. Jakieś pomysły? – toebs

Odpowiedz

11

Skompiluj z -mavx, aby poinformować kompilator, że chcesz użyć instrukcji AVX.

+0

tak, jest. add -mavx jest w porządku. – user2992389

0

Aby "naprawić" problem na Eclipse "Analiza kodu na żywo" należy zaktualizować ustawienia globalnie (nie tylko dla projektu) w Oknie -> Preferencje -> C/C++ -> Kompilacja -> Ustawienia (Discovery) -> Wbudowane ustawienia kompilatora CDT GCC.

W tej stronie należy dodać to na końcu specyfikacji kompilatora: -std = C++ 11 -mavx

Spowoduje to włączenie do analizy kodu AVX żywo w Eclipse i M256 typów danych będzie rozpoznawane

0

do kompilacji użyj polecenia

gcc -mavx program_name.c

inny __m256 będzie przez błędu.

jeśli AVX flaga jest uniemożliwi dostanie poniżej błąd

niedozwolona instrukcja (core dumped)

za sprawdzanie flagi cpu użyć polecenia folloing

cat/proc/cpuinfo