Vai al contenuto

Translation update pending

The Italian translation may be out of date because the Japanese source has changed. The existing translation remains available while it is being updated.

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:unified al posto di mem: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

Senza OpenACC (versione CPU)

Per compilare con i compilatori NVIDIA HPC SDK una versione CPU che non utilizza OpenACC, specificare -DNVHPC_NO_ACC=ON. In questo caso -acc, -Minfo=accel e -gpu=ccnative,mem:managed non vengono impostati. Questa versione può essere utilizzata per confrontare i risultati di calcolo con quelli di una versione GPU compilata con gli stessi compilatori.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
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).

Senza MPI

nsys profile -t cuda -s none -o profile_result /path/to/FrontISTR/build/fistr1/fistr1

Con MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <numero_di_processi> /path/to/FrontISTR/build/fistr1/fistr1 -t 8