Preskočiť na obsah

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

  1. Skontrolujte dostupné verzie toolchainu foss:
    module spider foss
    
  2. 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

  1. Skopírujte nasledujúci kód do súboru:
    #include <stdio.h>
    int main() {
    printf("Hello, World!");
    return 0;
    }
    
  2. Skompilujte kód:
    gcc hello.c -o hello.x
    
  3. Spustite binárny súbor:
    ./hello.x
    
Created by: Marek Štekláč