TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y...

43
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] agina web: http://caminos.udc.es/gmni UNIVERSIDADE DA CORU ˜ NA —GRUPO DE ETODOS NUM ´ ERICOS EN I NGENIER´ IA

Transcript of TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y...

Page 1: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Universidade da Coruna, Espana

e-mail: [email protected] web: http://caminos.udc.es/gmni

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 2: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

INDICE

I Introduccion al calculo en paralelo

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

Page 3: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

INDICE

I Introduccion al calculo en paralelo

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

Page 4: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Introduccion al calculo en paralelo (I)

Introduccion

I Calculo estandar secuencial: Instrucciones por orden (no en paralelo)

I Calculo distribuıdo: Instrucciones se ejecutan en varios procesadoressin interaccion entre los mismos.

I Calculo en paralelo: instrucciones se calculan simultaneamente envarios procesadores

Objetivo: Realizar el mismo calculo en un menor tiempo de ejecucion.

Niveles de paralelismo:

I Nivel de programa dentro de una aplicacion

I Nivel de procedimiento dentro de un programa (entre subrutinas decodigo)

I Nivel de bucle dentro de un procedimiento (entre iteraciones de unmismo bucle)

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 5: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Introduccion al calculo en paralelo (II)

Medidas de rendimiento del calculo en paralelo:

I Aceleracion (Speed-up): S(p) =Tcpu(1)

Tcpu(p), p = 2, ..., n

I Eficiencia: E(p) =S(p)

p100 %, p = 2, ..., n

Ejemplo:

I Tiempo con 1 CPU = 120 s

I Tiempo con 32 CPU = 6 s

♦ S(32) =Tcpu(1)

Tcpu(32)=

120

6= 20

♦ Eficiencia: E(32) =20

32100 = 62.5 %

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 6: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Introduccion al calculo en paralelo (III)

Rendimiento del calculo en paralelo:

♠ Ley de Amdahl: La parte secuencial de un calculo en paralelo limita sueficiencia

Ejemplo: Codigo 5 % secuencial:Tcpu(1) = T

paralelocpu + T

secuencialcpu = 95 + 5

Utilizando p procesadores:

Tcpu(p) =95

p+ 5 > 5 −→

S(p) =

Tcpu(1)

Tcpu(p)=

100

95/p + 5< 20

E(p) =S(p)

p=

100

95 + 5p

p→∞−→ 0

♠ Si p aumenta, S(p) esta acotado (p.ej. p = 256→ S(256) ≈ 18.62

♠ Si p aumenta, E(p) tiende a 0 (p. ej. p = 256→ E(256) ≈ 7.27 %

Solucion: Reducir la parte secuencial de los codigos

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 7: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

INDICE

I Introduccion al calculo en paralelo

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

Page 8: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (I)

Tipos de arquitecturas para calculo en paralelo:

Memoria compartida (UMA,NUMA): Memoria distribuida:

♠ Una memoria unica para todoslos procesadores

♦ Accesible desde todos losprocesadores

♦ ⇑ Facilidad de implementacion

♠ Escalabilidad mas reducida(Hasta p ≈ 128 en 2012)(Hasta aprox. 512 Gb en 2012)

♦ Tantas memorias locales comoprocesadores

♠ Cada procesador solo tieneacceso a su memoria local

♠ ⇓ Facilidad de implementacion

♦ Escalabilidad muy elevada(Hasta p = 7 · 105 en 20121)(Hasta 1.4 · 106 Gb en 20121)

1 Fuente: TOP500 (http://top500.org/)

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 9: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (II)

Memoria compartida: Memoria distribuida:

P1

P2

P3

Pp-1

Pp

BU

S D

E C

ON

EX

IÓN

ME

MO

RIA

PLACA MADRE (MotherBoard)

PM1

RE

D D

E C

ON

EX

IÓN

CLUSTER DE COMPUTACION

P1M1

PM2 P2M2

PM3 P3M3

PMp-1 Pp-1Mp-1

PMp PpMp

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 10: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (II)

Memoria compartida-distribuıda:

RED DE CONEXIÓN

CLUSTER DE COMPUTACION

P1,1

P2,1

Pp,1

BU

S D

E C

ON

EXIÓ

N

MEM

OR

IA

PLACA MADRE (MotherBoard)

P1,2

P2,2

Pp,2

BU

S D

E C

ON

EXIÓ

N

MEM

OR

IA

PLACA MADRE (MotherBoard)

P1,m

P2,m

Pp,m

BU

S D

E C

ON

EXIÓ

N

MEM

OR

IA

PLACA MADRE (MotherBoard)

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 11: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (IIa)

Memoria compartida: Memoria distribuida:

Placa base con 2 CPUs

Placa base con 4 CPUsRed de comunicaciones entre equipos

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 12: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (IIb)

Memoria compartida: Memoria distribuida:

Placa base con 2 CPUs

Placa base con 4 CPUsRed de comunicaciones entre equipos

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 13: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (IIc)

Memoria compartida: Memoria distribuida:

Placa base con 2 CPUs

Placa base con 4 CPUs

Red de comunicaciones entre equipos

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 14: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Arquitecturas de memoria compartida y distribuida (III)

Memoria compartida (UMA,NUMA): Memoria distribuida:

Programacion mediante directivasOpenMP

Programacion mediante MessagePassing Interface (MPI)

♠ Necesario anadir lıneas dedirectivas

♦ No altera el codigo secuencialoriginal

♦ Implementacion mas rapida yportable

♠ Menos eficiente

♠ Necesario anadir comandos desincronizacion y comunicacion

♠ Reestructuracion completa delcodigo original

♠ Implementacion compleja yrıgida.

♦ Mas eficiente

Lenguajes de programacion:Fortran, C, C++,...

Lenguajes de programacion:Fortran, C, C++,...

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 15: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

INDICE

I Introduccion al calculo en paralelo

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

Page 16: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (I)

OpenMP:

I OpenMP es un conjunto de directivas, librerıas y variables de entornopara programas en Fortran, C y C++, por ejemplo.

I Es en la actualidad el estandar para programacion en paralelo ensistemas de memoria compartida

I Las directivas son sentencias de programacion que solo se activan alutilizar una opcion de compilacion especıfica

I Proporcionan instrucciones para ejecucion en paralelo

I Funcionamiento:• La ejecucion comienza en modo secuencial con un thread 1 maestro

• Al llegar a una region paralela se activan los restantes threads

• El trabajo se reparte entre todos los threads, incluido el maestro

• Cuando finaliza la region paralela, continua la ejecucion el thread maestro

1 Aunque su traduccion literal es hilo, se suele asociar con un nucleo de calculo

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 17: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (II)

Directivas OpenMP

I Se utilizan normalmente para paralelizacion a nivel de bucle• Se buscan los bucles mas costosos y se reparten sus iteraciones entre los

procesadores

I La comunicacion de informacion entre threads se realiza a traves devariables compartidas

I Las variables compartidas pueden crear conflictos debido al accesosimultaneo por varios procesadores

I Para evitarlo hay que utilizar directivas de sincronizacion

I La creacion de regiones paralelas y las directivas de sincronizacion sonmuy costosas

I Recomendacion: reducir el numero de regiones paralelas creadas y elnumero de directivas de sincronizacion.

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 18: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (III)

Directivas de paralelizacion: Sintaxis general (en Fortran)

Centinela nombre directiva (clausulas)

!$OMP PARALLEL DEFAULT(SHARED)

I Las directivas comienzan en la columna 1 (formato fijo)

I Las clausulas se pueden separar por espacios o comas

I La columna 6 debe ser un espacio salvo que la lınea sea continuacionde la anterior, en cuyo caso sera un &

!$OMP PARALLEL!$OMP&SHARED(A, B, C)

↑Columna 6

I Si la lınea comienza con !$ solo se ejecuta con OpenMP activado.

!$ write(6,*)’ Calculando en paralelo’

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 19: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (IV)

I Directiva PARALLEL

!$OMP PARALLEL (clausulas)Sentencias de ejecucion

!$OMP END PARALLEL

• Crea una region paralela que se ejecutara por todos los threads

• Uno de ellos se convierte en master thread con identificador 0

• Las sentencias de ejecucion no pueden desviar la ejecucion a otras lıneas decodigo fuera de la region paralela

• Las subrutinas pueden formar parte de las sentencias y se ejecutaran en paralelo

• Hay una barrera implıcita (sincronizacion de threads) al final de la region paralela• Clausulas mas habituales:

B PRIVATE(lista de variables privadas)B SHARED(lista de variables compartidas)B DEFAULT (SHARED) por defecto todas las variables compartidas, (NONE)

nada por defectoB FIRSTPRIVATE(lista de variables privadas). Mantienen su valor anterior

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 20: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (V)

I PRIVATE(lista)

Declara privadas para cada thread las variables de la lista• Cada thread genera una copia local de la variable

• Esta variable local es invisible para los restantes threads

• Las variables son locales de la region paralela, se crean al principio y se eliminanal finalizar esta

I SHARED(lista)

Declara compartidas para todos los threads las variables de la lista• Solo existe una variable compartida por todos los threads

• Todos los threads acceden a la misma posicion de memoria cuando la modifican

• No evita la posibilidad de acceso simultaneo (lo tiene que evitar el programador)

Uso de variables compartidas:• Acceso a las mismas para solo lectura

• Acceso a diferentes localizaciones (componentes) de la variable

• Comunicar informacion entre diferentes threads

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 21: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (VIa)

Distribucion de trabajo (Paralelizacion a nivel de bucle):

!$OMP DO[ clausulas ]Bucle do secuencial

!$OMP END DO

I Distribuye el numero de repeticiones de las instrucciones entre losthreads

I Introduce una barrera de sincronizacion al final de forma automatica

I La mayor parte de las variables son compartidas (por defecto) salvo:

• El ındice del bucle (que siempre es privada)

• Las variables definidas como privadas

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 22: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (VIb)

Distribucion de trabajo (Paralelizacion a nivel de bucle):

I Clausulas adicionales (optativas):• REDUCTION( operador(+,-,*,/,max): lista de variables)

Aplica el operador sobre variables compartidas evitando accesos simultaneos(pero perdiendo eficiencia)

• SCHEDULE(clase, tamano del bloque)B (STATIC,3) Indica asignacion estatica de 3 pasos del bucle para cada thread de forma recursiva

Lo mas recomendable normalmente es (STATIC,n/p) si n es el numero de iteraciones

B (DYNAMIC,3) Indica asignacion dinamica de pasos del bucle de 3 en 3 a medida que finalizan

B (GUIDED,3) asigna n/(2p) a cada thread y luego por orden de finalizacion asigna 3 iteracionescomo mınimo

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 23: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (VIIa)

Directivas de secuencializacion:

I Directiva SINGLE

!$OMP SINGLESentencias a desarrollar de modo secuencial

!$OMP END SINGLE

B El bloque de codigo es ejecutado por un unico thread del equipoB Introduce una barrera de sincronizacion al final

I Directiva MASTER

!$OMP MASTERSentencias a desarrollar de modo secuencial

!$OMP END MASTER

B El bloque de codigo es ejecutado unicamente por el master threadB No hay barreras implıcitas ni al principio ni al final

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 24: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (VIIb)

Directivas de secuencializacion:

I Directiva CRITICAL

!$OMP CRITICALSentencias a desarrollar sin accesos simultaneos

!$OMP END CRITICAL

B Crea un bloque de codigo que solo puede ser ejecutado por un thread simultaneamenteB Se crea una cola de acceso para la realizacion de este bloque

I !$OMP BARRIER Introduce una barrera de sincronizacion

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 25: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (VIII)

Si se anade ademas la librerıa omp_lib como:

!$ use omp_lib

Se pueden utilizar ademas las siguientes instrucciones:

!$ OMP_SET_NUM_THREADS( n threads)

• Indica el numero de threads (n threads) de la siguiente region paralela

• Tiene prioridad sobre la variable del sistema OMP_NUM_THREADS si se habilita elajuste dinamico

!$ n_threads = OMP_GET_NUM_THREADS()

• Devuelve el numero de threads utilizados en la region paralela en ejecucion

!$ nthread = OMP_GET_THREAD_NUM()

• Devuelve el numero que identifica a cada thread en el rango [0,OMP GET NUM THREADS()-1]

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 26: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (IX)Ejemplo: Calculo de

∫ b

af(x)dx mediante el metodo del Trapecio Compuesto (Serie)

program trapecio serie

IMPLICIT NONEreal*8 a, b, h, x, parcial, integral, f ! h = ancho de trapeciosinteger*4 i, n ! n = numero de trapecios

print*, ’ Indique los valores de a, b , n’read(5,*)a,b,n

h = (b - a) / dfloat(n)integral = ( f(a) + f(b) ) / 2.0

parcial = 0.

do i =1, n-1 ! Numeramos los puntos desde 0 a nx = a + dfloat(i) * hparcial = parcial + f(x)

enddo

integral = integral + parcial

integral = 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

Page 27: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (IX)Ejemplo: Calculo de

∫ b

af(x)dx mediante el metodo del Trapecio Compuesto (OpenMP)

program trapecio OpenMP!$ use omp lib

IMPLICIT NONEreal*8 a, b, h, x, parcial, integral, f ! h = ancho de trapeciosinteger*4 i, n ! n = numero de trapecios

print*, ’ Indique los valores de a, b , n’read(5,*)a,b,n

h = (b - a) / dfloat(n)integral = ( f(a) + f(b) ) / 2.0

!$OMP PARALLEL DEFAULT (SHARED), PRIVATE(parcial, x)parcial = 0.

!$OMP DOdo i =1, n-1 ! Numeramos los puntos desde 0 a n

x = a + dfloat(i) * hparcial = parcial + f(x)

enddo!$OMP END DO!$OMP CRITICAL

integral = integral + parcial!$OMP END CRITICAL!$OMP END PARALLEL

integral = 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

Page 28: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (IX)Ejemplo: Calculo de

∫ b

af(x)dx mediante el metodo del Trapecio Compuesto (OpenMP)

program trapecio serie

IMPLICIT NONEreal*8 a, b, h, x, parcial, integral, f ! h = ancho de trapeciosinteger*4 i, n ! n = numero de trapecios

print*, ’ Indique los valores de a, b , n’read(5,*)a,b,n

h = (b - a) / dfloat(n)integral = ( f(a) + f(b) ) / 2.0parcial = 0.

do i =1, n-1 ! Numeramos los puntos desde 0 a nx = a + dfloat(i) *hparcial = parcial + f(x)

enddo

integral = integral + parcial

integral = integral * h

print*,’ El area calculada con ’,n,’ intervalos es: ’,integral

end!*******************************real*8 function f(x)IMPLICIT NONEreal*8 x

f = x*xreturnend

program trapecio OpenMP!$ use omp lib

IMPLICIT NONEreal*8 a, b, h, x, parcial, integral, f ! h = ancho de trapeciosinteger*4 i, n ! n = numero de trapecios

print*, ’ Indique los valores de a, b , n’read(5,*)a,b,n

h = (b - a) / dfloat(n)integral = ( f(a) + f(b) ) / 2.0parcial = 0.

!$OMP PARALLEL DEFAULT (SHARED), PRIVATE(parcial, x)!$OMP DO

do i =1, n-1 ! Numeramos los puntos desde 0 a nx = a + dfloat(i) *hparcial = parcial + f(x)

enddo!$OMP END DO!$OMP CRITICAL

integral = integral + parcial!$OMP END CRITICAL!$OMP END PARALLEL

integral = 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

Page 29: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante directivas OpenMP (X)

Compilado:

I Se compila normalmente con la opcion que activa las directivas OpenMP• Compilador Gfortran (GNU): Opcion -fopenmp

• Compilador Intel Fortran: Opcion -openmp

I Para algunas funciones puede ser necesario incluir al principio delcodigo fuente:!$ use omp_lib ! librerıas especıficas de OpenMP

Ejecucion en paralelo:

I Basta con indicar el numero de threads a utilizar y lanzar la ejecucion• Unix/Linux (sh, bash): export OMP_NUM_THREADS=16

• Windows: set OMP_NUM_THREADS=16

Mas informacion en: http://openmp.org/wp/

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 30: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

INDICE

I Introduccion al calculo en paralelo

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

Page 31: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 32: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 33: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 34: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 35: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante MPI (V)

Ejemplos:

I MPI SEND ( MESSAGE, COUNT, DATATYPE, DEST, TAG, COMM,IERROR )

I MPI RECV ( MESSAGE, COUNT, DATATYPE, SOURCE, TAG, COMM,STATUS, IERROR )

• 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

Page 36: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 37: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 38: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 39: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

call MPI RECV(integral, 1, MPI REAL8, source, tag,& MPI COMM WORLD, status, ierr)

total = total + integralenddoprint*, ’ El area calculada con ’,n,’ intervalos es: ’,total

else ! El resto de procesos envıan sus resultados al 0call MPI SEND ( integral, 1, MPI REAL8, dest,

& tag, MPI COMM WORLD, ierr )endifcall MPI FINALIZE( ierr ) ! Finalizamos MPI

end

!*******************************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

Page 40: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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,

& MPI COMM WORLD, ierr)tag = 1 ! Envıo bcall MPI SEND(b, 1, MPI REAL, dest, tag,

& MPI COMM WORLD, ierr)tag = 2 ! Envıo ncall MPI SEND(n, 1, MPI INTEGER, dest, tag,

& MPI COMM WORLD, ierr)

else ! El resto de procesos reciben la informaciontag = 0call MPI RECV(a, 1, MPI REAL, source, tag, ! Recibo a

& MPI COMM WORLD, status, ierr)tag = 1call MPI RECV(b, 1, MPI REAL, source, tag, ! Recibo b

& MPI COMM WORLD, status, ierr)tag = 2call MPI RECV(n, 1, MPI INTEGER, source, tag, ! Recibo n

& MPI COMM WORLD, status, ierr)endif...

• Se puede utilizar para que cada proceso lea o escriba un fichero de datos distinto

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA

Page 41: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante MPI (XI)

I Otras instrucciones:

• Broadcast: Un unico proceso envıe el mismo mensaje a todos los procesos.

B MPI BCAST ( BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR )

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

Page 42: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

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

Page 43: TECNICAS DE C´ ALCULO EN PARALELO:´ Directivas OpenMP y ...loki.udc.es/info/asignaturas/mna/ApuntesYMaterialPedagogico/Apuntes… · Directivas OpenMP y MPI (Message Passing Interface)

Calculo en paralelo mediante MPI (XIII)

I Compilado:• Se requiere un compilador (GNU, Intel, Pathscale, ...) y librerıas y aplicaciones MPI

(OPENMPI, MPICH, ...).B GNU+OPENMPI: mpif77 o mpif90B Ej.: mpif90 -O3 programa_mpi.f -o programa_mpi.exe

B Mas informacion: man mpif90 en sistemas Linux

I Ejecucion:• Cada compilador suele tener su herramienta de ejecucion en MPI.

B GNU+OPENMPI: mpirunB Ej.: mpirun -np 16 programa_mpi.exe

B Mas informacion: man mpirun en sistemas Linux

Mas info en: http://www.mpi-forum.org/docs/

UNIVERSIDADE DA CORUNA — GRUPO DE METODOS NUMERICOS EN INGENIERIA