Manual Configurar MPI y OpenMP Con Lenguaje C,C++ y Fortran Usando KDevelop
OpenMP
-
Upload
edwinmontes -
Category
Documents
-
view
7 -
download
1
description
Transcript of OpenMP
![Page 1: OpenMP](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/1.jpg)
OpenMP Directiva parallel Directivas compartidas
Sistemas OperativosImplementacion de hilos con OpenMP
Oscar Alvarado Nava
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/2.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/3.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/4.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/5.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/6.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/7.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/8.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/10.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/11.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/12.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/13.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/14.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/15.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/16.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/17.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/20.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/21.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/22.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/23.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/24.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/25.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/26.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/27.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/28.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/29.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/30.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/31.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/32.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/33.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/34.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/35.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/36.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/37.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/38.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/39.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/40.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/41.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/42.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/43.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/44.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/45.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/46.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062320/563db7d2550346aa9a8e4238/html5/thumbnails/47.jpg)
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