Message Passing Interface

Slides:



Advertisements
Presentaciones similares
Computadores de alta velocidad (la lista top500).
Advertisements

Programando con OpenMP*
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.
Programacion de Computadora Prof. Obadiah Oghoerore.
Funciones. Programación, Algoritmos y Estructuras de Datos.
INFORMATICA I Funciones CLASE 13.
proPar Curso 13/14 4 2, 3, 2 2, 2 5 Computadores Paralelos
ESTRUCTURA DEL LENGUAJE C
Aplicaciones Multihilo
SOBRECARGA DE FUNCIONES
Programación con paso de mensajes: MPI
El Algoritmo de Floyd Capítulo 6.
Multiprogramación Procesos Cecilia Hernández
Programa “Coordenadas” Ing. Arturo Díaz Vargas Departamento de Sistemas División de Ciencias Básicas e Ingeniería UNIVERSIDAD AUTONOMA METROPOLITANA.
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Pase de Mensaje MPI Elaborado: Betzaida Romero. Agenda  Historia y Evolución  Que es MPI  Conceptos  Ventajas  Desventajas  Ejemplo  Conclusiones.
Aplicado a programas openMP
Ejemplos openMP.
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,
Programación de Memoria Compartida
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.
Modelos de Pase de Mensajes
Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004.
Introducción a MPI Clase 3 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo.
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
APUNTADORES.
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.
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 22 de Mayo de 2004.
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Aspectos básicos de la computación paralela. Tipos de computacion paralela.
1 Programación paralela en TOL. 1.Para qué? 2.Enfoque de paralelización. 3.API de cálculo distribuido: TPA 4.Ejemplo: producto de.
El lenguaje de Programación C Fernando J. Pereda.
FACULTAD DE INGENIERÍA CIVIL Y MECÀNICA CARRERA DE INGENIERÍA MÈCANICA EMPLEO DE NUEVAS TECNOLOGÍAS DE INFORMACIÓN Y COMUNICACIÓN (NTIC´s II) TEMA: PASOS.
“Alternativa para procesamiento de datos oceanográficos que requieren gran capacidad de cómputo, por medio de programación en paralelo con el programa.
Programación Concurrente y Paralela (PCyP) Dr
Capítulo 5 Silberschatz Galvin
Conceptos Básicos Prof. Carlos Rodríguez Sánchez
Arreglos y cadenas de texto
Mecanismos de Comunicación usando Paso de Mensajes
Programación en C - manejo de Archivos
Procesos Concurrentes
METODOLOGIA #include <stdio.h> #include <conio.h> main() {
Daniela George Jiménez
FUNCIONES Y PROCEDIMIENTOS
Exclusión mutua de secciones
Sistemas Distribuidos
ESTRUCTURAS DE CONTROL REPETITIVAS
SISTEMAS DISTRIBUÍDOS
GRIDS & e- Ciencia Curso Postgrado CSIC Junio 2006, Santander
ALGORITMO PARALELO PARA LA RESOLUCIÓN DE SISTEMAS DE ECUACIONES APLICABLES AL MÉTODO DE LOS ELEMENTOS FINITOS Mroginski, Javier L. - Di Rado, H. Ariel.
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
PROCESOS COMENZAR.
INGENIERÍA INFORMÁTICA Y DE SISTEMAS Docente: Mg Ing. Jesús Ocaña Velásquez ARQUITECTURA DEL COMPUTADOR.
Hello hola.
Expositor: Juan Daniel Carrillo Medrano DIRECTOR: Ing. Diego Marcillo
Funciones del Analizador Sintáctico
El entorno de Desarrollo de Dev-C++
Fundamentos de Informática Especialidad de Electrónica –
proPar Curso 18/ , 3, 2 2, 2 4 Computadores Paralelos
LENGUAJE “C” Programación.
INTRODUCCIÓN A LA PROGRAMACIÓN ABRAHAM SOPLA MASLUCÁN MAESTRO EN CIENCIAS DE LA COMPUTACIÓN INSTITUTO TECNOLÓGICO DE MONTERREY.
Balance de Carga Adaptable bajo Cómputo Paralelo en Clusters
MPI - “Programación” Rogelio Ferreira Escutia
Puntero #include int main(int argc, char *argv[]) { int myVar = 378; printf("El valor de la variable es: %d\n", myVar); printf("Dirección de memoria de.
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

Message Passing Interface Juan G. Lalinde-Pulido Director Científico Centro de Computación Científica Apolo

Agenda Programación concurrente, paralela y distribuida Modelo de paso de mensajes MPI Básico Arquitectura de MPI Un ejemplo: Hola mundo! Conceptos fundamentales

Agenda Programación concurrente, paralela y distribuida Modelo de paso de mensajes MPI Básico Arquitectura de MPI Un ejemplo: Hola mundo! Conceptos fundamentales

Programación concurrente, paralela y distribuida Algoritmo: Colección finita de pasos que en un tiempo finito producen un resultado. Proceso computacional: Colección finita de pasos que producen un resultado. Programación secuencial: determinista Programación no secuencial: Programación concurrente: No determinista y tolerancia a fallas Programación paralela: Múltiples procesos (o hilos) que comparten memoria Programación distribuida: No se comparte memoria.

Programación concurrente, paralela y distribuida

Programación concurrente, paralela y distribuida Programación Paralela (memoria compartida) Los procesos comparten el espacio de direccines de memoria La aplicación debe garantizar que no haya pérdida de consistencia Paralelización Transparente El compilador hace “magia” con los programas secuenciales Paralelización basada en directivas El compilador necesita instrucciones de parte del programador (i.e., OpenMP) Paso de Mensajes Comunicación explícita entre los procesos

Programación concurrente, paralela y distribuida

Programación concurrente, paralela y distribuida Programación paralela: Cada proceso tiene su propio contexto Un proceso contiene múltiples hilos

Programación concurrente, paralela y distribuida

Programación concurrente, paralela y distribuida

Programación concurrente, paralela y distribuida Programación distribuida: Cada proceso tiene sus propios recursos Deben intercambiar información y sincronizar su funcionamiento

Programación concurrente, paralela y distribuida Programación distribuida: Cada proceso tiene sus propios recursos Deben intercambiar información y sincronizar su funcionamiento

Programación concurrente, paralela y distribuida

Agenda Programación concurrente, paralela y distribuida Modelo de paso de mensajes MPI Básico Arquitectura de MPI Un ejemplo: Hola mundo! Conceptos fundamentales

Modelo de paso de mensajes La comunicación entre procesos requiere: Sincronización Movimiento de datos

Agenda Programación concurrente, paralela y distribuida Modelo de paso de mensajes MPI Básico Arquitectura de MPI Un ejemplo: Hola mundo! Conceptos fundamentales

MPI Básico MPI: Message Passing Interface Es un API para programación distribuida El programador es el responsable de garantizar: Sincronización Intercambio de Información MPI resuelve el problema de cómo llevar información de un nodo a otro

MPI Básico Arquitectura de MPI

MPI Básico Arquitectura de MPI

MPI Básico /*The Parallel Hello World Program*/ Ejemplo: Hola mundo! /*The Parallel Hello World Program*/ #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d\n",node); MPI_Finalize(); } /*The Parallel Hello World Program*/ #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d\n",node); MPI_Finalize(); } 21

MPI Básico Funciones fundamentales Inicializar MPI: int MPI_Init(int *argc, char ***argv) Determinar el número de procesos que forman el grupo: int MPI_Comm_size(MPI_Comm comm, int *size) Determinar el id del proceso: int MPI_Comm_rank(MPI_Comm comm, int *rank) Enviar un mensaje (bloqueante): int dest,int tag, MPI_Comm comm) Recibir un mensaje: int source,int tag, MPI_Comm comm, MPI_Status *status) Terminar la ejecución: int MPI_Finalize(void)

MPI Básico /*The Parallel Hello World Program*/ Ejemplo: Hola mundo! #include "mpi.h" #include <stdio.h> int main( int argc, char *argv[] ) { int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); printf( "I am %d of %d\n", rank, size ); MPI_Finalize(); return 0; } /*The Parallel Hello World Program*/ #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d\n",node); MPI_Finalize(); } 23

MPI Básico /*The Parallel Hello World Program*/ Ejemplo: Hola mundo! #include <mpi.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { MPI_Init(NULL, NULL); int world_rank; MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); /*The Parallel Hello World Program*/ #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d\n",node); MPI_Finalize(); } 24

MPI Básico /*The Parallel Hello World Program*/ Ejemplo: Hola mundo! int token; if (world_rank != 0) { MPI_Recv(&token, 1, MPI_INT, world_rank - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); printf("Process %d received token %d from process %d\n", world_rank, token,world_rank - 1); } else { token = -1; } MPI_Send(&token, 1, MPI_INT, (world_rank + 1) % world_size, 0, MPI_COMM_WORLD); /*The Parallel Hello World Program*/ #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d\n",node); MPI_Finalize(); } 25

MPI Básico /*The Parallel Hello World Program*/ Ejemplo: Hola mundo! if (world_rank == 0) { MPI_Recv(&token, 1, MPI_INT, world_size - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); printf("Process %d received token %d from process %d\n", world_rank, token, world_size - 1); } MPI_Finalize(); /*The Parallel Hello World Program*/ #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { int node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d\n",node); MPI_Finalize(); } 26

MPI Básico Los procesos se pueden organizar en grupos. Cada mensaje es envía en un contexto y debe ser recibido en el mismo contexto. Un comunicador está compuesto por un grupo y un contexto. Un proceso se identifica por su rango en el grupo asociado con un comunicador. Hay un comunicador por defecto cuyo grupo contiene todos los procesos, y se llama MPI_COMM_WORLD