Introducción a la Programación Paralela

Coordinador del curso: Profesor Eduard Ayguadé. Director Asociado del Departamento de Computer Sciences del Barcelona Supercomputing Center (BSC) y profesor del Departamento de Arquitectura de Computadores de la Universidad Politecnica de Catalunya (UPC). Instructor: Issac Rudomin. Investigador del Barcelona Supercomputing Center (BSC). Apoyo técnico: Javier Cabezas. Investigador Junior del Barcelona Supercomputing Center (BSC).

Resumen del curso: En este curso se cubren los aspectos fundamentales relacionados con la programación paralela, fundamental hoy en día para sacar provecho de las arquitecturas multi-núcleo y cluster que constituyen los computadores actuales. En primer lugar se describen las principales métricas que nos permiten evaluar el paralelismo y rendimiento de una estrategia de paralelización y se introducen algunas herramientas que nos ayudaran en el proceso de análisis de la aplicación. Se presentan los dos modelos de programación comunmente utilizados en la comunidad de HPC, OpenMP y MPI, orientados a la programación de arquitecturas de memoria compartida y distribuida, respectivamente. El curso tiene una gran componente pràctica y se centra en el uso del lenguaje de programación C, si bien ambos OpenMP y MPI ofrecen interfaces para Fortran y C++. Finalmente el curso tambien incluye la presentacion del modelo de programación OmpSs desarrollado en el Barcelona Supercomputing Center, el cual ofrece un modelo de ejecución dataflow (basado en la disponibilidad de los datos) que estará disponible en proximas definiciones de OpenMP.

Horario: 10:00am - 14:00pm.

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

Presentación del curso (PDF)

Temario:

1. Introducción al cómputo en paralelo y parámetro para mejorar el rendimiento
1.1 Breve descripción general de las arquitecturas paralelas
1.2 Descomposición de tareas, paralelismo, aceleración y la Ley de Amdalh
1.3 Ejercicio: análisis de una aplicación simple de difusión de calor (introducción a Tareador y Paraver)
2. Introducción a MPI
2.1 Creación de procesos e identificación
2.2 Comunicación punto a punto, comunicación colectiva
2.3 Comunicaciones bloqueantes y no-bloqueantes
2.4: Ejercicio: difusión del calor en MPI
3. Introducción a OpenMP
3.1 Hilos, regiones paralelas y construcciones de trabajo compartido
3.2 Mecanismos de sincronización en OpenMP
3.3 Tasking en OpenMP
3.4 Ejercicio: difusión del calor en OpenMP
3.5 Programación usando una aproximación híbrida de MPI/OpenMP
4. Introducción al modelo de programación OmpSs
4.1 El modelo de ejecución OmpSs
4.2 Clausulas de datos para tasking en OmpSs
4.3 Ejercicio: difusión de calor en OmpSs (solver Gauss-Seidel)