MPI:确保对共享内存的独占访问(RMA)



我想知道哪种方法是确保在MPI中的n个进程之间独占访问共享资源(如内存窗口)的最佳方法。我已经尝试了MPI_Win_lock&MPI_Win_fence,但它们似乎没有按预期工作,即:我可以看到多个进程同时进入一个关键区域(MPI_Win_lock和MPI_Win_unlock之间的代码,其中包含MPI_Get和/或MPI_Put)。

我很感激你的建议。谢谢

在MPI 2中,您无法真正执行原子操作。这是在MPI 3中使用CCD_ 1引入的。这就是修改关键数据的原因。

此外,请注意"MPI_Win_lock"。如上所述:

这个程序的名称有误导性。特别是,这个例程不需要阻塞,除非目标进程是调用进程。

实际的阻塞过程是MPI_Win_unlock,这意味着只有从该过程返回后,才能确保putget的值是正确的。也许这在这里描述得更好:

MPI被动目标操作被组织到由MPI Win锁定和MPI Win解锁调用包围的访问时期中。聪明的MPI实现[10]将把所有的数据移动操作(put、get和accumulate)组合成一个在解锁时发生的网络事务。

同样的文档也可以为您的问题提供解决方案,即关键数据不是以原子方式编写的。它通过使用互斥来实现这一点,这是一种确保一次只有一个进程可以访问数据的机制。

我建议你阅读这份文件:他们提出的解决方案并不难实施。

最新更新