资源描述:
《分布内存并行程序开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MPI分布内存并行程序开发第一章并行计算概述2为什麽要采用并行计算?串行程序速度提升缓慢可以加快速度——更短的时间内解决相同的问题;相同的时间内解决更多更复杂的问题可以加大规模——计算更大规模的问题3并行计算设计的分类共享内存ccNUMA;SMP分布式内存MPP;Cluster4三种计算模型5并行化分解方法任务分解多任务并发执行功能分解分解被执行的计算区域分解分解被执行的数据6分布内存并行方式任务并行不同参数的大量工况计算区域分解并行大规模多节点分块并行计算7第二章MPI简介MPI(MessagePassingI
2、nterface)是1994年5月发布的一种消息传递接口。它实际上是一个消息传递函数库的标准说明,以语言独立的形式来定义这个接口库,并提供了与C和Fortran语言的绑定.。8MPI的历史MPI初稿:美国并行计算中心工作会议(92年4月)MPI-1公布:第一届MPI大会(93年1月);MPI标准正式发布:1994年5月;MPI-2发布:MPI论坛(97年)。9MPICH:最重要的MPI实现(www-unix.mcs.anl.gov/mpi/mpich),与MPI-1规范同步发展的版本,支持部分MPI-2的特征如动态
3、生成进程等。CHIMP:EPCC(EdinburghParallelComputingCenter)开发。ftp://ftp.epcc.ed.ac.uk/pub/packages/chimp/release下载。LAM(LocalAreaMulticomputer):OhioStateUniversity开发。http://www.lam-mpi.org/download/下载。MPI的实现10第三章MPI编程11MPI为程序员提供一个并行环境库,程序员通过调用MPI的库程序来达到程序员所要达到的并行目的,可以只使
4、用其中的6个最基本的函数就能编写一个完整的MPI程序去求解很多问题。这6个基本函数,包括启动和结束MPI环境,识别进程以及发送和接收消息:MPI_INIT:启动MPI环境MPI_COMM_SIZE:确定进程数MPI_COMM_RANK:确定自己的进程标识符MPI_SEND:发送一条消息MPI_RECV:接收一条消息MPI_FINALIZE:结束MPI环境12程序1、简单例子programmaininclude'mpif.h'character*(MPI_MAX_PROCESSOR_NAME)processor_na
5、meintegermyid,numprocs,namelen,rc,ierrcallMPI_INIT(ierr)callMPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr)callMPI_COMM_SIZE(MPI_COMM_WORLD,numprocs,ierr)callMPI_GET_PROCESSOR_NAME(processor_name,namelen,ierr)write(*,10)myid,numprocs,processor_name10FORMAT('HelloWorld
6、!Process',I2,'of',I1,'on',20A)callMPI_FINALIZE(rc)end13程序1、简单例子#include“mpi.h”main(intargc,char**argv){intnumprocs,myrank,i,j,k;MPI_Statusstatus;charmsg[20];MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myrank);if(
7、myrank==0){strcpy(msg,”HelloWorld”);MPI_Send(msg,strlen(msg)+1,MPI_CHAR,1,99,MPI_COMM_WORLD);}elseif(myrank==1){MPI_Recv(msg,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status);printf(“Receivemessage=%s”,msg);}MPI_Finalize();}14MPI程序的一般结构包含MPI头文件初始化MPI环境消息交换处理及计算等退出MPI
8、环境15头文件MPI程序要求:所有包含MPI调用的程序文件头应加入:16编译,执行:mpicc-ohellohello.c:生成执行文件hellompirun-npnhello:加载n个进程运行,0号进程发送,1号进程接受并打印字符串17通信因子和组MPI通过指定通信因子和组来对进程进行一种逻辑上的划分,通讯因子定义了进程组内或组间通讯的上下文(具体就是指明