MPI RMA:多个锁定操作的顺序

时间:2016-01-25 02:10:02

标签: locking mpi remote-access

我想知道用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放入窗口,最后释放锁。但是,由于MPI锁定是非阻塞的(它只能确保在获取锁定时完成RMA操作),我们可能lockputunlock在获得第一个窗口之前的第二个窗口?

最后,是否可以在Put操作之前执行print语句?如果它在Put(something)行之后被移动了怎么办?

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

1 个答案:

答案 0 :(得分:0)

所以,经过一些研究似乎是肯定的,我们可能会在第一个窗口上执行lockputunlock一。因此,窗口3中的进程1 puts可能会被进程2覆盖,而进程1在窗口2中为putting

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

print总是会出现在最后,因为@Jeff强调,解锁可以被视为阻止。

来源:https://www.youtube.com/watch?v=HVzVvg__UK4大约凌晨1点05分。