BSP模型

英国计算机科学家Viliant在上世纪80年代提出的一种并行计算模型
BSP(Bulk Synchronous Parallel，整体同步并行计算模型)是英国计算机科学家Viliant在上世纪80年代提出的一种并行计算模型。
背景及简介
整体同步并行计算模型(Bulk Synchronous Parallel Computing Model，简称BSP模型)，又名大同步模型或BSP模型，由哈佛大学Viliant和牛津大学Bill McColl提出。
BSP的创始人是英国著名的计算机科学家Viliant，他希望像冯·诺伊曼体系结构那样，架起计算机程序语言和体系结构间的桥梁，故又称作桥模型(Bridge Model)。该模型使用了三个属性描述：模块(Components)、选路器（Router）和同步路障器执行时间L。
BSP 模型最早作为一 个并行计算领域中软件和硬件之间 的“ 过渡模型” 而提 出的。 它的设计目标是为 现有 和未来 可能出现的各种 并行体系结构提供一个独立于具体体系结构、 具有可扩展并行性能的软件开发的良好的理论模型基础。
一个 BSP 并行计算机由一组通过通讯网络互连的处理器——内存单元组成。它主要有三个部分:
一组具有局 部内存的分布式处理器;
全局数据通讯 网络 ;
支持所有处理单元间全局路障同步的机制。
BSP 模型 自Viliant提出后也经历了一定的发展变化。最初的 BSP 模型山采用随机内存映射和并行宽松度来支持直接的远程内存访问, 并且采用以L为间隔的周期性检测来进行路障同步。 这一“ 跛脚 ” BSP模型被认为是对 PRAM 模型 不切实际的假设的改进。目前, 我们所讨论 的 BSP 模型。, 一般不假设采用随机内存映射来 实现共享内存, 每个超步结束后 由各个处理器执行路障同步原语进行全局同步，来代替周期性的同步检测
BSP模型
BSP模型
BSP模型图需要做以下解释：1.Processors指的是并行计算进程，它对应到集群中的多个结点，每个结点可以有多个Processor；2.LocalComputation就是单个Processor的计算，每个Processor都会切分一些结点作计算；3.Communication指的是Processor之间的通讯。接触的图计算往往需要做些递归或是使用全局变量，在BSP模型中，对图结点的访问分布到了不同的Processor中，并且往往哪怕是关系紧密具有局部聚类特点的结点也未必会分布到同个Processor或同一个集群结点上，所有需要用到的数据都需要通过Processor之间的消息传递来实现同步；4.BarrierSynchronization又叫障碍同步或栅栏同步。每一次同步也是一个超步的完成和下一个超步的开始；5.Superstep超步，这是BSP的一次计算迭代，拿图的广度优先遍历来举例，从起始结点每往前步进一层对应一个超步。6.程序该什么时候结束呢？这个其实是程序自己控制，一个作业可以选出一个Proceessor作为Master，每个Processor每完成一个Superstep都向Master反馈完成情况，Master在N个Superstep之后发现所有Processor都没有计算可做了，便通知所有Processor结束并退出任务。
Hama的BSP实现原理
ApacheHama可以说是一个利用Hadoop的基础设施自封装的一个BSP计算模型的实现，它虽然跟Hadoop有关但是不使用Hadoop集群，而是用的自身的集群。依赖ZooKeeper分布式锁作为作业的调度控制，可以用HDFS/Local/HBase等文件系统作输入输出。
Hama的BSP实现原理
(一)基本结构
S和Zookeeper都可以是独立的集群。启动从BSPMaster开始，如果是master会启动BSPMaster、GroomServer两个进程，如果只是计算结点则只会启动GroomServer，启动/关闭脚本都是Master机器远程在GroomServer机器上执行。下面分别解释下几个基本概念：
BSPMaster即集群的主，负责了集群各GroomServer结点的管理与作业的调度，就我所知它还存在单点的问题。相当于Hadoop的JobTracker或HDFS的NameNode；
BSPGroomServer即计算结点，GroomServer是物理上的概念，也相当于是BSPPeer的宿主，负责了BSPPeer对外的消息通讯、机器状态报告等，相当于Hadoop的TaskTracker或HDFS的DataNode，在集群中往往和DataNode一一对应的部署（底层机制就是Hadoop的TaskTracker）；
BSPPeer即BSP中的Processor，当作业过来的时候，任务jar包和配置会被同步过来，GroomServer就启动一个独立JVM进程来执行一个BSPPeer实例，就像TaskTracker的作法一样。BSPPeer是分布式计算中的逻辑计算单元；
BSPJobClient作业客户端，职责是将作业所需jar以及配置提交给BSPMaster；
Zookeeper分布式锁。用于实现BarrierSynchronisation机制。在ZK上，进入BSPPeer主要有进入Barrier和离开Barrier操作，所有进入Barrier的Peer会在zk上创建一个EPHEMERAL的node（/bsp/JobID/SuperstepNO./TaskID），最后一个进入Barrier的Peer同时还会创建一个readynode(/bsp/JobID/SuperstepNO./ready)，Peer进入阻塞状态等待zk上所有task的node都删除后退出Barrier。
(二)输入与输出
Hama的输入输出文件格式、分块、文件传输等机制都跟HDFS是一样的，也都是K-V对，派生自Writable。输入的K-V对为结点（VertexWritable）和邻接结点集合(VertexArrayWritable)。
(三)消息通讯
BSPWW库函数
图计算涉及到大量消息传递，Hama不完全是实时传送，消息的传输发生在Peer进入同步阶段后，并且对同一个目标GroomServer的消息进行了合并，两个物理结点之间每一次超步其实只会发生一次传输。
(四)图算法运用
Hama其实只提供了一个图计算框架，算法都是需要自己去实现的。理想的情况是图文件分块，Peer尽可载入本地文件作计算，这样即加快了图载入时间也减少了网络传输。不过事实是可能不能这样假设，为使结构尽更简单，对图的切割往往只是将结点用简单的Hash算法分布到Peer上，不能对图作任何局部聚类的假设。
典型BSP程序
void spmd.start(int nprocs)
{
    bsp_begin(nprocs);
        printf("\nStarted%d out of%d.",bsp_pid(),bsp_nprocs());
    bsp_end();
 }
 int nprocs;
 void main()
 {
     bsp_init(spmd_start);
     nprocs=ReadInteger();
     printf("\n Try to spawn%d BSP prcess",nprocs);
     
     spmd_start (nprocs);
     printf("I'm prcess%d",bsp_pid());
  }
结语与展望
近年来,BSP模型的研究在国际上越来越受到人们 的重 视, 但是它 的研究尚处于起步阶段。 相对于传统串行计算,BSP 模型尚有许多问题有待进一步研究, 例如 BSP 程 序求精、程序变 换优化技术、 容错性、 模块化问题 等。 作为一个独立于体系 结构、 具有可扩展并行性能的并行程序模型,BSP模型无疑将 在并行计算领域具有重要意义。