计算流体力学讲义2013第14讲MPI并行程序设计(2)李新亮lixl@imech.ac.cn;力学所主楼219;82543801知识点:阻塞通信与非阻塞通信非连续数据的发送与接收OpenMP并行程序设计初步1CopyrightbyLiXinliang讲义、课件上传至www.cfluid.com(流体中文网)->“流体论坛”->“CFD基础理论”也可到如下网址下载:http://cid-1cc0dcbff560c149.office.live.com/browse.aspx/.Public服务器/前端机计算节点a.exea.exea.exeMPI程序的运行原理:服务器(前端机)编译可执行代码复制N份,每个节点运行一份调用MPI库函数得到每个节点号my_id根据my_id不同,程序执行情况不同调用MPI库函数进行通讯MPI编程的基本思想:主从式,对等式2CopyrightbyLiXinliang重点:对等式程序设计知识回顾CopyrightbyLiXinliang3计算节点a.exea.exea.exea.exe对等式设计“对等式”程序设计思想如果我是其中一个进程;我应当做……完成我需要完成的任务站在其中一个进程的角度思考基本的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)4CopyrightbyLiXinliangMPI的消息发送机制——两步进行MPI_Send(A,…)发送MPI_Recv(B,…)接收发送变量A接收到变量B配合使用5CopyrightbyLiXinliang阻塞发送开始结束消息成功发出缓冲区可释放阻塞接收开始结束消息成功接收缓冲区数据可使用一、阻塞式通信与非阻塞式通信阻塞式发送与接收MPI_Send(A,…)MPI_Recv(B,…)6CopyrightbyLiXinliangMPI_Send()返回后缓冲区可释放sum=……callMPI_Send(sum,……)sum=……变量可重复利用MPI_Recv()返回后缓冲区数据可使用CallMPI_Recv(sum1,……)Sum=sum0+sum1……7CopyrightbyLiXinliang非阻塞发送启动发送立即返回计算通信完成释放发送缓冲区发送消息非阻塞接收启动接收立即返回计算通信完成引用接收数据接收消息计算与通信重叠非阻塞消息发送与接收8CopyrightbyLiXinliang•非阻塞消息发送•MPI_ISend(buf,count,datatype,dest,tag,comm,request,ierr)•Inbuf,count,datatype,dest,tag,comm•Outrequest,ierr•Request(返回的非阻塞通信对象,整数)•非阻塞消息接收•MPI_IRecv(buf,count,datatype,source,tag,co...