Ohjelmien kääntäminen Mahti-klusterilla
Yleiset ohjeet
- Mahdollisuuksien mukaan käytä paikallista levyä sisäänkirjautumissolmussa ohjelmien kääntämiseen.
- Paikallisella levyllä kääntäminen on huomattavasti nopeampaa ja vähentää kuormitusta yhteiseltä tiedostojärjestelmältä.
- Paikallista levyä puhdistetaan usein, joten siirräthän tiedostosi muualle kääntämisen jälkeen.
MPI-sovellusten kääntäminen
C/C++ ja Fortran -sovelluksia voi kääntää joko GNU tai AMD kääntäjäpakettien avulla. GNU-kääntäjät ovat ladattuna oletuksena. AMD-kääntäjät voi ladata Modules järjestelmän kautta komennolla:
Eri sovellukset toimivat paremmin eri kääntäjäpakettien kanssa, joten valinta täytyy tehdä tapauskohtaisesti.
Mahdi-klusterin MPI-ympäristö on OpenMPI, ja kun rakennat MPI-sovelluksia, voit käyttää kaikkia kääntäjäpaketteja mpicc
(C), mpicxx
(C++), tai mpif90
(Fortran) kääreiden avulla.
Kääntäjäpakettien kääntäjäoptionit eroavat toisistaan. Suositellut perusoptimointioptiot on listattu alla olevassa taulukossa. On suositeltavaa aloittaa turvalliselta tasolta ja siirtyä sitten keskitason tai jopa aggressiiviseen optimointiin samalla varmistaen, että tulokset ovat oikeita 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 optioista löytyy man-sivuilta (man gcc/gfortran
) kun vastaava ohjelmointiympäristö on ladattu, tai kääntäjämanuaaleista (katso linkit yllä).
Listaa kaikki saatavilla olevat kääntäjäversiot:
OpenMP- ja hybridisovellusten kääntäminen
OpenMP- tai MPI/OpenMP-hybridisovelluksia käännettäessä tarvitaan lisäkääntäjä- ja linkkeriflageja:
Kääntäjäpaketti | OpenMP-lippu |
---|---|
GNU ja AMD | -fopenmp |
Sarjasovellusten kääntäminen
Sarjasovelluksia käännettäessä tulee käyttää kääntäjäpakettikohtaisia kääntäjäkomentoja:
Kääntäjäpaketti | C | C++ | Fortran |
---|---|---|---|
GNU | gcc | g++ | gfortran |
AMD | clang | clang++ | flang |
GPU-sovellusten kääntäminen
CUDA-, OpenACC- ja OpenMP Offloading (C++ koodille) ohjelmointimallit ovat saatavilla Mahtissa NVIDIA HPC -kääntäjien kautta:
Kääntäjät:
-
(
nvc
) on C11-kääntäjä, joka tukee OpenACC:tä NVIDIA GPU:ille sekä OpenACC- ja OpenMP:tä moniydinprosessorille. -
(
nvc++
) on C++17-kääntäjä, joka tukee GPU-ohjelmointia C++17 rinnakkaisalgoritmeilla, OpenACC:llä ja OpenMP Offloadingillä NVIDIA GPU:ille. Ei tue vielä C++ CUDA-koodia. -
(
nvcc
) on CUDA C ja CUDA C++ kääntäjäohjain NVIDIA GPU:ille. -
(
nvfortran
) on CUDA Fortran kääntäjäohjain NVIDIA GPU:ille, tukee OpenACC:ta ja OpenMP:tä moniydinprosessorille OpenACC:lle.
CUDA
Koodin generoimiseksi tietylle kohdelaitteelle, kerro CUDA-kääntäjälle minkä laskentakapasiteetin kohdelaitteella on. Mahtissa GPU:t (Ampere V100) tukevat laskentakapasiteettia 8.0. Määritä tämä käyttämällä -gencode arch=compute_80,code=sm_80
.
Esimerkiksi CUDA-ytimen (example.cu
) kääntäminen Puhtilla (C- tai C++-koodit):
Käännä CUDA Fortran -koodi nimeltä example.cuf:
OpenACC
Varoitus
OpenACC-tuki toimitetaan NVIDIA:n nvc
ja nvc++
kääntäjien kautta.
On kuitenkin tärkeää huomata, että tuki voi olla hieman rajallinen ja saattaa puuttua joitain toiminnallisuuksia, kuten MPI-parallelisointi. Lisätietoja OpenACC-tuesta saa CSC:n palvelupisteestä.
Kääntäjät ovat saatavilla NVIDIA HPC SDK -moduulin kautta:
Lisätietoa saatavilla olevista moduuleista löytyy module spider nvhpc
.
Ota OpenACC-tuki käyttöön lisäämällä -acc
flag kääntäjälle.
Koodin generoimiseksi tietylle kohdelaitteelle, kerro kääntäjälle minkä laskentakapasiteetin kohdelaitteella on. Puhtilla GPU:t (Ampere A100) tukevat laskentakapasiteettia 8.0.
Esimerkiksi C-koodin, joka käyttää OpenACC direktiivejä (example.c
), kääntäminen:
Lisätietoa siitä, mitä kääntäjä tekee OpenACC-direktiiveillä, saa käyttämällä -Minfo=all
.
Fortran-koodille:
C++-koodille:
OpenMP Offloading
Ota käyttöön OpenMP Offloading lisäämällä -mp=gpu
optio.
Esimerkiksi C-koodin kääntäminen OpenMP offloadingillä:
Fortran-koodille:
C++-koodille:
nvc++
-kääntäjä tukee koodeja, jotka sisältävät OpenACC:n, OpenMP Offloadingin ja C++-rinnakkaisalgoritmeja samassa koodissa, tällaisessa tapauksessa voit kääntää seuraavasti:
Ohjelmiston rakentaminen Spackilla
Spack on joustava pakettienhallintaohjelma, jota voi käyttää ohjelmiston asentamiseen supertietokoneilla sekä Linux- ja macOS-järjestelmissä. Perusmoduulipuu, joka sisältää kääntäjät, MPI-kirjastot ja monia CSC:n supertietokoneilla saatavilla olevista ohjelmistoista, on asennettu Spackin avulla.
CSC tarjoaa Mahtilla modulin spack/v0.17-user
, jota käyttäjät voivat käyttää rakentaakseen ohjelmistoja saatavilla olevien kääntäjien ja kirjastojen päälle Spackin avulla. On myös mahdollista asentaa erilaisia räätälöityjä versioita moduulipuussa saatavilla olevista paketeista erityistapauksiin. Katso täältä lyhyt opetusohjelma siitä, miten ohjelmistoja asennetaan CSC:n supertietokoneilla Spackin avulla.