| 查看: 1004 | 回复: 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;但程序里却不是这样写的。 我想不通是什么原因,能否请大家给些建议呢?或者是否是程序写错了呢? 谢谢啦。 盼复。 |
» 猜你喜欢
售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急
已经有4人回复
售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急
已经有6人回复
为什么资助数各大高校都创新高,自己申请怎么就这么难
已经有15人回复
科研人应该花精力去思考如何解决问题,而不是去凝练问题
已经有14人回复
要骂人了,新模版改版就是要淡化问题凝练这种虚的东西,结果有个评委还在说凝练得不够
已经有17人回复
基金系统什么内容也没有
已经有10人回复
学科评审组评审是指会评吗?
已经有5人回复
面上函评意见出来了,像什么等级?
已经有17人回复
小白求助 投论文要求的highlights应该如何写
已经有4人回复
麻烦专家们看看评委们的意见(F口面上)
已经有12人回复
taichiman
新虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 660.6
- 沙发: 5
- 帖子: 346
- 在线: 10.4小时
- 虫号: 32291817
- 注册: 2022-11-12
- 专业: 石油、天然气地质学
2楼2022-12-05 12:05:02










回复此楼
20