计算模型

所谓计算模型实际上就是硬件和软件之间的一种桥梁,我们可以借助它来设计分析算法,在其上髙级语言能被有效地编译且能够用硬件来实现。在串行计算时,冯•诺依曼机就是一个理想的串行计算模型,在此模型上硬件设计者可设计多种多样的冯•诺依曼机而无须考虑那些将要被执行的软件;另一方面,软件工程师也能够编写各种可在此模型上有效执行的程序而无须考虑所使用的硬件。

不幸的是,在并行计算时,尚未有一个类似于冯•诺依曼机的真正通用的并行计算模型。现在流行的计算模型要么过于简单、抽象(如PRAM);要么过于专用(如互连网络模型和VLSI计算模型)。因而急需发展一种更为实用、能够较真实反映现代并行机性能的并行计算模型。我们在之前的文章中已经讨论过PRAM模型。读者可以参考我的博客文章《PRAM模型与Amdahl定律》

简而言之,PRAM模型,即并行随机存取机器,也称之为共享存储的SIMD模型,是一种抽象的并行计算模型。在这种模型中,假定存在着一个容量无限大的共享存储器;同时存在有限(或无限)个功能相同的处理器,且其均具有简单的算术运算和逻辑判断功能;在任何时刻各处理器均可通过共享存储单元相互交换数据。根据处理器对共享存储单元是否可以同时读、同时写的限制, PRAM模型又可分为:EREW、CREW、CRCW等几种类型。

下面本文将介绍另外一种并行计算模型——BSP模型


BSP模型

BSP(Bulk Synchronous Parallel)模型,字面的含义是 “大”同步模型,它最早由Leslie和Valiant 在 1990 年提出。作为计算机语言和体系结构之间的桥梁,BSP使用下面三个参数(或属性)来描述的分布存储的多处理器模型:

  1. 处理器/储器模块: A BSP abstract machine consists of a collection of p abstract processors, each with local memory, connected by an interconnection network.
  2. 执行以时间间隔L为周期的所谓路障同步器:the time to do a barrier synchronization.
  3. 施行处理器/储器模块对之间点到点传递消息的选路器: the rate at which continuous randomly addressed data can be delivered

所以BSP模型将并行机的特性抽象为三个定量参数pgL,分别对应于处理器数、选路器吞吐率(亦称带宽因子)、全局同步之间的时间间隔。

BSP模型中的计算行为:在BSP模型中,计算过程是由一系列用全局同步分开的周期为L的超级步(supersteps)所组成的。A (abstract) program consists of pp processes or threads distributed over nn processors and is divided into supersteps。在各superstep中,每个处理器均执行局部计算,并通过选路器接收和发送消息;然后做一全局检查,以确定该超级步是否已由所有的处理器完成:若是,则前进到下一超级步,否则下一个LL周期被分配给未曾完成的超级步。
每个superstep都包含:

  • a computation where each processor (executing the threads assigned to it) uses only locally held values;
  • a global message transmission from each processor to any subset of the others;
  • a barrier synchronization.

在superstep结束时,the transmitted messages become available as
local data for the next superstep。下图是BSP里一个superstep中的计算模式示意图:

BSP模型的性质和特点:BSP模型是个分布存储的MIMD计算模型,其特点是:

  • 它将处理器和选路器分开,强调了计算任务和通信任务的分开,而选路器仅施行点到点的消息传递,不提供组合、复制或广播等功能,这样做既掩盖了具体的互连网络拓扑,又简化了通信协议; With the program divided into supersteps it is easier to provide performance guarantees than with unregulated message-passing systems. Because communication all happens together at the end of the computation phase of the superstep, it is possible to perform automatic optimisation of the communications pattern. This is particularly important on machines where the start-up cost of a communication is high: if during a superstep processor i sends two messages to processor j , then it will often be quicker to bundle the messages together and send the bundle from
    i to j than it would be to send each message separately. Similarly, the communication pattern can be reshuffled to avoid network congestion, and intelligent routing techniques can be used to detect and avoid hot spots。
  • 釆用路障方式的以硬件实现的全局步是在可控的粗粒度级,从而提供了执行紧耦合同步式并行算法的有效方式,而编程开发人员并无过分的负担,BSP model eliminates the need for programmers to manage memory, assign communication and perform low-level synchronization. Threads of the program are assigned (typically in a randomized way) by the machine to the processors.;
  • 在分析BSP模型的性能时,假定局部操作可在一个时间步内完成,而在每一个superstep中,一个处理器至多发送或接收 h 条消息(称为h-relation)。 假定 ss 是传输建立时间,所以传送 h 条消息的时间为 gh+s,如果gh≥2sgh\geq 2s,则 L 至 少应 ≥gh\geq gh。很清楚,硬件可将L设置尽量小(例如使用流水线或宽的通信带宽使 g尽量小),而软件可以设置L之上限(因为L愈大,并行粒度愈大)。在实际使用中,g可定义为每秒处理器所能完成的局部计算数目与每秒选路器所能传输的数据量之比。如果能合适地平衡计算和通信,则BSP模型在可编程性方面具有主要的优点,它可直接在BSP模型上执行算法(不是自动地编译它们),此优点将随着g 的增加而更加明显;
    • 为PRAM模型所设计的算法,均可釆用在每个BSP处理器上模拟一些PRAM处理器的方法实现之。This leads to optimal efficiency (i.e., within a constant factor performance of the PRAM model) provided the programmer writes programs with sufficient parallel slackness。理论分析证明,这种模拟在常数因子范围内是最佳的,只要并行宽松度(Parallel Slackness),即每个BSP处理器所能模拟的PRAM处理器的数目足够大(When programs written for p threads are run on n processors and p >> n (e.g. p = n log n) then there is some parallel slackness)。在并发情况下,多个处理器同时访问分布式的存储器会引起一些问题,但使用散列方法可使程序均匀地访问分布式存储器。在 PRAM-EREW情况下,如果所选用的散列函数足够有效,则LL至少是对数的,于是模拟可达最佳,这是因为我们欲在拥有pp个物理处理器的BSP模型上,模拟 v≥plogpv \geq p\log p 个虚拟处理器,可将v/p≥logpv/p\geq \log p 个虚拟处理器分配给每个物理处理器。在 一个supersetp内,vv 次存取请求可均匀摊开,每个处理器大约 v/pv/p 次,因此机器执行本次超级步的最佳时间为 O(v/p)O(v/p),且概率是高的。同祥,在vv个处理器的 PRAM-CRCW模型中,能够在 pp 个处理器(如果 v=p1+ϵ,ϵ>0v = p^{1+\epsilon},\epsilon>0 )和L≥logpL\geq \log p 的BSP模型上用 O(v/p)O(v/p) 的时间也可达到最佳模拟。
    • BSP成本分析(Computational analysis):Consider a BSP program consisting of S supersteps. Then, the execution time for superstep i is

      Tsuper=maxprocesseswi+maxghi+L

      T_{super}=\max_{processes}{w_i}+\max{gh_i}+L
      其中, wiw_i是进程 ii(processiprocess_i)的局部计算函数, hih_i是进程 ii发送或接收的最大数据包,gg是带宽的倒数(时间步/数据包), LL是路障同步时间(注意我们不考虑I/O的传送时间)。所以,在BSP计算中,如果使用S个超级步,则总运行时间为:

      TBSP=∑i=0S−1wi+g∑i=0S−1hi+SL

      T_{BSP}=\sum_{i=0}^{S-1}w_i+g\sum_{i=0}^{S-1}h_i+SL
      Call wiw_i and W the work depths of the superstep and the program, respectively。其中,

      W=∑i=0S−1wi

      W=\sum_{i=0}^{S-1}w_i


      参考文献

      【1】陈国良,并行计算——结构 • 算法 • 编程,高等教育出版社,2003
      【2】陈国良,并行算法的设计与分析(第3版),高等教育出版社,2009

并行计算中的BSP模型相关推荐

  1. fluent p1模型_FLUENT中的辐射模型

    1 . FLUENT 中需要考虑热辐射的情况 ( 1 )火焰辐射热传递 ( 2 )表面对表面的辐射加热或冷却 ( 3 )辐射.对流和导热耦合传热 ( 4 ) HV AC 应用中透过窗户的热辐射,以及汽 ...

  2. SharePoint 2010中的客户端模型

    1.介绍 客户端模型是SharePoint 2010才提供的,可以更灵活的在任何客户端设备中操作SharePoint对象,在2007版本中没有客户端模型,2010中有三种客户端模型JavaScript ...

  3. 奥卡姆剃刀是什么?机器学习实践中那些学习模型或者那些评估指标践行了这一理论?

    奥卡姆剃刀是什么?机器学习实践中那些学习模型或者那些评估指标践行了这一理论? 奥卡姆剃刀:无无必要,勿增实体. 奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数 ...

  4. CUDA是Nvidia开发的一种并行计算平台和编程模型,用于在其自己的GPU(图形处理单元)上进行常规计算

    https://baike.baidu.com/item/CUDA/1186262?fr=aladdin CUDA是Nvidia开发的一种并行计算平台和编程模型,用于在其自己的GPU(图形处理单元)上 ...

  5. 理论与实践中的CNN模型结构,如何引领深度学习热潮

    摘要: 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合.卷积神经网络(CNN)是深度学习框架中的一个重要算法,本文介绍了CNN主流模型结构的演进过程,从一切的开始Le ...

  6. hive中的绣花模型_hive建模方法

    概述数据仓库这个概念是由 Bill Inmon 所提出的,其功能是将组织通过联机事务处理(OLTP)所积累的大量的资料和数据,通过数据仓库理论所特点有的信息存储架构,进行系统的分析整理,利用各种的分析 ...

  7. WPF 3D中多个模型如何设置某一个在最前?

    原文:WPF 3D中多个模型如何设置某一个在最前? 问题:我们的模型包括导入的3D solid模型和axis坐标轴模型,当模型旋转的时候,3D会将axis挡住. 期望:axis一直在最前面,不会被3D ...

  8. Qt中的自定义模型类

    文章目录 1 Qt中的通用模型类 1.1 Qt中的通用模型类 1.2 Qt中的变体类型QVariant 2 自定义模型类 2.1 自定义模型类设计分析 2.2 自定义模型类数据层.数据表示层.数据组织 ...

  9. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

最新文章

  1. 微信开发文档笔记整理(一)
  2. 【黑马程序员 C++教程从0到1入门编程】【笔记6】C++核心编程(文件操作)
  3. android开发 bug问题解决:Only the original thread that created a view hierarchy can touch its views
  4. java2的7次方怎么表示_静态市盈率要怎么看?
  5. es数据频繁的更新_es之文档更新过程中并发冲突问题
  6. Docker技术入门与实战
  7. java报错空指针异常_springboot全局异常捕获,真香
  8. R语言爬虫系列6|动态数据抓取范例
  9. spring源码:idea搭建源码环境
  10. 自己做量化交易软件(26)小白量化事件回测之MetaTrader5自动回测
  11. astrolog php,如何在苹果MAC上使用Astrolog32 zet9等占星软件
  12. div设置半透明效果
  13. memcmp函数使用详解
  14. Ubuntu下切换root用户认证失败解决方案
  15. vue + ElementUI + BMap 百度地图实现地图选址定位并获取地址信息
  16. 【课程设计】Java Web 学生成绩管理系统
  17. docker-elastic7.9.3集群搭建并开启用户验证
  18. 20万、50万、100万的算法工程师,有什么区别?
  19. Orz 终于有了自己的博客地址
  20. ubuntu20.04安装opencv4.7

热门文章

  1. IP MAC捆绑原理及缺陷的讨论
  2. C++获取、设置鼠标坐标并移动鼠标
  3. Linux中安装苹果系统
  4. 装修细节注意问题 装修细节有哪些
  5. Mac 在启动时显示的禁止符号、问号、空白屏幕、锁定等各种界面图标说明
  6. node 拦截器拦截请求下载电子书以及等待前端渲染操作、浏览器操作
  7. GBase 8c产品高级特性介绍
  8. wxpython之StaticText最全介绍(持续更新)
  9. 安卓listview下拉刷新_iPhone上被吹爆的良心App,安卓手机终于能用上了
  10. libgdx 打飞机游戏实现教程