1

我正在编写具有 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,但是,我认为这需要更多时间。

似乎在工作。但是,我不确定这是否正确使用。

4

0 回答 0