注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

AlexYoung

做好大家都必须要做的事,发展自己感兴趣的事,结束圣人所不齿的事...

 
 
 

日志

 
 

MPI动态数组的广播@[CVF6.6.0+MPICH_NT_1.2.5]  

2012-08-30 20:55:28|  分类: CVF6.6.0+MPICH_N |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实现了动态数组的广播,主要考虑动态数组在每个进程中都需要声明分配的内存大小!

背景

       希望在进程0中获取一定的数据(只需串行),存放在动态数组a内;之后再将该数组广播,用于并行计算。

因此

    1. 不能在并行程序部分直接写call MPI_BCAST(),而单个数、固定数组都已经在主程序中声明过,故可以直接广播;

    2. 也不能只在除了进程0以外的进程写call MPI_BCAST(), 需要有进程0的call MPI_BCAST()  以和其它进程对应;

    3. call MPI_BCAST(a,5,... 中的buffer首地址可以直接写数组名,也可以写第1个元素a(1)。

源程序example2.f90如下:

 program example2
!    use mpi
 include "mpif90.h" !!MPI系统头文件
 integer status(MPI_STATUS_SIZE),my_rank,numprocs,ierr
 real,dimension(:),allocatable::a
!-------进入MPI系统
 call MPI_Init(ierr)
 call MPI_Comm_rank(MPI_COMM_WORLD,my_rank,ierr)
 call MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr)
!-------数据交换
 if(my_rank.eq.0) then
   allocate(a(1:5))
   call random_number(a)
   print*,a
   call MPI_BCAST(a,5,MPI_REAL,0,MPI_COMM_WORLD,ierr)
   print*,ierr
 else
   allocate(a(1:5)) !重要,注意每个进程都要重新声明动态分配内存
   call MPI_BCAST(a,5,MPI_REAL,0,MPI_COMM_WORLD,ierr)
   print*,a
 endif

 call MPI_Finalize(ierr)
 end

  评论这张
 
阅读(487)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018