MPI考试复习

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MPI复习整理计算平台分类•Flynn于1972年提出了计算平台的Flynn分类法,主要根据指令流和数据流来分类,共分为四种类型的计算平台单指令流单数据流机器(SISD)•SISD机器是一种传统的串行计算机,它的硬件不支持任何形式的并行计算,所有的指令都是串行执行。并且在某个时钟周期内,CPU只能处理一个数据流。因此这种机器被称作单指令流单数据流机器。早期的计算机都是SISD机器,如冯诺.依曼架构,如IBMPC机,早期的巨型机和许多8位的家用机等。单指令流多数据流机器(SIMD)•SIMD是采用一个指令流处理多个数据流。这类机器在数字信号处理、图像处理、以及多媒体信息处理等领域非常有效。•Intel处理器实现的MMXTM、SSE(StreamingSIMDExtensions)、SSE2及SSE3扩展指令集,都能在单个时钟周期内处理多个数据单元。也就是说我们现在用的单核计算机基本上都属于SIMD机器。多指令流单数据流机器(MISD)•MISD是采用多个指令流来处理单个数据流。由于实际情况中,采用多指令流处理多数据流才是更有效的方法,因此MISD只是作为理论模型出现,没有投入到实际应用之中。多指令流多数据流机器(MIMD)•MIMD机器可以同时执行多个指令流,这些指令流分别对不同数据流进行操作。最新的多核计算平台就属于MIMD的范畴,例如Intel和AMD的双核处理器等都属于MIMD。并行编程模型•现在主要以下几种通用的并行编程模型:共享内存、线程、消息传递、数据并行、混合模型。•并行编程模型是在硬件和内存体系结构层之上的抽象概念。并行程序分解模式MPI运行指令•启动:MPD•编译:mpicc–ohellohello.c•运行:mpirun–np4./helloMPI消息传递三元组•缓冲区•数据类型•数量MPI程序分成几个部分•并行程序的初始化,并行启动了多少个进程,得到相应的进程号,在下面开始消息传递和并行计算,点到点或阻通行的消息传递,并行环境用于计算,消息传递是可有可无的。结束之后关闭并行环境。点到点通讯•点到点通信要求send和recv能够匹配,也即一个send对应于一个recv•阻塞通讯•非阻塞通讯阻塞通信中,消息发送有四种模式•标准模式,MPI_Send•缓存(Buffer)模式,MPI_Bsend•就绪(Ready)模式,MPI_Rsend•同步(Synchonous)模式,MPI_Ssend标准通信模式•理论上send会阻塞直到目标进程recv执行接收数据后send才会返回。但是这种模式下MPI环境基本上会对发送进程send的数据进行缓冲,这时即使接收进程没有进行recv发送进程的send也会立即返回。如果发送数据超过MPI提供的缓冲区大小,那么send就会阻塞到缓冲区这里。•intMPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm);•intMPI_Recv(void*buf,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Status*status);•send和recv是非对称的。recv会因为没有接收到目标进程的消息而阻塞,不过可以指定接收进程接收通用信封:MPI_ANY_SOURCE(任意源进程),MPI_ANY_TAG(任意标志)。(关于标志tag后面再讨论)然后可以从返回的MPI_Status的成员MPI_SOURCE和MPI_TAG中解读出相关信息。缓冲通信模式•模拟非阻塞通讯申请缓冲区通过缓冲区发送接受数据避免通讯过程中产生死锁或者阻塞•因为有内存到内存的复制开销,会导致一定的性能损失和资源占用。不过与标准通信模式中MPI环境提供的缓冲机制不同,缓冲发送不受接收进程的影响可以直接完成,但消息大于缓冲区时程序将会报错。•intMPI_Pack_size(int,MPI_Datatype,MPI_comm,int*);//返回消息所需缓冲区大小(字节数)•定义MPI_BSEND_OVERHEAD为分配使用缓冲区时的系统(BSENDroutines)所需最大字节空间。•intMPI_Buffer_attach(void*buffer,intsize);//将用于缓冲通信的缓冲区绑定到进程•当然一个进程同一时刻只允许绑定一个缓冲区。如果没有缓冲区绑定到进程,MPI环境默认的操作会有一个长度为0的缓冲区绑定到进程上(解除绑定操作类似)。需要注意线程安全问题。•intMPI_Buffer_detach(void*buffer,int*size);//解除绑定到进程的用于缓冲通信的缓冲区•参数返回已解除绑定缓冲区地址和大小非阻塞通信•在非阻塞的消息传递中,当消息被确切地发出或收到时,系统将用中断信号通知发送方或接受方。•在此之前,它们可以周期性地查询、暂时挂起或执行其它计算,以实现计算与通信的重叠。•可重复非阻塞通信--处理通信的时候初始化的过程通信等待(wait)和测试(test)函数的使用通信测试对象通信有没有完成返回整个通信对象的数据类型•intMPI_Isend(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm,MPI_Request*request)•intMPI_Irecv(void*buf,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Request*request)•非阻塞通信对象多出了一个MPI_Request参数。这个参数是提供给后面的非阻塞通信检测/等待函数用的,它的意义很象文件操作中的文件句柄,它用来唯一的标识不同的非阻塞通信任务。消息传递•阻塞发送:在消息确实已经发送出去(到消息缓冲区)后,才允许进程继续执行下一语句。•阻塞接收:进程处于挂起状态,直到可以在消息缓冲区确切地接收到消息后,才允许进程继续执行下一语句。•非阻塞发送:发送原语通知系统将要发送的消息在消息缓冲区中后,即可返回。发送进程可继续执行后续工作,无须等待系统真正发送消息。•非阻塞接收:接收原语不管消息缓冲区中是否已有发送原语发送的消息,都将返回。•不论是阻塞通信还是非阻塞通信,都属于异步通信机制。•其设置目的在于让通信与计算重叠,提高并行执行效率。但其付出的代价是系统要提供消息缓冲区。预防死锁•尽量的避免使用阻塞发送•设计好发送和接收的顺序组合发送接受•MPI_sendrecv组通信•一对多:广播,发散•多对一:收集,规约•多对多:组收集,组规约,扫描一对多•广播ppt-3.1-P10•MPI_Bcast(void*buffer,intcount,MPI_Datatypedatatype,introot,MPI_Commcomm)•发散ppt-3.1-P12•MPI_Scatter(void*sendbuf,intsendcount,MPI_Datatypesendtype,void*recvbuf,intrecvcount,MPI_Datatyperecvtype,introot,MPI_Commcomm)多对一•收集ppt-3.1-P17•MPI_Gather(void*sendbuf,intsendcount,MPI_Datatypesendtype,void*recvbuf,intrecvcount,MPI_Datatyperecvtype,introot,MPI_Commcomm)•归约ppt-3.1-P22•MPI_Reduce(void*sendbuf,void*recvbuf,intcount,PI_Datatypedatatype,MPI_Opop,introot,MPI_Commcomm)多对多•组收集ppt-3.1-P26•MPI_Allgather(void*sendbuf,intsendcount,MPI_Datatypesendtype,void*recvbuf,intrecvcount,MPI_Datatyperecvtype,MPI_Commcomm)•组归约ppt-3.1-P28•MPI_Allreduce(void*sendbuf,void*ecvbuf,intcount,MPI_Datatypedatatype,MPI_Opop,MPI_Commcomm)•归约并散发ppt-3.2-P1•MPI_Reduce_scatter(void*sendbuf,void*recvbuf,int*recvcounts,MPI_Datatypedatatype,MPI_Opop,MPI_Commcomm)•全互换ppt-3.2-P4•MPI_Alltoall(void*sendbuf,intsendcount,MPI_Datatypesendtype,void*recvbuf,intrecvcount,MPI_Datatyperecvtype,MPI_Commcomm)扫描ppt-3.2-P6•MPI_Scan(void*sendbuf,void*recvbuf,intcount,MPI_Datatypedatatype,MPI_Opop,MPI_Commcomm)点到点与组通信•主要区别:指定的发送或接受的进程号或是进程个数•点到点是两个进程间的•相同点:都需要通信域数据类型•数据类型的分类•预定义类型•自定义类型类型图•用于描述在内存当中整个数据的构成的图像•两个元素:基类型,偏移地址创建不同数据类型函数调用打包和解包•如果是非连续的数据需要一次性的发送和接收需要非连续的数据打包处理然后发送接受后再解包•注意:由于是多个不连续的数据打包所以需要多次函数调用*•打包ppt-4.2-P15•intMPI_Pack(void*inbuf,intincount,MPI_datatype,void*outbuf,intoutcount,int*position,MPI_Commcomm)•解包•MPI_Unpack(void*inbuf,intinsize,int*position,void*outbuf,intoutcount,MPI_Datatypedatatype,MPI_Commcomm)进程拓扑•a.雅克比迭代--主要考虑有无进程拓扑过程中的数据传递(实现)•b.创建笛卡尔拓扑函数,获取坐标函数创建笛卡尔拓扑函数,获取坐标函数•---创建ppt-5-P6•intMPI_Cart_create(MPI_Commcomm_old,intndims,int*dims,int*periods,intreorder,MPI_Comm*comm_cart)•---平移ppt-5-P9•intMPI_Cart_shift(MPI_Commcomm,intdirection,intdisp,int*rank_source,int*rank_dest)•---获取:文件I/O•a.显示偏移指针,独立文件指针,共享文件指针•b.视图文件构建获取•c.关于文件的基本操作--至少知道文件的打开,关闭函数性能测试•加速比和执行效率•加速比串行时间和并行时间比值越大越好•执行效率是加速比除以处理器个数的比是加速比和进程个数的比雅克比迭代

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功