Sunteți pe pagina 1din 47

OpenMP

Directiva parallel

Directivas compartidas

Sistemas Operativos
Implementaci
on de hilos con OpenMP

Oscar Alvarado Nava


oscar.alvarado.nava@gmail.com
Departamento de Electr
onica
Divisi
on de Ciencias B
asicas e Ingeniera
Universidad Aut
onoma Metropolitana, Unidad Azcapotzalco

14I, marzo de 2014

Oscar Alvarado Nava

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

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

2/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Programacion multi-hilo

Utilizado para el desarrollo de aplicaciones en sistema de


memoria compartida
Multi-procesador
Multi-n
ucleo
GPUs

Tambien conocidos como sistemas SIMD (Single Instruction


Multiple Data)

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

3/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Programacion paralela incremental

secuencial

fork

Oscar Alvarado Nava

UAM Azcapotzalco

paralela

secuencial

join

Implementaci
on de hilos con OpenMP

4/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Implementacion de hilos en Linux

En CPUs ejecutando Linux, los hilos se pueden implementar a


traves de varias herramientas y lenguajes
OpenMP: C/C++,Fortran
POSIX Threads: C/C++, Python
JVM Java
Qt4 C/C++

Sobre GPUs (Graphics Processing Unit) utilizando CUDA


(Compute Unified Device Architecture)
C/C++

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

5/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

OpenMP

OpenMP es un API (Application Program Interface) que


consiste en
Directivas al preprocesador a traves de #pragmas
Biblioteca de funciones
Variables de ambiente

www.openmp.org

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

6/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Aprovechamiento paralelo

Las dos principales formas de aprovechamiento para


asignacion de trabajo a hilos, son
Regiones paralelas (grano grueso)
Paralelizaci
on de ciclos (grano fino)

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

7/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Instalacion en Linux Debian

Linux GNU/Debian utiliza GOMP, la cual es implementacion


libre de OpenMP para el compilador GCC
En Debian se instala junto con el compilador GCC

oskr@kro:$ dpkg -l | grep libgomp


ii libgomp1 4.7.2-5 GCC OpenMP (GOMP) support library

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

8/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

OpenMP y compilador GCC

OpenMP es soportado a partir de la versi


on 4.3 de GCC
Se debe verificar la versi
on que se esta utilizando y su
configuraci
on
Se puede cambiar la versi
on al instalar y cambiar la liga
simb
olica

Se debe incluir el archivo #include<omp.h>, para compilar:


oskr@kro:$ gcc -fopenmp fuente.c -o ejecutable

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

9/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Pragmas en GCC

La directiva al preprocesador #pragma, permite a los


compiladores de C/C++ definir directivas particulares por
medio del preprocesador
Dichas directivas No corresponden a nada establecido en el
estandar ANSI

Si el preprocesador y el compilador no reconocen la directiva


seran ignoradas sin ning
un error, quiza con algun tipo de
mensaje o advertencia

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

10/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Formato de directivas y clausulas para OpenMP

# include < omp .h >

/* verificar la ruta */

2
3
4
5
6
7
8
9

# pragma omp < directiva > [ clausula [[ ,] clausula ]...]


{
sentencia_1 ;
sentencia_2 ;
...
sentencia_N ;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

11/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Funciones de biblioteca (1/2)

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

Permite expecificar si queremos que el n


umero de hilos
crezca y decrezca din
amicamente.

omp get dynamic


omp set nested
omp get nested

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

12/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Funciones de biblioteca (2/2)

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

Oscar Alvarado Nava

UAM Azcapotzalco

Descripci
on

Implementaci
on de hilos con OpenMP

13/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Variables de ambiente

Algunas variables de ambiente


OMP SCHEDULE
OMP NUM THREADS
OMP DYNAMIC
OMP THREAD LIMIT
OMP NESTED

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

14/47

OpenMP

Directiva parallel

Directivas compartidas

OpenMP

Constructores

OpenMP utiliza basicamente dos tipos de construcciones, las


cuales se crean con directivas
Construccion paralela de secciones: parallel
Indica que la parte de c
odigo que la comprende puede ser
ejecutada por varios hilos

Construcciones paralelas compartidas: for, sections,


single, workshare
Por ejemplo, for paralelizaci
on optimizada para los ciclos for

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

15/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Directiva parallel

parallel indica que la parte de c


odigo que la comprende
puede ser ejecutada por varios hilos
De manera automatica creara tantos hilos como procesadores
(o n
ucleos) tenga el sistema

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

16/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Directiva parallel y sus clausulas

Directiva

parallel

Oscar Alvarado Nava

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 )

Oscar Alvarado Nava

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

# include < omp .h >


# include < stdio .h >
int main ()
{
# pragma omp parallel
{
printf ( " Hola mundo \ n " ) ;
}
return 0;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

19/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Identificacion de hilos

Todo hilo tiene una identifiaci


on que puede ser mostrada por
medio de la funci
on
int omp get thread num(void)
El hilo maestro sera el 0
Los hilos del equipo seran mayor que cero y menor a
omp get num threads

int omp get thread num(void) regresara cero en una


ejecucion secuencial

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

20/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Numero de procesadores fsicos

La funcion
int omp get num procs(void)
Devuelve el n
umero de procesadores fsicos que estan
dispondible para el uso del programa paralelo

Oscar Alvarado Nava

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

# include " sd_omp . h "


int main ()
{
pid_t pid ;
int nh , idh , nproc ;
nproc = om p_g et_ num _pro cs () ;
printf ( " El host cuenta con %d procesadores \ n " , nproc ) ;
pid = getpid () ;
idh = o mp _g e t_ th r ea d _n um () ;
printf ( " Inicia hilo principal[ %d ] en proceso %d \ n " ,idh , pid ) ;
# pragma omp parallel private ( nh , idh , pid )
{
nh = o m p _ g e t _n u m _ t h r e a ds () ;
idh = om p _g e t_ th r ea d_ n um () ;
pid = getpid () ;
printf ( " Hilo[ %d ] somos %d hilos en proceso %d \ n " ,idh , nh , pid ) ;
}
printf ( " Fin hilo principal \ n " ) ;
exit (0) ;
}

Oscar Alvarado Nava

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)

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

23/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Creacion de hilos a traves de funcion


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

# include " sd_omp . h "


int main ()
{
pid_t pid ;
int nh , idh , nproc ;
nproc = om p_g et_ num _pro cs () ;
printf ( " El host cuenta con %d procesadores \ n " , nproc ) ;
pid = getpid () ;
idh = o mp _g e t_ th r ea d _n um () ;
printf ( " Inicia hilo principal[ %d ] en proceso %d \ n " ,idh , pid ) ;
o m p _ s e t _ n u m _ t h r ea d s (5) ; /* creara 5 hilos */
# pragma omp parallel private ( nh , idh , pid )
{
nh = o m p _ g e t _n u m _ t h r e a ds () ;
idh = om p _g e t_ th r ea d_ n um () ;
pid = getpid () ;
printf ( " Hilo[ %d ] somos %d hilos en proceso %d \ n " ,idh , nh , pid ) ;
}
printf ( " Fin hilo principal \ n " ) ;
exit (0) ;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

24/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Creacion de hilos a traves de clausula


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

# include " sd_omp . h "


int main ()
{
pid_t pid ;
int nh , idh , nproc ;
nproc = om p_g et_ num _pro cs () ;
printf ( " El host cuenta con %d procesadores \ n " , nproc ) ;
pid = getpid () ;
idh = o mp _g e t_ th r ea d _n um () ;
printf ( " Inicia hilo principal[ %d ] en proceso %d \ n " ,idh , pid ) ;

# pragma omp parallel set_num_threads (5) private ( nh , idh , pid )


{
nh = o m p _ g e t _n u m _ t h r e a ds () ;
idh = om p _g e t_ th r ea d_ n um () ;
pid = getpid () ;
printf ( " Hilo[ %d ] somos %d hilos en proceso %d \ n " ,idh , nh , pid ) ;
}
printf ( " Fin hilo principal \ n " ) ;
exit (0) ;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

25/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Contexto de variables

Una variable compartida tiene la misma direccion en el


contexto de ejecuci
on de los hilos
Una variable privada tiene una direcci
on distinta en el
contexto de ejecuci
on de cada hilo
Las variables privadas seran creadas en la pila del hilo y NO
seran incializadas

Un hilo no puede acceder a las variables privadas de otro hilo

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

26/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Clausulas private y shared

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# include " sd_omp . h "


int main ()
{
int privada , compartida ;
privada = 1;
compartida = 10;
# pragma omp parallel private ( privada ) shared ( compartida )
{
privada ++;
compartida ++;
printf ( " privada= %d , compartida= %d \ n " , privada , compartida ) ;
}
exit (0) ;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

27/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Clausulas private y shared, inicializacion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# include " sd_omp . h "


int main ()
{
int privada , compartida ;

compartida = 10;
# pragma omp parallel private ( privada ) shared ( compartida )
{
privada =1;
privada ++;
compartida ++;
printf ( " privada= %d , compartida= %d \ n " , privada , compartida ) ;
}
exit (0) ;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

28/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Clausula firstprivate

La variables clasificadas como firstprivate son variables


privadas para cada hilo en un grupo pero global en el proceso
Varios grupos de hilos podran acceder a sus valores

Oscar Alvarado Nava

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

# include " sd_omp . h "


int main ()
{
int privada , compartida ;
privada = 1;
compartida = 10;
# pragma omp parallel firstprivate ( privada ) shared ( compartida )
{
privada ++;
compartida ++;
printf ( " privada= %d , compartida= %d \ n " , privada , compartida ) ;
}
return 0;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

30/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Sincronizacion

Al final de una regi


on paralela hay una sincronizacion implcita
entre hilos
Solo el hilo principal contin
ua la ejecuci
on
Cuando un hilo encuentra un constructor paralelo, un grupo
de hilos es creado si uno de los siguientes casos es verdadero
No esta la clausula if presente
Si al evaluar la expresi
on de if tiene un valor diferente de cero

Oscar Alvarado Nava

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

# include " sd_omp . h "


int main ( int argc , char * argv [])
{
char c ;
int fd ,i ,j , nchar ;
pid_t pid ;
nchar = atoi ( argv [1]) ;
# pragma omp parallel num_threads ( argc -2) private (i ,j ,c , fd ) shared ( nchar )
{
i =2;
c = A ;
printf ( " hilo %d \ n " , o mp _ ge t_ t hr ea d _n u m () ) ;
c += om p_ g et _ th re a d_ n um () ;
i += om p_ g et _ th re a d_ n um () ;
fd = open ( argv [ i ] , O_WRONLY | O_CREAT | O_TRUNC , 0644) ;
for ( j =0; j < nchar ; j ++)
write ( fd ,& c ,1) ;
}
printf ( " termina proceso %d \ n " , getpid () ) ;
exit (0) ;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

32/47

OpenMP

Directiva parallel

Directivas compartidas

Directiva parallel

Compilacion, ejecucion y visualizacion


Compilacion
oskr@kro:$ gcc -fopenmp hcOMP.c -o hcOMP
Ejecucion
oskr@kro:$ ./hcOMP 1000000 a1.txt a2.txt a3.txt
a4.txt a5.txt
Visualizacion
oskr@kro:$ ps -aL
Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

33/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Construcciones compartidas

Distribuye el trabajo entre los hilos creados en una region


paralela
El inicio del trabajo no es sincronizado
El fin del trabajo implica una barrera
A menos que se especifique la clausula nowait

El trabajo se asigna de acuerdo a la poltica de planificacion


(schedule) asignada por el programador

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

34/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Definicion de construcciones compartidas

Ciclos for
Secciones sections
Secuenciales single
Compartido workshare

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

35/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Directiva for y sus clausulas

Directiva

for

Oscar Alvarado Nava

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

Oscar Alvarado Nava

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

Oscar Alvarado Nava

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: +, *, &, |,&&, ||

Oscar Alvarado Nava

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

Oscar Alvarado Nava

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

# include " sd_omp . h "


int main ( int argc , char * argv [])
{
int suma = 0 ,* datos ;
int n , nt , i ;
/* recibe parametros */
n = atoi ( argv [1]) ; // numero de datos a crear
nt = atoi ( argv [2]) ; // numero de hilos a crear
/* solicita memoria para datos e inicializa */
datos = ( int *) malloc ( n * sizeof ( int ) ) ;
for ( i =0; i < n ; i ++)
datos [ i ]= i ;
/* muestra datos */
printf ( " datos :\ n " ) ;
for ( i =0; i < n ; i ++)
printf ( " %d " , datos [ i ]) ;
printf ( " \ n " ) ;
# pragma omp parallel for num_threads ( nt ) reduction (+: suma )
for ( i =0; i < n ; i ++ ) {
printf ( " idt: %d suma= %d \ n " , o m p_ ge t _t h re ad _ nu m () , suma ) ;
suma += datos [ i ];
}
printf ( " suma %d \ n " , suma ) ;
return 0;
}

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

41/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Trabajo compartido

sections indica las secciones que pueden ejecutarse en


paralelo pero por un u
nico hilo
single solo se puede ejecutar un u
nico hilo de todos los
lanzados, y no tiene que ser obligatoriamente el hilo principal
workshare

Oscar Alvarado Nava

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

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

43/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Asignacion y sicronizacion (2)

flush esta directiva resuelve la consistencia, al exportar a


todos los hilos un valor modificado de una variable que ha
realizado otro hilo en el procesamiento paralelo
barrrier los hilos se detienen hasta que todos alcancen la
barrera
taskwait
ordered

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

44/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Clausulas de datos

Atributos de datos compartidos


default
shared
private
firstprivate
lastprivate
reduction
Copia de datos
copyin
copyprivate

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

45/47

OpenMP

Directiva parallel

Directivas compartidas

Directivas compartidas

Planificacion de tareas

schedule(static [,chunk]) chunk iteraciones se asignan


de manera estatica a los threads en round-robin
schedule(dynamic [,chunk]) cada hilo toma chunk
iteraciones cada vez que esta sin trabajo
schedule(guided [,chunk]) cada hilo toma iteraciones
dinamicamente y progresivamente va tomando menos
iteraciones

Oscar Alvarado Nava

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)

Oscar Alvarado Nava

UAM Azcapotzalco

Implementaci
on de hilos con OpenMP

47/47

S-ar putea să vă placă și