| 查看: 775 | 回复: 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;但程序里却不是这样写的。 我想不通是什么原因,能否请大家给些建议呢?或者是否是程序写错了呢? 谢谢啦。 盼复。 |
» 猜你喜欢
职称评审没过,求安慰
已经有49人回复
26申博自荐
已经有3人回复
A期刊撤稿
已经有4人回复
垃圾破二本职称评审标准
已经有17人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
三无产品还有机会吗
已经有6人回复
taichiman
新虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 660.6
- 沙发: 5
- 帖子: 346
- 在线: 10.4小时
- 虫号: 32291817
- 注册: 2022-11-12
- 专业: 石油、天然气地质学
2楼2022-12-05 12:05:02













回复此楼