(agradecimiento: Ruben Weht

Slides:



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

Algoritmos paralelos Lab. 1: Introducción
Maquina Virtual La máquina virtual de Java o JVM es un entorno de ejecución para aplicaciones de Java, cuya finalidad es la de adaptar los programas Java.
INTRODUCCIÓN ESTADO DE LA TÉCNICA PROCESAMIENTO DISTRIBUIDO CON MPI PROCESAMIETNO DISTRIBUIDO DE IMÁGENES GENÉRICO CON VTK PROCESAMIENTO DISTRIBUIDO DE.
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Fundamentos de la Programación Estructurada
Programación I Teoría III
Programación, Algoritmos y Estructuras de Datos
Funciones. Programación, Algoritmos y Estructuras de Datos.
FUNCIONES EN C.
FORTRAN 90 Subprogramas.
FORTRAN 77 y Cómputo Científico
Programación Estructurada
PROGRAMACIÓN DE SISTEMAS DE MEMORIA COMPARTIDA (SMP):
Funciones Funciones De biblioteca Definidas por el usuario
Arreglos (vectores, matrices, ….)
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
Funciones y procedimientos
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Modificadores.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Unidad I Java y C++ : Similitudes y diferencias
Programa “Coordenadas” Ing. Arturo Díaz Vargas Departamento de Sistemas División de Ciencias Básicas e Ingeniería UNIVERSIDAD AUTONOMA METROPOLITANA.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Archivos Programación.
FORMULARIOS HTML TIPOS DE ELEMENTOS DE FORMULARIO n Campos de entrada de datos. n Campos de datos de varias líneas. n Listas. n Botones. n Textos descriptivos.
Semana 5 Subprogramas..
Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
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.
1 Concurrencia Procesos y Programas. 2 Establecer Comunicación entre procesos (memoria común)
2. ASYNCRONOUS TRANSFER MODE 2.1Características generales 2.2 Modelo de referencia del protocolo 2.3 Categorías de servicio ATM.
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Índice. Revisando conceptos acerca de la memoria.
Archivos.
Introducción a la Programación. Lenguaje de Máquina.
Estructuras.
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
COMPUTACION 2009 Clase 6 Clase 7.
UNIVERSIDAD NACIONAL DEL NORDESTE
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.
Programación de Memoria Compartida
Tipos de Paralelismo Paralelismo de datos: cada procesador ejecuta la misma tarea sobre diferentes conjuntos o subregiones de datos Paralelismo de tareas:
Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.
Introducción a los punteros Prof. Domingo Hernández.
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004.
NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En.
Bibliotecas Nacen a partir de la necesidad de la compilación por módulos. Lo cual consiste en separar el programa principal de aquellas funciones que se.
Introducción a MPI Clase 3 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo.
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
- 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.
PROGRAMACIÓN MULTIMEDIA
- 1 - Sistema Embebidos: Propiedades de los Lenguajes y SDL Agustín J. González 1s07 Se ha tomado como base el material generado por Peter Marwedel de.
Radio Volumen esfera m. m #include.
Introducción a MPI Clase 5 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo.
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 22 de Mayo de 2004.
PROTOCOLOS Introducción El primero de estos elementos es el origen del mensaje, o emisor. El origen de un mensaje puede ser una persona o un dispositivo.
Funciones Copyright © 2005 Unidad 1. Copyright © 2005 Objetivos del Aprendizaje Explicar la naturaleza y usos de las funciones. Describir algunas funciones.
Programación en Visual Basic
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
SISTEMAS ELECTRÓNICOS 3ºGIERM1 1. Introducción 2. Tipos de datos 3. Estructuras típicas de programación 4. Manejo de bits Tema 7. Programación de microcontroladores.
Camilo Andrés Salazar González FORTRAN.  Estructura program circulo Real :: r, area write (*,*) 'Escribe el radio r:' read (*,*) r area = *r*r.
Message Passing Interface
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.
Transcripción de la presentación:

(agradecimiento: Ruben Weht ruweht@cnea.gov.ar) Titulo Introducción a MPI Clase 2 Marcelo Rozenberg (agradecimiento: Ruben Weht ruweht@cnea.gov.ar)

Nociones basicas de MPI Objetivo: Nociones basicas de MPI Datos Mensajes Comunicadores Comprender un programa simple Objetivo

Paradigma de Transferencia de Mensajes Trans-mensajes Cada procesador corre un programa Todas las variables son privadas La comunicación se realiza a través de subrutinas especiales

Idea SPMD: Single Program/Multiple Data Todos los procesadores trabajan con el mismo programa, pero los datos pueden ser diferentes. Como asignar tareas diversas con datos diversos? SPMD MAIN IF (el proceso sera el controlador) THEN CALL CONTROLADOR ( /* Argumentos /* ) ELSE CALL WORKER ( /* Argumentos /* ) ENDIF END

Idea SPMD: Single Program/Multiple Data Todos los procesadores trabajan con el mismo programa, pero los datos pueden ser diferentes. Como asignar tareas diversas con datos diversos? SPMD MAIN IF (el proceso sera el controlador) THEN CALL MASTER ( /* Argumentos /* ) ELSE CALL SLAVE ( /* Argumentos /* ) ENDIF END

procesos vs. procesadores Nota: procesos vs. procesadores

Conceptos basicos Mensajes Acceso Direcciones Comunicaciones punto a punto Comunicaciones colectivas

Conceptos basicos Acceso Definicion de maquinas que participan en el calculo (ej: de los 40 nodos, cuales uso) Defino procesos Varios procesos pueden correr en la misma maquina

Conceptos basicos Mensajes Quien lo manda Donde esta el dato Que tipo de dato es Cuantos son Quien lo recive Donde debe quedar en el receptor Cuantos datos el receptor esta preparado para recibir (tamaño del buffer)

Conceptos basicos Direcciones - Los mensajes necesitan una direccion, asignar a cada maquina (proceso) una direccion (numero)

Conceptos basicos Comunicaciones punto a punto Asincronica (carta) se cuando sale, ignoro cuando llega Sincronica (fax) se cuando sale, se cuando llega Bloqueante (fax comun) No bloqueante (fax con memoria)

Conceptos basicos Comunicaciones colectivas Barreras Los procesos llegan a un punto y paran, esperando hasta la llegada de todos. Luego continuan. Broadcast (emision de radio) Una maquina le pasa un dato a todas las otras Reduccion Como en una votacion, todas las maquina le aportan un dato a una dada y esta reduce todos los datos a uno solo

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!) Que es MPI

¿¿Cómo funciona?? Biblioteca El primer paso será invocar a la biblioteca adecuada (C: mpi.h, F: mpif.h) p.e.: #include “mpi.h” 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) Todo programa MPI tiene que ser inicializado y finalizado (para liberar correctamente los recursos).

Un programa MPI: el esquema básico Prog.Basico 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); } 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

(Pueden definirse otros comunicadores si es necesario) 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. Comunicador 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)

“Hola Mundo” en FORTRAN con MPI Hola Mundo F PROGRAM main include ’mpif.h’ integer errcode, rank, size call MPI_INIT (errcode) call MPI_Comm_rank (MPI_COMM_WORLD, rank, errcode) call MPI_Comm_size (MPI_COMM_WORLD, size, errcode) print*, “Hola Mundo! Soy el proceso”, rank, “ de”, size call MPI_FINALIZE (errcode) end

“Hola Mundo” en C con MPI Hola Mundo C #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( “Hola Mundo! Soy el proceso %d de %d\n”, rank,size); MPI_Finalize (); exit (0); }

Intercambio de Mensajes Que es un Mensaje ¿Qué es un mensaje? Son paquetes de datos que se intercambian entre los diferentes subprogramas. Un mensaje se compone de: datos + direccionamiento: Punto de origen de los datos Tipo de datos a intercambiar Longitud de los datos a intercambiar Destino (u origen) Una etiqueta que lo distinga Comunicador

El usuario puede construir otros tipos de datos. Tipo de datos basicos El usuario puede construir otros tipos de datos. MPI soporta arquitecturas heterogéneas, la definición del tipode datos a intercambiar hace que sean compatibles.

Comunicaciones Punto a Punto Es la forma mas simple de transmisión de mensajes Un proceso envia un mensaje a otro Existen diferentes formas de hacerlo (sincrónicamente, asincrónicamente, bloqueante, no bloqueante, etc).

Quiero calcular como : Ejemplo Ejemplo Quiero calcular como :

double precision mypi, pi, h, sum, x, f, a integer n, myid, size, i, rc, ierr, status c --- funcion a integrar f(a) = 4.d0 / (1.d0 + a*a) c --- Numero de intervalos read(5,*) n c --- tamaño del intervalo h = 1.0d0/n c --- realiza las sumas sum = 0.0d0 do i = 1, n x = h * (dble(i) - 0.5d0) sum = sum + f(x) enddo mypi = h * sum pi=mypi write(6, '(" pi es aproximadamente:", F18.16)') pi end Pi.f-1/2

double precision mypi, pi, h, sum, x, f, a include 'mpif.h' double precision mypi, pi, h, sum, x, f, a integer n, myid, size, i, rc, ierr, status c --- funcion a integrar f(a) = 4.d0 / (1.d0 + a*a) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, size, ierr ) print *, "Proceso ", myid, " de ", size, " funcionando" if(myid.eq.0) then read(5,*) n endif do i=1,size-1 call MPI_SEND(n,1,MPI_INTEGER,i,1,MPI_COMM_WORLD,ierr) enddo else call MPI_RECV(n,1,MPI_INTEGER,0,1,MPI_COMM_WORLD,status,ierr) h = 1.0d0/n Pi.f-1/2

call MPI_SEND(mypi,1,MPI_DOUBLE_PRECISION,0,99, MPI_COMM_WORLD,ierr) sum = 0.0d0 do i = myid+1, n, size x = h * (dble(i) - 0.5d0) sum = sum + f(x) enddo mypi = h * sum if(myid.eq.0) then pi=mypi do i=1,size-1 call MPI_RECV(mypi,1,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,status,ierr) pi=pi+mypi else call MPI_SEND(mypi,1,MPI_DOUBLE_PRECISION,0,99, MPI_COMM_WORLD,ierr) endif if (myid .eq. 0) then write(6, '(" pi es aproximadamente:", F18.16)') pi call MPI_FINALIZE(rc) end Pi.f-2/2