Compilazione con supporto GPU¶
FrontISTR può essere eseguito su GPU utilizzando le funzionalità OpenACC di NVIDIA HPC SDK. Questa pagina descrive la procedura di compilazione con supporto GPU abilitato e il relativo metodo di esecuzione.
Per le librerie richieste come prerequisiti, consultare Dipendenze obbligatorie e opzionali.
Procedura di compilazione¶
Utilizzare i compilatori NVIDIA HPC SDK (nvc, nvc++, nvfortran). In un ambiente cluster HPC, prima della compilazione è necessario caricare NVIDIA HPC SDK seguendo il manuale dell’ambiente (ad esempio: module load nvhpc).
Le librerie opzionali come METIS, MUMPS e MKL non supportano la GPU, pertanto negli esempi di comando seguenti sono disabilitate (ad esempio WITH_METIS=OFF).
Come descritto in Compilazione con CMake, quando come compilatori vengono specificati quelli di NVIDIA HPC SDK (nvc, nvc++, nvfortran), in CMakeLists.txt viene impostato -gpu=ccnative,mem:managed. ccnative è un’opzione che rileva automaticamente la GPU dell’ambiente di compilazione e seleziona il target ottimale, quindi non sono necessarie modifiche manuali specifiche per ogni ambiente. mem: è un’opzione che specifica la gestione della memoria GPU ed è obbligatoria perché l’implementazione GPU di FrontISTR presuppone l’uso della Unified Memory. mem:managed è l’impostazione predefinita per gli ambienti generali in cui CPU e GPU dispongono di memorie separate.
Nota: nelle architetture come Miyabi (GH200), in cui CPU e GPU sono integrate tramite NVLink, viene utilizzato
mem:unifiedal posto dimem:managed; modificare pertanto l’impostazione in base all’ambiente utilizzato (-gpu=ccnative,mem:unified).
OpenACC + OpenMP (senza 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¶
Quando si utilizza MPI, i compilatori wrapper MPI (come mpicc) devono essere configurati in modo da richiamare internamente i compilatori NVIDIA HPC SDK (come nvc). In molti ambienti cluster HPC, il caricamento di NVIDIA HPC SDK e delle librerie MPI mediante comandi come module load configura automaticamente questa situazione. Tuttavia, le versioni consigliate e le procedure di caricamento variano a seconda dell’ambiente; per i dettagli, consultare il manuale utente o altra documentazione dell’ambiente utilizzato.
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
Esecuzione¶
La procedura di esecuzione di una build GPU è sostanzialmente la stessa di una build CPU. Per la procedura di esecuzione generale, consultare la Guida all’esecuzione.
Profilazione¶
I dati di profilazione possono essere raccolti mediante NVIDIA Nsight Systems (nsys).