Introducción a Programación en CUDA

Coordinador del curso: Profesor Nacho Navarro. Jefe del Área de Aceleradores para HPC, del Departamento de Computer Sciences del Barcelona Supercomputing Center (BSC). Instructor: Isaac Gelado. Investigador del Barcelona Supercomputing Center (BSC). Apoyo técnico: Javier Cabezas. Investigador Junior del Barcelona Supercomputing Center (BSC).

Nivel: PRINCIPIANTES: dirigido a asistentes de áreas heteregéneas

Prerequisitos: Conocimientos básicos de programación en C/C++. Los asistentes necesitarán llevar sus propios equipos de cómputo con algún cliente SSH.

Objetivos del curso: El objetivo de este curso es dotar a los estudiantes con el conocimiento y la experiencia práctica para el desarrollo de aplicaciones de software para procesadores con capacidad de procesamiento paralelo masivo como los GPU's. Programar de manera eficiente estos aceleradores requiere de algunos conocimientos previos en principios de programación paralela, así como de modelos de paralelismo, modelos de comunicación y sus limitaciones asociadas a los recursos. Los asistentes al curso son estudiantes avanzados e investigadores que quieran desarrollar aplicaciones usando GPU's, así como aquellos que quieran desarrollar herramientas y futuras implementaciones para procesadores paralelos.

Los estudiantes asistentes al curso aprenderán cómo programar y alcanzar un buen desempeño y escalabilidad a través de las generaciones actuales y futuras de procesadores paralelos masivos. Para esto requerirán de conocimientos técnicos que les permitan alcanzar las metas mencionadas aprendiendo la teoría y realizando las prácticas necesarias para los algoritmos paralelos, evaluando las características y restricciones de la arquitectura GPU, y haciendo un uso correcto de la API de CUDA y herramientas asociadas.

Horario: 16:00pm - 20:00pm.

Duración: 20 horas (4 horas diarias durante 5 días)

Programa:

1. Intruducción a CUDA
1.1 Procesadores paralelos masivos
1.2 CUDA y computación heterogénea
2. Modelo de Ejecución Paralela en CUDA
2.1 Modelos de ejecución paralela
2.2 Ejemplo: suma vectorial
2.3 Hilos y bloques de hilos
2.4 Ejemplo: Multiplicación de matrices
3. Modelo de Memoria en CUDA
3.1 Perspectiva del programador de las memorias de CUDA
3.2 Barreras de sincronización
3.3 Ejemplo: multiplicacón de matrices por bloques
4. Ejemplos de paralelizacón con CUDA
4.1 Convolución 2D y plantillas 3D
4.2 Reducciones y búsquedas de prefijos
4.3 Operaciones atómicas e histogramas
4.4 Multiplicación de matrices ralas
5. Cálculo y Comunicación de Datos
5.1 Consideraciones sobre el rendimiento
5.2 Traslapando cálculos y comunicación
5.3 Streaming asíncrono

Las sesiones del curso consistirán en una mezcla de las presentaciones de los típicos anteriores y las prácticas en laboratorio. Los laboratorios proveeran la experiencia práctica en programación, compilación y ejecución de códigos CUDA. Iniciando por los ejemplos vistos en las clases, que reforzarán una o varias de las técnicas algorítmicas y optimizaciones para el rendimiento.