-
Kääntäminen Puhtissa
Sovellusten kääntäminen Puhdissa
Yleiset ohjeet
- Käytä aina kun mahdollista kirjautumissolmun paikallista levyä ohjelmistojen kääntämiseen.
- Kääntäminen paikallisella levyllä on paljon nopeampaa ja siirtää kuormitusta pois jaetusta tiedostojärjestelmästä.
- Paikallinen levy siivotaan usein, joten siirrä tiedostosi muualle kääntämisen jälkeen.
CPU-sovellusten kääntäminen
Info
Intel uudelleenjärjesti kääntäjäkokonaisuutensa, ja Intel-kääntäjien nimet muuttuivat Puhtin Red Hat Enterprise Linux 8 (RHEL8) -päivityksen myötä. Lisäksi Intel muutti kääntäjiensä taustalla olevaa teknologiaa ja nimesi vanhat kääntäjät Intel Compilers Classic -nimellä.
C/C++- ja Fortran-sovelluksia voidaan kääntää Intelin tai GNU:n kääntäjäkokonaisuuksilla. Kääntäjäkokonaisuus valitaan moduulit -järjestelmän kautta, eli
tai
tai
Eri sovellukset toimivat paremmin eri kokonaisuuksilla, joten valinta on tehtävä tapauskohtaisesti.
Varsinaiset kääntäjäkomennot sarjallisen sovelluksen kääntämiseen näillä kokonaisuuksilla:
| Kääntäjäkokonaisuus | C | C++ | Fortran |
|---|---|---|---|
| Intel, uusi | icx | icpx | ifx |
| Intel, klassinen | icc | icpc | ifort |
| GNU | gcc | g++ | gfortran |
Intel- ja GNU-kääntäjät käyttävät erilaisia kääntäjävalitsimia. Suositellut perusoptimointi- liput on lueteltu alla olevassa taulukossa. On suositeltavaa aloittaa turvalliselta tasolta ja siirtyä sitten keskitasolle tai jopa aggressiiviselle tasolle varmistaen samalla, että tulokset ovat oikeita ja ohjelman suorituskyky on parantunut.
| Optimointitaso | Intel | GNU |
|---|---|---|
| Turvallinen | -O2 -xHost -fp-model precise | -O2 -march=native |
| Keskitaso | -O2 -xHost | -O3 -march=native |
| Aggressiivinen | -O3 -xHost -fp-model fast=2 -no-prec-div -fimf-use-svml=true -qopt-zmm-usage=high | -O3 -march=native -ffast-math -funroll-loops -mprefer-vector-width=512 |
Yksityiskohtainen luettelo Intel- ja GNU-kääntäjien valitsimista löytyy man-
sivuilta (man icc/ifort, man gcc/gfortran, kun vastaava ohjelmointiympäristö
on ladattu) tai kääntäjien käyttöoppaista (katso yllä olevat linkit).
Huomaa, että jotkin liput, esimerkiksi -no-prec-div ja -qopt-zmm-usage, ovat tällä hetkellä tuettuja vain Intelin klassisissa kääntäjissä (icc/icpx/ifort). Lisätietoa Intel-kääntäjien nykyisestä ja suunnitellusta lippujen tuesta voi tarkistaa komennolla icx -qnextgen-diag tai käyttöoppaista.
Kaikki sovellukset eivät myöskään hyödy AVX-512-vektorikäskykannasta
(-xHost tai -march=native). Voi olla hyvä ajatus testata myös AVX2:ta
(-xCORE-AVX2 tai -mavx2) ja verrata suorituskykyä.
Luettele kaikki saatavilla olevat kääntäjäkokonaisuuksien versiot:
MPI-sovellusten kääntäminen
Tällä hetkellä saatavilla on kaksi MPI-ympäristöä: openmpi ja intel-oneapi-mpi. Oletus on openmpi, jota
suositellaan myös aluksi.
Jos openmpi ei ole yhteensopiva sovelluksesi kanssa tai sen suorituskyky ei ole riittävä,
kokeile toista ympäristöä. MPI-ympäristöjä voidaan käyttää
komennolla module load, eli
MPI-sovelluksia käännettäessä käytä mpixxx-kääntäjäkääreitä, jotka vaihtelevat kääntäjäkokonaisuuden ja MPI-ympäristön mukaan:
| Kääntäjäkokonaisuus | openmpi | intel-oneapi-mpi |
|---|---|---|
| Intel | mpifort, mpicc, mpicxx | mpiifort, mpiicc, mpiicpc |
| GNU | mpif90, mpicc, mpicxx | yhteensopimaton |
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 |
|---|---|
| Intel | -qopenmp |
| GNU | -fopenmp |
GPU-sovellusten kääntäminen
CUDA on suositeltu ohjelmointimalli Nvidia-GPU:ille, ja CSC tarjoaa sen ympäristömoduulina. OpenACC- ja OpenMP offloading -ohjelmointimalleja voidaan myös käyttää, mutta ne eivät kuulu CSC:n tukemaan ohjelmistopinoon.
Tarkemmat ohjeet näiden kääntäjien lataamiseen ja käyttöön annetaan seuraavissa osioissa.
CUDA
CUDA-kääntäjä (nvcc) huolehtii CUDA-koodin kääntämisestä kohde-GPU-laitteelle
ja välittää loput ei-CUDA-kääntäjälle (eli gcc:lle).
Esimerkiksi CUDA 11.7 -ympäristön lataaminen yhdessä GNU-kääntäjän kanssa:
Jotta koodi tuotetaan tietylle kohdelaitteelle, kerro CUDA-
kääntäjälle, mitä laskentakyvykkyyttä kohdelaitteesi tukee. Puhdissa
GPU:t (Volta V100) tukevat laskentakyvykkyyttä 7.0. Määritä tämä valitsimella
-gencode arch=compute_70,code=sm_70.
Esimerkiksi CUDA-ytimen (example.cu) kääntäminen Puhdissa:
Periaatteessa on myös mahdollista kohdistaa useisiin GPU-arkkitehtuureihin toistamalla
-gencode useita kertoja eri laskentakyvykkyyksille. Tämä ei kuitenkaan ole
tarpeen Puhdissa, koska siellä on vain yksi GPU-tyyppi.
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 rajoittunut ja siitä saattaa 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ätietoa 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:
Kun moduulit on lisätty hakupuuhun, sinun on ladattava haluttu kääntäjien, MPI:n ja CUDAn yhdistelmä. Suositeltu yhdistelmä on nvhpc-hpcx-cuda, esimerkiksi:
OpenACC
Jotta koodi tuotetaan tietylle kohdelaitteelle, kerro kääntäjälle, mitä laskentakyvykkyyttä kohdelaitteesi tukee. Puhdissa GPU:t (V100) tukevat laskentakyvykkyyttä 7.0.
Esimerkiksi OpenACC-direktiivejä käyttävän C-koodin (example.c) kääntäminen:
Jos haluat tietoa siitä, mitä kääntäjä todella tekee OpenACC-
direktiiveillä, käytä valitsinta -Minfo=all.
Fortran-koodille:
C++-koodille:
OpenMP offloading
OpenMP offloadingin ottamiseksi käyttöön tarvitaan valitsin -mp=gpu
Esimerkiksi C-koodin kääntäminen OpenMP offloadingilla:
Fortran-koodille:
C++-koodille:
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:
Ohjelmistojen kääntäminen Spackilla
Spack on joustava paketinhallintatyökalu, jota voidaan käyttää ohjelmistojen asentamiseen supertietokoneille sekä Linux- ja macOS- järjestelmiin. Perusmoduulipuu, mukaan lukien kääntäjät, MPI-kirjastot ja monet CSC:n supertietokoneilla saatavilla olevista ohjelmistoista, on asennettu Spackilla.
CSC tarjoaa Puhdissa moduulin spack/v0.18-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 opas siihen, miten
ohjelmistoja asennetaan CSC:n supertietokoneilla Spackin avulla.