云计算中的并行计算技术分析_郑文武.docx
《云计算中的并行计算技术分析_郑文武.docx》由会员分享,可在线阅读,更多相关《云计算中的并行计算技术分析_郑文武.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、摘要 云计算中的并行计算技术分析 郑文武,李先绪,黄执勤 (中国电信股份有限公司广东研宄院广州 510630) 本文阐述了并行计算和云计算的关系,简要回顾并行计算的历史,分析了并行计算的重要技术 OpenMP、 MPI和 Erlang,研宄了这些技术在中国电信的应用方法,并介绍了中国电信实施云计算、 并行计算的指导思想、原则和策略。 关键词并行计算; OpenMP;MPI; Erlang1 引言 云计算是一个含义丰富的概念,包括了服务、市场、技 术等诸多方面。通常提到的 IaaS、 PaaS和 SaaS,严格地说 是基于服务的术语,并不是对技术的描述。从技术上看,云 计算是对主机、存储、网络资
2、源分配、使用、管理的技术。其 核心是对主机资源分配、使用、管理的技术,主机资源也可 称为计算资源。云计算技术包括两个似乎对立的技术,这 两个技术都是用于对资源进行分配、使用和管理。 一个技术是对资源进行分割, 将资源的分配、使用的 粒度变细,主机的虚拟化就是这样的技术。通过引入虚拟 主机,将物理主机的能力进行分割,使主机计算能力的分 配、使用不是基于单台物理主机,而是基于细分的虚拟主 机。简单地说,虚拟化技术就是对资源进行拆分的技术 t 另一个技术是利用多个物理主机的能力完成一个任 务。分布式并行计算就是这样的技术。分布式并行计算将 任务分解为多个子任务分派给主机集群中的各个主机,子 任务在多
3、个主机上协调并行运行 简单地说,分布式并行计算技术就是对资源进行聚合的技术。事实上,分布式并 行计算才更加体现出云计算的本 质。云计算的名称和分布 式并行计算、网格计算是一脉相承的。不过,分布式并行计 算应该只是并行计算的一种,从下文的分析可以看出,对 于云计算除了分布式并行计算这个主要的并行模式外,还 有其他的并行模式。本文不仅分析分布式并行计算,还分 析了非分布式的并行计算。 2并行计算的历史 并行计算出现在 20世纪 60年代初期,这个时期晶体 管以及磁芯存储器开始出现,处理单元变得越来越小,存 储器也更加小巧和廉价。这些技术的发展结果导致并行计 算机的出现,这一时期的并行计算机大多是规
4、模不大的共 享存储多处理器系统,即所谓大型主机 s IBM 360是这一 时期的典型代表。 长久以来,并行计算在高性能计算领域发展得如火如 荼,并行计算的体系结构也在不断地变化 9并行计算所依 赖的平台称为并行机,并行机由多个节点组成,任务被分 云计算专栏 解到各个节点,在各个节点并行运行。早期的并行节点,并 不是互相完全独立的主机,更像 1台主机的各个模块 到 了 20世纪 90年代,随着网络设备的发展以及 MPI/PVM等 并行编程标准的发布,集群架构的并行计算机开始出现。此 时的并 行计算硬件平台的节点就是彼此独立的主机了。 现代的并行机体系结构有对称多处理共享存储并行 机 (symme
5、tric multiprocesser, SMP)、分布共享存储 (distributed shared memory,DSM)并行机、大规模并行机 ( massively parallel processor, MPP )、并行向量多处理机( parallel vector processor, PVP)。所有这些体系结构的并行机都是咼咼在 上位于 “ 云 ” 端的,但和云计算没有直接的关系。所幸的 是,另外一种体系结构的并 行机出现了,这就是工作站 (PC)机群 ( cluster of workstation (beowulf PC-cluster), COW)。 PC机群的诞生背景是微
6、处理器性能和网络带宽的飞 速发展。 PC机群的诞生中止了并行计算和并行机的贵族 身份,让并行飞入到 “ 寻常百姓家 ” 。 PC机群的性能绝不容 轻视,如早期 128台 Pentium 3 800 MHz处理器的 PC通过 6个 24端口 100 Mbit/s的交换机互联,其浮点峰值性能达 到 1 000亿,当时的成本不过 200万亿元人民币,性价比 比当时最好的大型主机并行机还要高 30倍。 PC机群为云计算的诞生奠定了基础 Google的云计 算就是在 PC机群的基础上发展起来的。 Google的机群由 遍布全球的 PC通过广域网连接而成。 3并行计算概述 并行计算的实现层次有两个 Q 单
7、机(单个节点)内部的多个 CPU、 多个核并行计 算,虽然单节点内部的并行计算不是实施云计算的 主流,但由于目前多 CPU、 多核已经成为主机提高 性能的一个非常重要的方面 集群内部节点间的并行计算。对于云计算来说,更 加强调的是集群节点间的并行。目前,集群中的节 点一般是通 过 IP网络连接,在带宽足够的前提下, 各节点不受地域、空间限制。所以,云计算中的并行 计算在很多时候被称作分布式并行计算。不过,多 CPU、 多核是主机的发展趋势,所以在一个集群内, 一般 2个级别的并行都要求存在,集群内多节点之 间并行,节点内部多处理器、多核并行。节点间的并 行计算,通常就等同于常说的分布式并行计算
8、 云计算专栏 和虚拟化成熟的产品不同,并行计算没有成熟的产 品,只有相对成熟的工具。并行计算的实现,依赖于开发者 和用户对业务的熟悉,对并行工具正确、熟练的使用。 并行应用软件从需求分析到设计再到部署,可 以分为 3个步骤。 (1) 在需求分析阶段,根据业务特点,将任务尽可能地 分为可以并行执行的多个任务。这是实现并行计算最基础 的、往往也是最有效的阶段。 (2) 在设计、编码阶段,采用并行工具进行程序设计。 这个阶段所应用的并行技术是最核心的并行技术,难度最 大,技术也不成熟,而且目前大部分技术人员对这个阶段 所应用的技术还没有足够程度的掌握。 (3) 在应用部署阶段,采用并行部署架构和工具
9、部署 应用。这个阶段就是通过部署,使应用所占用的设备能够 实现负载均衡。负载均衡本质上也属于并行计算。常用的 方法为采用负载均衡设备,如 F5交换机、 ESB等。这个阶 段所涉及的技术比较成熟,已为业界广泛采用。 第二阶段的并行计算就是狭义的并行计算,本文主要 分析这个阶段的并行计算技术 这个阶段的并行计算技 术,就是并行程序设计的技术 9 4并行计算编程模型分析 并行计算编程模型一直是并行计算研宄领域中的重 点内容 ,它和并行计算机体系结构紧密相关。共享存储体 系结构下的并行编程模型主要是共享变量编程模型,它具 有单地址空间、编程容易、可移植性差等特点,其实现有 OpenMP和 P0SIX等
10、。分布式存储体系结构下的并行编程 模型主要有消息传递编程模型和分布式共享编程模型两 种。消息传递编程模型的特点是多地址空间、编程困难、可 移植性好,其实现有 MPI、 PVM等;分布式共享编程模型 是指有硬件或软件的支持,在分布式体系结构下实现的具 有共享变量编程模型特点的编程模型。后者可以按照硬件 或软件的实现分为 DSM和 SVM, 其实现有 TreadMark和 JiaJia等,目前研宄热点的分割全局地址空间 (PGAS)模型 的研究有 UPC等代表,具有很强的发展潜力。 并行计算编程模型一般包括两类:一类是在原有串行 编程语言基础上,引入并行控制 机制,提供并行 API、运行 库或者并
11、行编译指令,这类模型包括 OpenMP、 MPI以及大 家广为熟悉的 MapReduce;另一类则是并行编程语言,其 语言本身就是基于并行算法的,相对影响比较大的主要有 电信科学 2011年第 12期 Erlang 前面说过,并行计算的实现有两个层次,一个是集群节 点间的并行,另一个节点内的并行 。 OpenMP 般用于实现 节点内并行 , MPI 般用于实现节点间的并行 ;而 Erlang既 可以实现节点间的并行,也可以实现节点内的并行。 对于大家已经比较熟悉的 MapReduce,本文就不再做 分析。本文重点 分析 OpenMP、 MPI和 Erlang这 3个并行计 算编程技术。 . 4
12、.1 OpenMP 目前从 x86到小型机,多核是 CPU的主流,对于单线 程 (single thread)的程序,多核的处理器并没有办法提升它 的处理效能;对于多线程 (multi thread)的程序,就可以通 过不同的核同时计算来达到提高性能的目的 9当然,多线 程程序的执行性能依赖于对任务的分解。多线程程序的编 写、维护,比单线程的程序要复杂不少。一般而言,采用了 多线程编程技术,只要主机是多处理器、多核或者拥有同 时执行多个线程的能力,那么多线程程序的执行性能还是 远远高于单线程的 a 传统的多线程程序编写一般有两种方法: 通过调用操作系统功能、开发工具自己的多线程控 制语句或控制
13、函数来实现; 采用 P0SIX标准和方法,利用 P0SIX的线程控制 库函数来实现 这些方法都是通过主 thread去产生多个 thread,由主 要的 thread把工作拆开,分给各 thread去运算,最后再由 主 thread回收、整合结果。使用这两种方法存在以下问题。 程序的开发复杂性较单线程程序增加很多。 第一种方法的移植性还存在问题。 若要具有好的扩展性,则更加复杂 B多线程应该不 只是创建固定数量的线程,而应该随着 CPU核数 的増加而増加线程。如果用上述方法,虽然可以实 现良好的扩展性,但控制十分复杂 多线程对多核处理器的负载均衡调度需要开发者 自己实现,十分复杂。 使用 Op
14、enMP则解决了上述问题 OpenMP是多线程的一种编程方法,它的并行粒度是 线程级别的。它的适用范围是单机内的并行计算,可以很 好地利用单机内多 CPU或者多核。 OpenMP就是一套API 和运行库,可以简化单机内的多线程开发,让设计人员和 开发人员的主要精力集中到对任务的理解和拆分上,而具云计算专栏 体的细节交给 OpenMP去完成,用 OpenMP的编程效率要 远远高于使用一般函数库或者操作系统自带函数库的多 线程编程,也大大优于 P0SIX标准和方法。 OpenMP是作 为共享存储标准而问世的。它是为在多处理机上编写并行 程序而设计的一个应用编程接口,包括一套编译指导语句 和一个用来
15、支持它的函数库。 OpenMP能通过伪指令,很简单地将程序多线程化。 最简单的情形,甚至可以只加一行指导编译程序的编译伪 指令,就可以将循环内的语句并行处理了。 OpenMP起 源于 C/C+,但目前已经有 OpenMP的Java 开发包,使其可以用于 Java编程。 4.2 MPI OpenMP虽然很优秀,但只是单机内的并行计算技术。 无论是并行计算还是云计算,其并行计算的主流是主机之 间的并行而弁非单机内的并行。因此 , MPI (message passing interface)才是并行计算的代表性技术。 1994年 5月 1.0版的 MPI标准诞生,该标准提出了一 种基于消息传递的函
16、数接口描述。目前, MPI已发展到 2.0 版,成为高性能计算的一种公认标准。 MPI本身并不是一 个具体的实 现,而只是一种标准描述。 MPI最为著名且被 广泛使用的一个具体实现是由美国 Argoone国家实验室 (argonne national laboratory)开发小组完成的 MPICH, MPICH是一个免费软件,它提供对 Fortran和 C语言等的绑 定支持,以函数库的形式提供给开发者使用。 采用 MPI在程序设计上有较大的自由度,甚至可以用 它实现 Hadoop中的 MapReduce功能。 消息传递方式是广泛应用于并行机的一种模式,特别 是分布存储并行机。 10多年来,这
17、种模式在重要的计算应 用中已取得了实质进步 在设计 MPI时,目标不是选择采用现存消息传递系统 中的某一个,而是充分利用这些系统的最抽象特点。 建立消息传递标准的主要优点是可移植性和易于使 用。以低级消息传递程序为基础的较高级和(或 )抽象程序 所构成的分布存储通信环境中,标准化的效益特别明显。 消息传递标准的定义能提供给生产商清晰定义的程序库, 以便他们能有效地实现这些库或在某些情况下为库程序 提供硬件支持,因此加强了可扩展性。 简单地说, MPI是为编写消息传递程序而开发的广泛 使用的标准。像这个接口一样,应为消息传递建立一个实 际的、可移植的、有效的和灵活的标准。全部目标如下: 电信科学
18、 2011年第 12期 设计一个应用编程接口(不必为编译器或系统实 现库 ); 允许有效的通信,避免存储器到存储器的拷贝,而 允许计算和通信的重叠,尽可能给通信协同处理器 卸载; 对于接口,允许方便的 C语言和 Fortran 77联接; 设定一个可靠的通信接口,用户不必处理通信失 败,这些失败由基本的通信子系统处理; 定义一个接口,提供更大灵活性的扩展; 定义一个接口,它能在基本的通信和系统软件无重 大改变时,在许多生产商的平台上实现,接口的语 义是独立于语言的; 接口应设计成允许线索 -安全丨 thread-safety)。 MPI的一个非常大的优势是大范围的可移植性,在标 准 Unix处
19、理器间通信协议的上层实现的 MPI将给工作 站群机系统和不同种类的工作站网络提供可移植性。 这个标准包括点对点通信、集合操作、进程组、通信上 下文、进程拓扑结构、与 Fortran 77和 C语言绑定、环境管 理和查询、描述接口。 4.3 Erlang Erlang首先是一种类似于函数的编程语言,这种语言 天生就是为并行计算而设计的: 本来这种比 Java还古老 的语言 ,一 直无人问津,但是主机的多处理器、多核的发展 趋势,特别是云计算的兴起,给 Erlang又带来了生机。 业界对于并行计算的探索一直没有停止,尤其是云计 算的发展促进了并行计算各种方法、模式的发展,如 Java 的 Conc
20、urrency 库、 Intel 推出的 Threading Building Blocks 库、微软为 Robotics Studio提供的 CCR库等。但这些措施 只是为先天串行的程序设计语言提供了后天的并行能力, 属于亡羊补牢。而 Erlang则是先天并行的,在单台主机上, 利用多处理器和多核的优 势, Erlang将传统编程方法远远 甩在后面。据说使用 Erlang编写的 Yaws Web服务器,其 并发性能是使用 C编程的 apache的 15倍!根据实测, apache在并发 4 000连接时就已经崩溃,而 Yaws Web服 务器可实现并发 8万连接。 Erlang不仅是程序设计
21、语言,还是包括一个类似于 Java的虚拟机在内的一个完整的平台。通过虚拟机,Erlang 独立于硬件平台和操作系统,在这个平台上实现了网络通 信、内存管理、进程调度、并发机制和分布式计算等功能 Erlang最初是由爱立信专门为通信应用 设计的,因此 云计算专栏 非常适合于构建分布式、实时软并行计算系统。 Erlang具有以下特点。 (1) 并发性 Erlang的轻量级进程可以支持极高的并发性,而且在 高并发的情况下内存使用相当少。 Erlang的并发性并不会 受到宿主操作系统并发性的限制。 (2) 分布式 最开始 Erlang的设计目标就是实现分布式环境, Erlang的一个虚拟机就是 Erl
22、ang网络上的一个节点。一个 Erlang节点可以在另一个 Erlang节点上创建自己的并发 进程,而子进程所在的节点可能是运行其他操作系统的服 务器。不同节点之间可以进行极为高效而又精确的通信, 就像这些通信运行在同一个节点一样。 (3) 健壮性 Erlang内部建设有多种错误检测原语,可以通过这些 原语来架设高容错性的系统。在分布式状态下,可以把系 统配置成具有 Fail-over功能的分布式系统。当有其他节点 出错的时候,系统会把它的运行场景自动快速地切换到备 份节点上。 Erlang支持 9个 9级别的故障率 ,一年只有几 分钟的故障时间。 (4) 软实时 它可以提供毫秒级别的响应。
23、(5) 热代码升级 对于不能中断运行的系统, Erlang允许程序代 码在 运行系统中被修改。旧代码被逐步淘汰后能被新代码 替换。在此过渡期间,新旧代码是共存的 这也使得安 装 bug补丁在运行系统上升级而不干扰系统操作成为 了可能。 (6) 递増式代码装载 用户能够控制代码被装载的细节。在嵌入式系统中, 所有代码通常是在启动时就被完全装载。在开发系统中, 代码是按需装载的,甚至在系统运行时被装载的。如果测 试到了未覆盖的 bug,那么需替换有 bug的代码。 (7) 外部接口 Erlang进程与外部世界之间的通信使用和在 Erlang 进程之间通信相同的消息传送机制。这种机制被用于 和操 作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 中的 并行 技术 分析 文武
限制150内