【发布时间】: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