- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算流体力学中科院力学所第5讲-mpi图并行程序设计初步1
B 按节拍循环发送数据 (同“全收集”) do step=0,P-1 id_send=mod(myid+step,P) id_recv=mod(myid-step,P) call MPI_Send(B1,N*N/P,MPI_REAL,id_send, ……) call MPI_Recv(B_tmp, N*N/P, MPI_REAL, id_recv, … ) …… 计算出 C1(id_recv) …… (C1(id_recv)=A1*B_tmp) enddo * Copyright by Li Xinliang …… send to ID 0 0 1 2 3 N-1 工作数组,存放接受来的矩阵Bk 服务器/前端机 计算节点 a.exe a.exe a.exe 回顾 MPI 程序的运行原理: 服务器(前端机)编译 可执行代码复制 N 份,每个节点运行一份 调用MPI库函数 得到每个节点号 myid 根据myid 不同,程序不同 调用MPI 库函数进行通讯 MPI 编程的基本思想: 主从式,对等式 推荐采用对等式编程思想 基本的MPI函数(6个) MPI初始化 MPI_Init(ierr) ; MPI结束 MPI_Finalize(ierr) 得到当前进程标识 MPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) 得到通信域包含的进程数 MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr) 消息发送 MPI_Send(buf,count,datatype,dest,tag,comm, ierr) 消息接收 MPI_Recv(buf,count,datatype,source,tag,comm,status,ierr) Copyright by Li Xinliang * 作业 熟悉MPI环境及基本编程 1) 建立MPI运行环境 (有并行机账户或在微机上安装MPI环境)。 2) 编制如下基本的MPI程序 计算S=1+2+3……+1000 要求程序可以实现N个进程的并行运行且负载尽量均衡。 N可变,程序中使用MPI_Comm_Size()函数读入N。由0号进程打印计算结果。 3)在并行环境上运行,输出结果。 要求: 提交源程序及运行情况的屏幕截图 Copyright by Li Xinliang * 2. 实现矩阵相乘的并行计算 矩阵A, B 均为N*N的方阵,试计算矩阵C=AB; 使用P个进程并行计算(N可以被P整除); 矩阵A,B及C均采用分布式存储; A, C按行分割, B按列分割存储(见本稿 47页)。 要求编写计算C矩阵的MPI程序,并进行计算。 实际计算时,矩阵A, B请采用如下值, N设为100 计算出C矩阵后,请计算 ,并由根节点打印出来。 将S值与串行程序的结果进行对比,校验程序的正确性; 使用1,2,4,10个进程进行计算,并利用MPI_Wtime( )函数计算程序的运行时间;考核加速比及计算效率。 要求: 1)提交计算程序; 2)使用1,2,4,10个进程计算,提交计算结果(S值及计算时间)、计算效率及加速比。 * * * * 3) 得到当前进程标识 call MPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) (In) Integer:: MPI_COMM_WORLD 为进程所在的通信域 (Out) Integer:: myid, ierr 4) 得到通信域包含的进程数 Call MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr) (In) Integer:: MPI_COMM_WORLD (Out) Integer:: numprocs,ierr * Copyright by Li Xinliang 进程的ID号 (从0开始) 最重要的参数! MPI_COMM_WORLD: MPI预定义的通信域; 可换成创建的通信域Comm
原创力文档


文档评论(0)