我正在编写具有 MPI-3 远程内存访问功能的混合 MPI/OpenMP 代码。我假设 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 进程调用一次 lock 和 unlock。OMP 线程在需要时调用 MPI_Get。我可以为每个 MPI_Get 调用 lock 和 unlock,但是,我认为这需要更多时间。
似乎在工作。但是,我不确定这是否正确使用。