You are on page 1of 32

Introduccin

Donde y cmo?
Paralelizacin mediante OpenMP
Diego Boll
1
1
Laboratorio de Colisiones atmicas.
IFIR - FCEIA - UNR
6 de agosto de 2012
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Por que OpenMP?
Es fcil de implementar!
Permite paralelizacin secuencial
Conversin paralelo-serie mediante compilador
Es portable (estrategia con poca dependencia en la
arquitectura)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Por que OpenMP?
Es fcil de implementar!
Permite paralelizacin secuencial
Conversin paralelo-serie mediante compilador
Es portable (estrategia con poca dependencia en la
arquitectura)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Por que OpenMP?
Es fcil de implementar!
Permite paralelizacin secuencial
Conversin paralelo-serie mediante compilador
Es portable (estrategia con poca dependencia en la
arquitectura)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Por que OpenMP?
Es fcil de implementar!
Permite paralelizacin secuencial
Conversin paralelo-serie mediante compilador
Es portable (estrategia con poca dependencia en la
arquitectura)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Objetivos
Establecer alcances de paralelizacin mediante OpenMP
Aplicar paralelizacin a casos habituales
Estimacin de speed-up (costo-benecio)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Objetivos
Establecer alcances de paralelizacin mediante OpenMP
Aplicar paralelizacin a casos habituales
Estimacin de speed-up (costo-benecio)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Por que OpenMP?
Objetivos
Objetivos
Establecer alcances de paralelizacin mediante OpenMP
Aplicar paralelizacin a casos habituales
Estimacin de speed-up (costo-benecio)
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Condiciones generales
Se puede paralelizar solo sobre un nodo, o sea
sobre procesadores con memoria compartida. Se
los suele llamar Shared Memory Parallel
Computers o SMPs.
El modelo de programacin es Fork-join.
Lo que sigue es saber como crear el team of
threads.
Que condiciones se deben cumplir.
Como se recolecta la informacin al nal de la
zona paralelo?.
team of threads
Initial thread
Initial thread
La mejor forma de hacer esto es con ejemplos!
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Condiciones generales
Se puede paralelizar solo sobre un nodo, o sea
sobre procesadores con memoria compartida. Se
los suele llamar Shared Memory Parallel
Computers o SMPs.
El modelo de programacin es Fork-join.
Lo que sigue es saber como crear el team of
threads.
Que condiciones se deben cumplir.
Como se recolecta la informacin al nal de la
zona paralelo?.
team of threads
Initial thread
Initial thread
La mejor forma de hacer esto es con ejemplos!
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Condiciones generales
Se puede paralelizar solo sobre un nodo, o sea
sobre procesadores con memoria compartida. Se
los suele llamar Shared Memory Parallel
Computers o SMPs.
El modelo de programacin es Fork-join.
Lo que sigue es saber como crear el team of
threads.
Que condiciones se deben cumplir.
Como se recolecta la informacin al nal de la
zona paralelo?.
team of threads
Initial thread
Initial thread
La mejor forma de hacer esto es con ejemplos!
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Creacion de zonas paralelo - Hello world!
Se hace agregando las directivas PARALLEL y END PARALLEL
program hello
integer OMP_get_thread_num
integer,save :: a
!$OMP THREADPRIVATE(a)
call omp_set_num_threads(4)
!$OMP PARALLEL
a=OMP_get_thread_num()
print *, Hello world!,a
!$OMP END PARALLEL
print *, Good-bye!
end
Compilando
ifort -openmp hello.f -o hello
gfortran -fopenmp hello.f -o hello
Salida
La cantidad de threads se puede setear en cualquier valor pero solo
tiene sentido considerar a lo sumo tantos threads como
procesadores tenga el nodo
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Loops
!$OMP PARALLEL
!$OMP DO
do i = 1, 100
do j = 1, 100
A(i,j) = BesJN(i+j,1.2)
end do
end do
!$OMP END DO
!$OMP DO REDUCTION(+:b)
do i = 1, 1000
b = b + i
end do
!$OMP END DO
!$OMP END PARALLEL
Por defecto todas las
variables son SHARED.
. . . . . . . . .
Primer loop: no hay
posibilidad que un thread
pise la regin de memoria
de otro. Puede hacerse
completamente
desordenado.
. . . . . . . . .
Segundo loop: los threads
leen y escriben la misma
variable. Sin la clausula
REDUCTION el resultado
es impredecible.
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
La vida no es tan alegre! - Racing condition
do i = 1, 999
A(i) = A(i+1)
end do
En cada iteracin se necesita el
valor i + 1 sin modicar.
Esto no se puede garantizar
(racing condition).
Es necesario modicar el cdigo
!$OMP DO
do i = 2, 1000, 2
dummy(i) = A(i)
end do
!$OMP END DO
!$OMP DO
do i = 0, 998, 2
A(i) = A(i+1)
end do
!$OMP END DO
!$OMP DO
do i = 1, 999, 2
A(i) = dummy(i+1)
end do
!$OMP END DO
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
La vida no es tan alegre! - Racing condition
do i = 1, 1000
A(i) = A(i-1)
end do
Este caso es ms complejo que el
anterior porque necesitamos
garantizar que la iteracin i 1
fue realizada.
una posibilidad es realizar una
ejecucin ordenada.
!$OMP DO ORDERED
do i = 1, 1000
!$OMP ORDERED
A(i) = A(i-1)
!$OMP END ORDERED
end do
!$OMP END DO
No es esperable que este cdigo
muestre una mejor performance
en tiempos de ejecucin porque
se realiza en forma ordenada.
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Loops mltiples + Racing condition - etc
!$OMP PARALLEL DEFAULT(SHARED)
!$OMP&PRIVATE(im1,lm1,PHI,R_om)
!$OMP DO REDUCTION(+:M_atto)
do i=1, 2*mmax+1, 1
do l=1, 2*nmax+1, 1
im1=i-1
lm1=l-1
PHI = f(im1,lm1,etc)
R_om = g(im1,lm1,etc)
M_atto = M_atto +
1 h(im1,lm1,etc)
end do
end do
!$OMP END DO
!$OMP END PARALLEL
Inicio regin paralelo +
propiedades de variables.
Inicio loop paralelo +
REDUCTION.
Clculos varios.
Fin loop.
Fin regin paralelo.
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Unin de PARALLEL Y
DO en una misma
sentencia
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Permite condicionar la
ejecucin paralelo
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Inicializa variables
PRIVATE con los valores
originales
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Setea el valor de
variables
THREADPRIVATE al
valor en thread inicial.
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Permite redistribuir
trabajo entre diferentes
threads
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Permite actualizar una
variable PRIVATE al
nalizar la regin
paralela segn el ltimo
valor que hubiera
asumido al correr el
programa en serie
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Permite asignar tareas
diferentes a cada uno de
los threads
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Sincronizacin explcita.
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Asegura que solo un
thread a la vez escribe o
actualiza una dada
direccin de memoria
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Otra sincronizacin que
permite asegurar que
todos los threads estan
viendo una variable en
memoria con valores
correctos
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
El cdigo entre las
directivas solo es
ejecutado por el primer
thread que llega
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Idem anterior pero solo
se ejecuta el cdigo por
el thread inicial
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Otras clusulas
PARALLEL DO
IF (SCALAR-LOGICAL-EXPRESSION)
FIRSTPRIVATE(LIST)
COPYIN(LIST)
SCHEDULE(TYPE[, CHUNK SIZE])
LASTPRIVATE(LIST)
SECTIONS
BARRIER
ATOMIC
FLUSH
SINGLE
MASTER
CRITICAL
Paralelizacin mediante OpenMP
Restringe el acceso a
una parte del cdigo a
un thread a la vez
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Ley de Amdahls + Performance + Speed-up
Ley de Amdahls
S =
T
1
T
P
=
1
(f
par
/P + (1 f
par
))
S : Speed-up
f
par
: % paralelo
P : # procesadores
Suma doble de 2 10
6
trminos speed-up S
2
2,02, S
3
2,48
y S
4
3,62.
Ley de Amdahls f
par
0,965.
Para ese programa, S
max
28 para P .
Obs: para medir tiempos usar el comando time ./a.out. Esto
informa tres tiempos real, user y sys. Idealmente real=user+sys
(serie). Tiempo CPU=user+sys. Considerar siempre real
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Recomendaciones
Detectar las regiones del cdigo que mayor tiempo consumen
Estudiar cuales de ellas pueden paralelizarse
Paralelizar
En todos los pasos anteriores tener en cuenta la Ley de
Amdahls y tratar de estimar el costo/benecio
Paralelizacin mediante OpenMP
Introduccin
Donde y cmo?
Que se puede hacer con OpenMP?
Para aprender OpenMP
[1] Barbara Chapman, Gabriele Jost, and Ruud van der Pas.
Using OpenMP: Portable Shared Memory Parallel
Programming.
The MIT Press, 2007.
[2] Miguel Hermanns.
Parallel Programming in Fortran 95 using OpenMP.
http://openmp.org/wp/resources/#Tutorials.
[3] OpenMP Architecture Review Board.
Pgina web API OpenMP.
http://www.openmp.org/.
Paralelizacin mediante OpenMP

You might also like