INTRODUCCION A M(ESSAGE) P(ASSING) I(NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas La comunicación se realiza a través de subrutinas especiales Trans-mensajes
¿Qué es MPI? Es una implementación de un estándar del modelo de paso de mensajes
Atiende a una estructura SPMD (Single Program/Multiple Data) Imágenes del programa en cada máquina Datos locales a cada maquina Todos los procesadores trabajan con el mismo programa, pero los datos pueden ser diferentes. Como asignar tareas diversas con datos diversos?
Los datos se comparten por medio del paso de mensajes
Consiste en una serie de librerías C
MPI (Message Passing Interface) ? Una colección de rutinas adecuadas para facilitar la comunicación (intercambio de datos y sincronización de tareas) entre distintos procesadores. MPI : 1994 / MPI 2 : 1997 Existen bibliotecas para C y Fortran (C++ y F90). Características: Es estándar (por consenso, no por normativa) Portable Flexible (~ 125 rutinas) y expandible Simple (con las 6 rutinas básicas se puede hacer mucho!) ¿Qué es MPI?
Características de MPI Principalmente dirigido a proveer portabilidad del código fuente. No esta totalmente alcanzado todavía
Ofrece gran funcionalidad Diferentes tipos de comunicaciones Soporta gran cantidad de tipo de datos Soporta datos definidos por el usuario
Manejo de diferentes topologías MPI se escribió con algunos puntos un poco perdidos
En teoría las aplicaciones MPI se pueden compilar con cualquier implementación MPI existente, pero es posible que el comportamiento sea ligeramente diferente
Necesidad de recursos que no estén garantizados por la implementación MPI
NO ES PORTABLE TOTALMENTE
Portabilidad de los programas Aspectos a considerar debido a la variedad de implementaciones MPI
Suponer buffering. No asumir que el envío de datos es tipo buffer
Suponer sincronización de barrera para llamadas colectivas. En MPI, la comunicación colectiva es bloqueante, pero el programa no debe depender del tipo de sincronización (en este caso barrera)
Ambigüedades en la comunicación. Los mensajes enviados son los que se espera recibir
Local Area Multiprocesor (LAM) Entorno y sistema de desarrollo para procesamiento en paralelo que trabaja sobre redes formadas por procesadores independientes Utiliza programación estándar de paso de mensajes (MPI) LAM proporciona al usuario una librería API para el paso de mensajes entre diferentes nodos que colaboran para la realización de una aplicación paralela Funciona en una gran cantidad de plataformas UNIX y permite trabajar con diferentes tipos de maquinas mezclados
Las diferentes máquinas pueden conectarse a través de una red de área local o a través de Internet
Características: Completa implementación del estándar MPI Existen diversas herramientas de desarrollo Posibilidad de mezclar diferentes tipos de maquinas en una misma red Es posible activar o desactivar nodos dentro de la red Si un nodo cae se detecta y es posible recuperarlo cuando vuelva a funcionar Existen librerías adicionales MPI para la programación LAM Local Area Multiprocesor (LAM)
MPICH y MPICH2 MPICH2 es una implementación (bastante) portable de alta performance del standart MPI (-1 y -2) Principales logros: 1) provee una implementación MPI soportada en una gran variedad de plataformas HETEROGENEAS. Con gran variedad de redes (10Gigabits, Infiniband, Myrinet, Quadrics ) y tiene algunas cosas interesantes para su mejor funcionamiento en sistemas propietarios como BlueGene, Cray, etc
2) Es fácil de utilizar en otros entornos derivados lo que permite ampliar sus capacidades enormemente. Por ejemplo crear nuestra librería, o Petsc, o scalapack
Como funcionan? Se debe compilar con las librerias adecuadas.
mpicc -o s.exe sistema.c -lm
Se debe ejecutar con las instrucciones adecuadas. En general en maquinas grandes, ese problema no es nuestro problema source /opt/Modules/3.2.6/init/bash module add mvapich2 Mpirun/mpiexec –comm=pmi -np $NP S.exe
Como funciona MPI? En FORTRAN será vía el llamado a subrutinas: call MPI_ROUTINE (ARGUMENTOS, IERROR)
En C el uso será de la forma: MPI_Xxxxxx(argumentos) El primer paso será invocar a la biblioteca adecuada (C: mpi.h, F: mpif.h)p.e.: #include “mpi.h” Todo programa MPI tiene que ser inicializado y finalizado (para liberar correctamente los recursos).
Versión Fortran PROGRAM simple include ’mpif.h’ integer errcode ! Inicializar MPI call MPI_INIT (errcode) ! Parte Principal del Prog… ! Terminar MPI call MPI_FINALIZE (errcode) end Versión C #include “mpi.h” /* Headers */ main(int argc, char **argv) { /* Inicializar MPI */ MPI_Init (&argc, &argv); /* Parte principal del Prog….. */ /* Terminar MPI */ MPI_Finalize (); exit (0); } Un programa MPI: el esquema básico Prog.Basico
Como funciona MPI? Los siguientes pasos son definir un comunicador, indicar el número total de procesadores en el sistema y el rango de cada uno dentro del conjunto. El comunicador típico es MPI_COMM_WORLD (definido en mpi.h/mpif.h): son todos los nodos requeridos al sistema. (Pueden definirse otros comunicadores si es necesario) Comunicador
Comunicadores A cada proceso se le asigna un numero (rank) consecutivo empezando desde 0
Un mismo procesador puede pertenecer a varios comunicadores diferentes, y su ‘rank’ sera diferente en cada uno de ellos
MPI_COMM_WORLD es un comunicador que engloba a todos los procesos
Los mensajes se marcan con una etiqueta o tag que sirve para distinguir entre diferentes tipos
Página siguiente |