【问题标题】:MPI RMA: Order of multiple Lock operationsMPI RMA:多个锁定操作的顺序
【发布时间】:2016-02-11 10:25:13
【问题描述】:

我想知道使用 MPI 锁定多个 RMA 窗口时可能的执行顺序是什么。这是我想做的(python)伪代码:

for win in windows:
    win.Lock(0, LOCK_TYPE)
for win in windows:
    win.Put(something)
for win in windows:
    win.Unlock(0)
print 'Done'

我的问题是:这些命令的执行顺序可能是什么?

期望的行为是它首先获取所有锁,然后将something 放入窗口,最后释放锁。但是,由于 MPI 锁定是非阻塞的(它只确保在获取锁时会执行 RMA 操作),是否有可能我们 lock、put 和 unlock 第二个窗口都在获取之前第一个?

最后,是否可以在 Put 操作之前执行 print 语句?如果移动到Put(something) 行之后呢?

非常感谢您的帮助, 塞巴-1511

【问题讨论】:

  • 你能更详细地了解你需要从代码中得到什么吗?我不认为这是一个好的模式。为什么需要这么多窗户?无论如何,MPI-3 可能会使您正在做的一些事情变得更简单。
  • 出于所有实际目的,解锁都是阻塞的。在极少数情况下,锁定可能是无操作或似乎阻塞。 Put 始终是本地的。
  • 感谢您的回答。我必须将几个矩阵从一个节点传输到另一个节点。我不确定您的第二条评论意味着什么:是否可能发生死锁或一组矩阵被另一组部分覆盖?

标签: locking mpi remote-access


【解决方案1】:

因此,经过更多研究,似乎是的,我们有可能在第二个窗口上 lock、put 和 unlock,然后在第一个窗口上进行操作。因此,窗口 3 中的进程 1 puts 可能会被进程 2 覆盖,而进程 1 是窗口 2 中的 putting。

lock 和 unlock 所做的是以某种方式在 RMA 窗口上累积所有操作,如果您使用的是 EXCLUSIVE_LOCK,它将在目标上自动执行它们。如果使用SHARED_LOCK,则可以在其间执行来自其他进程的其他操作。请注意,lock 和 unlock 对之间的操作是非阻塞的,因此无法保证执行顺序。

print 总是出现在最后,因为正如@Jeff 强调的那样,解锁可以被视为阻塞。

来源:https://www.youtube.com/watch?v=HVzVvg__UK4 大约 1:05:00。

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多