Coder-- 2016-12-02 13:34 采纳率: 0%
浏览 2323

MPI子域通信问题,划分的子域不能模拟MPI_Bcast发送和接收数据

原题如下:
设计 MPI 程序模拟广播( MPI_Bcast)操作:将每个 MPI 进程按照所在节点名称建立
node 通信子域分组;再将各个 node 子通信域的 0 号进程再次组成一个名为 head 的通信域;
在进行广播时,首先由 root 进程将消息在 head 通信子域内广播,然后,再由 head 子域内各
进程在其所在的 node 子域内进行广播

按照题目要求,我把所有的进程划分成了两个子域,一个是head,另一个是在每个node作为一个子域。

head部分划分代码如下:

MPI_Group cpworld;
MPI_Comm_group(MPI_COMM_WORLD,&cpworld);
int ranks[10]={0,1,2,3,4,5,6,7,8,9};
MPI_Group head_comm;
MPI_Group_incl(cpworld,10,ranks,&head_comm);
MPI_Comm head;
MPI_Comm_create(MPI_COMM_WORLD,head_comm,&head);
只是划分的话运行也是正常的,但是当尝试在head内利用MPI_Send和MPI_Recv进行模拟MPI_Bcast发送数据就会出错。发送代码如下:

int head_rank=-1,head_size=-1;
if(MPI_COMM_NULL!=head){
MPI_Comm_rank(head,&head_rank);
MPI_Comm_size(head,&head_size);
}
//first time to send message
int i;
char message[100];
MPI_Status status;
if(head_rank==0){
strcpy(message,"Hello,the message is from process root!\n");
for(i=0;i<head_size;i++)
MPI_Send(message,strlen(message),MPI_CHAR,i,1,head);
}
else{
MPI_Recv(message,100,MPI_CHAR,0,1,head,&status);
printf("In communicators recieve message: %s",message);
}
错误提示如下:

图片说明
尝试了查了很多资料也没彻底搞明白,请问这是什么原因?该怎么解决啊?
期待答复~

  • 写回答

1条回答 默认 最新

  • devmiao 2016-12-02 15:58
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记