Temario del curso avanzado de GPUs. Programación CUDA

PRIMER DÍA:

1. INTRODUCCIÓN A LA PROGRAMACIÓN DE LA GPU PARA PROPÓSITO GENERAL.

1. La foto de familia de CUDA: Aplicaciones, lenguajes, hardware, herramientas.
2. Las 3 cualidades que han hecho a la GPU un procesador único.
3. Los pilares de CUDA.
4. Computación heterogénea: CPUs + GPUs.
5. Un sencillo flujo de procesamiento.
6. Evolución de CUDA.

2. BIBLIOGRAFIA Y HERRAMIENTAS DISPONIBLES EN LA WEB.

SEGUNDO DÍA:

3. ARQUITECTURA CUDA.

1. El modelo hardware de CUDA.
2. Primera generación: Tesla (2007-09).
3. Segunda generación: Fermi (2010-11).
4. Tercera generación: Kepler (2012-14).
5. Cuarta generación: Maxwell (2014-16).
6. Quinta generación: Pascal (2016-18).
7. Síntesis generacional.

TERCER DÍA:

4. PROGRAMACIÓN CUDA.

1. El modelo de programación.
2. Estructura de un programa CUDA: Kernels, bloques, hilos, mallas.
3. Correspondencia entre el hardware y el software de CUDA.
4. Recursos y limitaciones según el modelo de GPU.
5. La jerarquía de memoria en la GPU.
6. Partición de datos y computaciones.

5. SINTAXIS.

1. Elementos básicos.
2. Lista de extensiones sobre el lenguaje C.
3. La interacción entre la CPU y la GPU.
4. Variables y funciones intrínsecas.
5. Un par de ejemplos de kernels sencillos.

CUARTO DÍA:

6. COMPILACIÓN.

1. El proceso global de compilación.
2. Conociendo el uso de los recursos.
3. La herramienta CUDA Occupancy Calculator.

7. EJEMPLOS DE KERNELS CUDA.

1. Suma de vectores.
2. Kernels patrón (stencils).
3. Invertir el orden de los elementos de un vector (ReverseArray).

QUINTO DÍA:

7. EJEMPLOS DE KERNELS CUDA (continuación).

4. Producto de matrices. Optimizaciones diversas.

EXPLICACION DE LA PRIMERA PRACTICA (a realizar sobre la Web GPU).

SEXTO DÍA:

8. ALTERNATIVAS PARA LA PROGRAMACIÓN DE GPUs.

1. Librerías y herramientas CUDA.
2. Orientar CUDA hacia otras plataformas.
3. Utilizar CUDA desde otros lenguajes.
4. Uso de directivas: OpenACC.
5. Ejemplo de programación: Seis formas de implementar SAXPY EN GPU.

9. LA GPU PASCAL A FONDO.

1. Rasgos de la arquitectura.
2. La memoria y el transporte de datos.
3. Los cores.
4. Funcionamiento del multiprocesador: Front-end y back-end.
5. Mejoras funcionales: Vectorización y memoria 3D.

SÉPTIMO DÍA:

10. EJEMPLOS DE OPTIMIZACIÓN.

1. Ejecución dependiente de los datos.
2. Algoritmos paralelos recursivos.
3. Llamadas a librerías desde los kernels.
4. Simplificar la división CPU/GPU.

EXPLICACIÓN DE LA COMPETICIÓN Y CÓMO CONCURSAR (a realizar sobre la Web Kepler).

11. CUDA 6.0, 7.0 y 8.0.

1. Últimas novedades de CUDA.
2. Soporte para CUDA 6.0, 7.0 y 8.0.
3. Nuevas herramientas para desarrollo, depuración y optimización.
4. GPUDirect y RDMA.
5. Memoria unificada. Ejemplos.

OCTAVO DÍA:

12. La GPU Volta.

1. Mejoras en rendimiento.
2. Mejoras en consumo.
3. Modelos comerciales.

REALIZACION DE PRACTICAS CUDA ON-LINE A TRAVÉS DE NUESTRA PLATAFORMA WEB.