Я пишу гибридный код 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, но, я думаю, это занимает больше времени.
Кажется, работает. Но я не уверен, что это правильное использование.
Задача ещё не решена.
Других решений пока нет …