Intel Fortran Compiler: поради щодо оптимізації при компіляції


21

Почну з особистого досвіду в нашій лабораторії. Повертаючись до ifort 9 та 10 днів, ми були досить агресивними щодо оптимізацій, компілюючи з -O3 та специфічними для процесора прапорцями (наприклад, -xW -xSSE4.2). Але, починаючи з ifort 11, ми почали помічати:
1. деякі невідповідності результатів (оскільки семантика не збереглася)
2. менші вигоди порівняно з -O2.

Тому в даний час ми зазвичай просто компілюємо з -O2 та -xhost. У вас є кращі пропозиції щодо ifort 11? Чи зміниться це ще раз, коли ми переходимо до ifort 12? Заздалегідь спасибі.


7
Оптимізація не дає переваги всім кодам рівномірно. Таким чином, я думаю, що кращим питанням було б "Як я міг профілювати свій код, щоб сказати, які оптимізації компілятора ефективні?"
Метт Кнеплі

1
Через те, що семантика не збереглася, або тому, що щось було перепорядковане? Це, можливо, трохи блукає з теми, але було б добре побачити фрагмент коду, який відтворює проблему. Можливо, щось було впорядковано таким чином, що вам не подобається, але що компілятор вважає, що це добре. Мій досвід полягає в тому, що Intel 12 виконує кращу роботу векторизації, ніж будь-який з її попередників, тому я б очікував, що перед переходом на останнє відбудеться більше змін.
Білл Барт

Я подумав, що сказати, що семантика не збереглася - це рівнозначно впорядкованості не збереглося. У всякому разі, я розумію, що моє запитання (занадто?) Загальне, і я не хотів зупинятися на конкретиці. У нас було кілька проблем з Intel 10, деякі - помилки компілятора, а деякі залишилися незрозумілими. Тож з 11 ми грали в безпеку і були задоволені виступом. Але, можливо, ми граємо в це занадто безпечно, і я хотів дізнатися, чи є у громади якісь поради.
ФранцузькийХельдар

Відповіді:


16

Ми настійно рекомендуємо всім нашим користувачам починати з -O3 -xHost -ipoifort 11 і ifort 12. Якщо існують особливі перетворення з плаваючою точкою, включені O3, які впливають на точність деяких ваших обчислень, ви можете вимкнути їх спеціально -fp-model precise -fp-model except(або, що більш різко, -fp-model strict) при збереженні інших оптимізацій O3 дозволяє, наприклад, блокування циклу для кешу, злиття циклу та розкручування та оптимізацію доступу до пам'яті.

Я б радив спробувати модель моделі з плаваючою комою на окремих файлах і з'ясувати, де це має значення, а не вимикати її в усьому світі; це може бути відбиток на швидкості ~ 15%, і ви хочете мати можливість утримувати це там, де це не впливає на ваші розрахунки. Якщо ви не впевнені, на що впливає точність, ви можете грати, включаючи та вимикаючи прапорці з плаваючою комою для цих файлів або граючи з режимами округлення .

Нещодавно ми коротко поговорили з нашими користувачами про оптимізаційні прапори, зосередившись на компіляторах gnu та Intel для x86; слайди з цієї розмови ви можете побачити тут .

Між іншим, поки ми говоримо про вибір прапорів оптимізації для вашого коду, раз у раз також варто подивитися на вихід -vec-report, щоб побачити, де компілятор намагався векторизувати цикл, а не зміг; іноді в циклі можуть бути внесені невеликі зміни, які можуть призвести до можливої ​​векторизації (що може бути в 4 рази). Аналогічно для більш загального -opt-звіту .


Мені подобається ваша відповідь, але я спробував її ще раз з однією з наших тестових скриньк і -O3 -xhost -fp-model precise -fp-model exceptпризвів до 30% уповільнення . Я ще раз -vec-report
погляну

2
Над -O2 -xhost? Це цікаво; це дуже незвично, але це може статися. У таких випадках оптимізатор робить щось, що у нього є вагомі підстави подумати, що покращить швидкість, але, виявляється, все гірше. Зазвичай для наукового коду, який має досить пряму структуру, цього не відбувається. У таких випадках часто може допомогти керована профілем оптимізація - software.intel.com/sites/products/documentation/hpc/compilerpro/… .

5

Я працюю в компанії, яка виробляє великі високотехнологічні програми у Фортран з IFort - програми дуже критичні для продуктивності, оскільки швидкість (при збереженні точності) є основною точкою продажу.

Ми завжди компілюємо з -O3, і, наскільки мені відомо, головне, що робить -O3, це розгортання та попереднє завантаження циклу. Я підозрюю, що більшість наукових обчислювальних програм значною мірою виграють від них, зокрема оптимізації циклу. Ми не бачили помилок компілятора вже досить давно (хоча ми бачили кілька помилок лінкера при використанні Ifort на Mac). Ми використовуємо 11.1.095.

Я сподіваюся, що це допомагає.


4

Я усвідомлюю, що ця відповідь, мабуть, далеко, занадто пізно, але для агресивної оптимізації варіант "-фаст" здається найпростішим рішенням. Витяги зі сторінки чоловіка:

-fast
    Maximizes speed across the entire program.
    Description:
    This option maximizes speed across the entire program.

    It sets the following options:
     - On Linux* systems: -ipo, -O3, -no-prec-div, -static, and -xHost
     - On OS X* systems: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, and -xHost
     - On Windows*  systems:  /O3,  /Qipo,  /Qprec-div-,  and /QxHost

    NOTE: Option fast sets some aggressive optimizations that may not be appropriate for all
    applications. The resulting executable may not run on processor types different from the
    one on which you compile. You should make sure that you understand the individual optimi-
    zation options that are enabled by option fast.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.