我已将MPI_COMM_WORLD拆分为两个子通信器,我想将通过MPI_COMM_WORLD分发的数据数据传输到两个子通信器。在MPI-1.1中最好的方法是什么?
例如,在MPI_COMM_WORLD中的四个MPI流程中分布有一个数组A = [1 2 3 4 5 6 7 8]
,如下所示
rank 0: [1 2]
rank 1: [3 4]
rank 2: [5 6]
rank 3: [7 8]
我将MPI_COMM_WORLD拆分为两个子通信器,每个子通信器包含两个MPI进程,并希望我的数据如下:
subcommunicator1:
rank 0: [1 2 3 4]
rank 1: [5 6 7 8]
subcommunicator2:
rank 0: [1 2 3 4]
rank 1: [5 6 7 8]
答案 0 :(得分:3)
没有办法将数据从一个通信器发送到另一个通信器。在MPI中,传播者专门用于包含群组内的通信。在您的情况下,您需要在分割MPI_COMM_WORLD
之前分发数据。您如何做到这将取决于您的数据和所需的分布。您可能需要查看MPI_SCATTER
,MPI_GATHER
或两者。