Directiva combinada parallel for
Anterior | Siguiente |
Muchas veces lo único que queremos paralelizar es directamente un bucle. Con esta directiva combinada nos ahorramos el tener que crear una región paralela sin código paralelo entre el bucle y sus límites.
Sintaxis básica
#pragma omp parallel for
for(...){
<loop body>
}// implicit barrier here
Ejemplo
Vamos a distribuir las iteraciones del bucle entre los hilos disponibles:
#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 for
for(int i=0; i<16 ; i++){
int f = omp_get_thread_num();
printf("id=%d processed by thread=%d\n", i, f);
} // 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-for-000 for-000.c
¿Cómo ejecutar?
./parallel-for-000
Salida
id=0 processed by thread=0
id=8 processed by thread=2
id=9 processed by thread=2
id=1 processed by thread=0
id=2 processed by thread=0
id=3 processed by thread=0
id=10 processed by thread=2
id=11 processed by thread=2
id=12 processed by thread=3
id=13 processed by thread=3
id=14 processed by thread=3
id=15 processed by thread=3
id=4 processed by thread=1
id=5 processed by thread=1
id=6 processed by thread=1
id=7 processed by thread=1
master thread=0 in serial region
Cada hilo procesó 4 iteraciones de las 16 disponibles.
Preguntas
- Toma los ejemplos que escribiste para for y nowait y adáptalos con la directiva combinada parallel for.
Anterior | Siguiente |
Estás en el Nivel 2: Bucles paralelos y tareas concurrentes con OpenMP. ¿Deseas volver al inicio?