Computación paralela y distribuida MSC-0302 Nombre de la asignatura: Computación paralela y distribuida Línea de trabajo: Tecnologías web Tiempo de dedicación del estudiante a las actividades de: 1. DOC TIS TPS Horas totales Créditos 48 20 100 168 6 Historial de la asignatura. Fecha revisión / actualización Participantes Observaciones, cambios o justificación Febrero de 2011 Dr. Jesús Alberto Verduzco Ramírez M.C. Juan García Virgen Consejo de Posgrado del Departamento de Sistemas y Computación 2. Pre-requisitos y correquisitos. Después de acreditar Seminario de Investigación I y estar cursando el tercer semestre. 3. Objetivo de la asignatura. Aprender los conceptos básicos de arquitectura de computadoras paralelas, tendrá la capacidad de programar a nivel de hilos y de procesos en computadoras con arquitectura de múltiples núcleos, aprenderá a programar en un ambiente de cómputo distribuido. 4. Aportación al perfil del graduado. Las necesidades excesivas de procesamiento, almacenamiento y precisión de numerosas aplicaciones actuales, obligan a diseñar y desarrollar software eficiente y seguro para plataformas multiprocesador. Por otra parte, el auge de los procesadores multinúcleo y de las tecnologías de redes de ordenadores de alto desempeño ha incrementado la difusión del procesamiento paralelo. Sin embargo, para utilizar los sistemas paralelos y/o distribuidos de forma eficiente es necesaria la técnica de la programación paralela. Esta asignatura abarca fundamentalmente las nociones básicas en la programación paralela y distribuida, centrándose en el desarrollo de software para arquitecturas como los clusters de ordenadores y los sistemas multinúcleo. Los objetivos particulares son: Dotar al alumno de un conocimiento general sobre programación paralela y arquitecturas paralelas. Conocer distintos modelos de programación y técnicas para el diseño evaluación e implementación de algoritmos paralelos. Dotar al alumno de cierta experiencia en la resolución paralela y distribuida de problemas con objeto de mejorar las prestaciones. Conocer los entornos de programación más difundidos para el desarrollo de sistemas paralelos. 5. Contenido temático. Unidad Temas Subtemas 1.1 Fundamentos de sistemas de cómputo paralelo y distribuido. 1.2 Clasificación lógica del paralelismo 1.3 Clasificación 1 Revisión de tecnologías de programación paralela. física de los ordenadores paralelos 1.4 Sistemas a memoria compartida 1.5 Sistemas a memoria distribuida 1.6 Sistemas multinucleo 1.7 Tecnologías de Cluster 1.8 Computación Grid 1.9 Computación en la nube 2.1. Modelos de paralelismo 2.2. Niveles de paralelismo. 2.3. Fases en la creación de programas paralelos 2.4. Paradigmas de la programación paralela 2 Diseño de programas paralelos y distribuidos. 2.5. Algoritmos paralelos y distribuidos 2.6. Complejidad y eficiencia de algoritmos paralelos 2.7. Herramientas para el monitoreo de ejecución de algoritmos paralelos. 2.8. Equilibrio de carga de tareas 3.1. Conceptos generales y terminología 3 Tecnologías de aplicaciones distribuidas. 3.2. Modelos de computación distribuida 3.3. Biblioteca para el desarrollo de aplicaciones distribuidas. Unidad Temas Subtemas 3.4. Sincronización de tareas 3.5. Distribución de la carga 3.6. Aplicaciones distribuidas 3.7. Mecanismos de tolerancia a fallas en computación distribuida. 3.8. Migración de tareas entre nodos 4.1. Introducción y motivación de OpenMP 4.2. Conceptos generales y terminología habitual 4 4.3. Regiones paralelas y regiones seriales 4.4. Variables compartidas y variables privadas Interfaz de programación de 4.5. Distribución de la carga computacional aplicaciones OpenMP y de pase 4.6. Desarrollo de programas con OpenMP de mensajes MPI. 4.7. Modelo de comunicación basado en paso de mensajes 4.8. Entorno MPI 4.9. Principales directivas MPI 4.10. Desarrollo de programas con MPI 4.11. Pruebas de desempeño 6. Metodología de desarrollo del curso. Exposición de contenidos mediante presentación o explicación por parte del profesor. Sesión supervisada donde los estudiantes trabajan en grupo y reciben asistencia y guía cuando sea necesaria. Situaciones en las que el alumno debe explorar y trabajar un problema práctico aplicando conocimientos interdisciplinarios. Exposición de ejercicios asignados a un grupo de estudiantes que necesita trabajo cooperativo para su conclusión. Actividades desarrolladas en espacios especiales con equipamiento especializado (laboratorio, aulas informáticas). Conjunto de pruebas escritas, orales, prácticas, proyectos, trabajos, etc. utilizados en la evaluación del progreso del estudiante. Preparación de actividades para exponer o entregar en las clases prácticas. Estudio de contenidos relacionados con las clases teóricas: Incluye cualquier actividad de estudio que no se haya computado en el apartado anterior (estudiar exámenes, trabajo en biblioteca, lecturas complementarias, hacer problemas y ejercicios, etc.). 7. Sugerencias de evaluación. Examen escrito de respuesta abierta. Prueba cronometrada, efectuada bajo control, en la que el alumno construye su respuesta. Se le puede conceder o no el derecho a consultar material de apoyo. Trabajo académico. Desarrollo de un proyecto que puede ir desde trabajos breves y sencillos hasta trabajos amplios y complejos. Estudios de caso: Supone el análisis y la resolución de una situación planteada que presenta problemas de solución múltiple, a través de la reflexión y el diálogo para un aprendizaje grupal, integrado y significativo. Lectura y análisis de artículos científicos relacionados con la temática de la computación móvil. Porcentajes sugeridos: 8. Prácticas Proyectos Tareas Exámenes Participación 20% 20% 10% 40% 10% Bibliografía y software de apoyo. Lecturas obligatorias: Unidad 1 Buyya, R. (1999).High Performance Cluster Computing:Architectures and Systems. Prentice Hall. Kumar, V.;Grama, A.; Gupta, A.; Karypis G. (2003). Introduction to Parallel Computing. Benjamin/Cummings Publishing Company. Glove, D. (2010). Multicore Application Programming. Addison Wesley. Unidad 2 Buyya, R. (1999). High Performance Cluster Computing: Programming and Applications. Prentice Hall. Foster, I. (1995). Designing and Building Parallel Programs. Addison-Wesley Publishing Company. Wadleigh, K.; Crawford, I. (2000).Software optimization for High Performance Computing. Prentice Hall PTR. Power, H. (1999). Algorithms & Applications in Parallel Computing. WITPress Unidad 3 Quinn, M.J. (2003). Parallel Programming in C with MPI and OpenMP. McGraw-Hill. Kumar, V.;Grama, A.; Gupta, A.; Karypis G. (2003). Introduction to Parallel Computing. Benjamin/Cummings Publishing Company. Unidad 4 Chapman, B.; Jost, G. (2007). Using OpenMP, Portable Shared Memory Parallel Programming. Scientific and Engineering Computation Series. Akhter, S.; Robert, J. (2003). Multi-Core Programming Increasing Performance Through Software Multithreading. Intel Press Bibliografía Complementaria: Distributed and Paralled System, Zoltán Juhász F. Almeida; D. Gimenez, Mantas, J. (2008). Introduccion a la Programacion Paralela. Paraninfo Cengage Learning. Chandra, R.; Dagum, L.; Kohr, D.; Maydan, D. (2001). Parallel Programming in OpenMP. Academic Press. USA. Kumar, V.;Grama, A.; Gupta, A.; Karypis G. (2003). Introduction to Parallel Computing. Benjamin/Cummings Publishing Company. Wilkinson, B., Allen, M. (2005). Parallel Programming. Techniques and applications using networked workstations and parallel computers. Vol II. Prentice-Hall. C. Xavier, S.S. Iyengar (1998). Introduction to Parallel Algorithm. John Wiley & sons, inc. USA. Páginas web: Página oficial de MPICH: http://www.mcs.anl.gov/research/projects/mpi/mpich1/index.htm Página oficial LAM-MPI: http://www.lam-mpi.org/ http://www.top500.org http://www.mpi-forum.org/ http://www.open-mpi.org/ http://www.openmp.org/ http://www.supercomputingonline.com/ http://www.ncsa.illinois.edu/ Software de apoyo: Sistema operativo Linux Lenguaje de programación Ansi C, C++ Librería de paso de mensajes MPI Librería de memoria compartida OpenMP 9. Actividades propuestas. Se sugiere que las prácticas propuestas sean realizadas por equipos de tres personas para estar en concordancia con la finalidad de fomentar la discusión de ideas que plantea el curso y fomentar el trabajo colaborativo. En este sentido, se proponen las siguientes prácticas por unidad: Unidad Actividad Proporcionar al estudiante el panorama general del supercómputo y sus aplicaciones. 1.- Revisión de tecnologías de programación paralela. Ejecución de benchmarks para medir el desempeño de procesadores. Desarrollo de aplicaciones multihilos para los procesadores multinúcleo. Instalación y configuración de un cluster de computadoras 2.- Diseño de programas paralelos y distribuidos. de la complejidad de algoritmos paralelos y distribuidos Determinación de la eficiencia. Experimentación 3.- Tecnologías de aplicaciones distribuidas. Determinación en ambientes Grid con Globus Toolkit y gLite Experimentación con el planificador distribuido Condor. 4.- Interfaz de programación de aplicaciones OpenMP y de pase Desarrollo de aplicaciones numéricas y para la manipulación de datos de mensajes MPI. 10. Nombre y firma del catedrático responsable.