Domingo Giménez Cánovas
DOCENCIA 2018/2019
Metodología de la Programación Paralela
cuarto curso del Grado en Ingeniería Informática
3 créditos teóricos y 3 prácticos, colaboración en prácticas de Jesús Cámara, becario de investigación, jcamara@um.es Primer cuatrimestre
Las clases son en el aula D.02 del aulario Norte (el aula ha cambiado, de nuevo y esperamos que por última vez!!), los jueves de 15:30 a 17:30.
El horario de prácticas es los martes y jueves de 17:50 a 19:30 (cada alumno elige una sesión), en el laboratorio 2.1. Se usarán también equipos del Laboratorio de Computación Científica.
Dado el alto número de alumnos, está por determinar la organización de las sesiones de prácticas en laboratorio. Hay que mandar al profesor (a domingo@um.es o a través del aula virtual) antes del 25 de septiembre las preferencias respecto a la sesión de prácticas presenciales (martes o jueves) y los componentes del grupo (preferiblemente grupos de dos alumnos, aunque se pueden hacer de forma individual si no se encuentra compañero).
Tutorías lunes 11:30-14:00, jueves 10:30-14:00 (mejor quedar antes por correo, para esas horas u otras)
Sesiones y transparencias. Básicamente se seguirá el libro: Francisco Almeida, Domingo Giménez, José Miguel Mantas, Antonio M. Vidal: Introducción a la Programación Paralela, Paraninfo Cengage Learning, 2008 y los programas ejemplo que lo acompañan.
Planificación 2018-2019 (se irán incluyendo las transparencias antes de las correspondientes sesiones. Mientras tanto y de forma orientativa, se deja al final la planificación y las transparencia del curso 2017-2018):
13 septiembre:
Presentación. (Se puede ver partes de las presentaciones de hace dos cursos: Keynote (en mp4) de Vladimir Voevodin en Euro-EDUPAR 2015 y de la charla del día de San Alberto 2014 Computación de altas prestaciones, una herramienta en ayuda de la ciencia (en mp4), y resultados del curso anterior (en mp4), y Presentación del grupo de Computación Científica y Programación Paralela)
No hay sesión de prácticas esta semana.
18 septiembre, martes. En horas de la sesión de prácticas (17:45) se revisará la parte final de la sesión del día 13 y la presentación de la práctica final del día 20 con los alumnos que no pueden asistir a esas sesiones. En el despacho del profesor, en el Departamento de Informática y Sistemas.
20 septiembre:
Nociones básicas de programación paralela. Códigos.
Presentación de la práctica final.
27 septiembre: Programación en memoria compartida: OpenMP, ejemplos, Códigos del concurso básico (antes PP_FP2014) en el mooshak de Heterosolar, OpenMP4.5
Prácticas: Entornos básicos de programación paralela, no se evalúa.
4 octubre: Programación por paso de mensajes: MPI.
Prácticas (a partir de esta semana las sesiones son jueves y el martes siguiente, salvo que se indique lo contrario, jueves 4 y martes 9): OpenMP.
11 octubre: Programación híbrida y heterogénea. Programación de manycores, CUDA, MIC. Ejemplo Xeon Phi
Prácticas: Revisión OpenMP.
18 octubre: Análisis de algoritmos.
Prácticas (jueves 18 y martes 23): MPI.
25 octubre: Metodología.
Prácticas: Revisión MPI.
29 octubre a 2 noviembre: no hay clase de teoría ni de prácticas
8 noviembre: Esquemas algorítmicos: Paralelismo de datos-Particionado de datos.
Prácticas (jueves 8, martes 13): CUDA y Xeon Phi.
12 a 16 de noviembre: no hay clase de teoría por San Alberto
Prácticas: Revisión de CUDA y Xeon Phi.
22 noviembre: Esquemas algorítmicos: Algoritmos relajados-Paralelización síncrona.
Prácticas (jueves 22, martes 27): Esquemas Algorítmicos.
29 noviembre: Esquemas algorítmicos: Algoritmos en árbol y grafos-Pipeline.
Prácticas: Revisión de Esquemas Algorítmicos.
13 diciembre: Esquemas algorítmicos: Paralelización de Divide y Vencerás-Paralelización de Programación Dinámica
Prácticas (martes 11 ¡atención, cambiada fecha del martes!, jueves 13): Ensayo examen.
20 diciembre: Esquemas algorítmicos: Paralelización de problemas de recorrido de árboles-Trabajadores replicados y esquema maestro esclavo.
Prácticas (esta semana): Se dejará solución del ensayo de examen en esta página, y los alumnos interesados en revisarlo se pondrán en contacto con el profesor a lo largo de esta semana.
Fechas exámenes:
24 enero, tarde.
27 mayo, tarde.
1 julio, mañana.
En estas fechas se realizará la prueba práctica en laboratorio, y serán las fechas máximas de entrega de los trabajos en cada convocatoria, aunque para cada tarea a realizar se indicará la fecha de entrega correspondiente.
Los trabajos y prácticas a realizar son los mismos para todas las convocatorias.
Soluciones de prácticas y exámenes:
2017/2018: Soluciones de la práctica de ensayo para la prueba práctica: jueves, martes
Examen práctico de Enero 2018: enunciado, solución
Examen práctico de Junio 2018: enunciado y solución
2018/2019: Soluciones de la práctica de ensayo de diciembre 2018: enunciado y solución de jueves y martes
2018/2019: Examen práctico 24 de enero, solución
2018/2019: Solución examen práctico 27 de mayo
2018/2019: Examen práctico 1 de julio
Información diversa
Información sobre MPI: Message Passing Interface Forum y mpich.
Las 500 máquinas más rápidas: TOP500
Introducción a la programación paralela (4 horas): Necesidad de la programación paralela, ventajas e inconvenientes, Modelos de computadores paralelos
Modelos de programación paralela (8 horas): Modelos de programación; Programación en memoria compartida, OpenMP; Programación por paso de mensajes, MPI, programación de GPU.
Análisis de algoritmos y metodología (4 horas): Tiempo de ejecución, speed-up, eficiencia y coste; Estudio de escalabilidad; Estudio experimental; Descomposición, agrupación, asignación.
Diseño de algoritmos paralelos (10 horas): Paralelismo / Particionado de Datos; Esquemas en árbol y grafo; Algoritmos relajados; Computación pipeline; Paralelismo síncrono; Maestro-esclavo, granja de procesos y trabajadores replicados.
Ian Foster: Designing and Building Parallel Programs. 1995
Prasad, Gupta, Rosenberg, Sussman, and Weems. Topics in Parallel and Distributed Computing: Introducing Concurrency in Undergraduate Courses, 1st Edition, Morgan Kaufmann, 2015.
Kumar, Grama, Gupta, Karypis: Introduction to Parallel Computing. Design and Analysis of Algorithms. The Benjamin Cumming Publishing Company. 1994
Alexey L. Lastovetsky: Parallel Computing on Heterogeneous Networks. Wiley, 2003
Michael J. Quinn. Parallel Programming in C with MPI and OpenMP. McGrawHill, 2004
Andrews: Foundations of Multithreaded, Parallel, and Distributed Programming. Addison-Wesley, 2000
Rajkumar Buyya (Editor): High Performance Cluster Computing, Vol 2, Programming and Applications. Prentice Hall. 1999
Barry Wilkinson, Michael Allen: Parallel programming. Prentice-Hall. 1999
Rob H. Bisseling: Parallel Scientific Computation. Oxford University Press, 2004
Evaluación
Prácticas, trabajo y examen:
Prácticas básicas de entornos y algoritmos paralelos (40% en la nota final en evaluación CONTINUA; 20% en evaluación NO CONTINUA).
Examen de programación OpenMP, MPI y MPI+OpenMP (30% y 40% en la nota final).
Trabajo de programación en OpenMP, MPI y MPI+OpenMP y estudio teórico y experimental para un problema científico (30% y 40% en la nota final).
Se puede seguir el sistema de evaluación continua, con participación en las sesiones de prácticas. Sólo es válido para la convocatoria de febrero.
Habrá cinco sesiones prácticas en grupos de dos alumnos. Cada sesión tendrá una valoración de 5% en la nota final.
La semana siguiente a cada sesión práctica habrá otra de revisión, que será individual y tendrá un peso de 3% en la nota final.
Los alumnos que NO sigan la evaluación continua realizarán de forma individual los mismos trabajos de esas sesiones prácticas, teniendo como plazo máximo de entrega la fecha del examen de la convocatoria correspondiente.
Los alumnos pueden decidir en cualquier momento pasar de evalución continua a no continua, pudiendo guardar si así lo desean la nota (escalada) que lleven en evaluación continua.