Compilarea cu suport GPU¶
FrontISTR poate rula pe GPU-uri folosind funcționalitatea OpenACC din NVIDIA HPC SDK. Această pagină descrie modul de compilare a FrontISTR cu suport GPU activat și modul de executare.
Pentru bibliotecile necesare în prealabil, consultați Dependențe obligatorii și opționale.
Procedura de compilare¶
Utilizați compilatoarele NVIDIA HPC SDK (nvc, nvc++ și nvfortran). Într-un mediu de cluster HPC, NVIDIA HPC SDK trebuie încărcat înainte de compilare conform manualului mediului (de exemplu, module load nvhpc).
Bibliotecile opționale precum METIS, MUMPS și MKL nu acceptă GPU-uri, astfel încât sunt dezactivate în exemplele de comenzi de mai jos (de exemplu, WITH_METIS=OFF).
Așa cum este descris în Compilarea cu CMake, atunci când pentru compilatoare sunt specificate NVIDIA HPC SDK (nvc, nvc++, nvfortran), în CMakeLists.txt este setat -gpu=ccnative,mem:managed. ccnative este o opțiune care detectează automat GPU-ul din mediul de compilare și selectează ținta optimă, astfel încât nu sunt necesare modificări manuale pentru fiecare mediu. mem: este o opțiune care specifică modul în care este gestionată memoria GPU; este necesară deoarece implementarea GPU a FrontISTR presupune Unified Memory. mem:managed este setarea implicită pentru mediile generale în care CPU și GPU au memorii separate.
Notă: Pe arhitecturi precum Miyabi (GH200), unde CPU și GPU sunt integrate prin NVLink, se utilizează
mem:unifiedîn loc demem:managed; modificați setarea în funcție de mediul utilizat (-gpu=ccnative,mem:unified).
OpenACC + OpenMP (fără MPI)¶
mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
-DWITH_MPI=OFF -DWITH_OPENMP=ON \
-DWITH_METIS=OFF -DWITH_MUMPS=OFF \
-DWITH_MKL=OFF -DWITH_LAPACK=OFF \
-DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
..
make -j
OpenACC + OpenMP + MPI¶
Când se utilizează MPI, compilatoarele wrapper MPI (de exemplu mpicc) trebuie configurate astfel încât să invoce intern compilatoarele NVIDIA HPC SDK (de exemplu nvc). În multe medii de cluster HPC, încărcarea NVIDIA HPC SDK și a bibliotecilor MPI cu comenzi precum module load asigură automat această configurare. Totuși, versiunile recomandate și procedurile de încărcare diferă în funcție de mediu, astfel încât pentru detalii consultați manualul utilizatorului sau alte documente specifice fiecărui mediu.
mkdir build
cd build
CC=mpicc CXX=mpic++ FC=mpif90 cmake \
-DWITH_MPI=ON -DWITH_OPENMP=ON \
-DWITH_METIS=OFF -DWITH_MUMPS=OFF \
-DWITH_MKL=OFF -DWITH_LAPACK=OFF \
-DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
..
make -j
Execuție¶
Procedura de execuție pentru o versiune compilată pentru GPU este în principiu aceeași ca pentru o versiune CPU. Pentru procedurile generale de execuție, consultați Ghidul de execuție.
Profilare¶
Datele de profilare pot fi colectate folosind NVIDIA Nsight Systems (nsys).