我有N
个MPI流程。每个进程都需要向
例如,有N=4
个MPI进程(P)。
P0 sends: 2 ints to P1, 5 ints to P2, 6 ints to P3
P1 sends: 3 ints to P2, 4 ints to P3
P2 sends: nothing, only receives.
P3 sends: 3 ints to P1
组织此类数据交换的最佳方法是什么?
我正在考虑:
让C(S,D)
表示要从流程S
发送到流程D
的数据计数。
On each process P:
1. For R = 0 ... N-1
{
if C(R,P) > 0
call MPI_Irecv( source = R, count = C(R,P), ... )
}
2. For R = 0 ... N-1
{
if C(P,R) > 0
call MPI_Send( destination = R, count = C(R,P), ... )
}
3. MPI_Waitall for requests created in Step 1.
有没有更好的方法? 这种交换在运行时仅发生一次。