实施不规则的点对点通信

时间:2018-11-30 20:45:38

标签: parallel-processing mpi

我有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.

有没有更好的方法? 这种交换在运行时仅发生一次。

0 个答案:

没有答案