Як дізнатись, чи компілятор векторизує мій код?


9

Як видно з відповіді Джеда Брауна на Витрати на пошуки порівняно з розрахунками , використання векторизованих проти невекторизованих операцій з плаваючою комою призводить до набагато швидшого коду. Багато сучасних компіляторів стверджують, що вони можуть виконувати автоматичну векторизацію. Як я можу, які частини мого коду успішно векторизуються?

Відповіді:


10

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

Сторінка GNU про векторизацію говорить, що вона за замовчуванням включена на рівні оптимізації 3, але я не можу знайти еквівалент vec-звіту.


Дякуємо за швидку відповідь. Я не знав про -vec-report3. Чи є у вас перевага компілятора, коли мова йде про такий тип речі (автоматична векторизація)?
Меттью Емметт

Компілятори 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 Туман про обхідні шляхи: 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.