首页 > 编程知识 正文

并行计算结构算法编程第三版 pdf(并行计算与集群技术(3))

时间:2023-05-04 09:55:29 阅读:121758 作者:973

并行计算相关技术并行计算的关键技术

并行计算的基本条件包括硬件(并行计算机)、并行算法设计和并行编程环境。 目前并行计算的主要技术主要包括四个部分:体系结构、算法设计与分析、实现技术、应用。

并行计算机体系结构

开放式计算机关注两个要点。 第一,构成要素,即硬件、并行计算机体系结构构成要素包

节点、互联网、内存)内存。 节点是一个或乡

个处理器结构; 互连是指连接节点,形成网络环境。 内存是指多个存储模块组。 第二,结

结构模型、并行计算机的典型结构模型为PVP、SMP. DSM. MPP和COW,并行计算机体系结构包括高端高性能计算机和低端普及型计算机。 并行算法的设计与分析

并行算法的设计和分析包括并行算法的设计和分析以及算法库和测试库。

并行化的主要思想是分治。 并行算法的设计思路可以从两个角度出发。 根据作用域分解(根据数据的处理方法,形成多个相对独立的数据区域,不同处理器分为任务或功能进行分解)初始问题的求解过程,将任务分为几个子任务,每个子任务完成全部工作的一部分,任务级此过程关注要完成的计算,而不是操作数据的计算。 并行安装技术

并行实现技术分为三大类:线程库、消息传递库和编译器支持。 线程库

POSIX线程和WindowsAPI线程)实现线程的显式控制; 如果线程需要细化"

理所当然地,可以考虑使用这些显性线程技术。 使用消息库(如消息传递接口MPI )应用租赁。

同时使用多台计算机消除了彼此共享同一内存空间的需要。 并行实现技术包括编程实现和性能优化,包括并行编程模型和并行编程的环清洗

工具。 并行编程环境主要有操作系统和编程语言。 并行计算机的主流操作系统是UNIX/Linux。

例如,IBM的AIX、惠普的HPUX、Sun的Solaris和SGI的IRIX都是UNIX的变体。 并行计算的编程语言有Fortran 77/90/95或C/C .并行计算的应用

并行计算的应用包括天气预报、核科学、石油勘探、地震数据处理、飞机数值模拟等科学工程的应用和各种新的应用。并行计算的性能估计

并行计算的性能主要从加速比和并行效率两个方面进行评价。 “加速比”(Speedup ) :单处理器和并行处理器系统执行相同任务所占用的时间百分比用于衡量并行系统或程序并行化的性能和效果,并通过以下公式计算:

Speedup=T/IN其中Speedup是加速比,T1是单处理器上的运行时间,TN是具有n个处理器的并行系统上的运行时间。 并行效率(Parallel Efficiency ) :加速比与使用的处理器数量之比。 并行效率表示并行设备执行并行算法时每个处理器的平均执行效率。井行程序改计——MPI编程

目前,并行计算的典型技术是消息传递接口MPI(messagepassinginterface,MPI ).MPI提出了基于消息传递的函数接口描述,但MPI本身不是具体实现,而是简单的标准描述可以从Hadoop中找到许多MPI的阴影,包括Hadoop中的文件系统和Map/Reduce处理

是主从结构。 主从结构是MPI并行程序的重要设计方法。 因此,了解并行计算时代的编程方法MPI有助于我们了解云计算的技术基础和理念,我们在实际的研究中也体会到了这一点。 为此,我们将介绍使用MPI并行编程的核心技术,以帮助读者从并行计算过渡到云计算。MPI简介并行编程方式主要有三种方法。

)1)设计全新的并行语言,具有并行程序实现简单方便的优点。 缺点是没有统一的标准,设计语言的难度和工作量很大。

)2)扩展串行语言语法,支持并行特征。 这种想法是将串行语言的并行扩展部分作为原始串行语言的注释(标记),对串行编译器来说并行扩展部分不起作用,但对并行编译器来说根据标记请求将串行程序转换为并行程序。 其优点是,相对于设计全新的并行语言,难度会降低; 缺点是需要重新开发编译器。

)3)为串口语言提供可调用的并行库。 优点是不需要新开发编译器,开发者只需在串行程序中添加对并行库的调用,就可以设计并行程序。 从以上说明可以看出,对串行语言的变更越大,实现越困难。

目前最常用的是提供并行库,通过扩展语法组件的方式进行并行编程。 消息传递接口(Message Passing Interface,MPI )并发程序采用提供并行库的方式,这是消息传递包装的标准规范。 MPI是新的库描述,不是语言。 MPI是标准或规范的代表,而不是指特定的具体实现。 MPI是一种消息传递编程模型,已成为这种编程模型的代表性和事实标准。 由MPI论坛开发,支持Fortran、c、c .消息传递并发设计。 用户必须通过明确发送和接收消息来实现处理器之间的数据交换。 每个并行进程都有自己的地址空间,不能直接相互访问,必须通过显式消息传递来实现。 该编程方式是大规模并行处理机(MPP )

和集群(Cluster) 采用的要编程方式。由于消息传递程序设计要求用户很好地分解问题,组织不同进程间的数据交换,因此并行计算粒度大,特别适合于大规模可扩展并行算法。目前,消息传递是并行计算领域的一个非常重要的并行程序设计方式。
设计MPI的目标是:
1.提供应用程序编程接口。
2.提高通信效率。包括避免存储器到存储器的多次重复拷贝,允许计算和通信的重叠。
3.可在异构环境下提供实现。
4.提供的接口可以方便C语言和FORTRAN77的调用。
5.提供可靠的通信接口。即用户不必处理通信失败。
6.接口设计应是线程安全的(允许一个接口同时被多个线程调用)。
7.接口的语义是独立于语言的。
一个简单的MPI程序实现
在编写 MPI程序时,通常需要回答两个问题:一是任务由多少个进程来进行并行计异。
二是要清楚各结点上运行的是哪个进程。
下面首先以C 语言的形式给出一个最简单的 MPI 并行程序。该程序的任务是在终端打印出“Hello World! ”字样。
“Hello World! ”是SPMD 格式的,MPIint和MPL Finalianon
之间的代码为并行代码,该并行代码将在所有的结点上执行,由于该并行环境中部署了3个体点,所以该并行代码会在三个结点上都运行一次,从而出现三个 Hello world! , 注意,MPI_init0和 MPI_Finalize0分别是并行程序的开始函数和结束函数。
MPI消息

消息信封指明了发送或接收消息的对象及相关信息。消息信封由源/目的(Destination) 标识(tag) 和通信域组成。消息信封的格式类似于信封的封皮,如图5-15所示,
且的(Destination) 是消息的接收者,由 send 函数参数确定。源(Source) 是消息的提供
在MPI程序中,进程间通信所传送的所有信息称为
者,由发送进程隐式确定,由进程的 rank 值唯一标识。如果隐含源/目的,就是组通信。
标识是区别同一进程的不同消息,使程序以一种有序的方式处理到达的消息,它是必要
的,但不是充分的,因为“tag”的选择具有一定的随意性。MPI用一个新概念“上下文
(context) ”对“tag”进行扩展。系统运行时分配,不允许统一配置。如果隐含“tag”, 就是组通信,由通信语句的序列决定消息的匹配。消息内容(Data) 指明了本消息将要传递的实体数据部分。消息内容由起始地址、数据个数和数据类型组成。
MPI消息的传递过程
消息传送并行程序设计原则如下。用户必须通过显式地发送和接收消息来实现处理机间的数据交换。每个并行进程均有自己独立的地址空间,相互之间访问不能直接进行,必须通过显式
的消息传送来实现。运科编程方式是大规模并行处理机(MPP) 和集群(Cluster) 采用的主要编程方式。
由于消息传递程序设计要求用户很好地分解问题,组织不同进程间的数据交换,因此并计算粒度大,特别适合于大规模可扩展并行算法。消息传递是当前并行计算领域的一个非常重要的并行程序设计方式。
MPI常用基本函数
D1调用接口的总数虽然庞大,但根据实际编写 MPI的经验,常用的MPI 承数的个数知
是有限的。下面是6个最基本的MPI函数。MPI Init: 启动MPI环境,标志并行代码的开始。函数原型为:
int MPI_Init (intargc,char**argv)*
交通常是第一个被调用的MPI函数,除MPI_Initialized (测试是否已执行 MPI Init) 外。
其全所有的MPI函数应该在其后被调用。MPI通过 argc、argv 得到命令行参数。MPI Comm_size: 获得通信空间comm中规定的组包含的进程的数量。函数原型为:
**int MPI_Comm_size (MPI_Comm comm,intsize)MPI Comm_rank: 得到本进程在通信空间comm中的rank值,即在组中的逻辑编号
(从0开始,类似于进程ID) .函数原型为:
int MPI_Comm_rank (MPI_Comm comm,intrank)MPI_Send: 标准阻塞发送消息,函数原型为:
int MPI_Send (void*buff,int count, MPI_Datatype datatype,int dest,int tag, MPI_Comm comm)
其中,buff 是消息发送缓冲区;count 是指定数据类型 MPI_Datatype 的消息个数,而不是
字节数;dest是发送消息的目的地;tag 是消息标签;comm是通信空间或通信域。MPI_Recv: 标准阻塞接收消息,函数原型为:
unt MPI Recuf voidbuff int count MPI Datatype datatype,int source,int tag, MPL_Comm com*
调用MPI函数库的并行程序时遵循以下约定:
1.程序开头必须包含mpi.h头文件。
2.MPI函数返回出错代码或MPI_SUCCESS成功标志。
3.MPI_前缀,且只有MPI名称以及MPI_标志后的第一个字母大写,其余小写。
4.程序的并行部分以MPI_Init()开头,以MPI_Finalize()结束,其他部分为程序的串行部分。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。