Post on 23-Jan-2016
Arquitecturas Avanzadas
Sistemas LAM/MPI(Local Area Multicomputer /Message Passing Interface)
Aitor Viana SánchezOctavio Hombrados
Juan F. Ramos Jesús López Bustos
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 2
1. Introducción2. ¿Qué es MPI?3. Características de MPI4. ¿Cuándo usar MPI?5. Portabilidad de los programas6. ¿Qué es LAM? (Local Area Multicomputer)
7. Características de LAM8. Local Area Multiprocesor (LAM)9. Arquitectura de LAM
Contenido
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 3
10. Depurado en LAM11. Implementación MPI12. Comunicadores13. Algunos conceptos14. Estructura genérica de programa MPI15. Clases de llamadas MPI16. Comunicación punto a punto17. Comunicación colectiva18. Comandos LAM
Contenido
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 4
1. Introducción
Actualmente surge la necesidad de resolver problemas cada vez más complejos, que son inabordables con la tecnología y capacidad de computadores actual
¿La solución? Programación distribuida
¿De qué tecnologías disponemos? Llamadas a procedimientos remotos (RPC) Invocación de métodos remotos (RMI) Paso de mensajes (MPI)
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 5
1. Introducción
Uno de los métodos tradicionales y usuales es el paso de mensajes (MPI)
Se basa, como todos los anteriores en la posibilidad descomposición de los problemas en problemas más pequeños
Dos tipos de descomposición: descomposición de dominio descomposición funcional
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 6
2. ¿Qué es MPI?
Es una implementación de un estándar del modelo de paso de mensajes
Atiende a una estructura SIMD Imágenes del programa en cada máquina Datos locales a cada maquina
Los datos se comparten por medio del paso de mensajes
Consiste en una serie de librerías C
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 7
3. 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
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 8
4. ¿Cuándo usar MPI?
Necesidad de crear aplicaciones que necesiten una gran potencia de cálculo
Abordar problemas inabordables con un solo procesador
Escribir código paralelo portable
Alcanzar alto desarrollo de programación paralela
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 9
5. Portabilidad de los programas
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
Como conclusión, no es totalmente portable
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 10
5. Portabilidad de los programas II 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
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 11
6. ¿Qué es LAM? (Local Area Multicomputer) Entorno de desarrollo de procesamiento paralelo
Pensado para redes de trabajo con computadores independientes
Es una implementación de la programación estándar de paso de mensajes (MPI)
LAM sólo corre sobre máquinas UNIX conectadas a través de una LAN
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 12
7. Características de LAM
Completa implementación del estándar MPI
Extensas herramientas de monitorización y depuración
Añadido y borrado de nodos
Múltiples protocolos de comunicación (TCP, UDP)
Detección de fallo y recuperación de nodo
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 13
8. 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
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 14
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
8. Local Area Multiprocesor (LAM)
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 15
La comunicación entre las aplicaciones se realiza de forma directa
Soporta diversos protocolos para realizar esta comunicación
Objetos básicos que forman un multicomputador LAM: Los computadores físicos o nodos Procesos, que identifican a las diferentes copias del
programa que se ejecutan en cada procesador Los mensajes, que son los datos que se transmiten
entre los procesos de diferentes procesadores
8. Local Area Multiprocesor (LAM)
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 16
9. Arquitectura de LAM
En cada máquina que compone la red LAM debe estar arrancado un demonio
Proceso: ‘lamboot’ porta LAM a todos los nodos ‘mpirum’ para ejecutar los programas MPI ‘lamclean’ para limpiar el entorno. Comando opcional ‘wipe’ cierra LAM
Cada usuario debe abrir una cuenta en cada una de las maquinas y arrancar en ella un demonio
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 17
9. Arquitectura de LAM
Arrancar y cerrar LAM sólo es necesario una vez por sesión.
La compilación de un programa puede hacerse independientemente del entorno LAM
Cada demonio funciona como un nano-kernel que proporciona paso de mensajes entre los procesos
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 18
10. Depurado en LAM
Desde cualquier máquina que forme parte del entorno LAM es posible: Ejecutar, detener y reanudar programas residentes en
cualquier otra maquina Monitorizar mensajes Manipular el tamaño de los buffers Observar retardos y tiempos de ejecución
Estos servicios se pueden llevar a cabo mediante librerías o mediante aplicaciones que funcionan en cualquier shell
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 19
11. Implementación MPI Sincronización mediante las variables:
context tag source rank destination rank
mpirun sincroniza el lanzamiento de todos los procesos MPI para que se localicen unos a otros antes de que se introduzca el código de usuario
Los programas MPI desarrollados con LAM son portables a cualquier otra plataforma que soporte MPI
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 20
12. Comunicadores
Proveen toda la información necesaria para el paso de mensajes
Al enviar y recibir los comunicadores deben coincidir para que tenga lugar la comunicación
Son un argumento necesario para comunicaciones punto a punto o colectivas
Con MPI una aplicación ve su entorno como un grupo estático de procesos (world group)
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 21
12. 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
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 22
12. Comunicadores Para recibir un mensaje no siempre es necesario
especificar el ‘rank’ de la fuente aunque si lo es para enviarlo
‘context’ sirve para evitar conflictos entre el codigo de diferentes programadores. Se añade automaticamente
MPI_COMM_SELF es un comunicador que solo engloba a un solo miembro
MPI_COMM_PARENT engloba los grupos de un proceso y de su proceso padre
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 23
Nodo origen Nodo desde el que se invoca lamboot para portar LAM
a todos los procesadores Nodo local
Nodo desde el que se invoca un comando Proceso LAM
Proceso enganchado al demonio LAM Booting LAM
Lanzar demonios de control de proceso, control de entorno y paso de mensajes en cada nodo para crear entorno LAM/MPI antes de usar aplicaciones MPI
13. Algunos Conceptos
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 24
Boot schema Descripción de un multicomputador donde se va a lanzar
LAM Lista de nombres de host en los que se portará LAM
Esquema de aplicación Conjunto de aplicaciones que serán lanzadas en cada
nodo del multicomputador
Request Progression Interface (RPI) Forma en que un mensaje progresa desde la fuente al
destino Tres maneras: TCP/IP, TCP/IP con memoria compartida con
cerrojos y TCP/IP con SYSV con semáforos
13. Algunos Conceptos
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 25
Incluir ficheros de cabecera MPI Definiciones y prototipos de funciones específicas de MPI
Definir variables Inicializar entorno MPI
Cada procesador llama a rutina MPI de inicialización MPI_Init (int *argc, char **argv[]);
Funciones generales, llamadas a comunicaciones MPI
Cerrar comunicación MPI Cada procesador llama a rutina MPI de finalización MPI_Finalice (void);
14. Estructura genérica de programa MPI
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 26
Inicializar, dirigir y finalizar comunicación Iniciar y finalizar comunicación Identificar número de procesos, qué proceso corre en
cada procesador y crear subgrupos de procesadores MPI_Init, MPI_Finalice
Comunicación punto a punto MPI_Send, MPI_Recv
Comunicación colectiva MPI_Bcast, MPI_Scatter, MPI_Gather, MPI_Reduce
Creación de tipos de datos MPI_Type_struct
15. Clases de llamadas MPI
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 27
Un procesador envía y otro recibe Comunicación elemental en MPI Dos modos de comunicación
Bloqueante: La rutina de enviar o recibir no termina hasta que la operación se ha completado. Asegura que los datos llegan al receptor sin error.
No bloqueante: La función envía o recibe inmediatamente. El procesador puede hacer otras tareas durante el envío
Cuatro procedimientos para transmitir mensajes Estándar, síncrono, buffered y ready
16. Comunicación punto a punto
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 28
MPI_Send (void *buf, int count, MPI Datatype dtype, int dest, int tag, MPI_Comm comm);
MPI_Recv (void *buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_status *status);
buf: localización en memoria de los datos count: Número de datos del tipo indicado enviados o
recibidos dtype: tipo de datos enviados o recibidos dest/source: procesador destino/fuente tag: etiqueta de comunicación comm: comunicador de envío o recepción status: código de retorno de la operación de recepción
16. Comunicación punto a punto
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 29
Comunicaciones de un procesador a varios y de varios procesadores a uno
Se reduce la posibilidad de error Una llamada a una rutina colectiva reemplaza a varias
llamadas a rutinas punto a punto
Código fuente más fácil de leer Simplifica depuración y mantenimiento
Normalmente, la rutina colectiva es más rápida Está más optimizada que su equivalente expresada
por medio de rutinas punto a punto
17. Comunicación colectiva
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 30
Operación broadcast Un único proceso envía copia de los mismos datos a
todos los procesos de un grupo MPI_Bcast (void *buf, int count, MPI_Datatype dtype,
int root, MPI_Comm comm); buf: localización en memoria de los datos count: Número de datos del tipo indicado enviados dtype: tipo de datos enviados root: procesador fuente comm: comunicador de envío
17. Comunicación colectiva
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 31
Operación reduction Un único proceso recoge datos de todos los procesos de un
grupo y los combina según una operación aritmética MPI_Reduce (void *sendbuf, void *recvbuf, int count,
MPI_Datatype dtype, MPI_Op op, int root, MPI_Comm com); sendbuf: localización en memoria de los datos recvbuf: buffer donde se combinan los datos recibidos count: número de datos del tipo indicado recibidos dtype: tipo de datos recibidos op: operación aritmética que se aplica a los datos recibidos root: procesador destino com: comunicador de recepción
17. Comunicación colectiva
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 32
Operación scatter Los datos de un procesador se dividen en N bloques
(N nº de procesos), y se envían a cada proceso según orden de rank
MPI_Scatter (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);
Operación gather Paso inverso, se agrupan los datos de todos los
procesos y se envían a uno solo MPI_Gather (void *sendbuf, int sendcount,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);
17. Comunicación colectiva
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 33
Debemos establecer ciertas variables de entorno y caminos de búsqueda para el Shell, antes de correr LAM
Añadimos : Setenv LAMHOME <directorio instalación LAM> Set path = ($path $LAMHOME/bin)
Hay que tener en cuenta que el directorio donde estén los ejecutables de LAM necesitan estar en el path de todas la máquinas donde se vaya a usar LAM
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 34
Crear fichero donde se listan las máquinas que participan en el cluster
A cada máquina se le da un nodo identificador (nodeid), que empieza con 0 para la primera máquina de la lista , 1 para la segunda, etc...
La herramienta reconv verifica los nodos del cluster
% reconv –v <boot schema>
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 35
La herramienta lamboot inicializa LAM en el cluster especificado. La opción –v permite imprimir mensajes antes de cada paso dado.
% lamboot –v <boot schema>
Para comprobar que LAM está corriendo normalmente en el cluster:
% tping –c1 N
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 36
La herramienta hcc invoca al compilador de C nativo (por ejemplo cc) y provee el path de los ficheros de cabecera, librerías y enlaces implícitos de LAM. La librería MPI se enlaza explícitamente:
% hcc –o progama programa.c -lmpi
Iniciamos una aplicación MPI invocando al comando mpirun. Este comando provee la información sobre los nodos e
identificadores de proceso necesarios para que los procesos se localicen entre si.
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 37
La sintaxis para el comando mpirun es la siguiente
%mpirun –s <nodeid> <nodeids> -c<#> Programa
-s <nodeid> es el nodo donde se encuentra el ejecutable. Sin esta opción, LAM buscará el programa en el mismo nodo donde correrá.
<nodeids> son los nodos donde se ejecutará el programa. Sin esta opción, LAM usará todos los nodos.
-c <#> indica el número de procesos que se crearán. Programa es el fichero ejecutable (incluido el path para
llegar hasta el)
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 38
Podemos monitorizar cierta información de los procesos MPI, en tiempo de ejecución, mediante los comandos:
Mpitask visualiza información sobre los procesos MPI, tal como los ranks (identificadores) de la fuente y el destino, el comunicador, y la función que se esta ejecutando
Mpimsg proporciona información sobre los mensajes que se envían, así como la cantidad y tipo de datos
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 39
Mediante el comando lamclean, podemos eliminar todos los procesos y mensajes sin necesidad de abortar MPI.
% lamclean –v
Por último, la orden wipe elimina todos los procesos y demonios de LAM en las máquinas que estamos utilizando.
% wipe –v <boot schema>
18. Referencia de comandos LAM
Sistemas LAM/MPIAitor Viana, Octavio Hombrados, Jesús López, Juan F. Ramos 40
Gracias por vuestra atención