Dependencia de tareas en OpenMP 4
El siguiente código funciona según la especificación OpenMP 4.0:
La salida yEn fuera tipos de dependencia. La tarea generada será una tarea dependiente de todas las tareas de hermanos generadas previamente que hacen referencia al menos a uno de los elementos de la lista en una lista de tipo de dependencia de entrada, salida o entrada.
Esto significa que task3 se vuelve dependiente de task2. ¿Derecho? pero no tiene sentido! ¿Por qué una tarea de dependencia de entrada-salida debe ser dependiente de una tarea de dependencia de entrada?
¿Qué debo hacer para que sean independientes? p.s: código probado con g ++ 4.9 en Linux.
#include <stdio.h>
#include <omp.h>
#include <unistd.h>
int main() {
int x,y;
#pragma omp parallel num_threads(10)
{
#pragma omp single nowait
{
#pragma omp task depend (out:x) //task1
{
x=1;
}
#pragma omp task depend(in:x) depend(out:y) //task2
{
sleep(2); //Does task3 wait for us? Yes!
y=x+1;
}
#pragma omp task depend (inout:x) //task3
{
x++;
printf("task3(x): %d\n" , x);
}
#pragma omp task depend (in:x,y) //task4
{
printf("task4 (x+y): %d\n" , x+y);
}
}
}
return 0;
}