Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Sovellusten kääntäminen Roihussa

Info

Roihussa on erilliset CPU- ja GPU-osiot, joissa on eri CPU-arkkitehtuurit:

  • Roihu-CPU-solmut käyttävät AMD:n (x86) -prosessoreita
  • Roihu-GPU-solmut käyttävät NVIDIA Gracen (ARM) -prosessoreita

Yhdelle arkkitehtuurille käännetyt binäärit eivät toimi toisella. Siksi ohjelmistot tulee kääntää samalla puolella, jolla niitä ajetaan:

  • Käännä CPU-solmuille Roihu-CPU:n kirjautumissolmulla
  • Käännä GPU-solmuille Roihu-GPU:n kirjautumissolmulla

Yleiset ohjeet

  • Käytä aina kun mahdollista kirjautumissolmun paikallista levyä ohjelmistojen kääntämiseen.

    • Kääntäminen paikallisella levyllä on paljon nopeampaa ja siirtää kuormaa pois jaetusta tiedostojärjestelmästä.
    • Paikallinen levy siivotaan usein, joten siirrä tiedostosi muualle kääntämisen jälkeen.
  • Katso sivu saatavilla olevista HPC-kirjastoista, kun käytät yleisiä kirjastoja (BLAS, FFTW, ...) ja linkität niitä sovelluksiisi.

Kääntäminen Roihu-CPU:ssa

Info

Kun käännät Roihussa CPU-solmuille, varmista että käytät Roihun CPU-kirjautumissolmuja. Roihu-GPU:ssa käännetyt binäärit eivät ole yhteensopivia Roihu-CPU-solmujen kanssa.

Roihu-CPU tarjoaa GNU- ja AMD AOCC -käännösympäristöt C/C++- ja Fortran-sovellusten rakentamiseen. Nämä ympäristöt ovat saatavilla seuraavina moduleina:

Kääntäjäkokonaisuus Moduulit
GNU 15.2.0 gcc/15.2.0 openmpi/5.0.10
AMD AOCC 5.0.0 aocc/5.0.0 openmpi/5.0.10

Ensimmäinen kääntäjäkokonaisuus ladataan oletuksena. Voit vaihtaa ympäristöä lataamalla luetellut moduulit, esimerkiksi

module load aocc/5.0.0 openmpi/5.0.10

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

module spider gcc
module spider aocc

Kääntäjien suoritustiedostot ovat seuraavat:

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

Sovelluksille, jotka riippuvat MPI:stä, on suositeltavaa käyttää sen sijaan alla MPI-osiossa kuvattuja kääntäjäkääreitä.

Eri kääntäjäkokonaisuuksien kääntäjävalitsimet ovat erilaisia. 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=znver5 -O2 -march=znver5
Keskitaso -O3 -march=znver5 -O3 -march=znver5
Aggressiivinen -O3 -march=znver5 -ffast-math -funroll-loops

Esimerkki ei-MPI C -ohjelman kääntämisestä GNU-ympäristössä:

gcc -O3 -march=znver5 example.c -o example

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: - GNU - AMD AOCC

Suosittelemme testaamaan ja profiloimaan sovelluksesi molemmilla kääntäjäkokonaisuuksilla nähdäksesi, mikä kääntäjä toimii parhaiten omassa käyttötapauksessasi.

MPI-sovellusten rakentaminen

Roihun MPI-ympäristö on OpenMPI. Voit käyttää jotakin MPI-kääntäjäkääreistä mpicc (C), mpicxx (C++) tai mpif90 (Fortran), kun käännät MPI-sovelluksia. Nämä kääreet kutsuvat lopulta parhaillaan ladatun kääntäjäkokonaisuuden kääntäjää (GNU tai AMD) ja toimivat molemmissa kääntäjäkokonaisuuksissa.

Esimerkki:

mpicc -O3 -march=znver5 example.c -o example

Listaa kaikki saatavilla olevat OpenMPI-versiot (yksi on aina ladattuna oletuksena):

module spider openmpi

OpenMP- ja hybridisovellusten rakentaminen

OpenMP- tai hybridi-MPI+OpenMP-sovellusta rakennettaessa tarvitaan ylimääräinen kääntäjä- ja linkkerilippu:

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

Esimerkki hybridi-MPI+OpenMP-sovelluksen kääntämisestä:

mpicc -O3 -march=znver5 -fopenmp example.c -o example

Kääntäminen Roihu-GPU:ssa

Info

Kun käännät Roihussa GPU-solmuille, varmista että käytät Roihun GPU-kirjautumissolmuja. Roihu-CPU:ssa käännetyt binäärit eivät ole yhteensopivia Roihu-GPU-solmujen kanssa.

Roihu-GPU tarjoaa GNU- ja NVIDIA-HPC -käännösympäristöt C/C++- ja Fortran-sovellusten rakentamiseen seuraavilla moduleilla:

Kääntäjäkokonaisuus Moduulit
GNU 14.3.0 + CUDA 12.9.1 gcc/14.3.0 cuda/12.9.1 openmpi/5.0.10 openblas/0.3.30
GNU 15.2.0 + CUDA 13.1.1 gcc/15.2.0 cuda/13.1.1 openmpi/5.0.10 openblas/0.3.30
NVIDIA HPC 26.3 nvhpc/26.3

Ensimmäinen kääntäjäkokonaisuus ladataan oletuksena. Voit vaihtaa ympäristöä lataamalla luetellut moduulit, esimerkiksi

module load nvhpc/26.3

Tietoa nvhpc-moduulista

Huomaa, että nvhpc-moduuli sisältää CUDA-, MPI- ja BLAS-toteutukset, joten näitä moduuleja ei tarvitse ladata erikseen, kun käytät nvhpc-moduulia. Tästä syystä module load voi ilmoittaa sinulle inaktiivisista moduuleista.

Jotta inaktiivisia moduuleja ei jäisi, voit tyhjentää moduulit ennen ympäristön lataamista:

module purge
module load nvhpc/26.3

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

module spider gcc
module spider cuda
module spider nvhpc

Kääntäjien suoritustiedostot ovat seuraavat:

Kääntäjäkokonaisuus C C++ Fortran
GNU gcc g++ gfortran
NVIDIA HPC nvc nvc++ nvfortran

Lisäksi CUDA-kääntäjä nvcc on saatavilla GPU-ytinkoodin rakentamiseen. Katso CUDA-osio alta.

CUDA-sovellusten kääntäminen

CUDA on suositeltu ohjelmointimalli Nvidia-GPU:ille, ja se on saatavilla cuda- ja nvhpc-moduleissa.

CUDA-kääntäjä (nvcc) huolehtii CUDA-ytimien koodin kääntämisestä kohde-GPU-laitteelle ja välittää loput parhaillaan ladatulle isäntäkääntäjälle, kuten gcc tai nvhpc.

Jotta koodi tuotetaan tietylle kohdelaitteelle, kerro CUDA-kääntäjälle, mitä compute capability -tasoa kohdelaitteesi tukee. Roihussa GPU:t (Hopper 200) tukevat compute capabilityä 9.0. Määritä tämä käyttämällä valitsinta -gencode arch=compute_90,code=sm_90. Vaihtoehtoisesti voit käyttää compute_90a tai sm_90a ottaaksesi käyttöön Hopper-kohtaiset laajennusominaisuudet, jotka voivat tuottaa suorituskykyisempää koodia.

Esimerkiksi CUDA-ytimen (example.cu) kääntäminen Roihussa:

nvcc -gencode arch=compute_90a,code=sm_90a example.cu

Info

Koodi, joka on tuotettu valitsimilla arch=compute_90a tai code=sm_90a, ei ole taaksepäin- eikä eteenpäin- yhteensopivaa muiden GPU-arkkitehtuurien kanssa. Jos tämä on sinulle tärkeää, käytä yleisempiä valitsimia arch=compute_90,code=sm_90.

MPI+CUDA-sovellusten kääntäminen

Kaikki tarjotut GNU- ja NVIDIA-kääntäjäympäristöt sisältävät CUDA-tietoisen MPI-kirjaston.

Jos MPI+CUDA-sovelluksen rakenne sallii sen, voit rakentaa sen osissa:

  1. Käännä CUDA-ytimet objektitiedostoiksi komennolla nvcc -c
  2. Käännä isäntäkoodi objektitiedostoiksi MPI-kääntäjäkääreillä, jotka kutsuvat ladattua isäntäkääntäjää (mpicc -c, mpicxx -c tai mpif90 -c)
  3. Linkitä kaikki objektitiedostot MPI-kääntäjäkääreellä (mpicc, mpicxx tai mpif90)

On myös mahdollista kääntää koko koodipohja nvcc:llä, mutta silloin tarvittavat MPI:n käännös- ja linkitysvalitsimet täytyy välittää nvcc:n kutsumalle taustalla olevalle isäntäkääntäjälle. Tämä voidaan tehdä seuraavasti -Xcompiler- ja -Xlinker-lipuilla:

# Parse MPI options for compiler
Xcompiler="-Xcompiler $(mpicxx --showme | tr ' ' '\n' | sed '/^-Wl,/d;1d' | paste -sd, -)"

# Parse MPI options for linker
Xlinker="-Xlinker $(mpicxx --showme | tr ' ' '\n' | sed -n 's/^-Wl,//p' | paste -sd, -)"

# Compile MPI code using nvcc
nvcc -gencode arch=compute_90a,code=sm_90a $Xcompiler $Xlinker mpi_cuda_code.cu

Warning

Muista ladata kääntämisessä käytetyt moduulit myös sovellusta ajettaessa, jotta oikeaa MPI-kirjastoa käytetään ajon aikana.

OpenMP offloadia, OpenACC:tä ja C++:n standardinmukaista rinnakkaisuutta käyttävän sovelluksen kääntäminen

Warning

On suositeltavaa käyttää NVIDIA HPC -kääntäjiä OpenMP offloadia, OpenACC:tä ja C++:n standardinmukaista rinnakkaisuutta käyttävien koodien kääntämiseen.

Aloita lataamalla NVIDIA HPC -kääntäjät:

module purge
module load nvhpc/26.3

Kääntäjävalitsimet eri GPU-ohjelmointimallien käyttöönottoon ovat seuraavat:

Ohjelmointimalli Kääntäjävalitsin
OpenMP offload -mp=gpu
OpenACC -acc=gpu
C++ stdpar -stdpar=gpu (nvc++ only)

Jotta GH200-superpiireille Roihussa tuotetaan tehokasta koodia, määritä kohde seuraavalla valitsimella:

-gpu=cc90

Esimerkkikäännöskomennot:

Ohjelmointimalli C C++ Fortran
OpenMP offload nvc -O3 -mp=gpu -gpu=cc90 example.c nvc++ -O3 -mp=gpu -gpu=cc90 example.cpp nvfortran -O3 -mp=gpu -gpu=cc90 example.F90
OpenACC nvc -O3 -acc=gpu -gpu=cc90 example.c nvc++ -O3 -acc=gpu -gpu=cc90 example.cpp nvfortran -O3 -acc=gpu -gpu=cc90 example.F90
C++ stdpar N/A nvc++ -O3 -stdpar=gpu -gpu=cc90 example.cpp N/A

Kääntäjät tukevat myös koodeja, jotka sisältävät useita ohjelmointimalleja. Esimerkiksi C++-koodi, joka sisältää OpenMP offloadia, OpenACC:tä ja C++-rinnakkaisalgoritmeja, käännetään komennolla:

nvc++ -O3 -mp=gpu -acc=gpu -stdpar=gpu -gpu=cc90 example.cpp

OpenMP offloadia, OpenACC:tä ja C++:n standardinmukaista rinnakkaisuutta käyttävän MPI-sovelluksen kääntäminen

nvhpc-moduuli sisältää GPU-tietoisen MPI-toteutuksen tavallisine kääntäjäkääreineen, ja MPI-sovellukset voidaan kääntää kuten yllä, mutta korvaamalla nvc, nvc++ ja nvfortran vastaavasti komennoilla mpicc, mpicxx ja mpif90:

Ohjelmointimalli C C++ Fortran
OpenMP offload mpicc -O3 -mp=gpu -gpu=cc90 example.c mpicxx -O3 -mp=gpu -gpu=cc90 example.cpp mpif90 -O3 -mp=gpu -gpu=cc90 example.F90
OpenACC mpicc -O3 -acc=gpu -gpu=cc90 example.c mpicxx -O3 -acc=gpu -gpu=cc90 example.cpp mpif90 -O3 -acc=gpu -gpu=cc90 example.F90
C++ stdpar N/A mpicxx -O3 -stdpar=gpu -gpu=cc90 example.cpp N/A

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta