GPGPU (general-purpose computing on graphics processing units) es el uso de los procesadores gráficos para resolver problemas de índole general.
Uso de GPU en los trabajos
Hadware disponible
- 2 x Nvidia Tesla C2050 (CUDA 8.0) en nodo con Intel Xeon X5690@3.47GHz, 8 cores, 64GB RAM
- Nvidia A100 80GB (CUDA 12.1) en nodo AMD EPYC 9474F@3.60GHz, 96 cores, 1536GB RAM
Carga de los módulos necesarios
Es necesario cargar el entorno CUDA tanto para el desarrollo como para la ejecución de los trabajos. Es importante cargar la versión adecuada según el tipo de GPU que vayamos a utilizar: las tarjetas C2050 (fermi) solo soportan hasta CUDA 8.x, y para la A100 es necesario la versión 12.x para aprovechar todas sus funcionalidades.
Ejemplo:
module load cuda/8.0.61
Nota sobre compatibilidad con compiladores
CUDA 8.x soporta hasta la versión 5.y del compilador gcc.
CUDA 12.x soporta hasta la versión 12.y del compilador gcc.
Ambas versiones mencionadas de gcc se encuentran instaladas y se pueden cargar con module.
Envío de trabajos
Podemos enviar trabajos ayudándonos con el script slanzarv o bien creando un fichero de descripción de trabajo.
a) Mediante el script slanzarv
Al añadir el flag –gpu se envía el trabajo a la partición GPGPU y hace uso de una de las tarjetas gráficas. Opcionalmente, también se puede usar el parámetro –gputype para indicar el tipo de GPU requerida. Los valores válidos son a100 y fermi. En caso de usar fermi, también se puede indicar si se quieren usar ambas tarjetas con fermi:2.
Ejemplo:
#slanzarv --gpu --gputype a100 miprogramacuda
b) Manualmente
Para indicar que se pretende usar una GPU, es necesario añadir al archivo de descripción de trabajo la partición GPUGPU y el recurso GRES correspondiente.
#SBATCH --partition=GPGPU
#SBATCH --gres=gpu
Los valores permitidos para GRES son
- gpu GPU sin restringir el modelo
- gpu:a100 Selecciona la A100
- gpu:fermi Selecciona una de las C2050
- gpu:fermi:2 Selecciona ambas C2050