| 查看: 769 | 回复: 1 | ||
| 【悬赏金币】回答本帖问题,作者fo3mt2将赠送您 10 个金币 | ||
fo3mt2金虫 (小有名气)
|
[求助]
MPI并行收集数据
|
|
|
大家好, 我想请教一段用fortran写的mpi并行程序。代码如下: do i = 1, nomi, 1 if (mod(i-1,world_size) /= world_rank) cycle kkim = kkimp(i,1:3) call proce(i,ndegen,nbc,npo,kkim,hil,thil,tecv,teve,bcb,eni,er,pi,nne,hb,bcp1) if (world_rank == 0) then bcp2 = bcp1 !the 6th line do j = 1, world_size-1, 1 if (i-1+j == nomi) exit k = i + j + 1000 call mpi_recv(bcp3,nomi*nne*6,mpi_double_complex,j,k,mpi_comm_world,mpi_status_ignore,ierr) bcp2 = bcp2 + bcp3 end do else k = i + 1000 call mpi_send(bcp1,nomi*nne*6,mpi_double_complex,0,k,mpi_comm_world,ierr) end if end do 假设根进程(root processor)在外循环里一共被使用了两次,每次都会调用子程序proce,并从子程序得到传回的数组bcp1。 当用根进程(root processor)使用数组bcp2,从各个进程(包括其自身)收集各自得到的数组bcp1时,根进程(root processor)需要先收集自己得到的数组bcp1。 因为假设根进程(root processor)在外循环里一共被使用了两次,根进程(root processor)一共要从自身收集两次bcp1数组。那程序里的第6行(标记为!the 6th line),写成bcp2 = bcp1是否合理呢? 我觉得这样写,会使得根进程(root processor)在循环里第二次被使用得到的数组bcp1,覆盖掉第一次被使用得到的数组bcp1,进而导致丢失了第一次使用时得到的数组bcp1信息。 如果不丢失信息,应该进行叠加,也就是把第6行写成bcp2 = bcp2 + bcp1;但程序里却不是这样写的。 我想不通是什么原因,能否请大家给些建议呢?或者是否是程序写错了呢? 谢谢啦。 盼复。 |
» 猜你喜欢
孩子确诊有中度注意力缺陷
已经有12人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复
taichiman
新虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 660.6
- 沙发: 5
- 帖子: 346
- 在线: 10.4小时
- 虫号: 32291817
- 注册: 2022-11-12
- 专业: 石油、天然气地质学
2楼2022-12-05 12:05:02













回复此楼