Intel kompilátory¶
Intel vyrába kompilátory, ktoré generujú vysoko optimalizovaný kód pre svoje CPU. Ako pri všetkých kompilátoroch by mali programy kompilované s optimalizáciou mať svoj výstup dvojnásobne skontrolovaný z hľadiska presnosti. Ak je číselný výstup nesprávny alebo nemá požadovanú presnosť, mali by sa skúsiť menej agresívne kompilačné možnosti.
Intel kompilačné toolchainy môžete načítať nasledujúcimi príkazmi:
Skontrolujte dostupné verzie a načítajte požadovaný toolchain
- Skontrolujte dostupné verzie Intel kompilačného toolchainu
module spider intel - Načítajte požadovanú verziu toolchainu
module load intel/2022b
Kompilátory¶
Nasledujúce kompilátory sú dostupné pre každú verziu toolchainu. Ďalšie informácie získate pomocou príkazu man.
| Command | Popis |
|---|---|
| icc | C kompilátor |
| icpc | C++ kompilátor |
| ifort | Fortran kompilátor |
| dpcpp | Data Parallel C++ kompilátor |
Všeobecné optimalizačné flagy kompilátora¶
Odporúčané optimalizačné flagy
Odporúčame použiť aspoň nasledujúce optimalizačné flagy pre kompiláciu:
icc -O3 -xCORE-AVX512 mycode.c
Optimalizačné flagy Intel kompilátorov úmyselne napodobňujú mnohé z tých, ktoré sa používajú s rodinou kompilátorov GNU. Základné optimalizačné flagy sú zhrnuté nižšie.
| Command | Popis |
|---|---|
| -O | Optimalizovaná kompilácia |
| -O2 | Odporúčané Intelom, rozsiahlejšie optimalizovaná kompilácia |
| -O3 | Agresívnejšia ako -O2 s dlhšími časmi kompilácie. Odporúčaná pre kódy s cykly, ktoré zahŕňajú intenzívne výpočty s plavúcou čiarkou. |
| -Ofast | Optimalizácia -O3 s ďalšími prvkami |
| -mtune=processor | Tento flag vykonáva ďalšie ladenie pre konkrétne typy procesorov, ale nevytvára dodatočné SIMD inštrukcie. Ladenie zahŕňa optimalizácie pre veľkosti cache procesora, preferované usporiadanie inštrukcií a pod. Odporúčame skúsiť -mtune=icelake-server alebo -mtune=icelake. |
Flagy SIMD inštrukcií¶
Tieto flagy vytvoria spustiteľné súbory, ktoré obsahujú konkrétne SIMD inštrukcie.
| Command | Popis |
|---|---|
| -xHost | Musí sa používať aspoň s -O2. Vytvorí spustiteľný súbor, ktorý používa SIMD inštrukcie na základe CPU, ktoré kód kompiluje. |
| -fast | Kombinácia -Ofast, -ipo, -static (pre statické prepojenie) a -xHost. |
| -march | Musí sa používať aspoň s -O2 a určuje typ SIMD inštrukcií, ktoré sa majú generovať. V kombinácii s flagom -ax stanoví minimálny SIMD inštrukčný set. Hodnoty tohto flagu napodobňujú tie z GNU kompilátorov: sse4.2,avx, avx2 a veľké množstvo avx512 flagov. |
| -axarch | Tento sa musí používať aspoň s -O2 a -march. Flag -march vytvorí konkrétne SIMD inštrukcie a ďalšie SIMD inštrukcie sa dajú podporiť pridaním flagu -axarch. Pre každú funkciu, ktorú možno kompilovať s SIMD inštrukciami, sa vytvoria samostatné kópie pre každý inštrukčný set. Spustiteľný súbor automaticky detekuje podporu inštrukcií CPU v čase behu a určí, ktorú verziu spustiť. Časy kompilácie môžu byť veľmi dlhé, keďže funkcie sa budú kompilovať viackrát za sebou a výsledná binárka bude veľká. Viac inštrukčných setov sa dá do tohto príkazu zahrnúť oddelených čiarkou. |
Jednoduchý test kompilátora¶
Kompilátor si môžete jednoducho otestovať nasledujúcim kódom 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:
icc hello.c -o hello.x - Spustite binárku:
./hello.x