Introducción a la Computación Paralela con MPI

Profesor: Dr. Guillermo Marshall marshalg@mail.retina.ar

Ayudante: Alejandro Soba soba@cnea.gov.ar


Programa de contenidos tentativos

Unidad 0. ¿Porque trabajar con máquinas paralelas?

Introducción a la computación en paralelo. Arquitectura de computadoras. La computadora básica. Procesadores. Memoria. Cache. Memoria Virtual. Computación de alta performance (HPC). Paralelismo. Clasificación Tradicional de computadoras. Organización de la memoria: memoria compartida y memoria distribuida (SMP y MPI). Introducción al sistema operativo Linux. Estándares de pasaje de mensajes (Message Passing), PVM (Parallel Virtual Machine) y MPI (Portable parallel Programmming). Ventajas y desventajas de MPI y PVM. La arquitectura Beowulf.

Unidad 1. Funciones básicas de MPI.

MPI Elemental. Iniciación y finalización del MPI. MPICH (MPI y Chameleon): una implementación portable de MPI. Construcción de un código MPI Elemental. Ejecución de un código MPI. Pasaje de mensajes. Contenido del mensaje. Tipo de datos en Fortran y en C. Protocolos de comunicación. Cálculo elemental de la escalabilidad y medición de tiempos. Aplicación numérica: Integración unidimensional y multidimensional. Metodos deterministicos y Metodo de Montecarlo. Comparación.

Unidad 2. Funciones intermedias de MPI.

Comunicaciones colectivas. Operaciones globales. Comunicación estructurada en árbol. Broadcast. Reducción global. Algebra de matrices. Método de resolución de sistemas de ecuaciones lineales. Métodos directos e iterativos en paralelo. Ventajas de uno u otro cuando introducimos multiproceso.

Unidad 3. Performance.

Concepto y medición de la performance de un cluster. Determinación de los elementos y las variables de las que depende. Funciones Speed Up y Eficiencia. Ley de Amdhal y ley de Gustavson. Balance de carga. Análisis de performance de los programas desarrollados en la Unidad 1 y 2.

Unidad 4. Un análisis detallado de la comunicación entre procesos.

Comunicación punto a punto. Modos de comunicación. Envoltura de la comunicación. Bloqueo. Costo de la Comunicación. Comunicación bloqueante y no bloqueante, sincrónica y no sincrónica. Cual es la forma más segura de comunicación. Manejo de memoria buffer. Métodos de búsqueda en paralelo. Bases de datos paralelas.

Unidad 5. Métodos no lineales.

Paralelización de algoritmos para resolver sistemas de ecuaciones no lineales en una variable. Resolución de sistemas no lineales en general con maquinas paralelas. Sistemas de inecuaciones lineales. Interpolación en paralelo. Autovalores y autovectores en paralelo. Sistemas de ecuaciones diferenciales ordinarias en paralelo. Introduccion al metodo de las lineas.

Unidad 6. Topologías.

Comunicaciones en grupos de procesos. Trabajo con grupos, contexto y comunicadores. Armado de topologías virtuales. Diferencia entre el MPI_COMMON_WORLD y MY_WORLD. Ventajas y desventajas de programar para una topología diferente. El algoritmo de FOX.

Unidad 7. Introducción a las librerías paralelas

ScaLAPACK (Scalable Linear Algebra Package), y PETSc (Portable Extensible Toolkit for Scientific Computation). Los sistemas LINDA y PARAMESH para la resolución en paralelo de sistemas algebraicos y generación de malla dinámica.


Modalidad del curso.

Se propone una clase semanal de cuatro horas teórico - prácticas. (Aproximadamente tres horas de teórica y dos de prácticas). Las prácticas se realizan en el cluster en forma presencial o a distancia.

La materia se aprueba con dos parciales, la entrega de una carpeta con los ejercicios resueltos en la práctica y un examen final. Optativo: el examen final puede ser reemplazado por un trabajo de investigación con un cierto grado de originalidad.