MPI:如何将多个处理器中的子数组连接成更大的单个数组

iKT*_*iKZ 5 c mpi

我在 C 中使用 MPI。我能够将数组的一部分分发到不同的处理器。不同的处理器完成了我想要的所有操作。现在我想将所有处理器中的所有子数组组合成一个大数组。例如,如果不同的处理器具有如下子数组:

Processor 1:
0 1 1 0
0 0 1 0

Processor 2:
0 0 1 0
1 1 0 1

Processor 3:
1 1 0 0
1 1 1 1

...
Run Code Online (Sandbox Code Playgroud)

我希望能够将所有子数组组合或“连接”在一起。例如我希望大数组是:

0 1 1 0
0 0 1 0
0 0 1 0
1 1 0 1
1 1 0 0 
1 1 1 1
...
Run Code Online (Sandbox Code Playgroud)

我试图使用 MPI_Reduce 但找不到一个操作来完成我想做的事情。是否有另一种 MPI 方法可以用来实现我正在寻找的目标?

Raf*_*ter 2

您正在寻找 MPI_Gather:

每个进程(包括根进程)将其发送缓冲区的内容发送到根进程。根进程接收消息并按排名顺序存储它们。

有关文档和示例,请参阅此处此处MPI 2.2 标准中的 5.5 节也有示例。