Directivas Sections and Section
Anterior | Siguiente |
Con estas directivas podemos asignar diferentes porciones del código de una región paralela a diferentes hilos. La asignación de hilos a secciones se hace de manera rotatoria (round-robin fashion).
Sintaxis básica
<serial region code>
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
}
#pragma omp section
{
}
} // implicit barrier here
}
<serial region code>
…
Ejemplo:
Vamos a ejecutar 3 secciones diferentes en paralelo:
#include <stdio.h>
#include <omp.h>
int main(){
int m = omp_get_thread_num();
printf("thread=%d in serial region\n", m);
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
int t = omp_get_thread_num();
printf("Section 0 executed by thread=%d\n", t);
}
#pragma omp section
{
int t = omp_get_thread_num();
printf("Section 1 executed by thread=%d\n", t);
}
#pragma omp section
{
int t = omp_get_thread_num();
printf("Section 2 executed by thread=%d\n", t);
}
} // implicit barrier here
}
m = omp_get_thread_num();
printf("thread=%d in serial region\n", m);
}
¿Cómo compilar?
clang -fopenmp -I/home/user/llvm/llvm-build/projects/openmp/runtime/src/
-o sections-000 sections-000.c
¿Cómo ejecutar?
./sections-000
Salida 1
thread=0 in serial region
Section 0 executed by thread=0
Section 2 executed by thread=2
Section 1 executed by thread=1
thread=0 in serial region
Salida 2
thread=0 in serial region
Section 2 executed by thread=2
Section 0 executed by thread=0
Section 1 executed by thread=1
thread=0 in serial region
- Cada sección fue ejecutada por un hilo diferente de manera paralela.
- La asignación de las secciones a los hilos del equipo se hizo de manera rotatoria, por lo que en ejecuciones diferentes, los hilos siempre se encargarán de la misma sección: hilo 0 con sección 0, hilo 1 con sección 1, etc…
Preguntas
- ¿En qué situaciones la estrategia de asignación rotatoria puede resultar siendo ineficiente?
- Modifica el programa de tal manera que haya una sección para cada hilo.
Anterior | Siguiente |
Estás en el Nivel 1: Introducción a la programación paralela con OpenMP. ¿Deseas volver al inicio?