Compilación con soporte para GPU¶
FrontISTR puede ejecutarse en GPU mediante la funcionalidad OpenACC de NVIDIA HPC SDK. Esta página describe cómo compilar FrontISTR con soporte para GPU habilitado y cómo ejecutarlo.
Para las bibliotecas necesarias, consulte Dependencias obligatorias y opcionales.
Procedimiento de compilación¶
Utilice los compiladores de NVIDIA HPC SDK (nvc, nvc++ y nvfortran). En un entorno de clúster HPC, NVIDIA HPC SDK debe cargarse antes de compilar de acuerdo con el manual del entorno (por ejemplo, module load nvhpc).
Las bibliotecas opcionales como METIS, MUMPS y MKL no son compatibles con GPU, por lo que se deshabilitan en los ejemplos de comandos siguientes (por ejemplo, WITH_METIS=OFF).
Como se describe en Compilación con CMake, cuando se especifican los compiladores de NVIDIA HPC SDK (nvc, nvc++, nvfortran), en CMakeLists.txt se establece -gpu=ccnative,mem:managed. ccnative es una opción que detecta automáticamente la GPU del entorno de compilación y selecciona el destino óptimo, por lo que no es necesario realizar cambios manuales para cada entorno. mem: es una opción que especifica cómo se gestiona la memoria de la GPU; es necesaria porque la implementación para GPU de FrontISTR presupone Unified Memory. mem:managed es la configuración predeterminada para entornos generales en los que la CPU y la GPU tienen memorias separadas.
Nota: En arquitecturas como Miyabi (GH200), donde la CPU y la GPU están integradas mediante NVLink, en lugar de
mem:managedse utilizamem:unified; cambie la configuración de acuerdo con el entorno utilizado (-gpu=ccnative,mem:unified).
OpenACC + OpenMP (sin 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¶
Al utilizar MPI, los compiladores wrapper de MPI (como mpicc) deben estar configurados para invocar internamente los compiladores de NVIDIA HPC SDK (como nvc). En muchos entornos de clúster HPC, cargar NVIDIA HPC SDK y las bibliotecas MPI mediante comandos como module load proporciona automáticamente esta configuración. Sin embargo, las versiones recomendadas y los procedimientos de carga varían según el entorno, por lo que debe consultar el manual de usuario u otra documentación de cada entorno para obtener detalles.
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
Ejecución¶
El procedimiento de ejecución de una compilación para GPU es básicamente el mismo que el de una compilación para CPU. Para los procedimientos generales de ejecución, consulte la Guía de ejecución.
Perfilado¶
Los datos de perfilado pueden recopilarse mediante NVIDIA Nsight Systems (nsys).