版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MPI复习整理计算平台分类 Flynn于1972年提出了计算平台的Flynn分类法,主要根据指令流和数据流来分类,共分为四种类型的计算平台单指令流单数据流机器(SISD) SISD机器是一种传统的串行计算机,它的硬件不支持任何形式的并行计算,所有的指令都是串行执行。并且在某个时钟周期内,CPU只能处理一个数据流。因此这种机器被称作单指令流单数据流机器。早期的计算机都是SISD机器,如冯诺.依曼架构,如IBM PC机,早期的巨型机和许多8位的家用机等。单指令流多数据流机器(SIMD) SIMD是采用一个指令流处理多个数据流。这类机器在数字信号处理、图像处理、以及多媒体信息处理等领域非常有效。 I
2、ntel处理器实现的MMXTM、SSE(Streaming SIMD Extensions)、SSE2及SSE3扩展指令集,都能在单个时钟周期内处理多个数据单元。也就是说我们现在用的单核计算机基本上都属于SIMD机器。多指令流单数据流机器(MISD) MISD是采用多个指令流来处理单个数据流。由于实际情况中,采用多指令流处理多数据流才是更有效的方法,因此MISD只是作为理论模型出现,没有投入到实际应用之中。多指令流多数据流机器(MIMD) MIMD机器可以同时执行多个指令流,这些指令流分别对不同数据流进行操作。最新的多核计算平台就属于MIMD的范畴,例如Intel和AMD的双核处理器等都属于M
3、IMD。并行编程模型 现在主要以下几种通用的并行编程模型:共享内存、线程、消息传递、数据并行、混合模型。 并行编程模型是在硬件和内存体系结构层之上的抽象概念。并行程序分解模式MPI运行指令 启动:MPD 编译:mpicc o hello hello.c 运行:mpirun np 4 ./helloMPI消息传递三元组 缓冲区 数据类型 数量MPI程序分成几个部分 并行程序的初始化,并行启动了多少个进程,得到相应的进程号,在下面开始消息传递和并行计算,点到点或阻通行的消息传递,并行环境用于计算,消息传递是可有可无的。结束之后关闭并行环境。点到点通讯 点到点通信要求send和recv能够匹配,也即
4、一个send对应于一个recv 阻塞通讯 非阻塞通讯阻塞通信中,消息发送有四种模式 标准模式,MPI_Send 缓存(Buffer)模式,MPI_Bsend 就绪(Ready)模式,MPI_Rsend 同步(Synchonous)模式,MPI_Ssend标准通信模式理论上send会阻塞直到目标进程recv执行接收数据后send才会返回。但是这种模式下MPI环境基本上会对发送进程send的数据进行缓冲,这时即使接收进程没有进行recv发送进程的send也会立即返回。如果发送数据超过MPI提供的缓冲区大小,那么send就会阻塞到缓冲区这里。 int MPI_Send(void *buf , int
5、 count , MPI_Datatype datatype , int dest , int tag , MPI_Comm comm); int MPI_Recv(void *buf , int count , MPI_Datatype datatype , int source , int tag ,MPI_Comm comm , MPI_Status *status); send和recv是非对称的。recv会因为没有接收到目标进程的消息而阻塞,不过可以指定接收进程接收通用信封:MPI_ANY_SOURCE(任意源进程),MPI_ANY_TAG(任意标志)。(关于标志tag后面再讨论)然
6、后可以从返回的MPI_Status的成员MPI_SOURCE和MPI_TAG中解读出相关信息。缓冲通信模式模拟非阻塞通讯 申请缓冲区 通过缓冲区发送接受数据 避免通讯过程中产生死锁或者阻塞因为有内存到内存的复制开销,会导致一定的性能损失和资源占用。不过与标准通信模式中MPI环境提供的缓冲机制不同,缓冲发送不受接收进程的影响可以直接完成,但消息大于缓冲区时程序将会报错。 int MPI_Pack_size(int , MPI_Datatype , MPI_comm , int*); /返回消息所需缓冲区大小(字节数) 定义MPI_BSEND_OVERHEAD为分配使用缓冲区时的系统(BSEND
7、routines)所需最大字节空间。 int MPI_Buffer_attach(void *buffer , int size); /将用于缓冲通信的缓冲区绑定到进程 当然一个进程同一时刻只允许绑定一个缓冲区。如果没有缓冲区绑定到进程,MPI环境默认的操作会有一个长度为0的缓冲区绑定到进程上(解除绑定操作类似)。需要注意线程安全问题。 int MPI_Buffer_detach(void *buffer, int *size); /解除绑定到进程的用于缓冲通信的缓冲区 参数返回已解除绑定缓冲区地址和大小非阻塞通信 在非阻塞的消息传递中,当消息被确切地发出或收到时,系统将用中断信号通知发送方或
8、接受方。 在此之前,它们可以周期性地查询、暂时挂起或执行其它计算,以实现计算与通信的重叠。 可重复非阻塞通信-处理通信的时候初始化的过程 通信等待(wait)和测试(test)函数的使用 通信测试对象通信有没有完成 返回整个通信对象的数据类型 int MPI_Isend( void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) int MPI_Irecv( void *buf, int count, MPI_Datatype datatype, in
9、t source,int tag, MPI_Comm comm, MPI_Request *request ) 非阻塞通信对象多出了一个MPI_Request参数。这个参数是提供给后面的非阻塞通信检测/等待函数用的,它的意义很象文件操作中的文件句柄,它用来唯一的标识不同的非阻塞通信任务。消息传递 阻塞发送:在消息确实已经发送出去(到消息缓冲区)后,才允许进程继续执行下一语句。 阻塞接收:进程处于挂起状态,直到可以在消息缓冲区确切地接收到消息后,才允许进程继续执行下一语句。 非阻塞发送:发送原语通知系统将要发送的消息在消息缓冲区中后,即可返回。发送进程可继续执行后续工作, 无须等待系统真正发送消
10、息。 非阻塞接收:接收原语不管消息缓冲区中是否已有发送原语发送的消息,都将返回。 不论是阻塞通信还是非阻塞通信,都属于异步通信机制。 其设置目的在于让通信与计算重叠,提高并行执行效率。但其付出的代价是系统要提供消息缓冲区。预防死锁 尽量的避免使用阻塞发送 设计好发送和接收的顺序组合发送接受 MPI_sendrecv组通信 一对多:广播,发散 多对一:收集,规约 多对多:组收集,组规约,扫描一对多 广播ppt-3.1-P10 MPI_Bcast(void* buffer,int count,MPI_Datatype datatype,int root,MPI_Comm comm) 发散ppt-3
11、.1-P12 MPI_Scatter(void* sendbuf,int sendcount, MPI_Datatype sendtype,void* recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm comm)多对一 收集ppt-3.1-P17 MPI_Gather(void* sendbuf, int sendcount, MPI_Datatype sendtype,void* recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm co
12、mm) 归约ppt-3.1-P22 MPI_Reduce(void* sendbuf, void* recvbuf, int count, PI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)多对多组收集ppt-3.1-P26MPI_Allgather(void* sendbuf, int sendcount, MPI_Datatype sendtype,void* recvbuf, int recvcount, MPI_Datatype recvtype,MPI_Comm comm)组归约ppt-3.1-P28MPI_Allred
13、uce(void* sendbuf, void* ecvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)归约并散发ppt-3.2-P1MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int *recvcounts,MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)全互换ppt-3.2-P4MPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype,vo
14、id* recvbuf, int recvcount, MPI_Datatype recvtype,MPI_Comm comm)扫描ppt-3.2-P6MPI_Scan(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)点到点与组通信 主要区别:指定的发送或接受的进程号或是进程个数 点到点是两个进程间的 相同点:都需要通信域数据类型 数据类型的分类 预定义类型 自定义类型类型图 用于描述在内存当中整个数据的构成的图像 两个元素:基类型,偏移地址创建不同数据类型函数调用
15、打包和解包 如果是非连续的数据 需要一次性的发送和接收 需要非连续的数据打包处理 然后发送接受后 再解包 注意:由于是多个不连续的数据打包 所以需要多次函数调用* 打包ppt-4.2-P15 int MPI_Pack(void* inbuf, int incount, MPI_datatype, void *outbuf, int outcount, int *position, MPI_Comm comm) 解包 MPI_Unpack(void* inbuf,int insize,int *position, void * outbuf, int outcount,MPI_Datatype datatype,MPI_Comm comm)进程拓扑 a.雅克比迭代-主要考虑有无进程拓扑过程中的数据传递(实现) b.创建笛卡尔拓扑函数,获取坐标函数创建笛卡尔拓扑函数,获取坐标函数 -创建ppt-5-P6 int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods,int reorder, MPI_Comm *comm_cart
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论