我正在播放一个指向数组的指针
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);
这里有什么问题,你能帮我解决一下吗?
答案 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
所需要的。