Documente Academic
Documente Profesional
Documente Cultură
Directiva parallel
Directivas compartidas
Sistemas Operativos
Implementaci
on de hilos con OpenMP
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
1/47
OpenMP
Directiva parallel
Directivas compartidas
Contenido
OpenMP
OpenMP
Directiva parallel
Directiva parallel
Directivas compartidas
Directivas compartidas
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
2/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Programacion multi-hilo
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
3/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
secuencial
fork
UAM Azcapotzalco
paralela
secuencial
join
Implementaci
on de hilos con OpenMP
4/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
5/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
OpenMP
www.openmp.org
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
6/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Aprovechamiento paralelo
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
7/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
8/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
9/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Pragmas en GCC
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
10/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
/* verificar la ruta */
2
3
4
5
6
7
8
9
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
11/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Funci
on
omp set num threads
omp get num threads
omp get max threads
omp get thread num
omp get num procs
Descripci
on
Fija el n
umero de hilos simultaneos
Regresa el n
umero de hilos en ejecuci
on
Regresa el n
umero m
aximo de hilos que
se lanzar
an en las zonas paralelas
Devuelve el n
umero del thread dentro del equipo
(valor entre 0 y omp get num threads()-1)
Regresa el n
umero de procesadores del sistema,
los procesadores es el n
umero total de n
ucleos
omp in parallel
omp set dynamic
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
12/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Funci
on
omp set schedule
omp get schedule
omp get thread limit
omp set max active levels
omp get max active levels
omp get level
omp get ancestor thread num
omp get team size
omp get active level
omp in final
UAM Azcapotzalco
Descripci
on
Implementaci
on de hilos con OpenMP
13/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Variables de ambiente
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
14/47
OpenMP
Directiva parallel
Directivas compartidas
OpenMP
Constructores
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
15/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Directiva parallel
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
16/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Directiva
parallel
Cl
ausulas
if(expresi
on escalar )
num threads(expresi
on entera )
default(shared | none)
private(lista )
firstprivate(lista )
shared(lista )
copyin(lista )
reduction(operador:lista )
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
17/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Clausulas de parallel
Cl
ausula
private(lista )
shared(lista )
firstprivate(lista )
reduction(operador:lista )
UAM Azcapotzalco
Descripci
on
Por cada variable listada se generar
a una copia en cada
hilo, esta copia no tiene relaci
on con la original y no
es inicializada a menos que se utilice firstprivate
Las variables de la lista son comunes a todos los hilos
y cada uno de ellos puede modificarla afect
andola
en forma global
Hace que la lista sea privada para los hilos,
pero globales dentro de un hilo
Realiza una operaci
on de reducci
on sobre las
variables que aparecen en la lista utilizando
el operador/intrnseco especificado
Implementaci
on de hilos con OpenMP
18/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Directiva parallel
1
2
3
4
5
6
7
8
9
10
11
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
19/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Identificacion de hilos
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
20/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
La funcion
int omp get num procs(void)
Devuelve el n
umero de procesadores fsicos que estan
dispondible para el uso del programa paralelo
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
21/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Identificacion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
22/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Creacion de hilos
La funcion
int omp set num threads(int t)
Se utiliza para asignar el n
umero de hilos a ser activos en
secciones paralelas del c
odigo, puede ser llamada en varios
puntos del programa
Tambien se puede utilizar la clausula
set num threads(int t)
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
23/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
24/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
25/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Contexto de variables
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
26/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
27/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
compartida = 10;
# pragma omp parallel private ( privada ) shared ( compartida )
{
privada =1;
privada ++;
compartida ++;
printf ( " privada= %d , compartida= %d \ n " , privada , compartida ) ;
}
exit (0) ;
}
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
28/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Clausula firstprivate
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
29/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Clausula firstprivate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
30/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Sincronizacion
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
31/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
Hilos chambeadores
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
32/47
OpenMP
Directiva parallel
Directivas compartidas
Directiva parallel
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
33/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Construcciones compartidas
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
34/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Ciclos for
Secciones sections
Secuenciales single
Compartido workshare
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
35/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Directiva
for
Cl
ausulas
private(lista )
firstprivate(lista )
lastprivate(lista )
reduction(operador:lista )
schedule(tipo[, tama~
no trozo] )
collapse(n )
ordered
nowait
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
36/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Clausulas de for
Cl
ausula
lastprivate(lista )
ordered
schedule(tipo[,tama~
no trozo] )
reduction(operador:lista )
nowait
UAM Azcapotzalco
Descripci
on
Hace que la lista se comporte como si hubiese
sido declarada privada, pero el u
ltimo hilo
que ejecuta la sentencia de distribuci
on de trabajo
lo actualiza con su valor privado
Es una instancia donde una parte de un ciclo
puede ser ejecutada en orden secuencial,
cuando el resto del ciclo se ejecuta en paralelo
Especifica cu
antas iteraciones del for son
divididas entre el n
umero de hilos, el valor de
tama~
no trozo es especificado en el for,
es invariante y es un n
umero positivo.
Realiza una operaci
on de reducci
on sobre las
variables que aparecen en la lista utilizando
el operador/intrnseco especificado
Evita que haya una sincronizaci
on entre hilos al
final de la directiva de distribuci
on de trabajo
Implementaci
on de hilos con OpenMP
37/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Categoras de schedule
Categoras
static
dynamic
guided
runtime
Descripci
on
El n
umero de iteraciones es dividido en tramos de tama
no
tama~
no trozo y es asignado en forma de Round Robin
El n
umero de iteraciones es dividido en tramos de tama
no
tama~
no trozo y cada hilo ejecuta su tramo y espera
por m
as trabajo asignado
Las iteraciones son asignadas a los hilos en tramos con tama
no
decreciente. Cuando un hilo finaliza el tramo de iteraciones asignado,
a este se le asigna otro tramo din
amicamente hasta que se termine
la repartici
on
Las categoras son obtenidas en tiempo de ejecuci
on con la configuraci
on
dada en la variable de ambiente OMP SCHEDULE
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
38/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Clausula reduction
reduction (<operador>:<variables>)
La variable o variables de un hilo estaran sujetas a una
reduccion
Algunos operadores: +, *, &, |,&&, ||
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
39/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Reduccion de suma
sum
sum
sum
sum
16
sum
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
40/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Reduccion de suma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
41/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Trabajo compartido
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
42/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Asignacion y sicronizacion
master la parte de c
odigo definida, s
olo se puede ejecutar por
el hilo padre
critical solo un hilo puede estar en esta seccion. Definen
secciones crticas o condiciones de competencia
atomic se utiliza cuando la operaci
on involucra a una sola
posicion de memoria, y tiene que ser actualizada solo por un
hilo simultaneamente
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
43/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
44/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Clausulas de datos
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
45/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Planificacion de tareas
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
46/47
OpenMP
Directiva parallel
Directivas compartidas
Directivas compartidas
Planificacion de 3 hilos
static
dynacmic(3)
guided(1)
UAM Azcapotzalco
Implementaci
on de hilos con OpenMP
47/47