我接收到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};
我无法以静态方式初始化数组,我必须动态地执行此操作。有任何想法如何解决这个问题?
答案 0 :(得分:1)
这是因为您在致电&b
时使用MPI_Recv()
来引用您的数组。如果使用指向动态地址的指针,则发送指针的地址而不是数组的地址。