MPI接收阵列

时间:2015-01-10 20:20:31

标签: c++ arrays mpi

我接收到MPI阵列的问题。我正在做这样的事情:

int *b = new int[5];
                for(int i = 0; i < 5; i++) {
                    b[i] = i;
                }
                MPI_Send(&b[0], 5, MPI_INT, procesDocelowy, 0, MPI_COMM_WORLD);

这是我发送数组的方式。 接收:

int *b = new int[5];
            MPI_Recv(&b, 5, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);

我的问题是我无法接收动态分配的数组。我的进程在MPI_recv之后挂起,我得到:

job aborted:
rank: node: exit code: message
0: Majster: terminated
1: Majster: terminated
2: Majster: 0xc0000005: process exited without calling finalize
3: Majster: terminated

这很有趣,因为如果我以静态方式初始化我的数组,我的意思是

收到

int b[5]; 发送时

int b[] = {1,2,3,4,5};

一切正常。

我无法以静态方式初始化数组,我必须动态地执行此操作。有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是因为您在致电&b时使用MPI_Recv()来引用您的数组。如果使用指向动态地址的指针,则发送指针的地址而不是数组的地址。