MPI_Bcast分段错误

时间:2012-11-16 20:07:09

标签: c parallel-processing mpi

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

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);

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

如果要在除根进程使用的向量之外的向量中接收数据,那么您应该执行类似这样的操作(伪代码):

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所需要的。