In Anbetracht des folgenden Beispiels erfordert OpenMP, dass die in buff1
und buff2
gespeicherten Adressen ermittelt werden müssen. Die in buff1
und buff2
gespeicherten Adressen werden jedoch anhand der ID (myid
) des Threads ermittelt, der die Task ausführt. Wie kann ich mein Problem lösen? Jede Lösung wird geschätzt. Ich darf keine Speicher zuordnen.OpenMP Task-Abhängigkeiten zu Thread-private Speicher
mystruct* buff1;
mystruct* buff2;
#pragma omp task depend(in: data[0:1000]) depend(inout: buff1[0:0])
{
int myid=omp_get_thread_num();
buff1=buffers[myid];
processA(data, buff1);
}
#pragma omp task depend(in: data[0:1000]) depend(inout: buff2[0:0])
{
int myid=omp_get_thread_num();
buff2=buffers[myid];
processB(data, buff2);
}
#pragma omp task depend(in: data[0:1000]) depend(inout: buff1[0:0]) depend(inout: buff2[0:0])
{
processC(data, buff1, buff2);
}