Parallel processing MPI_Alltoall()是如何工作的?

Parallel processing MPI_Alltoall()是如何工作的?,parallel-processing,mpi,Parallel Processing,Mpi,我正在做MPI编程,使用它的函数对我来说有点不清楚。假设我有4个处理器,每个处理器都知道一个阵列: P0 : iarr{a0, a1, a2, a3} P1 : iarr{b0, b1, b2, b3} P2 : iarr{c0, c1, c2, c3} P3 : iarr{d0, d1, d2, d3} 我希望另一个数组(oarr)获得以下值: P0 : oarr{a0, b0, c0, d0} P1 : oarr{a1, b1, c1, d1} P2 : oarr{a2, b2, c2,

我正在做MPI编程,使用它的函数对我来说有点不清楚。假设我有4个处理器,每个处理器都知道一个阵列:

P0 : iarr{a0, a1, a2, a3}
P1 : iarr{b0, b1, b2, b3}
P2 : iarr{c0, c1, c2, c3}
P3 : iarr{d0, d1, d2, d3}
我希望另一个数组(oarr)获得以下值:

P0 : oarr{a0, b0, c0, d0}
P1 : oarr{a1, b1, c1, d1}
P2 : oarr{a2, b2, c2, d2}
P3 : oarr{a3, b3, c3, d3}
我知道这是一个经典示例或MPI_Alltoall(),但我的代码不起作用。它生成一些内存映射信息作为错误结果

我用C编写代码,代码如下所示:

int *iarr = NULL, *oarr = NULL;
....
MPI_Alltoall(&iarr, P, MPI_INT, &oarr, P, MPI_INT, MPI_COMM_WORLD);
iarr有一些值,oarr ahs只有0。 我做得对吗?!http://stackoverflow.com/questions/ask

错误输出的某些部分:

[NYPC:20583] *** Process received signal ***
[NYPC:20583] Signal: Segmentation fault (11)
[NYPC:20583] Signal code: Address not mapped (1)
[NYPC:20583] Failing at address: 0x2
[NYPC:20582] *** Process received signal ***
[NYPC:20582] Signal: Aborted (6)
[NYPC:20582] Signal code:  (-6)
[NYPC:20583] [ 0] [0xb77d940c]
[NYPC:20583] [ 1] ./ex31(votes_mpi+0x18e) [0x8048e38]
[NYPC:20583] [ 2] ./ex31(main+0x1c0) [0x8048b6c]
[NYPC:20583] [ 3] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xb75684d3]
[NYPC:20582] [ 0] [0xb771740c]
[NYPC:20582] [ 1] [0xb7717424]
[NYPC:20582] [ 2] /lib/i386-linux-gnu/libc.so.6(gsignal+0x4f) [0xb74bb1df]
[NYPC:20582] [ 3] /lib/i386-linux-gnu/libc.so.6(abort+0x175) [0xb74be825]
[NYPC:20582] [ 4] /lib/i386-linux-gnu/libc.so.6(+0x6b39a) [0xb74f839a]
[NYPC:20582] [ 5] /lib/i386-linux-gnu/libc.so.6(+0x75ee2) [0xb7502ee2]

不要将
&iarr
&oarr
传递给
MPI\u Alltoall
,而是传递
iarr
oarr
(我希望您提前为这两个数组分配内存,不要期望MPI为您分配内存)。此外,与您的问题一样,请记住,这是每个处理器要传递给alltoall作为计数的项目数。您是否可以发布一段代码或一个全文案例,用于了解您正在做什么?