T ´ ECNICAS DE C ´ ALCULO EN PARALELO: Directivas OpenMP y MPI (Message Passing Interface) J. Par´ ıs, H. G ´ omez, X. Nogueira,F. Navarrina, I. Colominas, M. Casteleiro GMNI — G RUPO DE M ´ ETODOS N UM ´ ERICOS EN I NGENIER ´ IA Departmento de M ´ etodos Matem ´ aticos y de Representaci ´ on E. T. S. de Ingenier´ ıa de Caminos, Canales y Puertos Universidade da Coru ˜ na, Espa ˜ na e-mail: [email protected]p´ agina web: http://caminos.udc.es/gmni UNIVERSIDADE DA CORU ˜ NA —GRUPO DE M´ ETODOS NUM ´ ERICOS EN I NGENIER´ IA
43
Embed
TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
TECNICAS DE CALCULO EN PARALELO:Directivas OpenMP y MPI (Message Passing Interface)
J. Parıs, H. Gomez, X. Nogueira,F. Navarrina, I. Colominas, M. Casteleiro
GMNI — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Departmento de Metodos Matematicos y de RepresentacionE. T. S. de Ingenierıa de Caminos, Canales y Puertos
I Arquitecturas de memoria compartida y distribuida
I Calculo en paralelo mediante directivas OpenMP
I Calculo en paralelo mediante Message Passing Interface (MPI)
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (I)
Paradigma SPMD (Single Program Multiple Data):
I Se ejecuta el mismo programa en diferentes procesadores con distintosdatos de partida.• Para diferenciar los datos que ejecuta cada programa se utiliza el identificador de
cada thread (rank) durante el calculo.
ithread ∈ [0, . . . , nthreads − 1]
I La memoria esta fısicamente distribuıda y todas las variables sonlocales a cada thread.
I Si es necesario compartir valores de variables se envıan mensajes decomunicacion a todos los threads y se actualizan las variables locales.
I Es recomendable evitar en la medida de lo posible el envıo de mensajesporque ralentizan el calculo.
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (II)
Creacion de un programa con MPI:
I Todo programa en mpi debe comenzar con la directiva de preproceso:include ‘mpif.h’
Esta directiva contiene definiciones, macros y prototipos de funciones deMPI.
I El calculo en paralelo comienza con: call MPI INIT ( ierr )
I Y finaliza con : call MPI FINALIZE(ierr)
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (III)
I CALL MPI COMM RANK ( COMM, RANK, IERR )INTEGER COMM, RANK, IERR• Envıa un mensaje a los procesadores para que indiquen el numero de proceso que
se les ha asignado y comprueba su funcionamiento antes de comenzar laejecucion.
• El comando COMM mas habitual es MPI COMM WORLD, que envıa mensajes decomprobacion del funcionamiento de todos los procesadores antes de comenzar laejecucion en paralelo.
• La variable entera RANK indica el ındice del procesador que ha realizado lacomunicacion
• IERR es una variable que indica que esta subrutina ha funcionado correctamente
I CALL MPI COMM SIZE ( COMM, P, IERR )INTEGER COMM, P, IERR• P es una variable que indica cuantos threads estan ejecutando el comunicador
indicado
• IERR es una variable que indica que esta subrutina ha funcionado correctamente
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (IV)
Coordinacion entre procesos:
I MPI Send: Envıa un mensaje a un proceso predeterminado
I MPI Recv: Recibe un mensaje de un proceso determinado
Estas instrucciones requieren ademas la informacion:
1. Rango del proceso que recibe el mensaje
2. Rango del proceso que envıa el mensaje
3. Una etiqueta (tag) que identifica la variable enviada (en el caso demultiples envıos simultaneos). Es un entero en el intervalo [0, 32767].
4. Un comunicador
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
• El contenido del mensaje se almacena en el bloque de memoria referenciado por elargumento message. A priori el tamano del mensaje se desconoce cuando serecibe. El bloque message debe tener espacio suficiente para almacenarlo. De locontrario, overflow
• COUNT indica el numero de argumentos enviados/recibidos
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (VI)
• DATATYPE indica el tipo de argumentos de MPI enviados/recibidos (junto conCOUNT determina la longitud del mensaje)
Tipo de datos MPI Equivalente en FortranMPI INTEGER4 INTEGER*4MPI REAL4 REAL*4MPI REAL8 REAL*8MPI DOUBLE PRECISION DOUBLE PRECISIONMPI COMPLEX COMPLEXMPI LOGICAL LOGICALMPI CHARACTER CHARACTER(1)MPI BYTE
B MPI BYTE: es un tipo de variable que envıa la codificacion binaria sin alterar. (Se utiliza cuandolos mensajes se envıan entre diferentes tipos de equipos con diferentes codificaciones de lasvariables)
• DEST y SOURCE son respectivamente los identificadores de los procesos deenvıo y de recepcion del mensaje.B El valor de SOURCE puede ser un comodın (wildcard).
En MPI el habitual es MPI ANY SOURCEB El valor de DEST tiene que ser especificado. No se pueden utilizar comodines.
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (VII)
• TAG es una variable entera. En el caso de MPI RECV tambien se puede utilizar elcomodın MPI ANY TAG
• COMM es el comunicador. Al igual que al inicio el mas habitual esMPI COMM WORLD. En este caso no se pueden utilizar comodines.En el envıo de un mensaje el comunicador del MPI SEND debe coincidir con elcomunicador del MPI RECV
• STATUS devuelve informacion sobre el mensaje recibido.
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (VIII)
Ejemplo: Calculo de∫ b
af(x)dx mediante el metodo del Trapecio Compuesto
program trapecio serieIMPLICIT NONEreal*8 a, b, h, x, integral, f ! h es el ancho de los trapeciosinteger*4 i, n ! numero de trapeciosdata a, b, n / 0.0, 1.0, 1024 / ! Se fijan por simplicidad
h = (b - a) / dfloat(n)integral = ( f(a) + f(b) ) / 2.0do i =1, n-1 ! Numeramos los puntos desde 0 a n
x = a + dfloat(i) *hintegral = integral + f(x)
enddointegral = integral * h
print*,’ El area calculada con ’,n,’ intervalos es: ’,integral
end!*******************************real*8 function f(x)IMPLICIT NONEreal*8 x
f = x*xreturnend
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (IX)Ejemplo: Calculo de
∫ b
af(x)dx mediante el metodo del Trapecio Compuesto (MPI)
program trapecio mpiIMPLICIT NONEinclude ’mpif.h’integer*4 my rank, p, n ! p=2k procesadores, n trapeciosreal*8 a, b, h ! h es el ancho de los trapeciosinteger*4 local n ! variables locales de cada procesoreal*8 local a, local breal*8 integral, total ! Resultados finalesinteger*4 source, dest ! Proceso que envıa/recibeinteger*8 tag, status(MPI STATUS SIZE), ierrdata a, b, n, dest, tag / 0.0, 1.0, 1024, 0, 50 /real*8 Trapecio ! Funcion que calcula cada subintegral
call MPI INIT(ierr) ! Iniciamos el entorno MPI! Obtenemos el ındice de cada proceso en my rank
call MPI COMM RANK( MPI COMM WORLD, my rank, ierr )! Obtenemos el numero de procesos en paralelo en p
call MPI COMM SIZE( MPI COMM WORLD, p, ierr )
h = (b - a) / dfloat(n) ! Todos los procesos lo calculanlocal n = dfloat(n) / dfloat(p) ! Numero trapecios por proceso
local a = a + dfloat(my rank * local n) * hlocal b = local a + dfloat(local n) * hintegral = Trapecio ( local a, local b, local n, h )if ( my rank .eq. 0 ) then ! El proceso 0 suma todostotal = integral ! los resultados parcialesdo source = 1, p-1
!*******************************real*8 function Trapecio ( l a, l b, l n, h )IMPLICIT NONEreal*8 l a, l b, h, integral, x, finteger*4 l n, i
integral = ( f(l a) + f(l b) ) / 2.0do i =1, l n - 1 ! Numeramos los puntos desde 0 a l n
x = l a + dfloat(i) *hintegral = integral + f(x)
enddointegral = integral * hTrapecio = integral
returnend!*******************************real*8 function f(x)IMPLICIT NONE
real*8 xf = x*x
returnend
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (X)
I Lectura y escritura de datos (I/O) en paralelo• Cada instruccion la realizan todos los procesos salvo especificacion contraria
• No se establece ningun criterio automatico sobre este aspecto
• El orden de lectura/escritura en paralelo no esta definido• Para evitar un mal funcionamiento se impone de forma rigurosa:
B Se indicara que proceso lee/escribe la informacion y en que ordenB En el caso de variables comunes a todos los procesos, uno se encarga de la lectura y
posteriormente lo distribuye a todos los demas procesos...if ( my rank .eq. 0 ) then ! Elegimos el procesoprint*,’ Enter a, b, n’read *, a, b, n ! Leemos los datos
do dest = 1 , p-1 ! Los enviamos al resto de procesostag = 0 ! Envıo acall MPI SEND(a, 1, MPI REAL, dest, tag,
B Ej.: call MPI BCAST ( a, 1 , MPI REAL, 0, MPI COMM WORLD, ierr )
• Reduce: Permite que operaciones que afectan a variables locales se tratenconjuntamente en un solo proceso
B MPI Reduce ( PARTIAL RES, TOTAL RES, COUNT, DATATYPE, OPERATION, ROOT, COMM,IERROR)
B Ej: MPI Reduce ( integral, total, 1 ,MPI REAL, MPI SUM, 0, MPI COMM WORLD, ierr )
B Realiza de forma automatica la suma (MPI SUM) de las variables locales “integral” en lavariable “total” del proceso ROOT
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (XII)
I Otras instrucciones:
• AllReduce: Permite que operaciones que afectan a variables locales se realicen enun unico proceso y se actualice el resultado en todos los procesos
B MPI AllReduce(PARTIAL RES, TOTAL RES, COUNT, DATATYPE, OPERATION, COMM,IERROR)
B Ej: MPI AllReduce ( integral, total, 1 ,MPI REAL, MPI SUM, MPI COMM WORLD, ierr )
B Realiza de forma automatica la suma (MPI SUM) de las variables locales “integral” en lavariable “total” y actualiza su valor a todas las variables “total” locales
• Barrier: Establece barreras de sincronizacion de todos los procesos
B MPI BARRIER ( COMM, IERROR )
B Los procesos se detienen hasta que todos han alcanzado esta instruccion.
UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA
Calculo en paralelo mediante MPI (XIII)
I Compilado:• Se requiere un compilador (GNU, Intel, Pathscale, ...) y librerıas y aplicaciones MPI