Introducción a MPI Clase 3 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo.

Slides:



Advertisements
Presentaciones similares
Leonel Morales Díaz Ingeniería Simple
Advertisements

Análisis Sintáctico Capítulo 4.
Programación de Computadores
Programación de Computadores
PROGRAMACIÓN CON VISUAL BASIC.
Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título.
Profesor Hermann Pempelfort. Punto y coma Permite que no se muestre por pantalla la acción o resultado ejecutado. Ejemplo1: x = 3 Ejemplo2: x = 3; Ejemplo3:
Estructuras de decisión en C
Algoritmos paralelos Lab. 1: Introducción
Fundamentos de la Programación Estructurada
Resolución de Problemas y Algoritmos Buffer - Read & Readln
EJERCICIOS DE PROGRAMACION
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 1: Consideraciones acerca de la eficiencia.
Unidad 4: Análisis de algoritmos (parte II)
ProParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,
FORTRAN 90 arreglos.
FORTRAN 90 Subprogramas.
FORTRAN 77 y Cómputo Científico
Programación con paso de mensajes: MPI
Arreglos (vectores, matrices, ….)
C lase 10 COMPUTACION /17/2014Computacion - Fac. Ingeniería2  Ademas de los ya vistos (tipos simples), puede usarse como parámetros variables.
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
Multiprogramación Procesos Cecilia Hernández
Estructuras de Control
Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.
Trabajo Practico 2 Nombre: Indira Diana. Ejercicio numero 1 C C Numero = 0 Numero > 0 numero positivo nulo negativo F F Verdadero Ingresar un número cualquiera.
Brazos Bloque IF Permite que se ejecuten una serie de tareas si y sólo si una expresión lógica es verdadera. IF(logical_exp) then sentencia1 sentencia2.
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Arrays (introducción)
1 Concurrencia Procesos y Programas. 2 Establecer Comunicación entre procesos (memoria común)
Unidad III Administración de procesos
Variables y Shapes. Variables ► Lugares de la memoria que reciben un nombre ► En VB no es necesario declarar las variables  A=8 ► Se declaran con Dim.
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,
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.
Tipos de Paralelismo Paralelismo de datos: cada procesador ejecuta la misma tarea sobre diferentes conjuntos o subregiones de datos Paralelismo de tareas:
Modelos de Pase de Mensajes
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
Esquemas de Interrupción
Trabajo Práctico 2 Agustin Arias 1ºB. Ejercicio 1 Ingresar un número cualquiera e informar si es positivo, negativo o nulo.
Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 3: Análisis de algoritmos (parte I)
1Hacer in programa que lea un número desconocido de datos reales de un disco y detecte el final de los datos en el archivo 2Definir entradas y salidas.
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004.
Teoría – Alejandro Gonzalez
ProParCurso 14/15 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,
Vectores y Matrices.
Teo. 4: Operaciones básicas de comunicación
Comunicadores Colectivos BARRIER Esta es una de las primeras que ya vimos. Bloquea todos los procesos hasta que todos los procesos del Comm la llaman.
Comunicaciones punto a punto P2P
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
Inicialización de arreglos de 2 variables INTEGER, DIMENSIÓN (4, 3) : : ini DO i=1, 4 DO j= 1,3 ini(i, j) = j END DO i=1123 i=2123 i=3123 i=4123 j=1j=2j=3.
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.
Camila Rodríguez 1º B. DIAGRAMA: PANTALLA: PROGRAMACION Private Sub CommandButton1_Click() Dim NumeroA As Integer Label1 = "ingrese un numero" NumeroA.
Ejemplos del Diseño de Algoritmos Paralelos (Transparencias de McGraw-Hill Modificadas)
Máquinas de Soporte Vectorial. (Clase Nº 3: Ideas Preliminares)
Introducción a MPI Clase 5 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo.
Algoritmos paralelos Lab. 4: MPI intermedio Glen Rodríguez.
Camila Rodríguez 1º B. DIAGRAMA: PANTALLA: PROGRAMACION Private Sub CommandButton1_Click() Dim NumeroA As Integer Label1 = "ingrese un numero" NumeroA.
Prof. Víctor Aquino Urrutia
Método de cofactores para cálculo de determinantes
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Camilo Andrés Salazar González FORTRAN.  Estructura program circulo Real :: r, area write (*,*) 'Escribe el radio r:' read (*,*) r area = *r*r.
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.
Message Passing Interface
Arreglos en Java.
Transcripción de la presentación:

Introducción a MPI Clase 3 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo

Ejemplo Quiero calcular  como : Ejemplo

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

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 if(myid.eq.0) then 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) endif h = 1.0d0/n Pi.f-1/2

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 enddo 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 endif call MPI_FINALIZE(rc) end Pi.f-2/2

En log 2 (p) pasos comunique el dato a los p-1 procesos. Si p=1024 gano un factor 10! 0+1+1= 2+3+1=

Con las comunicaciones punto-a-punto puedo hacer (casi) todo!!! aunque se necesitaría algo mejor para hacerlo más sencillo... Comunicaciones colectivas AoAo Datos Procesos AoAo AoAo AoAo AoAo Ejemplo: Broadcast MPI_Bcast(datos, tamaño, tipo, origen, comm, error) Comm. Colectivos

if(myid.eq.0) then 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) endif call MPI_BCAST(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) En nuestro ejemplo para calcular  : Broadcast

A veces uno está interesado en calcular algo globalmente. En nuestro ejemplo de , quisieramos simplificar: ! collect all the partial sums if(myid.eq.0) then pi=0.d0 do i=1,size-1 call MPI_RECV(mypi,1,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE,,MPI_COMM_WORLD,status,ierr) pi=pi+mypi enddo else call MPI_SEND(mypi,1,MPI_DOUBLE_PRECISION,0,99,MPI_COMM_WORLD,ierr) endif MPI_Reduce (mypi, pi, 1, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_WORLD,ierr) Reduce

include 'mpif.h' double precision mypi, pi, h, sum, x, f, a integer n, myid, size, i, rc, ierr, status 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 ) if(myid.eq.0) read(5,*) n call MPI_BCAST(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) h = 1.0d0/n sum = 0.0d0 do i = myid+1, n,size x = h * (dble(i) - 0.5d0) sum = sum + f(x) enddo mypi = h * sum call MPI_REDUCE > (mypi,pi,1,MPI_DOUBLE_PRECISION,MPI_SUM,0, MPI_COMM_WORLD,ierr) if (myid.eq. 0) write(6, '(" pi es aproximadamente:", F18.16)') pi call MPI_FINALIZE(rc) end Pi.f-2/2

Comunicaciones en más detalle

Comunicaciones Punto a Punto más comunes MPI_SEND(datos, tamaño, tipo_de_dato, destino, tag, comm, ierror) Ej:MPI_SEND(n,1,MPI_INTEGER,i,1,MPI_COMM_WORLD,ierr) envia 1 numero entero “n” al proceso i de comm_world MPI_SEND(a,5,MPI_REAL,4,1,MPI_COMM_WORLD,ierr) envia los 5 numeros reales del vector “a(5)” al proceso 4 de comm_world MPI_RECV(datos, tamaño, tipo_de_dato, origen, tag, comm, status,ierror) Ej: MPI_RECV(n,1,MPI_INTEGER,0,1,MPI_COMM_WORLD,status,ierr)

Para recordar: MPI_SEND y MPI_RECV estándar son bloqueantes!! Comunic. Punto a Punto 2 size es el tamaño de los datos threshold es el espacio de buffer disponible Cualquiera de las 2 Situaciones puede ocurrir

P0 para y espera hasta que P1 le da el OK P0 guarda el dato en un buffer y continua y lo envia luego cuando P1 le da el OK El programa falla Que pasa si el proceso 1 no esta listo para recibir? Supongamos que: MPI_Send(n,0) MPI_Recv(n,1)

3 variantes de Send (y Recv): Comunic. Punto a Punto 3 Buffered: MPI_Bsend(.....) S guarda en un buffer el mensaje y lo envia cuando R lo pida. Hay que reservar espacio de buffer con la rutina MPI_Buffer_attach(....) Ready: MPI_Rsend(.....) Puede usarse cuando S esta seguro que ya le enviaron el aviso que R esta listo. Si R no estaba listo el comportamiento esta indefinido y es un error de programacion Sincrónico:MPI_Ssend(.....) Permite hacer programas “seguros” ya que no utiliza espacios de buffer. Portabilidad del codigo.

Comunicaciones Colectivas Involucran comunicación coordinada dentro de un grupo de procesos identificados por un comunicador (ej. MPI_comm_world) Todas las rutinas son bloqueantes No hay tags involucrados Comm. Colectivos 1

Tres tipos de comunicaciones colectivas: De sincronización De transferencia de datos De cálculo 1) Rutinas de sincronización: call MPI_Barrier(comm, ierror) Todos los procesos del comunicador comm esperan al llegar a la barrera hasta la llegada de todos. Luego continuan todos al mismo tiempo. Comm. Colectivos 2

2) Rutinas de transferencia de datos: Broadcast, Gather, Gatherv, Scatter, Scatterv Allgather, Allgatherv, Alltoall, Alltoallv AoAo Datos Proces. AoAo AoAo AoAo AoAo Broadcast MPI_Bcast(datos, tamaño, tipo, origen, comm, error) Broadcast

if(myid.eq.0) then 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) endif call MPI_BCAST(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) En nuestro ejemplo para calcular  : Broadcast: ej.

AoAo A1A1 A2A2 A3A3 Datos Proces. AoAo A1A1 A2A2 A3A3 MPI_Scatter(datos-o, tam-o, tipo-o, datos-r, tam-r, tipo-r, raíz, comm, error) scatter gather MPI_Gather(datos-o, tam-o, tipo-o, datos-r, tam-r, tipo-r, raíz,comm, error) Scatter/gather

Ejemplo de MPI_Gather: multiplicación de una matriz por un vector C=A*B, A(100,00) B(100) C(100) con 4 procesos dimension aloc(25,100), b(100), cloc(25), ctotal(100) integer root data root/0/ do i=1,25 cloc(i)=0. do k=1,100 cloc(i)=cloc(i) + aloc(i,k)*b(k) enddo enddo call MPI_GATHER(cloc, 25, MPI_REAL, ctotal, 25, MPI_REAL, root, MPI_COMM_WORLD, ierr) Ejemplo de gather Nota: sólo “root” junta (recibe) los datos

A B C P0 P1 P2 P3 Cloc Aloc C P0 (root) MPI_Gather

A P0 P1 P2 P3 Aloc P0 (root) MPI_Scatter P0 reparte (dispersa) la matriz A