GNU kompilátory¶
GNU/GCC kompilátory sú dostupné v rámci toolchainu foss, ktorý obsahuje aj OpenMPI a BLAS/LAPACK (pozri tu). Pri kompilácii s optimalizačnými flagmi je potrebné overiť správnosť a presnosť výsledkov. V prípade, že výsledky nie sú správne alebo nedosahujú požadovanú presnosť, odporúčame použiť menej agresívne optimalizačné flagy.
Skontrolujte dostupné verzie a načítajte požadovaný toolchain
- Skontrolujte dostupné verzie toolchainu foss:
module spider foss - Načítajte požadovanú verziu toolchainu:
module load foss/2022b
Kompilátory¶
Pre každú verziu toolchainu sú dostupné nasledujúce kompilátory. Ďalšie
informácie získate pomocou príkazu man.
| Command | Popis |
|---|---|
| gcc | C kompilátor |
| g++ | C++ kompilátor |
| gfortran | Fortran kompilátor |
Všeobecné optimalizačné flagy kompilátora¶
Odporúčané optimalizačné flagy
Pri kompilácii odporúčame použiť aspoň nasledujúce optimalizačné flagy:
gcc -O3 -mavx512f mycode.c
Základné optimalizačné flagy sú uvedené v nasledujúcej tabuľke.
| Command | Popis |
|---|---|
| -O | Optimalizovaná kompilácia |
| -O2 | Rozsiahlejšia optimalizácia, odporúčaná pre väčšinu kódov |
| -O3 | Agresívnejšia optimalizácia ako -O2 s dlhším časom kompilácie. Odporúča sa pre kódy s cyklami, ktoré zahŕňajú intenzívne výpočty s plávajúcou desatinnou čiarkou. |
| -Ofast | Optimalizácia -O3 s ďalšími optimalizáciami. |
| -ffast-math | Vyšší výkon pri výpočtoch s plávajúcou desatinnou čiarkou za cenu miernej straty presnosti. |
| -mtune=processor | Tento flag vykonáva ďalšie ladenie pre konkrétny typ procesora, ale nevytvára dodatočné SIMD inštrukcie. Ladenie zahŕňa optimalizácie pre veľkosť cache procesora, preferované usporiadanie inštrukcií a pod. Odporúčame vyskúšať -mtune=icelake-server. |
Flagy SIMD inštrukcií¶
Tieto flagy umožňujú vytvoriť spustiteľné súbory, ktoré využívajú konkrétne SIMD inštrukcie.
| Command | Popis |
|---|---|
| -march=native | Vytvorí spustiteľný súbor, ktorý používa SIMD inštrukcie dostupné na CPU, na ktorom sa kód kompiluje. Okrem toho zahŕňa optimalizácie z flagu -mtune=native. |
| -march=arch | Vygeneruje SIMD inštrukcie pre konkrétnu architektúru a aplikuje optimalizácie -mtune. Užitočné hodnoty arch sú rovnaké ako pre flag -mtune vyššie, napr. icelake-server. |
| -mavx2 | Generuje kód s AVX2 inštrukciami. |
| -mavx512f | Generuje kód s AVX-512 inštrukciami. |
Jednoduchý test kompilátora¶
Funkčnosť kompilátora gcc si môžete jednoducho overiť pomocou nasledujúceho programu Hello World!:
Jednoduchý test kompilátora
- Skopírujte nasledujúci kód do súboru:
#include <stdio.h> int main() { printf("Hello, World!"); return 0; } - Skompilujte kód:
gcc hello.c -o hello.x - Spustite binárny súbor:
./hello.x