Может ли главный поток вызвать MPI_Win_lock_all () один раз для всех потоков?

Я пишу гибридный код MPI / OpenMP с функцией удаленного доступа к памяти MPI-3. Я предполагаю, что MPI_THREAD_SERIALIZED доступен.

Я могу это сделать?

 MPI_Win_lock_all(0, win);
#pragma omp parallel
{
...
#pragma omp critical(getRemoteData)
{
MPI_Get(buf, len, MPI_UINT64_T, t_rank, localOffset, len, MPI_UINT64_T, win);
MPI_Win_flush(t_rank, win);
}
...

}
MPI_Win_unlock_all(win);

Здесь основной поток вызывает блокировку и разблокировку один раз для всего процесса MPI. Потоки OMP при необходимости вызывают MPI_Get. Я мог бы вызвать блокировку и разблокировку для каждого MPI_Get, но, я думаю, это занимает больше времени.

Кажется, работает. Но я не уверен, что это правильное использование.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]