Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Sovellusten kääntäminen Mahdissa

Yleiset ohjeet

  • Käytä ohjelmistojen kääntämiseen aina kun mahdollista kirjautumissolmun paikallista levyä.
    • Kääntäminen paikallisella levyllä on paljon nopeampaa ja vähentää jaetun tiedostojärjestelmän kuormitusta.
    • Paikallinen levy tyhjennetään usein, joten siirrä tiedostosi muualle kääntämisen jälkeen.

MPI-sovellusten kääntäminen

C/C++- ja Fortran-sovelluksia voidaan kääntää GNU- tai AMD kääntäjäkokonaisuuksilla. GNU-kääntäjät ovat ladattuina oletuksena. AMD-kääntäjät voidaan ladata moduulijärjestelmällä komennolla:

module load aocc

Eri sovellukset toimivat paremmin eri kääntäjäkokonaisuuksilla, joten valinta on tehtävä tapauskohtaisesti.

Mahdin MPI-ympäristö on OpenMPI, ja MPI-sovelluksia käännettäessä kaikkia kääntäjäkokonaisuuksia voidaan käyttää mpicc- (C), mpicxx- (C++) tai mpif90- (Fortran) wrapperien avulla.

Kääntäjävalitsimet ovat erilaisia eri kokonaisuuksissa. Suositellut perusoptimointiliput on lueteltu alla olevassa taulukossa. On suositeltavaa aloittaa turvalliselta tasolta ja siirtyä sitten keskitasolle tai jopa aggressiiviselle tasolle varmistaen samalla, että tulokset ovat oikein ja ohjelman suorituskyky on parantunut.

Optimointitaso GNU AMD (clang)
Turvallinen -O2 -march=native -O2 -march=native
Keskitaso -O3 -march=native -O3 -march=native
Aggressiivinen -O3 -march=native -ffast-math -funroll-loops -O3 -march=native -ffast-math -funroll-loops

Yksityiskohtainen luettelo GNU- ja AMD-kääntäjien valitsimista löytyy man- sivuilta (man gcc/gfortran), kun vastaava ohjelmointiympäristö on ladattu, tai kääntäjien käyttöoppaista (katso yllä olevat linkit).

Listaa kaikki saatavilla olevat kääntäjäkokonaisuuksien versiot:

module spider gcc
module spider aocc

OpenMP- ja hybridisovellusten kääntäminen

OpenMP- tai MPI/OpenMP-hybridisovelluksia käännettäessä tarvitaan lisäkääntäjä- ja linkkerilippuja:

Kääntäjäkokonaisuus OpenMP-lippu
GNU ja AMD -fopenmp

Sarjallisten sovellusten kääntäminen

Sarjallisia sovelluksia käännettäessä on käytettävä kääntäjäkokonaisuuskohtaista kääntäjäkomentoa:

Kääntäjäkokonaisuus C C++ Fortran
GNU gcc g++ gfortran
AMD clang clang++ flang

GPU-sovellusten kääntäminen

CUDA on suositeltu ohjelmointimalli Nvidia-GPU:ille, ja CSC tarjoaa sen ympäristömoduulina. Myös OpenACC- ja OpenMP offloading -ohjelmointimalleja voidaan käyttää, mutta ne eivät kuulu CSC:n tukemaan ohjelmistopinoon.

CUDA

CUDA-kääntäjä (nvcc) huolehtii CUDA-koodin kääntämisestä kohde-GPU-laitteelle ja välittää muun koodin ei-CUDA-kääntäjälle (ts. gcc). Esimerkiksi CUDA 12.6.1 -ympäristön lataaminen yhdessä GNU-kääntäjän kanssa:

module load gcc/10.4.0 cuda/12.6.1

Jos haluat tuottaa koodia tietylle kohdelaitteelle, voit kertoa CUDA- kääntäjälle, mitä compute capabilityä kohdelaitteesi tukee. Mahdissa GPU:t (Ampere V100) tukevat compute capabilityä 8.0. Määritä tämä valitsimella -gencode arch=compute_80,code=sm_80.

Esimerkiksi CUDA-ytimen (example.cu) kääntäminen Mahdissa (C- tai C++-koodeille):

nvcc -gencode arch=compute_80,code=sm_80 example.cu

Käännä CUDA Fortran -koodi nimeltä example.cuf

nvfortran -gpu=cc80 example.cuf

OpenACC ja OpenMP offloading

Warning

OpenACC-tuki tarjotaan NVIDIA:n nvc- ja nvc++-kääntäjien kautta. On kuitenkin tärkeää huomata, että tuki voi olla jossain määrin rajallinen ja siitä voi puuttua tiettyjä toiminnallisuuksia, eikä sitä ole integroitu muuhun moduulipuuhun.

Warning

Jos otat moduulit käyttöön seuraavien ohjeiden mukaisesti, ympäristösi ei välttämättä toimi normaalisti. Komento module purge on välttämätön, ja muiden moduulien lataaminen yhdessä nvhpc- moduulien kanssa voi rikkoa ympäristösi eikä CSC tue sitä. Jos tarvitset lisätietoja OpenACC-tuesta, ota yhteyttä CSC:n asiakastukeen.

Kääntäjiä voidaan käyttää NVIDIA HPC SDK -moduulien kautta, jotka sisältyvät SDK-asennukseen. Niitä ei voi käyttää suoraan, vaan ne on otettava käyttöön lisäämällä hakupolku käsin seuraavasti:

module purge
module use /appl/opt/nvhpc/modulefiles

Kun moduulit on lisätty hakupuuhun, sinun on ladattava haluttu kääntäjien, MPI:n ja CUDA:n yhdistelmä. Suositeltu yhdistelmä on nvhpc-hpcx-cuda, esimerkiksi:

module load nvhpc-hpcx-cuda12/25.1

OpenACC

OpenACC-tuen ottamiseksi käyttöön kääntäjälle on annettava -acc-lippu.

Jos haluat tuottaa koodia tietylle kohdelaitteelle, kerro kääntäjälle, mitä compute capabilityä kohdelaitteesi tukee. Mahdissa GPU:t (Ampere A100) tukevat compute capabilityä 8.0.

Esimerkiksi OpenACC-direktiivejä käyttävän C-koodin (example.c) kääntäminen:

nvc -acc example.c -gpu=cc80

Jos haluat tietoa siitä, mitä kääntäjä todella tekee OpenACC- direktiiveillä, käytä valitsinta -Minfo=all.

Fortran-koodille:

nvfortran -acc example.F90 -gpu=cc80

C++-koodille:

nvc++ -acc example.cpp -gpu=cc80

OpenMP Offloading

OpenMP Offloadingin ottamiseksi käyttöön tarvitaan valitsin -mp=gpu

Esimerkiksi C-koodin kääntäminen OpenMP offloadingilla:

nvc -mp=gpu example.c -gpu=cc80

Fortran-koodille:

nvfortran -mp=gpu example.F90 -gpu=cc80

C++-koodille:

nvc++ -mp=gpu example.cpp -gpu=cc80

nvc++-kääntäjä tukee koodeja, jotka sisältävät samassa koodissa OpenACC:tä, OpenMP offloadingia ja C++:n rinnakkaisalgoritmeja. Tällaisessa tapauksessa voit kääntää komennolla:

nvc++ -stdpar -acc -mp=gpu example.cpp -gpu=cc80

Ohjelmistojen kääntäminen Spackilla

Spack on joustava paketinhallintatyökalu, jota voidaan käyttää ohjelmistojen asentamiseen supertietokoneille sekä Linux- ja macOS-järjestelmiin. Perus- moduulipuu, mukaan lukien kääntäjät, MPI-kirjastot ja monet CSC:n supertietokoneilla saatavilla olevista ohjelmistoista, on asennettu Spackilla.

CSC tarjoaa Mahdissa moduulin spack/v0.17-user, jota käyttäjät voivat käyttää ohjelmistojen kääntämiseen saatavilla olevien kääntäjien ja kirjastojen päälle Spackin avulla. On myös mahdollista asentaa moduulipuussa saatavilla olevista paketeista erilaisia räätälöityjä versioita erityisiä käyttötapauksia varten. Katso täältä lyhyt opastus siihen, miten ohjelmistoja asennetaan CSC:n supertietokoneilla Spackin avulla.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta