电子说
并行计算模型通常指从并行算法的设计和分析出发,将各种并行计算机(至少某一类并行计算机)的基本特征抽象出来,形成一个抽象的计算模型。
PRAM(Parallel Random Access Machine,随机存取并行机器)模型,也称为共享存储的SIMD模型,是一种抽象的并行计算模型,它是从串行的RAM模型直接发展起来的。在这种模型中,假定存在一个容量无限大的共享存储器,有有限个或无限个功能相同的处理器,且他们都具有简单的算术运算和逻辑判断功能,在任何时刻各处理器都可以通过共享存储单元相互交互数据。根据处理器对共享存储单元同时读、同时写的限制,PRAM模型可以分为下面几种:
不允许同时读和同时写(Exclusive-Read and Exclusive-Write)的PRAM模型,简称为PRAM-EREW;
允许同时读但不允许同时写(Concurrent-Read and Exclusive-Write)的PRAM模型,简称为PRAM-CREW;
允许同时读和同时写(Concurrent-Read and Concurrent-Write)的PRAM模型,简称为PRAM-CRCW。
显然,允许同时写是不现实的,于是又对PRAM-CRCW模型做了进一步约定,于是形成了下面几种模型:
只允许所有的处理器同时写相同的数,此时称为公共(common)的PRAM-CRCW,简称为CPRAM-CRCW;
只允许最优先的处理器先写,此时称为优先(Priority)的PRAM-CRCW,简称为PPRAM-CRCW;
允许任意处理器自由写,此时称为任意(Arbitrary)的PRAM-CRCW,简称为APRAM-CRCW。
往存储器中写的实际内容是所有处理器写的数的和,此时称为求和(Sum)的PRAM-CRCE,将称为SPRAM-CRCW。
PRAM模型的优点
PRAM模型特别适合于并行算法的表达、分析和比较,使用简单,很多关于并行计算机的底层细节,比如处理器间通信、存储系统管理和进程同步都被隐含在模型中;易于设计算法和稍加修改便可以运行在不同的并行计算机系统上;根据需要,可以在PRAM模型中加入一些诸如同步和通信等需要考虑的内容。
PRAM模型的缺点
(1)模型中使用了一个全局共享存储器,且局存容量较小,不足以描述分布主存多处理机的性能瓶颈,而且共享单一存储器的假定,显然不适合于分布存储结构的MIMD机器;
(2)PRAM模型是同步的,这就意味着所有的指令都按照锁步的方式操作,用户虽然感觉不到同步的存在,但同步的存在的确很耗费时间,而且不能反映现实中很多系统的异步性;
(3)PRAM模型假设了每个处理器可在单位时间访问共享存储器的任一单元,因此要求处理机间通信无延迟、无限带宽和无开销,假定每个处理器均可以在单位时间内访问任何存储单元而略去了实际存在的,合理的细节,比如资源竞争和有限带宽,这是不现实的;
(4) PRAM模型假设处理机有限或无限,对并行任务的增大无开销;
(5)未能描述所线程技术和流水线预取技术,而这两种技术又是当今并行体系结构用的最普遍的技术。
BSP模型基本原理
BSP模型是一种异步MIMD-DM模型(DM: distributed memory,SM: shared memory),BSP模型支持消息传递系统,块内异步并行,块间显式同步,该模型基于一个master协调,所有的worker同步(lock-step)执行, 数据从输入的队列中读取,该模型的架构如图所示:
另外,BSP并行计算模型可以用 p/s/g/I 4个参数进行描述:
P为处理器的数目(带有存储器)。
s为处理器的计算速度。
g为每秒本地计算操作的数目/通信网络每秒传送的字节数,称之为选路器吞吐率,视为带宽因子 (time steps/packet)=1/bandwidth。
i为全局的同步时间开销,称之为全局同步之间的时间间隔 (Barrier synchronization time)。
那么假设有p台处理器同时传送h个字节信息,则gh就是通信的开销。同步和通信的开销都规格化为处理器的指定条数。
BSP计算模型不仅是一种体系结构模型,也是设计并行程序的一种方法。BSP程序设计准则是整体同步(bulk synchrony),其独特之处在于超步(superstep)概念的引入。一个BSP程序同时具有水平和垂直两个方面的结构。从垂直上看,一个BSP程序由一系列串行的超步(superstep)组成,如图所示:
这种结构类似于一个串行程序结构。从水平上看,在一个超步中,所有的进程并行执行局部计算。一个超步可分为三个阶段,如图所示:
本地计算阶段,每个处理器只对存储本地内存中的数据进行本地计算。
全局通信阶段,对任何非本地数据进行操作。
栅栏同步阶段,等待所有通信行为的结束。
BSP模型特点
1. BSP模型将计算划分为一个一个的超步(superstep),有效避免死锁。
2. 它将处理器和路由器分开,强调了计算任务和通信任务的分开,而路由器仅仅完成点到点的消息传递,不提供组合、复制和广播等功能,这样做既掩盖具体的互连网络拓扑,又简化了通信协议;
3. 采用障碍同步的方式以硬件实现的全局同步是在可控的粗粒度级,从而提供了执行紧耦合同步式并行算法的有效方式,而程序员并无过分的负担;
4. 在分析BSP模型的性能时,假定局部操作可以在一个时间步内完成,而在每一个超级步中,一个处理器至多发送或接收h条消息(称为h-relation)。假定s是传输建立时间,所以传送h条消息的时间为gh+s,如果 ,则L至少应该大于等于gh。很清楚,硬件可以将L设置尽量小(例如使用流水线或大的通信带宽使g尽量小),而软件可以设置L的上限(因为L越大,并行粒度越大)。在实际使用中,g可以定义为每秒处理器所能完成的局部计算数目与每秒路由器所能传输的数据量之比。如果能够合适的平衡计算和通信,则BSP模型在可编程性方面具有主要的优点,而直接在BSP模型上执行算法(不是自动的编译它们),这个优点将随着g的增加而更加明显;
5. 为PRAM模型所设计的算法,都可以采用在每个BSP处理器上模拟一些PRAM处理器的方法来实现。
BSP模型的评价
1. 在并行计算时,Valiant试图也为软件和硬件之间架起一座类似于冯·诺伊曼机的桥梁,它论证了BSP模型可以起到这样的作用,正是因为如此,BSP模型也常叫做桥模型。
2. 一般而言,分布存储的MIMD模型的可编程性比较差,但在BSP模型中,如果计算和通信可以合适的平衡(例如g=1),则它在可编程方面呈现出主要的优点。
3. 在BSP模型上,曾直接实现了一些重要的算法(如矩阵乘、并行前序运算、FFT和排序等),他们均避免了自动存储管理的额外开销。
4. BSP模型可以有效的在超立方体网络和光交叉开关互连技术上实现,显示出,该模型与特定的技术实现无关,只要路由器有一定的通信吞吐率。
5. 在BSP模型中,超级步的长度必须能够充分的适应任意的h-relation,这一点是人们最不喜欢的。
6. 在BSP模型中,在超级步开始发送的消息,即使网络延迟时间比超级步的长度短,该消息也只能在下一个超级步才能被使用。
7. BSP模型中的全局障碍同步假定是用特殊的硬件支持的,但很多并行机中可能没有相应的硬件。
BSP与MapReduce对比
执行机制:MapReduce是一个数据流模型,每个任务只是对输入数据进行处理,产生的输出数据作为另一个任务的输入数据,并行任务之间独立地进行,串行任务之间以磁盘和数据复制作为交换介质和接口。
BSP是一个状态模型,各个子任务在本地的子图数据上进行计算、通信、修改图的状态等操作,并行任务之间通过消息通信交流中间计算结果,不需要像MapReduce那样对全体数据进行复制。
迭代处理:MapReduce模型理论上需要连续启动若干作业才可以完成图的迭代处理,相邻作业之间通过分布式文件系统交换全部数据。BSP模型仅启动一个作业,利用多个超步就可以完成迭代处理,两次迭代之间通过消息传递中间计算结果。由于减少了作业启动、调度开销和磁盘存取开销,BSP模型的迭代执行效率较高。
数据分割:基于BSP的图处理模型,需要对加载后的图数据进行一次再分布的过程,以确定消息通信时的路由地址。例如,各任务并行加载数据过程中,根据一定的映射策略,将读入的数据重新分发到对应的计算任务上(通常是放在内存中),既有磁盘I/O又有网络通信,开销很大。但是一个BSP作业仅需一次数据分割,在之后的迭代计算过程中除了消息通信之外,不再需要进行数据的迁移。而基于MapReduce的图处理模型,一般情况下,不需要专门的数据分割处理。但是Map阶段和Reduce阶段存在中间结果的Shuffle过程,增加了磁盘I/O和网络通信开销。
MapReduce的设计初衷:解决大规模、非实时数据处理问题。"大规模"决定数据有局部性特性可利用(从而可以划分)、可以批处理;"非实时"代表响应时间可以较长,有充分的时间执行程序。而BSP模型在实时处理有优异的表现。这是两者最大的一个区别。
BSP模型的实现
1.Pregel
Google的大规模图计算框架,首次提出了将BSP模型应用于图计算,具体请看Pregel——大规模图处理系统,不过至今未开源。
2.Apache Giraph
ASF社区的Incubator项目,由Yahoo!贡献,是BSP的java实现,专注于迭代图计算(如pagerank,最短连接等),每一个job就是一个没有reducer过程的hadoop job。
3.Apache Hama
也是ASF社区的Incubator项目,与Giraph不同的是它是一个纯粹的BSP模型的java实现,并且不单单是用于图计算,意在提供一个通用的BSP模型的应用框架。
4.GraphLab
CMU的一个迭代图计算框架,C++实现的一个BSP模型应用框架,不过对BSP模型做了一定的修改,比如每一个超步之后并不设置全局同步点,计算可以完全异步进行,加快了任务的完成时间。
5.Spark
加州大学伯克利分校实现的一个专注于迭代计算的应用框架,用Scala语言写就,提出了RDD(弹性分布式数据集)的概念,每一步的计算数据都从上一步结果精简而来,大大降低了网络传输,同时保证了血统的纯正性(即出错只需返回上一步即可),增强了容错功能。Spark论文里也基于此框架实现了BSP模型(叫Bagel)。值得一提的是国内的豆瓣也基于该思想用Python实现了这样一个框架叫Dpark,并且已经开源。https://github.com/douban/dpark
6.Trinity
这是微软的一个图计算平台,C#开发的,它是为了提供一个专用的图计算应用平台,包括底层的存储到上层的应用,应该是可以实现BSP模型的,文章发在SIGMOD13上,可恨的是也不开源。主页
7.GoldenOrb
另一个BSP模型的java实现,是对Pregel的一个开源实现,应用在hadoop上。
官网:(要FQ)
源码:https://github.com/jzachr/goldenorb
8.Phoebus
Erlang语言实现的BSP模型,也是对Pregel的一个开源实现。https://github.com/xslogic/phoebus
9.Rubicon
Pregel的开源实现。https://launchpad.net/rubicon
10.Signal/Collect
也是一个Scala版的BSP模型实现。
11.PEGASUS
在hadoop上实现的一个java版的BSP模型,发表在SIGKDD2011上。~pegasus/index.htm
根据技术发展的趋势,20世纪90年代末和未来的并行计算机发展的主流之一是巨量并行机,即MPC(Massively Parallel Computers),它由成千个功能强大的处理器/存储器节点,通过具有有限带宽的和相当大的延迟的互连网络构成。所以我们建立并行计算模型应该充分考虑到这个情况,这样基于模型的并行算法才能在现有和将来的并行计算机上有效的运行。根据已有的编程经验,现有的共享存储、消息传递和数据并行等编程方式都很流行,但还没有一个公认的和占支配地位的编程方式,因此应该寻求一种与上面的编程方式无关的计算模型。而根据现有的理论模型,共享存储PRAM模型和互连网络的SIMD模型对开发并行算法还不够合适,因为它们既没有包含分布存储的情况,也没有考虑通信和同步等实际因素,从而也不能精确的反映运行在真实的并行计算机上的算法的行为,所以,1993年D.Culer等人在分析了分布式存储计算机特点的基础上,提出了点对点通信的多计算机模型,它充分说明了互联网络的性能特性,而不涉及到具体的网络结构,也不假定算法一定要用现实的消息传递操作进行描述。
LogP模型是一种分布存储的、点到点通信的多处理机模型,其中通信网络由4个主要参数来描述:
(1)L(Latency) 表示源处理机与目的处理机进行消息(一个或几个字)通信所需要的等待或延迟时间的上限,表示网络中消息的延迟。
(2)o(overhead)表示处理机准备发送或接收每个消息的时间开销(包括操作系统核心开销和网络软件开销),在这段时间里处理不能执行其它操作。
(3)g(gap)表示一台处理机连续两次发送或接收消息时的最小时间间隔,其倒数即微处理机的通信带宽。
(4)P(Processor)处理机/存储器模块个数
假定一个周期完成一次局部操作,并定义为一个时间单位,那么,L,o和g都可以表示成处理器周期的整数倍。
LogP模型的特点
(1)抓住了网络与处理机之间的性能瓶颈。g反映了通信带宽,单位时间内最多有L/g个消息能进行处理机间传送。
(2)处理机之间异步工作,并通过处理机间的消息传送来完成同步。
(3)对多线程技术有一定反映。每个物理处理机可以模拟多个虚拟处理机(VP),当某个VP有访问请求时,计算不会终止,但VP的个数受限于通信带宽和上下文交换的开销。VP受限于网络容量,至多有L/g个VP。
(4)消息延迟不确定,但延迟不大于L。消息经历的等待时间是不可预测的,但在没有阻塞的情况下,最大不超过L。
(5)LogP模型鼓励编程人员采用一些好的策略,如作业分配,计算与通信重叠以及平衡的通信模式等。
(6)可以预估算法的实际运行时间。
LogP模型的不足之处
(1)对网络中的通信模式描述的不够深入。如重发消息可能占满带宽、中间路由器缓存饱和等未加描述。
(2)LogP模型主要适用于消息传递算法设计,对于共享存储模式,则简单地认为远地读操作相当于两次消息传递,未考虑流水线预取技术、Cache引起的数据不一致性以及Cache命中率对计算的影响。
(3)未考虑多线程技术的上下文开销。
全部0条评论
快来发表一下你的评论吧 !