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 |