MPI RMA:多个 Lock 操作的顺序

MPI RMA: Order of multiple Lock operations

我想知道使用 MPI 锁定多个 RMA Windows 时可能的执行顺序是什么。这是我想要执行的操作的 (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 放入 window,最后释放锁。但是,由于MPI锁是非阻塞的(它只保证在获取到锁时RMA操作会完成),我们是否可以lockputunlock第二个 window 全部在获得第一个之前 ?

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

非常感谢您的帮助, Seba-1511

所以,经过更多的研究,似乎是的,我们可能 lockputunlock 在第二个 window,在第一个上做之前。因此,进程 1 puts 在 window 3 中是可能的,并且这个 put 被进程 2 覆盖,而进程 1 在 window 2 中是 putting

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

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

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