Skąd mam wiedzieć, czy mój kod jest wektoryzowany przez kompilator?


Odpowiedzi:


10

Z kompilatora Intel każdej nowoczesnej rocznika, -O3 -vec-report3. Trzeci poziom optymalizacji gwarantuje, że próbuje wektoryzować, a raport wektorowy powie ci, co robi.

Strona GNU na temat wektoryzacji mówi, że jest domyślnie włączona na poziomie optymalizacji 3, ale nie mogę znaleźć odpowiednika raportu vec.


Dziękuję za szybką odpowiedź. Nie wiedziałem o -vec-report3. Czy masz preferencje kompilatora, jeśli chodzi o tego typu rzeczy (automatyczna wektoryzacja)?
Matthew Emmett

Kompilatory Intel są naprawdę dobre, ale tylko dla układów Intel. Musisz tylko dodać wszystkie właściwe pragmy (#pragma ivdep jest najłatwiejszy) GCC 4.7 jest znacznie lepszy, ale patrząc na jakiś kod z kolegą nadal ma błędy (jak brak wektoryzacji w pragmach openmp).
aterrel

1
Radziłbym dokładnie sprawdzić, jak kompilator Intel radzi sobie z wektoryzacją układów AMD. Nie jestem w 100% pewien, że stare problemy wciąż istnieją.
Bill Barth

2
@BillBarth Tak, nadal problem. Zobacz zawiadomienie o optymalizacji (w wielu miejscach, np. Software.intel.com/sites/products/collateral/hpc/compilers/… ). AMD wygrał bitwę sądową, wymagając od Intela ujawnienia, że ​​są antykonkurencyjne, a nie do powstrzymania ich. en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Criticism Agner Fog na obejściach: agner.org/optimize/blog/read.php?i=49
Jed Brown

@JedBrown, na pewno SSE jest nadal dziwne, ale jaka jest historia z AVX? Te linki wskazują, że wszystko powinno być w porządku (ponieważ obie firmy wdrażają AVX), ale nie przetestowałem tego na maszynie Bulldozer.
Bill Barth

8

W kolekcji kompilatorów GNU masz opcję -ftree-vectorizer-verbose=ngdzie njest liczba od 0 do 6, która wypisze informacje podobne do icc/ ifort.


5

W kompilatorach GNU dodanie -Wa,-ahl=asm.szrzuci wygenerowany kod zestawu do asm.s.

W przypadku kompilatorów Intela dodanie -fcode-asm -Faasm.szrzuci wygenerowany kod do asm.s.

Następnie możesz sprawdzić kod zestawu i poszukać operacji wektorowych na liczbach zmiennoprzecinkowych.


Całkowicie się zgadzam, że sprawdzanie danych wyjściowych zestawu jest jedynym niezawodnym sposobem ustalenia, czy kod jest wektoryzowany. Nic nie wymaga od kompilatorów uczciwości w zakresie roszczeń do wektoryzacji kodu.
Jeff
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.