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 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100