Compilação com suporte de GPU¶
O FrontISTR pode ser executado em GPUs utilizando a funcionalidade OpenACC do NVIDIA HPC SDK. Esta página descreve como compilar o FrontISTR com suporte de GPU ativado e como o executar.
Para as bibliotecas necessárias, consulte Dependências obrigatórias e opcionais.
Procedimento de compilação¶
Utilize os compiladores do NVIDIA HPC SDK (nvc, nvc++ e nvfortran). Num ambiente de cluster HPC, o NVIDIA HPC SDK tem de ser carregado antes da compilação, de acordo com o manual do ambiente (por exemplo, module load nvhpc).
As bibliotecas opcionais, como METIS, MUMPS e MKL, não suportam GPUs, pelo que são desativadas nos exemplos de comandos abaixo (por exemplo, WITH_METIS=OFF).
Como descrito em Compilação com CMake, quando o NVIDIA HPC SDK (nvc, nvc++, nvfortran) é especificado para os compiladores, -gpu=ccnative,mem:managed é definido em CMakeLists.txt. ccnative é uma opção que deteta automaticamente a GPU no ambiente de compilação e seleciona o alvo ideal, pelo que não são necessárias alterações manuais para cada ambiente. mem: é uma opção que especifica como é tratada a memória da GPU; é obrigatória porque a implementação GPU do FrontISTR pressupõe Unified Memory. mem:managed é a configuração predefinida para ambientes gerais em que a CPU e a GPU possuem memórias separadas.
Nota: Em arquiteturas como Miyabi (GH200), nas quais a CPU e a GPU estão integradas através de NVLink,
mem:manageddeve ser substituído pormem:unified; altere a configuração de acordo com o ambiente utilizado (-gpu=ccnative,mem:unified).
OpenACC + OpenMP (sem 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¶
Ao utilizar MPI, os compiladores wrapper de MPI (como mpicc) têm de estar configurados para invocar internamente os compiladores do NVIDIA HPC SDK (como nvc). Em muitos ambientes de cluster HPC, o carregamento do NVIDIA HPC SDK e das bibliotecas MPI através de comandos como module load fornece automaticamente esta configuração. No entanto, as versões recomendadas e os procedimentos de carregamento variam consoante o ambiente, pelo que deverá consultar o manual do utilizador ou outra documentação de cada ambiente para obter detalhes.
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ção¶
O procedimento de execução de uma compilação para GPU é, em termos gerais, o mesmo que para uma compilação para CPU. Para procedimentos gerais de execução, consulte o Guia de execução.
Profiling¶
Os dados de profiling podem ser recolhidos utilizando o NVIDIA Nsight Systems (nsys).