我试图通过一些例子来学习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
- 如何将收到的缓冲区返回主处理器?
任何帮助都会受到欢迎。
谢谢。