FACULTAD DE INFORMÁTICA DPTO. DE ARQUITECTURA Y TECNOLOGÍA DE COMPUTADORES, KAT-ATC Laboratorio de Paralelismo www.sc.ehu.es/arpar Javier Muguerza j.muguerza@ehu.es Agustin Arruabarrena agustin.arruabarrena@ehu.es A lo largo de la asignatura Arquitecturas Paralelas hemos estudiado la estructura de los sistemas paralelos —máquinas de memoria común y máquinas de memoria distribuida— así como los principales problemas nuevos que hay que resolver para poder disponer de máquinas paralelas de alto rendimiento —coherencia de los datos, sincronización de procesos, red de comunicación…—. Junto con ello, hemos estudiado algunas de las técnicas más habituales para poder ejecutar en paralelo, de manera eficiente, programas (bucles) de alto coste computacional: análisis de dependencias, optimizaciones, scheduling de bucles… En esta asignatura (9 créditos: 4 t + 5 p) vamos a trabajar con las herramientas más extendidas para programar aplicaciones en paralelo: OpenMP en el caso máquinas de memoria común y MPI para máquinas de memoria distribuida, junto con UPC, una extensión de C para sistemas paralelos de memoria común distribuida. Mediante el uso de diferentes programas ejemplo, iremos viendo las posibilidades de ambos APIs, así como una metodología de programación en paralelo. La evaluación de la asignatura se hará en base a la asistencia y participación en las sesiones de clase/laboratorio junto con los trabajos prácticos obligatorios realizados durante el curso; la nota se puede completar, de manera optativa, desarrollando, de manera individual, alguna aplicación paralela o realizando un estudio sobre otros temas de interés, tales como organización y gestión de clusters, grid computing, protocolos de comunicación de alto rendimiento, entrada/salida paralela, tolerancia a fallos, herramientas de desarrollo, etc. PROGRAMA de la ASIGNATURA 0. REVISIÓN DE CONCEPTOS (breve repaso) 1.1 Estructura de los sistemas paralelos: máquinas SMP, DSM y MPP; Clusters. Situación actual. 1.2 Infraestructura de comunicaciones. Paso de mensajes. Protocolos de comunicación de alto rendimiento. 1.3 Coherencia de los datos. Sincronización de procesos. Modelo de consistencia de la memoria. 1.4 Modelos de paralelismo. Análisis de dependencias. Principales optimizaciones. 1.5 Rendimiento del sistema paralelo. 1.6 Ejercicios. Redacción de informes técnicos; presentación de resultados. 1. PROGRAMACIÓN DE SISTEMAS DE MEMORIA COMPARTIDA (SMP): OpenMP. 2.1 2.2 2.3 2.4 2.5 2.6 Introducción. Regiones paralelas. Gestión de threads; ámbito de las variables. Reparto de tareas. Paralelización y planificación de bucles. Secciones paralelas. Sincronización de los threads: secciones críticas, cerrojos, eventos y barreras. Otras cuestiones: carreras y deadlocks. Análisis del rendimiento. Ejercicios prácticos. 3. PROGRAMACIÓN DE SISTEMAS DE MEMORIA DISTRIBUIDA: MPI. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Introducción. Funciones MPI básicas: inicio y control de procesos; envío y recepción de mensajes. Otros modos de comunicación punto a punto: síncrona, inmediata... Funciones de comunicación colectiva. Cálculo en grupo. Sincronización. Tipos de datos derivados: vector, indexed, struct…. Empaquetamiento de datos. Comunicadores y topologías. Entrada/salida paralela (introducción) Otras cuestiones: rendimiento, debugging, profiling... Ejercicios prácticos. 4. TIPOS DE PROBLEMAS PARALELOS. UNA METODOLOGÍA DE DESARROLLO DE PROGRAMAS PARALELOS. 5. OTRAS ALTERNATIVAS: UPC, unified parallel C. 5.1 5.2 5.3 5.4 5.5 5.6 6. Introducción. Variables y punteros. Movimiento de datos. Memoria dinámica. Reparto de tareas (work sharing). Sincronización y consistencia. Operaciones colectivas. Conclusiones. (OPTATIVO) TRABAJOS COMPLEMENTARIOS. BIBLIOGRAFÍA (para cuestiones específicas del tema 1, ver bibliografía de la asignatura Arquitecturas Paralelas) 1. 2. R. Chandra et al.: Parallel programming in OpenMP. Morgan Kaufmann, 2001. B. Chapman et al.: Using OpenMP. Portable shared memory parallel programming. The MIT Press, 2008. 3. 4. 5. P.S. Pacheco: Parallel Programming with MPI. Morgan Kaufmann, 1997. W. Groop et al: Using MPI. Portable Parallel Programming with the Message Passing Interface. The MIT Press, 1999. M. Snir et al: MPI. The complete reference (vol. 1 & 2). The MIT Press, 1998. 6. T. El-Ghazawi et al.: UPC: Distributed Shared Memory programming. J. Wiley, 2005. 7. 8. F. Almeida et al.: Introducción a la Programación Paralela. Paraninfo, 2008. B. Wilkinson, M. Allen: Parallel Programming. Techniques and applications using networked workstations and parallel computers. Pearson, 2005. 9. M.J. Quinn: Parallel Programming in C with MPI and OpenMP. McGraw-Hill, 2004. 10. A. Grama et al.: Introduction to Parallel Computing (2. ed.). Pearson, 2003. 11. I. Foster: Designing and Building Parallel Programs. Addison Wesley, 1995. (existe una versión on line actualizada con mucha información complementaria en www-unix.mcs.anl.gov/dbpp/) Otros temas complementarios: 1. 2. 3. 4. T. Sterling: Beowulf Cluster Computing with Linux. The MIT Press, 2002. J.D. Sloan: High Performance Linux Cluster with OSCAR, Rocks, OpenMosix & MPI. O´Reilly, 2005. I. Foster et al: The Grid 2. Morgan Kaufmann, 2004. J. May: Parallel I/O for High Performance Computing. Morgan Kaufmann, 2001. Algunas direcciones útiles para la asignatura: www.top500.org Cantidad de información sobre los 500 computadores más rápidos del mundo. Se actualiza cada seis meses. A partir de dicha página se puede acceder a multitud de otras páginas. www.openmp.org www.compunity.org. Páginas principales de OpenMP, estándar de programación paralela para sistemas de memoria compartida.. www-unix.mcs.anl.gov/mpi www.lam-mpi.org Páginas de MPI, el estándar de programación paralela mediante paso de mensajes, y de sus dos implementaciones libres más utilizadas, mpich y lam. upc.lbl.gov upc.gwu.edu www.intrepid.com/upc.html Páginas principales de UPC, extensión de C para programar sistemas paralelos de memoria común distribuida. Otros sitios web interesantes: www.ieeetcsc.org / www.beowulf.org Páginas web sobre clusters y cluster computing www.globus.org / www.gridcomputing.org / gridcafe.web.cern.ch/gridcafe Páginas web de Grid Computing www.infinibandta.org / www.myri.com Infraestructura de comunicación, para clusters y sistemas SAN Evaluación de la asignatura La evaluación de la asignatura se va a hacer de acuerdo a los siguientes criterios: - Obligatorio: 1. Asistencia y participación activa en las sesiones de clase y laboratorio (> 70%).........................................................................................2 puntos 2. Ejercicios obligatorios (junto con un informe de resultados) .......................6,5 puntos - Optativo: 3. Ejercicios optativos (junto con un informe de resultados) .............................2,5 puntos 4. Trabajos optativos sobre temas complementarios ........................................2,5 puntos (en ambos casos, a elegir de las propuestas que haremos durante el curso, o, mejor aún, a propuesta del alumno) [ 5. Examen escrito/de laboratorio (alternativa a 3/4) .........................................2 puntos ] Los ejercicios del punto 2 se evalúan en conjunto al grupo de trabajo (max. dos personas). Los ejercicios y trabajos optativos, en cambio, son individuales (o, en su caso, en grupo, en función de la entidad del trabajo escogido). Se evaluarán las soluciones propuestas, las pruebas realizadas y los resultados obtenidos, así como aspectos formales de los informes de resultados: redacción, estructuración y presentación. Se pueden estudiar casos particulares de evaluación a petición del alumno/a al comienzo del curso.