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操作会完成),我们是否可以lock
、put
、unlock
第二个 window 全部在获得第一个之前 ?
最后,打印语句是否可以在Put操作之前执行?如果它被移到 Put(something)
行之后呢?
非常感谢您的帮助,
Seba-1511
所以,经过更多的研究,似乎是的,我们可能 lock
、put
和 unlock
在第二个 window,在第一个上做之前。因此,进程 1 puts
在 window 3 中是可能的,并且这个 put 被进程 2 覆盖,而进程 1 在 window 2 中是 putting
。
lock
和 unlock
所做的是以某种方式累积 RMA window 上的所有操作,如果您使用 EXCLUSIVE_LOCK
,它将执行它们原子地在目标上。如果使用 SHARED_LOCK
,则可以在其间执行来自其他进程的其他操作。请注意,lock
和 unlock
对之间的操作是非阻塞的,因此无法保证执行顺序。
print
总是最后出现,因为正如@Jeff 强调的那样,解锁可以被认为是阻塞的。
来源:https://www.youtube.com/watch?v=HVzVvg__UK4 大约 1:05:00。
我想知道使用 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操作会完成),我们是否可以lock
、put
、unlock
第二个 window 全部在获得第一个之前 ?
最后,打印语句是否可以在Put操作之前执行?如果它被移到 Put(something)
行之后呢?
非常感谢您的帮助, Seba-1511
所以,经过更多的研究,似乎是的,我们可能 lock
、put
和 unlock
在第二个 window,在第一个上做之前。因此,进程 1 puts
在 window 3 中是可能的,并且这个 put 被进程 2 覆盖,而进程 1 在 window 2 中是 putting
。
lock
和 unlock
所做的是以某种方式累积 RMA window 上的所有操作,如果您使用 EXCLUSIVE_LOCK
,它将执行它们原子地在目标上。如果使用 SHARED_LOCK
,则可以在其间执行来自其他进程的其他操作。请注意,lock
和 unlock
对之间的操作是非阻塞的,因此无法保证执行顺序。
print
总是最后出现,因为正如@Jeff 强调的那样,解锁可以被认为是阻塞的。
来源:https://www.youtube.com/watch?v=HVzVvg__UK4 大约 1:05:00。