| 查看: 818 | 回复: 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;但程序里却不是这样写的。 我想不通是什么原因,能否请大家给些建议呢?或者是否是程序写错了呢? 谢谢啦。 盼复。 |
» 猜你喜欢
一志愿江南大学085701环境工程专硕总分287求调剂
已经有3人回复
标题:捡漏预警|08工科/09农学调剂!英语要求低,过线即有机会!
已经有8人回复
求调剂!
已经有3人回复
0703化学调剂
已经有3人回复
欢迎211本科同学,过A区国家线,A区非偏远一本,交叉学科课题组
已经有36人回复
一志愿安徽大学材料工程专硕313分,求调剂的学校
已经有5人回复
一志愿湖师大化学289求调剂
已经有5人回复
读博申请
已经有5人回复
收调剂
已经有6人回复
0860求调剂(272分)
已经有4人回复
taichiman
新虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 660.6
- 沙发: 5
- 帖子: 346
- 在线: 10.4小时
- 虫号: 32291817
- 注册: 2022-11-12
- 专业: 石油、天然气地质学
2楼2022-12-05 12:05:02













回复此楼
10