3

我正在广播一个指向数组的指针

MPI_Bcast(&xd_sim_send, Nooflines_Sim, MPI_FLOAT, root, MPI_COMM_WORLD);

从进程 0 并从 0 以外的进程接收此广播

MPI_Bcast(&xd_sim_recv, Nooflines_Sim, MPI_FLOAT, root, MPI_COMM_WORLD);

当我尝试读取接收到的值时出现分段错误 11。像这样

for(i=0; i<Numlines_Sim; i++)
printf("%f\n",xd_sim_recv[i]);fflush(stdout);

这里有什么问题,你能帮我解决它吗?

4

2 回答 2

5

发送指针没有意义,因为该指针在其他并行进程中无效,请改为发送缓冲区:

MPI_Bcast(xd_sim_send, Nooflines_Sim, MPI_FLOAT, root, MPI_COMM_WORLD);
于 2012-11-16T20:42:00.790 回答
4

如果您想在根进程使用的向量之外的向量中接收数据,那么您应该执行以下操作(伪代码):

if (THIS PROCESS IS ROOT) {
    MPI_Bcast(xd_sim_send, Nooflines_Sim, MPI_FLOAT, root, MPI_COMM_WORLD);
} else {
    MPI_Bcast(xd_sim_recv, Numlines_Sim, MPI_FLOAT, root, MPI_COMM_WORLD);
}

没有&, 因为变量xd_sim_send xd_sim_recv已经是指针,这就是MPI_Bcast需要的。

于 2012-11-16T20:53:57.563 回答