Build com suporte a GPU¶
O FrontISTR pode ser executado em GPUs usando os recursos OpenACC do NVIDIA HPC SDK. Esta página descreve como fazer o build do FrontISTR com suporte a GPU habilitado e como executá-lo.
Para as bibliotecas necessárias, consulte Dependências obrigatórias e opcionais.
Procedimento de build¶
Use os compiladores do NVIDIA HPC SDK (nvc, nvc++ e nvfortran). Em um ambiente de cluster HPC, o NVIDIA HPC SDK deve ser carregado antes do build, de acordo com o manual do ambiente (por exemplo, module load nvhpc).
Bibliotecas opcionais como METIS, MUMPS e MKL não oferecem suporte a GPU; por isso, são desativadas nos exemplos de comando abaixo (por exemplo, WITH_METIS=OFF).
Como descrito em Build com CMake, quando o NVIDIA HPC SDK (nvc, nvc++, nvfortran) é especificado para os compiladores, -gpu=ccnative,mem:managed é definido no CMakeLists.txt. ccnative é uma opção que detecta automaticamente a GPU no ambiente de build e seleciona o alvo ideal, portanto não são necessárias alterações manuais para cada ambiente. mem: é uma opção que especifica como a memória da GPU é tratada; ela é obrigatória porque a implementação de GPU do FrontISTR pressupõe Unified Memory. mem:managed é a configuração padrão para ambientes gerais em que CPU e GPU possuem memórias separadas.
Nota: Em arquiteturas como o Miyabi (GH200), em que CPU e GPU são integradas via NVLink, em vez de
mem:managedusa-semem: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 usar MPI, os compiladores wrapper do MPI (como mpicc) devem ser configurados para invocar internamente os compiladores do NVIDIA HPC SDK (como nvc). Em muitos ambientes de cluster HPC, carregar o NVIDIA HPC SDK e as bibliotecas MPI com comandos como module load fornece essa configuração automaticamente. Entretanto, as versões recomendadas e os procedimentos de carregamento variam conforme o ambiente; consulte o manual do usuário ou outra documentação do respectivo 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 um build para GPU é basicamente o mesmo de um build para CPU. Para os procedimentos gerais de execução, consulte o Guia de execução.
Profiling¶
Os dados de profiling podem ser coletados usando o NVIDIA Nsight Systems (nsys).