次の例を考慮すると、OpenMPでは、buff1
とbuff2
に格納されているアドレスを決定する必要があります。ただし、buff1
とbuff2
に格納されているアドレスは、タスクを実行するスレッドのID(myid
)に応じて決定されます。問題を解決するにはどうしたらいいですか?どのような解決策が評価されます。私は記憶を割り当てることができません。スレッドプライベートストレージへのOpenMPタスク依存性
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);
}