TUTORIAL OPENmp

Páginas: 6 (1279 palabras) Publicado: 4 de junio de 2013
Programación en Memoria
Compartida: OpenMP
Domingo Giménez
Departamento de Informática y Sistemas
Universidad de Murcia, Spain
dis.um.es/~domingo

Universidad de Murcia

1

Nociones básicas
• Modelo de programación fork-join, con generación de
múltiples threads.
• Inicialmente se ejecuta un thread hasta que aparece
el primer constructor paralelo, se crean threads
esclavos y elque los pone en marcha es el maestro.
• Al final del constructor se sincronizan los threads y
continúa la ejecución el maestro.

Universidad de Murcia

2

Hello world
#include
int main() {
int iam =0, np = 1;
#pragma omp parallel private(iam, np)
{
#if defined (_OPENMP)
np = omp_get_num_threads();
iam = omp_get_thread_num();
#endif
printf(“ Hello from thread %d out of %d \n” ,iam, np);
}
}
Universidad de Murcia

3

Directivas

#pragma omp nombre-directiva [cláusulas]

Universidad de Murcia

4

Constructor parallel
#pragma omp parallel [cláusulas]
bloque
 
Se crea un grupo de threads. El que los pone en marcha actúa de
maestro.
Con cláusula if se evalúa su expresión y si da valor distinto de cero se
crean los threads, si es cero se hace ensecuencial.
El número de threads a crear se obtiene por variables de entorno o
llamadas a librería.
Hay barrera implícita al final de la región.
Cuando dentro de una región hay otro constructor paralelo, cada esclavo
crearía otro grupo de threads esclavos de los que sería el maestro.
Cláusulas (private, firstprivate, default, shared, copyin y reduction)
para indicar la forma en que se accede a lasvariables.
Universidad de Murcia

5

Constructor for
#pragma omp for [cláusulas]
bucle for
 
Las iteraciones se ejecutan en paralelo por threads que ya existen.
La parte de inicialización del for debe ser una asignación.
La parte de incremento debe ser una suma o resta.
La parte de evaluación es la comparación de una variable entera sin signo con un valor, utilizando un comparador mayor o menor (puede incluir igual).
Los valores que aparecen en las tres partes del for deben ser enteros.
Hay barrera al final a no ser que se utilice la cláusula nowait. 
Hay  una  serie  de  cláusulas  (private,  firstprivate,  lastprivate  y  reduction)  para 
indicar la forma en que se accede a las variables.

 

Universidad de Murcia

6

Constructor for
Una cláusula schedule indicala forma como se dividen las iteraciones del
for entre los threads:
schedule(static,tamaño) las iteraciones se dividen según el tamaño, y la
asignación se hace estáticamente a los threads. Si no se indica el
tamaño se divide por igual entre los threads.
schedule(dynamic,tamaño) las iteraciones se dividen según el tamaño y
se asignan a los threads dinámicamente cuando van acabando sutrabajo.
schedule(guided,tamaño) las iteraciones se asignan dinámicamente a los
threads pero con tamaños decrecientes.
schedule(runtime) deja la decisión para el tiempo de ejecución, y se
obtienen de la variable de entorno OMP_SCHEDULE.
Universidad de Murcia

7

Constructor sections
#pragma omp sections [cláusulas]
{
[#pragma omp section]
bloque
[#pragma omp section
bloque
...
]
}Cada sección se ejecuta por un thread.
Hay barrera al final a no ser que se utilice la cláusula nowait.
Hay una serie de cláusulas (private, firstprivate, lastprivate y reduction)
para indicar la forma en que se accede a las variables.
Universidad de Murcia

8

Constructores combinados
#pragma omp parallel for [cláusulas]
bucle for
 
Es forma abreviada de directiva parallel que tieneuna única directiva for, y
admite sus cláusulas menos la nowait.
#pragma omp parallel sections [cláusulas]
 
Es forma abreviada de directiva parallel que tiene una única directiva
sections, y admite sus cláusulas menos la nowait.
Universidad de Murcia

9

Constructores de ejecución
secuencial
#pragma omp single [cláusulas]
bloque
El bloque se ejecuta por un único thread. No...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Openmp
  • OpenMp
  • tutorial
  • tutorial
  • Tutoriales
  • tutorial
  • Tutorial
  • Tutorial

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS