使用MPI_Scatter和MPI_Gather

时间:2018-01-17 04:08:24

标签: c arrays mpi

我试图通过一些例子来学习Mpi。

在阅读了一些关于用mpi操纵数组的讨论之后,我看到二维数组中的细胞在记忆中并不重要;所以它可以使事情变得更难。

假设我的2d数组如下:

1111
2222
3333
4444

我在一个例子中看到,为二维数组分配内存有另一种方法:

   int  *items = ( int *) malloc(rows * cols * sizeof(*items));

按照上面的说明,将在内存中显示如下:

111122223334444

我的问题是:我如何将一部分数组发送到每个处理器,我知道有很多方法,比如MPI_Scatter,但它只适用于相同的块大小。

作为一个例子,我想在n个处理器上执行我的程序(让n = 3),每个处理器将得到数组的长度除以3;

在我的例子中16/3 =每个处理器5个celles:

11112  rank= 0
22233  rank= 1
334444 rank= 2

因为我们看到最后一个处理器将获得不同的大小。

我看到我们可以使用MPI_Scatterv定义我们的自定义MPI_Scatter方法,但我想知道是否有一种简单的方法可以做到这一点?

向每个处理器发送m个块,最后一个处理器可以获得不同的大小;我只是说最后一个处理器可以获得不同的块大小。

所以我的3个处理器必须对收到的数据做一些计算,他们应该返回修改后的缓冲区,我如何在这个场景中使用MPI_Gather?

我的处理器应该增加接收缓冲区中的值

22223  rank= 0
33344  rank= 1
445555 rank= 2

- 如何将收到的缓冲区返回主处理器?

任何帮助都会受到欢迎。

谢谢。

0 个答案:

没有答案