【问题标题】:MPI: Ensure an exclusive access to a shared memory (RMA)MPI:确保对共享内存 (RMA) 的独占访问
【发布时间】:2016-09-11 05:09:13
【问题描述】:

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

非常感谢您的建议。谢谢。

【问题讨论】:

    标签: algorithm mpi mutual-exclusion mpi-rma


    【解决方案1】:

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

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

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

    实际的阻塞过程是MPI_Win_unlock,也就是说只有从这个过程返回后,你才能确定put和get的值是正确的。也许这更好地描述here:

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

    同样的文档还可以为您的问题提供解决方案,即关键数据不是原子写入的。它通过使用 mutex 来做到这一点,这是一种确保同时只有一个进程可以访问数据的机制。

    我建议您阅读此文档:他们提出的解决方案并不难实施。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2019-12-15
      • 2016-10-09
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多