Task-Abhängigkeit in OpenMP 4

Der folgende Code basiert auf der OpenMP 4.0-Spezifikation:

The out und inout Abhängigkeitstypen. Die generierte Aufgabe ist eine abhängige Aufgabe aller zuvor generierten Geschwisteraufgaben, die auf mindestens eines der Listenelemente in einer In-, Out- oder Inout-Abhängigkeitstyp-Liste verweisen.

Dies bedeutet, dass Task3 von Task2 abhängig wird. Richtig? aber es macht keinen sinn! Warum sollte eine Eingabe-Ausgabe-Abhängigkeitstask von einer Eingabe-Abhängigkeitstask abhängig sein?

Was muss ich tun, um sie unabhängig zu machen? p.s: Code getestet mit g ++ 4.9 unter 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;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage