Directiva combinada Parallel Master
Anterior | Siguiente |
A veces es necesario que, de entrada, en una región paralela, el hilo maestro asuma el control y despache tareas de manera asíncrona a los demás hilos.Todos los hilos se sincronizan al finalizar la región (barrera implícita). Veremos el despacho de tareas más adelante en el taller.
Sintaxis básica
#pragma omp parallel master
{
<serial region code with task dispatching>
}
Ejemplo
El hilo maestro se encarga de despachar tareas a los demás hilos:
#include <stdio.h>
#include <omp.h>
int main(){
int m = omp_get_thread_num();
printf("master thread=%d in serial region\n", m);
#pragma omp parallel master
{
int t = omp_get_thread_num();
printf("thread=%d in parallel region\n", t);
#pragma omp task
{
int s = omp_get_thread_num();
printf("thread=%d in task region\n", s);
}
#pragma omp task
{
int s = omp_get_thread_num();
printf("thread=%d in task region\n", s);
}
#pragma omp task
{
int s = omp_get_thread_num();
printf("thread=%d in task region\n", s);
}
} // implicit barrier here
printf("master thread=%d in serial region\n", m);
}
¿Cómo compilar?
clang -fopenmp -I/home/user/llvm/llvm-build/projects/openmp/runtime/src/
-o parallel-master-000 parallel-master-000.c
¿Cómo ejecutar?
./parallel-master-000
Salida
master thread=0 in serial region
thread=0 in parallel region
thread=3 in task region
thread=0 in task region
thread=1 in task region
master thread=0 in serial region
En este caso el hilo maestro asumió el control de la región, y despachó tareas a todos los hilos, incluido a sí mismo. Por eso, hilo 2 no participó.
Preguntas
- ¿A qué directiva de las ya estudiadas se asemeje la directiva task?
Anterior | Siguiente |
Estás en el Nivel 1: Introducción a la programación paralela con OpenMP. ¿Deseas volver al inicio?