MPI_Recv丢失MPI_Send数据(标准方式)的问题

kunfpanda 2009-02-23 07:47:28
先看程序(5个进程):




这是程序中进程0中结束各线程的程序段:
for(int i=0;i<16;i++)
{
int endsign = -2;
MPI_Status status;
MPI_Recv(&recvtaskindex,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
MPI_Send(&endsign,1,MPI_INT,status.MPI_SOURCE,status.MPI_TAG,MPI_COMM_WORLD);
taskpool[recvtaskindex].success=1;
taskpool[recvtaskindex].nodeid=status.MPI_SOURCE;
}
请问上述程序有5个进程执行,请问为何结束各线程while循环的消息(-2)发送16次,而接收到的总是不到16次呢,所以程序就MPI_Recv停在那里了
是不是mpi有什么缓冲区限制什么的,还是程序有啥问题?
...全文
266 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kunfpanda 2009-02-23
  • 打赏
  • 举报
回复
注:进程数少(如2,这里是5),或者omp并行线程数少(如2,这里是4)时就不会出现问题

kunfpanda 2009-02-23
  • 打赏
  • 举报
回复
修改下上述最后的问题:
----------------------------------------------------------
这是程序中进程0中结束各线程的程序段:
for (int i = 0;i<16;i++)
{
currtaskindex=-2;
MPI_Recv(&recvtaskindex,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
MPI_Send(&currtaskindex,1,MPI_INT,status.MPI_SOURCE,status.MPI_TAG,MPI_COMM_WORLD);

int ss =9;
}
上述程序用5个进程执行,请问为何结束各线程while循环的消息(-2)发送16次,而接收到的总是不到16次呢,所以程序就MPI_Recv停在那里了
是不是mpi有什么缓冲区限制什么的,还是程序有啥问题?
有可能指点出问题原因的即加全分,请有经验的人帮忙看看

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧