Как узнать, векторизован ли мой код компилятором?


9

Как видно из ответа Джеда Брауна « Затраты на поиск по сравнению с вычислениями» , использование векторизованных и не векторизованных операций с плавающей запятой приводит к гораздо более быстрому коду. Многие современные компиляторы утверждают, что они могут выполнять автоматическую векторизацию. Как мне определить, какие части моего кода успешно векторизованы?

Ответы:


10

С компилятором Intel любого современного года изготовления вина -O3 -vec-report3. Третий уровень оптимизации гарантирует, что он пытается векторизовать, а векторный отчет скажет вам, что он делает.

Страница GNU по векторизации говорит, что она включена по умолчанию на уровне оптимизации 3, но я не могу найти эквивалент vec-report.


Спасибо за быстрый ответ. Я не знал о -vec-report3. У вас есть предпочтения компилятора, когда дело доходит до такого типа вещей (автоматическая векторизация)?
— Мэтью Эммет

Компиляторы Intel действительно хороши, но только для чипов Intel. Вам просто нужно добавить все правильные прагмы (#pragma ivdep - самый простой) GCC 4.7 стал намного лучше, но просматривая некоторый код с коллегой, он по-прежнему имеет ошибки (как, например, отсутствие векторизации в прагмах openmp).
— aterrel

1
Я бы посоветовал дважды проверить, как компилятор Intel справляется с векторизацией на чипах AMD. Я не уверен на 100%, что проблемы старого все еще существуют.
— Билл Барт

2
@BillBarth Да, все еще проблема. См. Уведомление об оптимизации (во многих местах, например, software.intel.com/sites/products/collateral/hpc/compilers/… ). AMD выиграла судебную тяжбу, требуя от Intel раскрытия своей антиконкурентности, а не для того, чтобы они перестали быть. en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Criticism Agner Fog от обходных путей: agner.org/optimize/blog/read.php?i=49
— Джед Браун,

@JedBrown, конечно, SSE все еще странный, но что за история с AVX? Эти ссылки указывают на то, что все должно быть в порядке (поскольку обе компании используют AVX), но я не проверял его на бульдозерной машине.
— Билл Барт

8

В коллекции компиляторов GNU у вас есть опция -ftree-vectorizer-verbose=nгде nэто число от 0 до 6, которое будет печатать информацию, похожую на icc/ ifort.


5

При использовании компиляторов GNU при добавлении -Wa,-ahl=asm.sбудет сгенерирован код сборки asm.s.

С компиляторами Intel добавление -fcode-asm -Faasm.sбудет генерировать сгенерированный код в asm.s.

Затем вы можете проверить код сборки и найти операции с плавающей точкой вектора.


Я полностью согласен с тем, что проверка выходных данных сборки - единственный надежный способ определить, действительно ли код векторизован. Нет ничего, что требовало бы от компиляторов быть честными в своих заявлениях о векторизации кода.
— Джефф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.