Учитывая следующий пример, OpenMP требует определения адресов, хранящихся в buff1
и buff2
10. Однако адреса, хранящиеся в buff1
и buff2
, определяются в соответствии с идентификатором (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);
}