OpenMP

47
OpenMP Directiva parallel Directivas compartidas Sistemas Operativos Implementaci´ on de hilos con OpenMP Oscar Alvarado Nava [email protected] Departamento de Electr´ onica Divisi´on de Ciencias B´ asicas e Ingenier´ ıa Universidad Aut´onoma Metropolitana, Unidad Azcapotzalco 14I, marzo de 2014 Oscar Alvarado Nava UAM Azcapotzalco Implementaci´on de hilos con OpenMP 1/47

description

Hilos, cpu, paralelismo

Transcript of OpenMP

Page 1: OpenMP

OpenMP Directiva parallel Directivas compartidas

Sistemas OperativosImplementacion de hilos con OpenMP

Oscar Alvarado Nava

[email protected]

Departamento de ElectronicaDivision de Ciencias Basicas e Ingenierıa

Universidad Autonoma Metropolitana, Unidad Azcapotzalco

14I, marzo de 2014

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 1/47

Page 2: OpenMP

OpenMP Directiva parallel Directivas compartidas

Contenido

1 OpenMPOpenMP

2 Directiva parallel

Directiva parallel

3 Directivas compartidasDirectivas compartidas

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 2/47

Page 3: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Programacion multi-hilo

Utilizado para el desarrollo de aplicaciones en sistema dememoria compartida

Multi-procesadorMulti-nucleoGPUs

Tambien conocidos como sistemas SIMD (Single InstructionMultiple Data)

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 3/47

Page 4: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Programacion paralela incremental

secuencial secuencialparalela

fork join

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 4/47

Page 5: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Implementacion de hilos en Linux

En CPUs ejecutando Linux, los hilos se pueden implementar atraves de varias herramientas y lenguajes

OpenMP: C/C++,FortranPOSIX Threads: C/C++, PythonJVM JavaQt4 C/C++

Sobre GPUs (Graphics Processing Unit) utilizando CUDA(Compute Unified Device Architecture)

C/C++

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 5/47

Page 6: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

OpenMP

OpenMP es un API (Application Program Interface) queconsiste en

Directivas al preprocesador a traves de #pragmas

Biblioteca de funcionesVariables de ambiente

www.openmp.org

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 6/47

Page 7: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Aprovechamiento paralelo

Las dos principales formas de aprovechamiento paraasignacion de trabajo a hilos, son

Regiones paralelas (grano grueso)Paralelizacion de ciclos (grano fino)

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 7/47

Page 8: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Instalacion en Linux Debian

Linux GNU/Debian utiliza GOMP, la cual es implementacionlibre 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 Implementacion de hilos con OpenMP 8/47

Page 9: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

OpenMP y compilador GCC

OpenMP es soportado a partir de la version 4.3 de GCC

Se debe verificar la version que se esta utilizando y suconfiguracionSe puede cambiar la version al instalar y cambiar la ligasimbolica

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

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

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 9/47

Page 10: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Pragmas en GCC

La directiva al preprocesador #pragma, permite a loscompiladores de C/C++ definir directivas particulares pormedio del preprocesador

Dichas directivas No corresponden a nada establecido en elestandar ANSI

Si el preprocesador y el compilador no reconocen la directivaseran ignoradas sin ningun error, quiza con algun tipo demensaje o advertencia

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 10/47

Page 11: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Formato de directivas y clausulas para OpenMP

1 #include <omp.h> /* verificar la ruta*/

2

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

4 {

5 sentencia_1;

6 sentencia_2;

7 ...

8 sentencia_N;

9 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 11/47

Page 12: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Funciones de biblioteca (1/2)

Funcion Descripcionomp set num threads Fija el numero de hilos simultaneosomp get num threads Regresa el numero de hilos en ejecucion

omp get max threadsRegresa el numero maximo de hilos quese lanzaran en las zonas paralelas

omp get thread numDevuelve el numero del thread dentro del equipo(valor entre 0 y omp get num threads()-1)

omp get num procsRegresa el numero de procesadores del sistema,los procesadores es el numero total de nucleos

omp in parallel

omp set dynamicPermite expecificar si queremos que el numero de hiloscrezca y decrezca dinamicamente.

omp get dynamic

omp set nested

omp get nested

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 12/47

Page 13: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Funciones de biblioteca (2/2)

Funcion Descripcionomp 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 Implementacion de hilos con OpenMP 13/47

Page 14: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Variables de ambiente

Algunas variables de ambienteOMP SCHEDULE

OMP NUM THREADS

OMP DYNAMIC

OMP THREAD LIMIT

OMP NESTED

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 14/47

Page 15: OpenMP

OpenMP Directiva parallel Directivas compartidas

OpenMP

Constructores

OpenMP utiliza basicamente dos tipos de construcciones, lascuales se crean con directivas

Construccion paralela de secciones: parallel

Indica que la parte de codigo que la comprende puede serejecutada por varios hilos

Construcciones paralelas compartidas: for, sections,single, workshare

Por ejemplo, for paralelizacion optimizada para los ciclos for

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 15/47

Page 16: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Directiva parallel

parallel indica que la parte de codigo que la comprendepuede ser ejecutada por varios hilos

De manera automatica creara tantos hilos como procesadores(o nucleos) tenga el sistema

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 16/47

Page 17: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Directiva parallel y sus clausulas

Directiva Clausulas

parallel

if(expresion escalar )

num threads(expresion entera )

default(shared | none)

private(lista )

firstprivate(lista )

shared(lista )

copyin(lista )

reduction(operador:lista )

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 17/47

Page 18: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Clausulas de parallel

Clausula Descripcion

private(lista )

Por cada variable listada se generara una copia en cadahilo, esta copia no tiene relacion con la original y noes inicializada a menos que se utilice firstprivate

shared(lista )

Las variables de la lista son comunes a todos los hilosy cada uno de ellos puede modificarla afectandolaen forma global

firstprivate(lista )Hace que la lista sea privada para los hilos,pero globales dentro de un hilo

reduction(operador:lista )

Realiza una operacion de reduccion sobre lasvariables que aparecen en la lista utilizandoel operador/intrınseco especificado

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 18/47

Page 19: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Directiva parallel

1 #include <omp.h>

2 #include <stdio.h>

34 int main()

5 {

6 #pragma omp parallel

7 {

8 printf("Hola mundo\n");

9 }

10 return 0;

11 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 19/47

Page 20: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Identificacion de hilos

Todo hilo tiene una identifiacion que puede ser mostrada pormedio de la funcionint omp get thread num(void)

El hilo maestro sera el 0Los hilos del equipo seran mayor que cero y menor aomp get num threads

int omp get thread num(void) regresara cero en unaejecucion secuencial

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 20/47

Page 21: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Numero de procesadores fısicos

La funcionint omp get num procs(void)

Devuelve el numero de procesadores fısicos que estandispondible para el uso del programa paralelo

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 21/47

Page 22: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Identificacion

1 #include"sd_omp.h"

23 int main()

4 {

5 pid_t pid;

6 int nh,idh ,nproc;

78 nproc = omp_get_num_procs ();

9 printf("El host cuenta con %d procesadores\n",nproc);

1011 pid = getpid ();

12 idh = omp_get_thread_num ();

13 printf("Inicia hilo principal[ %d] en proceso %d\n",idh ,pid);

1415 #pragma omp parallel private(nh ,idh ,pid)

16 {

17 nh = omp_get_num_threads ();

18 idh = omp_get_thread_num ();

19 pid = getpid ();

20 printf("Hilo[ %d] somos %d hilos en proceso %d\n",idh ,nh ,pid);

21 }

22 printf("Fin hilo principal\n");

23 exit (0);

24 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 22/47

Page 23: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Creacion de hilos

La funcionint omp set num threads(int t)

Se utiliza para asignar el numero de hilos a ser activos ensecciones paralelas del codigo, puede ser llamada en variospuntos del programa

Tambien se puede utilizar la clausulaset num threads(int t)

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 23/47

Page 24: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Creacion de hilos a traves de funcion

1 #include"sd_omp.h"

23 int main()

4 {

5 pid_t pid;

6 int nh,idh ,nproc;

78 nproc = omp_get_num_procs ();

9 printf("El host cuenta con %d procesadores\n",nproc);

1011 pid = getpid ();

12 idh = omp_get_thread_num ();

13 printf("Inicia hilo principal[ %d] en proceso %d\n",idh ,pid);

1415 omp_set_num_threads (5);/* creara 5 hilos*/

16 #pragma omp parallel private(nh ,idh ,pid)

17 {

18 nh = omp_get_num_threads ();

19 idh = omp_get_thread_num ();

20 pid = getpid ();

21 printf("Hilo[ %d] somos %d hilos en proceso %d\n",idh ,nh ,pid);

22 }

23 printf("Fin hilo principal\n");

24 exit (0);

25 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 24/47

Page 25: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Creacion de hilos a traves de clausula

1 #include"sd_omp.h"

23 int main()

4 {

5 pid_t pid;

6 int nh,idh ,nproc;

78 nproc = omp_get_num_procs ();

9 printf("El host cuenta con %d procesadores\n",nproc);

1011 pid = getpid ();

12 idh = omp_get_thread_num ();

13 printf("Inicia hilo principal[ %d] en proceso %d\n",idh ,pid);

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

17 {

18 nh = omp_get_num_threads ();

19 idh = omp_get_thread_num ();

20 pid = getpid ();

21 printf("Hilo[ %d] somos %d hilos en proceso %d\n",idh ,nh ,pid);

22 }

23 printf("Fin hilo principal\n");

24 exit (0);

25 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 25/47

Page 26: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Contexto de variables

Una variable compartida tiene la misma direccion en elcontexto de ejecucion de los hilos

Una variable privada tiene una direccion distinta en elcontexto de ejecucion de cada hilo

Las variables privadas seran creadas en la pila del hilo y NOseran incializadas

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

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 26/47

Page 27: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Clausulas private y shared

1 #include"sd_omp.h"

23 int main()

4 {

5 int privada , compartida;

67 privada = 1;

8 compartida = 10;

9 #pragma omp parallel private( privada ) shared( compartida )

10 {

1112 privada ++;

13 compartida ++;

14 printf("privada= %d, compartida= %d\n",privada , compartida);

15 }

16 exit (0);

17 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 27/47

Page 28: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Clausulas private y shared, inicializacion

1 #include"sd_omp.h"

23 int main()

4 {

5 int privada , compartida;

678 compartida = 10;

9 #pragma omp parallel private( privada ) shared( compartida )

10 {

11 privada =1;

12 privada ++;

13 compartida ++;

14 printf("privada= %d, compartida= %d\n",privada , compartida);

15 }

16 exit (0);

17 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 28/47

Page 29: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Clausula firstprivate

La variables clasificadas como firstprivate son variablesprivadas 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 Implementacion de hilos con OpenMP 29/47

Page 30: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Clausula firstprivate

1 #include"sd_omp.h"

23 int main()

4 {

5 int privada , compartida;

67 privada = 1;

8 compartida = 10;

9 #pragma omp parallel firstprivate( privada ) shared( compartida )

10 {

1112 privada ++;

13 compartida ++;

14 printf("privada= %d, compartida= %d\n",privada , compartida);

15 }

16 return 0;

17 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 30/47

Page 31: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Sincronizacion

Al final de una region paralela hay una sincronizacion implıcitaentre hilos

Solo el hilo principal continua la ejecucion

Cuando un hilo encuentra un constructor paralelo, un grupode hilos es creado si uno de los siguientes casos es verdadero

No esta la clausula if presenteSi al evaluar la expresion de if tiene un valor diferente de cero

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 31/47

Page 32: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directiva parallel

Hilos chambeadores

1 #include"sd_omp.h"

23 int main(int argc , char *argv [])

4 {

5 char c;

6 int fd,i,j,nchar;

7 pid_t pid;

89 nchar = atoi(argv [1]);

1011 #pragma omp parallel num_threads(argc -2) private(i,j,c,fd) shared(nchar)

12 {

13 i=2;

14 c=’A’;

15 printf("hilo %d\n",omp_get_thread_num ());

16 c += omp_get_thread_num ();

17 i += omp_get_thread_num ();

1819 fd = open(argv[i], O_WRONLY |O_CREAT| O_TRUNC , 0644);

20 for(j=0; j<nchar;j++)

21 write(fd ,&c,1);

22 }

23 printf("termina proceso %d\n",getpid ());

2425 exit (0);

26 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 32/47

Page 33: OpenMP

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 Implementacion de hilos con OpenMP 33/47

Page 34: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Construcciones compartidas

Distribuye el trabajo entre los hilos creados en una regionparalela

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 polıtica de planificacion(schedule) asignada por el programador

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 34/47

Page 35: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Definicion de construcciones compartidas

Ciclos for

Secciones sections

Secuenciales single

Compartido workshare

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 35/47

Page 36: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Directiva for y sus clausulas

Directiva Clausulas

for

private(lista )

firstprivate(lista )

lastprivate(lista )

reduction(operador:lista )

schedule(tipo[, tama~no trozo] )

collapse(n )

ordered

nowait

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 36/47

Page 37: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Clausulas de for

Clausula Descripcion

lastprivate(lista )

Hace que la lista se comporte como si hubiesesido declarada privada, pero el ultimo hiloque ejecuta la sentencia de distribucion de trabajolo actualiza con su valor privado

ordered

Es una instancia donde una parte de un ciclopuede ser ejecutada en orden secuencial,cuando el resto del ciclo se ejecuta en paralelo

schedule(tipo[,tama~no trozo] )

Especifica cuantas iteraciones del for sondivididas entre el numero de hilos, el valor detama~no trozo es especificado en el for,es invariante y es un numero positivo.

reduction(operador:lista )

Realiza una operacion de reduccion sobre lasvariables que aparecen en la lista utilizandoel operador/intrınseco especificado

nowaitEvita que haya una sincronizacion entre hilos alfinal de la directiva de distribucion de trabajo

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 37/47

Page 38: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Categorıas de schedule

Categorıas Descripcion

staticEl numero de iteraciones es dividido en tramos de tamanotama~no trozo y es asignado en forma de “Round Robin”

dynamic

El numero de iteraciones es dividido en tramos de tamanotama~no trozo y cada hilo ejecuta su tramo y esperapor mas trabajo asignado

guided

Las iteraciones son asignadas a los hilos en tramos con tamanodecreciente. Cuando un hilo finaliza el tramo de iteraciones asignado,a este se le asigna otro tramo dinamicamente hasta que se terminela reparticion

runtimeLas categorıas son obtenidas en tiempo de ejecucion con la configuraciondada en la variable de ambiente OMP SCHEDULE

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 38/47

Page 39: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Clausula reduction

reduction (<operador>:<variables>)

La variable o variables de un hilo estaran sujetas a unareduccion

Algunos operadores: +, *, &, |,&&, ||

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 39/47

Page 40: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Reduccion de suma

sum sum sum sum

sum

1 3 5 7

16

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 40/47

Page 41: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Reduccion de suma

1 #include"sd_omp.h"

23 int main(int argc , char *argv [])

4 {

5 int suma = 0,*datos;

6 int n,nt,i;

7 /* recibe parametros */

8 n=atoi(argv [1]); // numero de datos a crear

9 nt=atoi(argv [2]); // numero de hilos a crear

10 /* solicita memoria para datos e inicializa */

11 datos = (int *) malloc(n*sizeof(int));

12 for(i=0;i<n;i++)

13 datos[i]=i;

14 /* muestra datos */

15 printf("datos :\n");

16 for(i=0;i<n;i++)

17 printf(" %d ",datos[i]);

18 printf("\n");

1920 #pragma omp parallel for num_threads(nt) reduction (+: suma)

21 for ( i=0; i<n; i++ ){

22 printf("idt: %d suma= %d\n",omp_get_thread_num (),suma);

23 suma+=datos[i];

24 }

2526 printf("suma %d\n",suma);

27 return 0;

28 }

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 41/47

Page 42: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Trabajo compartido

sections indica las secciones que pueden ejecutarse enparalelo pero por un unico hilo

single solo se puede ejecutar un unico hilo de todos loslanzados, y no tiene que ser obligatoriamente el hilo principal

workshare

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 42/47

Page 43: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Asignacion y sicronizacion

master la parte de codigo definida, solo se puede ejecutar porel hilo padre

critical solo un hilo puede estar en esta seccion. Definensecciones crıticas o condiciones de competencia

atomic se utiliza cuando la operacion involucra a una solaposicion de memoria, y tiene que ser actualizada solo por unhilo simultaneamente

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 43/47

Page 44: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Asignacion y sicronizacion (2)

flush esta directiva resuelve la consistencia, al exportar atodos los hilos un valor modificado de una variable que harealizado otro hilo en el procesamiento paralelo

barrrier los hilos se detienen hasta que todos alcancen labarrera

taskwait

ordered

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 44/47

Page 45: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Clausulas de datos

Atributos de datos compartidosdefault

shared

private

firstprivate

lastprivate

reduction

Copia de datoscopyin

copyprivate

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 45/47

Page 46: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Planificacion de tareas

schedule(static [,chunk]) chunk iteraciones se asignande 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 iteracionesdinamicamente y progresivamente va tomando menositeraciones

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 46/47

Page 47: OpenMP

OpenMP Directiva parallel Directivas compartidas

Directivas compartidas

Planificacion de 3 hilos

static

dynacmic(3)

guided(1)

Oscar Alvarado Nava UAM Azcapotzalco Implementacion de hilos con OpenMP 47/47