MPI 中多个重叠异步传输的策略是什么?
我有一个带有几个打开的异步irecv
操作的程序。我发现可能发生的传输(对应的isend
已被调用)等待其他尚未准备好的传输(对应isend
的尚未被调用)。需要明确的是,这种低效率并非源于网络争用;我的网络不必要地空闲。
我的程序如下所示:
机器 1
call irecv(variable A from machine 2)
call irecv(variable B from machine 2)
call irecv(variable C from machine 2)
call wait(variable C from machine 2)
call do_important_work_with(variable C)
....
机器 2
call isend(variable C to machine 1)
call isend(variable B to machine 1)
call do a bunch of costly work
call isend(variable A to machine 1)
....
问题
的转移C
似乎被 的转移不必要地阻止了A
。
我发现机器 1 上的wait
onvariable C
直到机器 2 上昂贵的工作完成之后才完成。这很不幸,因为这种转移可能在我的程序开始时就开始了。似乎不必要地等待传输A
完成。
问题
特别是我有一个如下的计算。
- 这是预期的吗?
- 多个重叠异步传输的策略是什么?
- 在不重新安排我的代码的情况下可以避免这种情况(是否有一些相关的内部设置)?
- 我应该去哪里了解更多关于 MPI 多次实时转账的政策?