在MPI通信器之间复制数据

时间:2014-02-11 11:24:58

标签: c++ c mpi

我已将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]

1 个答案:

答案 0 :(得分:3)

没有办法将数据从一个通信器发送到另一个通信器。在MPI中,传播者专门用于包含群组内的通信。在您的情况下,您需要在分割MPI_COMM_WORLD之前分发数据。您如何做到这将取决于您的数据和所需的分布。您可能需要查看MPI_SCATTERMPI_GATHER或两者。