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

时间:2016-05-15 09:16:09

标签: algorithm mpi mutual-exclusion mpi-rma

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

我很感激你的建议。感谢。

1 个答案:

答案 0 :(得分:1)

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

此外,请注意“MPI_Win_lock”。如上所述here

  

此例程的名称具有误导性。特别是,除了目标进程是调用进程之外,该例程不需要阻塞。

实际阻止过程为MPI_Win_unlock,这意味着只有在从此过程返回后,您才能确保putget中的值正确无误。或许更好地描述here

  

MPI被动目标操作被组织成由MPI Win锁定和MPI Win解锁调用括起来的访问时期。聪明的MPI实现[10]将所有数据移动操作(放置,获取和累积)组合到解锁时发生的一个网络事务中。

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

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