Académique Documents
Professionnel Documents
Culture Documents
Introduccin a MPI
David Rodrguez Gonzlez
Consejo Superior de Investigaciones Cientficas Instituto de Fsica de Cantabria, IFCA (Centro Mixto CSIC-Universidad de Cantabria) Santander ESPAA
Contenido
Introduccin
Modelos de computacin: HTC y HPC Computacin paralela Paradigma de paso de mensajes
El estndar MPI
Tipos de comunicacin Funciones bsicas y tipos de datos Algunas implementaciones
MPICH-G2
Ejecucin de programas en el grid Una aplicacin ms compleja en grid (ANN).
Open MPI
INTRODUCCION
HTC y HPC
High throughput computing (HTC).
Se utilizan grandes cantidades de recursos computacionales durante largos periodos de tiempo.
Lo importante es conseguir una gran cantidad de tiempo de cpu de media durante mucho tiempo, no la respuesta rpida. Se lanzan muchos trabajos independientes, y se trata de optimizar el nmero de trabajos ejecutados por unidad de tiempo. Colas tipo Condor, PBS, LSF
Computacin paralela
La que se realiza usando procesos separados. Interactan intercambiando informacin. Existen diversos tipos de computacin paralela. Todas usan distintos datos en cada proceso:
Paralelismo en los datos (data-parallel): Mismas operaciones en datos distintos. Tambin llamado SIMD (Single Instruction Multiple Data). Mquinas vectoriales. SPMD: Mismo programa, datos distintos. MIMD: Programas y datos diferentes.
SPMD y MIMD son esencialmente lo mismo porque cualquier programa MIMD puede implementarse como SPMD. MPI se utiliza principalmente para SPMD/MIMD. HPF (High Performance Fortran) es un ejemplo de una interfaz de programacin SIMD.
Muchos problemas pueden ser resueltos mucho ms rpidamente gracias a la paralelizacin. Sin embargo, esta no es siempre una buena solucin, depende mucho del tipo de problema a resolver.
Speedup
Speedup: es la medida de la mejora que se consigue al ejecutar un programa o algoritmo en varios procesadores de forma paralela, con respecto a lo que se tarda en un sistema uniprocesador. Entonces el speedup S es el cociente entre el tiempo secuencial ts y el tiempo en n procesadores tn: S = ts/tn Pero hay que tener en cuenta que no todo el cdigo de un programa es paralelizable. Ley Amdahl: da un lmite para el speedup S = (ts + tn)/(ts + tn/n)
Curso Grid Computing CARTIF Valladolid Junio 2006
EL ESTNDAR MPI
El intercambio de mensajes es cooperativo: los datos deben ser tanto enviados como recibidos explcitamente.
Esto supone una ventaja en cuanto a que la modificacin en la memoria del proceso es conocida por este.
Curso Grid Computing CARTIF Valladolid Junio 2006
Implementaciones de MPI
Existen bastantes implementaciones del estndar MPI. Algunas son debidas a proveedores de hardware que las proporcionan (optimizadas) paras sus mquinas (IBM, HP, SGI), otras son desarrolladas en el mbito acadmico. Algunas implementaciones son:
MPICH (MPICH 2 implementa MPI2)
Disponible para mltiples devices incluido globus2.
LAM/MPI OpenMPI unin de varios proyectos (FT-MPI, LA-MPI, LAM/MPI, y PACX-MPI) . Ms detalles en la charla de Sven Stork el martes.
Uso de MPI
Se puede usar MPI para:
Programas paralelos portables. Libreras paralelas. Programas con relaciones entre datos irregulares o dinmicas que no se ajusten a un modelo de paralelismo en los datos.
PROGRAMACIN MPI
Corresponde a los de C, pero se aaden el tipo byte, y el empaquetado, que permite enviar simultneamente datos de distintos tipos.
MPICH
MPICH es una implementacin gratuita de MPI 1.2
Implementa parte del nuevo estndar MPI-2 MPICH 2 implementa MPI-2
MPICH-G2
Es una implementacin grid de MPICH mediante el device globus2 Completamente rediseada desde la anterior versin MPICH-G http://www3.niu.edu/mpi/
Para aplicaciones ms complicadas conviene usar un Makefile. En nuestro caso anterior (fichero hello.c):
mpicc o hello hello.c
Curso Grid Computing CARTIF Valladolid Junio 2006
Digamos que queremos correr nuestro programa en dos mquinas de la lista estndar:
mpirun -np 2 hello
Curso Grid Computing CARTIF Valladolid Junio 2006
Grupos y Comunicadores
Un grupo es un conjunto ordenado de procesos. Cada proceso de un grupo lleva asociado un identificador entero que se suele denominar rank.
Las funciones MPI de recepcin de datos son por lo general bloqueantes, es decir, un proceso que debe recibir un mensaje espera hasta que de hecho lo ha recibido completo.
1. 2. 3. 4. 5. 6. 7.
start: puntero para la recepcin de los datos count: nmero de elementos datatype: tipo de dato source: Identificacin del proceso origen tag: etiqueta de la comunicacin comm: Identificacin del comunicador status: puntero para acceso a informacin sobre mensaje
Curso Grid Computing CARTIF Valladolid Junio 2006
Ejemplo MPI_Send/MPI_Recv
char msg[100]; if(my_rank==0) { sprintf(msg,"\n\n\t Esto es un mensaje del proceso %d al proceso %d",source,dest); MPI_Send(msg,100,MPI_CHAR,dest,TAG,MPI_COMM_WORLD); printf("\n Mensaje enviado a %d",dest); } else if(my_rank==1) { MPI_Recv(msg,100,MPI_CHAR,source,TAG,MPI_COMM_WORLD,&status); printf("\n Mensaje recibido en %d",dest); printf(msg); }
MPI_Status status; MPI_Recv( ..., &status ); ... status.MPI_TAG; ... status.MPI_SOURCE; MPI_Get_count( &status, datatype, &count );
Operaciones colectivas
Comunicacin colectiva: envo de un mensaje de uno a muchos. Se hace con MPI_Bcast (Broadcast)
Tpicamente un master enva los mismos datos a sus esclavos. Por ejemplo, en la paralelizacin del entrenamiento de una red neuronal enviamos a todos los esclavos los nuevos pesos al final de cada poca de entrenamiento.
Operaciones colectivas: se realiza una operacin matemtica distribuida y se devuelve el resultado al root de la operacin
Tambin es tpico en un esquema master-slave. En la neura se utiliza por ejemplo en la suma de los errores de todos los esclavos. Operaciones definidas:
Aritmticas: suma, multiplicacin Lgicas: AND, OR
Curso Grid Computing CARTIF Valladolid Junio 2006
Operaciones colectivas
Reduce
MPI_MAX maximum integer, float integer, real, complex MPI_MIN minimum integer, float integer, real, complex MPI_SUM sum integer, float integer, real, complex MPI_PROD product integer, float integer, real, complex MPI_LAND logical AND integer logical MPI_BAND bit-wise AND integer, MPI_BYTE integer, MPI_BYTE MPI_LOR logical OR integer logical MPI_BOR bit-wise OR integer, MPI_BYTE integer, MPI_BYTE MPI_LXOR logical XOR integer logical MPI_BXOR bit-wise XOR integer, MPI_BYTE integer, MPI_BYTE MPI_MAXLOC max value and location float, double and long double real, complex,double precision MPI_MINLOC min value and location float, double and long double real, complex, double precision
Curso Grid Computing CARTIF Valladolid Junio 2006
Reduce:
MPI_Reduce(start, result, count, datatype, operation, root, comm) 1. 2. 3. 4. 5. 6. 7. start: puntero a los datos a enviar result: puntero para almacenar el resultado count: nmero de elementos a enviar datatype: tipo de dato operation: identificacin de la operacin colectiva root: identificacin del proceso origen comm: Identificacin del comunicador
Curso Grid Computing CARTIF Valladolid Junio 2006
Reduce
Operaciones predefinidas para MPI_Reduce:
MPI_MAX mximo MPI_MIN mnimo MPI_SUM suma MPI_PROD producto MPI_LAND and lgico MPI_LOR or lgico MPI_LXOR xor lgico MPI_BAND bitwise and MPI_BOR bitwise or MPI_BXOR bitwise xor MPI_MAXLOC mximo e ndice del mximo MPI_MINLOC mnimo e ndice del mnimo
Adems existe un mecanismo para que el usuario cree sus propias funciones para el Reduce.
Curso Grid Computing CARTIF Valladolid Junio 2006
Ejemplo BroadCast
Char msg[100]; if(my_rank==source) { sprintf(msg,"\n Esto es un mensaje del proceso %d a todos los dems",sourc e); MPI_Bcast(msg,100,MPI_CHAR,source,MPI_COMM_WORLD); printf("\n Mensaje enviado a todos desde %d",source); } else { MPI_Bcast(msg,100,MPI_CHAR,source,MPI_COMM_WORLD); printf("\n Mensaje recibido en %d desde %d",my_rank,source); printf(msg); }
Ejemplo Reduce
int value; int result;
value = my_rank; MPI_Reduce(&value,&result,1,MPI_INT,MPI_SUM,source,MPI_COMM_WORLD); if(my_rank==source) { printf("\n Resultado de la suma colectiva %d", result); }
Topologas
Una topologa es una estructura virtual de procesos MPI.
Sirve para contestar a la pregunta Quines son mis vecinos? Asocia un esquema de direccionamiento a los procesos de un comunicador.
Una topologa tpica es la cartesiana que consiste en un malla en la que los procesos se identifican mediante dos subndices. Otro tipo es la topologa en grafo que es ms genrica.
MPICH-G2
Usando MPICH-G2
Requisitos:
Certificado de usuario. En cada mquina en que se quiera correr usando mpirun
Hay que tener cuenta Debe estar instalado globus y MPICH-G2 Globus gatekeeper
MPICH-P4 en grid
UI
RB
CE
WN WN WN WN WN WN WN
MPICH-G2 en grid
UI RB WN WN WN WN WN WN WN
CE
CE
WN WN WN WN WN WN WN
CE
WN WN WN WN WN WN WN
JDL
Para MPICH P4 Para MPICH G2
Executable = "hello"; JobType = "mpich"; NodeNumber = 8; VirtualOrganisation = "cg"; StdOutput = "std.out"; StdError = "std.err"; InputSandbox = {"hello"}; OutputSandbox = {"std.out","std.err"};
Executable = "hello.g2"; JobType = "mpich-g2"; NodeNumber = 2; VirtualOrganisation = "cg"; StdOutput = "std.out"; StdError = "std.err"; InputSandbox = {"hello.g2"}; OutputSandbox = {"std.out","std.err"}; Rank = other.GlueCEStateFreeCPUs;
OPEN MPI
Origen
Open MPI es un proyecto que combina los esfuerzos de diversos proyectos anteriores (FT-MPI, LA-MPI, LAM/MPI, y PACX-MPI) para crear la mejor librera MPI.
En 2003 se tom la decisin de colaborar En 2004 empez la fase de diseo e implementacin La primera versin se hizo pblico en 2005
Es una implementacin de MPI-2 totalmente nueva. Se desarrolla como cdigo abierto por un consorcio de socios de diversos mbitos (investigacin, educacin e industria) Pgina web del proyecto: http://www.openmpi.org/
Curso Grid Computing CARTIF Valladolid Junio 2006
Objetivos
Arquitectura modular Fragmentacin y recreacin de mensajes Diseado para entornos heterogneos:
Varias redes Varias arquitecturas de los nodos
Tres capas
OMPI : Open MPI ORTE : Open Runtime Environment OPAL : Open Hardware Abstraction layer
Curso Grid Computing CARTIF Valladolid Junio 2006
Instalacin
Open MPI usa autotools:
./configure make make install
Opciones:
Compilacin como librera compartida o esttica Permitir o no el soporte de threads
Startup
Open MPI soporta mpirun and mpiexec ORTE soporta varios mecanismos de arranque de forma nativa
rsh/ssh PBS/Torque SLURM Xgrid
Requisitos
Los demonios de orte necesitan un puerto TCP/IP de entrada abierto ssh necesita poder conectarse sin password (public keys) Open MPI debe estar instalado tanto en el Head Node como en los Computing Nodes
PACX MPI
Introduccin
Middleware para ejecutar aplicaciones MPI en una red de computadores paralelos
Desarrolla originalmente en 1995 (Vector + MPP)
PACX-MPI usa las implementaciones locales optimizadas para las comunicaciones el cluster
Diseo
PACX-MPI arranca un trabajo MPI en cada cluster Se encarga de controlar estos trabajos creando transparentemente un trabajo MPI mayor. PACX-MPI transforma el rank de este job mayor a los rank de los procesos MPI de los clusters Arranca dos procesos MPI adicionales ocultos para las comunicaciones con el exterior:
El rank 0 local es el demonio de comunicacin hacia fuera (out_daemon) El rank 1 local es el demonio de comunicacin hacia dentro (in_daemon)
Bibliografa MPI
Pacheco, P.S. Parallel Programming with MPI. Morgan Kaufmann Publishers, 1997. Snir, M. et al. MPI - The Complete Reference. Volume 1, The MPI Core. The MIT Press, 1998. Gropp, W., Lusk, E. y Skjellum, A. Using MPI, Portable Parallel Programming with the MessagePassing Interface. The MIT Press, 1994.
Ms sobre MPI
Tutorial en HLRS:
On-line: http://www.hlrs.de/organization/par/par_prog_ws/