MPISistemas Distribuidos1 MPI Un estándar de paso de mensajes para Clusters y Workstations Communications of the ACM, July 1996 J.J. Dongarra, S.W. Otto,

Slides:



Advertisements
Presentaciones similares
ESTRUCTURAS DE CONTROL
Advertisements

Tabla de Contenido Concurrencia.
Memoria Compartida Llave de acceso Segmento Compartido 1234 estructura
Programando con OpenMP*
Estructuras de decisión en C
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
Algoritmos paralelos Lab. 1: Introducción
INTRODUCCIÓN ESTADO DE LA TÉCNICA PROCESAMIENTO DISTRIBUIDO CON MPI PROCESAMIETNO DISTRIBUIDO DE IMÁGENES GENÉRICO CON VTK PROCESAMIENTO DISTRIBUIDO DE.
Listas enlazadas c++ Prof. Franklin Cedeño.
Funciones. Programación, Algoritmos y Estructuras de Datos.
Cómputo paralelo usando MPI: Simulaciones de N-cuerpos en la física
INFORMATICA I Funciones CLASE 13.
proPar Curso 13/14 4 2, 3, 2 2, 2 5 Computadores Paralelos
Leonardo Rey Emiliano Riccialdelli Federico Mobrici
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Programación con paso de mensajes: MPI
El Algoritmo de Floyd Capítulo 6.
Teo. 5: Paradigma "Message Passing"
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad

Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Signal, kill, sigaction y máscara de señales
LENGUAJE “C” Programación.
Semana 5 Subprogramas..
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
INTEL CONFIDENTIAL Metodología de programación paralela Intel Software College.
Pase de Mensaje MPI Elaborado: Betzaida Romero. Agenda  Historia y Evolución  Que es MPI  Conceptos  Ventajas  Desventajas  Ejemplo  Conclusiones.
Algoritmos Distribuidos Semana 1. Parte 2 Comunicación por Pase de Mensajes Claudia León Universidad Central de Venezuela Facultad de Ciencias Escuela.
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Analisis de Rendimiento.
Ejemplos openMP.
Programación de Memoria Compartida
Clase 10: Estructuras de datos y arreglos.
Sistemas Concurrentes: Paso de mensajes
Comunicación entre Procesos por pase de mensajes Universidad Simón Bolívar Departamento de Computación y T.I Sistemas de operación III CI-4822 Prof. Yudith.
Correo electrónico Internet
Programación de Memoria Compartida
Modelos de Pase de Mensajes
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.
Archivos Programación I MC Beatriz Beltrán Martínez.
Elementos básicos del lenguaje
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Unidad II Introducción a la programación en C++
Informática Ingeniería en Electrónica y Automática Industrial
Laboratorio Análisis y Diseño de Algoritmos 2 Biblioteca estándar de templates de C++ Standard Template Library (STL)‏ Motivación Ejemplo: Lista + Iterador.
Elementos básicos del lenguaje
MPI: Message Passing Interface Vera Ortíz Thimoty Duéñez Saúl Moncada Ma. Cristina Otero Carolina teja.
Aitor Viana Sánchez Octavio Hombrados Juan F. Ramos Jesús López Bustos
(agradecimiento: Ruben Weht
- 1 - Sistema Embebidos: Propiedades de los Lenguajes y SDL Agustín J. González 1s06 Se ha tomado como base el material generado por Peter Marwedel de.
APUNTADORES.
1 Definición y Conversión de datos Agustín J. González ELO-329.
El Cedazo de Eratosthenes Capítulo 5. Metas Analizar métodos de asignar bloques (“block allocation schemes”) Entender la función MPI_Bcast Estudiar métodos.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Unidad 2 – Gestión de Procesos
Empleando apuntadores una función puede entregar múltiples resultados / /Esta función no funciona #include void intercambiaValores(float a, float b) {
Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
PRINCIPIOS DE PROGRAMACIÓN
Práctica Profesional PHP.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Funciones Copyright © 2005 Unidad 1. Copyright © 2005 Objetivos del Aprendizaje Explicar la naturaleza y usos de las funciones. Describir algunas funciones.
MEMORIA DINÁMICA.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Agenda  Historia  Características  Mecanismos de concurrencia  Ejemplos  Desventajas  Accesibilidad  Conclusiones  Bibliografía.
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Message Passing Interface
Transcripción de la presentación:

MPISistemas Distribuidos1 MPI Un estándar de paso de mensajes para Clusters y Workstations Communications of the ACM, July 1996 J.J. Dongarra, S.W. Otto, M. Snir, and D.W. Walker Traducido por José Luis Elvira

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos2 Message Passing Interface (MPI) Librería de paso de mensajes Puede agregarse a lenguajes secuenciales (C, Fortran) Diseñado por un consorcio integrado por industria, academia, gobierno La meta es tener un estándard para el paso de mensajes

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos3 Modelo de Programación MPI Multiple Program Multiple Data (MPMD) –Los procesadores pueden ejecutar diferentes programas (a diferencia de SPMD) –Número de procesadores fijo (uno por procesador) –No soporta multi-hilos Comunicación Punto-a-Punto y colectiva

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos4 Funciones básicas de MPI MPI_INITInicializa MPI MPI_FINALIZETermina la computación MPI_COMM SIZENúmero of procesos MPI_COMM RANKMi identificador de proceso MPI_SENDEnvía un mensaje MPI_RECVRecibe un mensaje

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos5 Enlaces con Lenguajes Describe para un lenguaje base dado –Sintaxis concreta –Convenciones para el manejo de errores –Modos de los parámetros Lenguajes base populares: –C –Fortran

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos6 Ejemplo 1 #include #include int main (argc, argv) int argc; char *argv[]; { int rank, size, MPI_Init (&argc, &argv); /* starts MPI */ MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */ MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */ printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos7 Funciones int MPI_Init (&argc, &argv); int MPI_Comm_rank (MPI_COMM_WORLD, &rank); Es una rutina de inicialización y debe ser llamada antes de cualquier otra rutina de MPI. Únicamente se debe llamar una vez. Un proceso es capaz de obtener su identificador de proceso

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos8 Funciones int MPI_Comm_size (MPI_COMM_WORLD, &size); int MPI_Finalize(); Al hacer la llamada a MPI_Finalize(void) ya no se podrá hacer una llamada a cualquier función MPI Ni siquiera MPI_Init().MPI_Init() El usuario debe cerciorarse que todos las comunicaciones pendientes que involucran a un proceso estén terminadas antes de que el proceso llame a la rutina MPI_Finalize(). Determinar el número de procesos

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos9 Paso de mensajes Punto-a-Punto Mensajes enviados de un procesador a otro son ordenados como FIFO Los mensajes enviados por diferentes procesadores llegan de forma no determinística

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos10 Paso de mensajes Punto-a-Punto El receptor puede especificar la fuente –fuente = identidad del emisor => nombrado simétrico –fuente = MPI_ANY_SOURCE => nombrado asimétrico –ejemplo: especifica el emisor del siguiente renglón pivote en ASP El receptor también puede especificar una etiqueta –Distingue entre diferentes tipos de mensajes –Similar to operation name in SR or entry name in ADA

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos11 Funciones int MPI_Send( void *buf, int count, MPI_Datatype datatype, int dest, int tag,MPI_Comm comm ) Envia datos en un mensaje Los datos a enviar inician a partir del primer elemento indicado en buf, El número de elementos se indica en count El tipo de datos de cada elemento en buffer se indica en datatype identificador del destinatario se indica en dest Bandera del mensaje en tag El comunicador en comm El comunicador en comm. Es un comunicador predefinido que consiste de todos los procesos en ejecución cuando la ejecución del programa inicia

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos12 Funciones int MPI_Recv( void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status ) Recibir datos de un mensaje Los datos recibidos se almacenan en buf La dirección de una estructura que indica el estatus de la recepción Hay que indicar como parámetros El número máximo de elementos a recibir está establecido en count Tipo de datos de cada elemento en buffer se indica en datatype Identificador del remitente en source Bandera del mensaje en tag El comunicador en comm. Es un comunicador predefinido que consiste de todos los procesos en ejecución cuando la ejecución del programa inicia

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos13 Ejemplos (1/2) int x, status; float buf[10]; MPI_SEND (buf, 10, MPI_FLOAT, 3, 0, MPI_COMM_WORLD); /* envía 10 floats al proceso 3 MPI_COMM_WORLD = todos los procesos */ MPI_RECV (&x, 1, MPI_INT, 15, 0, MPI_COMM_WORLD, &status); /* recibe 1 entero desde el proceso 15 */ MPI_RECV (&x, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); /* recibe 1 entero desde cualquier proceso */

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos14 Ejemplos (2/2) int x, status; #define NEW_MINIMUM 1 MPI_SEND (&x, 1, MPI_INT, 3, NEW_MINIMUM, MPI_COMM_WORLD); /* send message with tag NEW_MINIMUM */. MPI_RECV (&x, 1, MPI_INT, 15, NEW_MINIMUM, MPI_COMM_WORLD, &status); /* receive 1 integer with tag NEW_MINIMUM */ MPI_RECV (&x, 1, MPI_INT, MPI_ANY_SOURCE, NEW_MINIMUM, MPI_COMM_WORLD, &status); /* receive tagged message from any source */

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos15 Formas de pasar los mensajes (1) Modos de comunicación: –Standard El sistema decide cuando el mensaje es almacenado en un buffer –Almacenado en buffer: El usuario explícitamente controla el almacenamiento en el buffer –Síncrono: El send espera a que haya un receive –Listo: El send puede iniciar solo si se ha posteado un receive correspondiente

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos16 Formas de pasar los mensajes (2) Comunicación no-bloqueante –Cuando un send bloqueante regresa, el buffer de memoria puede ser reusado –Un receive bloqueante espera un mensaje –Un send no-bloqueante regresa inmediatamente (peligroso) –Un receive no-bloqueante a través de IPROBE

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos17 Receive no-bloqueante Número de elementos de datos en el mensaje MPI_GET_COUNT Espera un mensaje pendienteMPI_PROBE Checar mensajes pendientesMPI_IPROBE Etiqueta del mensajestatus.MPI_TAG Identifica emisorstatus.MPI_SOURCE Tamaño del mensajeMPI_GET_COUNT (status, datatype, &count) StatusMPI_PROBE (source, tag, comm, &status)

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos18 Ejemplo: Checar un mensaje pendiente int buf[1], flag, source, minimum; while (...) { MPI_IPROBE(MPI_ANY_SOURCE, NEW_MINIMUM, comm, &flag, &status); if (flag) { // Si hay un mensaje /* handle new minimum */ source = status.MPI_SOURCE; // Determinar quien lo tiene MPI_RECV (buf, 1, MPI_INT, source, NEW_MINIMUM, comm, &status); minimum = buf[0]; }... /* compute */ }

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos19 Ejemplo: Recibiendo un mensaje con un tamaño desconocido int count, *buf, source; MPI_PROBE(MPI_ANY_SOURCE, 0, comm, &status); source = status.MPI_SOURCE; MPI_GET_COUNT (status, MPI_INT, &count); buf = malloc (count * sizeof (int)); MPI_RECV (buf, count, MPI_INT, source, 0, comm, &status);

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos20 Operaciones Globales – Comunicación Colectiva Comunicación coordinada entre todos los procesos Funciones: MPI_BARRIERSincroniza todos los procesos MPI_BCASTEnvía datos a todos los procesos MPI_GATHERRecopilar datos de todos los procesos MPI_SCATTERDispersar datos a todos los procesos MPI_REDUCEOperación de reducción MPI_REDUCE ALLReducción, todos los procesos obtienen el resultado

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos21 Barreras int MPI_Barrier (MPI_Comm comm ) Sincroniza un grupo de procesos Todos los procesos se bloquean hasta que todos hayan llegado a la barrera Comunmente usado al final de un ciclo en algoritmos iterativos

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos22 Figura 8.3 del libro de Foster

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos23 Reducción Combina valores provistos de diferentes procesos Los resultados se envían a un procesador (MPI REDUCE) o a todos los procesadores (MPI REDUCE ALL) Usado con operaciones conmutativas y asociativas –MAX, MIN, +, x, AND, OR

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos24 Ejemplo 1 Operación global mínima MPI_REDUCE (inbuf, outbuf, 2, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD) outbuf[0] = mínimo entre los inbuf[0] de todos los procesos outbuf[1] = mínimo entre los inbuf[1] de todos los procesos

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos25 Figura 8.4 del libro de Foster

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos26 Figura 8.5 del libro de Foster

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos27 Modularidad Los programas en MPI usan librerías Las funciones de librería pueden enviar mensajes Estos mensajes no deben interferir con los mensajes de la aplicación Las etiquetas (tags) no resuelven ese problema

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos28 Comunicadores Un comunicador denota un grupo de procesos (contexto) MPI_SEND y MPI_RECV especifican un comunicador MPI_RECV solo puede recibir mensajes enviados al mismo comunicador Las funciones de librería pueden usar comunicadores separados, enviados como parámetro

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos29 Discusión Basado en librería: –No se requieren modificaciones al lenguaje La sintaxis es compleja La recepción del mensaje está basada en la identidad del emisor y etiqueta de la operación, pero no en el contenido del mensaje

Departamento de Electrónica, Sistemas e Informática MPISistemas Distribuidos30 Sintaxis SR: call slave.coordinates(2.4, 5.67); in coordinates (x, y); MPI: #define COORDINATES_TAG 1 #define SLAVE_ID 15 float buf[2]; buf[0] = 2.4; buf[1] = 5.67; MPI_SEND (buf, 2, MPI_FLOAT, SLAVE_ID, COORDINATES_TAG, MPI_COMM_WORLD); MPI_RECV (buf, 2, MPI_FLOAT, MPI_ANY_SOURCE, COORDINATES_TAG, MPI_COMM_WORLD, &status);