我想知道用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操作),我们可能lock
,put
和unlock
在获得第一个窗口之前的第二个窗口?
最后,是否可以在Put操作之前执行print语句?如果它在Put(something)
行之后被移动了怎么办?
非常感谢你的帮助, Seba-1511
答案 0 :(得分:0)
所以,经过一些研究似乎是肯定的,我们可能会在第一个窗口上执行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分。