并行与分布式计算 第一章 基本概念

并行与分布式计算 第一章 基本概念

1.1 并行与分布式计算的必然性

1.1.1数据流动视角的三面墙

  • GPU内存容量增加幅度有限(内存墙)
  • 链路带宽的提升远远落后于AI算力的提升(通信墙)
  • 数据增长的速度远超摩尔定律,但存储
    设备的速度(带宽或IOPS)远远落后于处理器(存储墙)

1.1.2 系统结构进化

冯诺依曼结构请添加图片描述

冯诺依曼结构特点

  • 结构上以运算器为中心
  • 指令由操作码和地址码组成
  • 程序指令预先存放在计算机存储器中,计算机按照程序指定的逻辑顺序执行指令,PC和分支指令控制执行顺序
  • 哈佛结构:在存储器中,指令和数据同等对待,均用二进制表示,即由指令组成的程序是可以修改的
  • 存储器每个单元大小固定,按顺序线性编址,按地址访问

指令集结构的进化

  • 指令集的功能
    · 复杂指令集计算机(CISC)
    · 精简指令集计算机(RISC) (当代计算机设计的基础)
  • 指令集的格式
    ·变长指令集计算机
    ·定长指令集计算机
  • 指令的地址空间和寻址方式
    ·多种灵活的寻址方式

计算结构进化

  • 单级计算 ->多级计算->网络计算->云计算
  • 指令字宽上升 8 16 32 64 向量指令
  • 并行度:单核 多核 众核
  • 摩尔定律开始失效
  • 工作频率上升
  • 控制复杂度上升

存储结构进化

  • 单级存储->多级存储->网络存储->云存储
  • 存储结构仍然坚挺的捍卫摩尔定律
  • 容量上升
  • 速度上升
  • 能耗下降
  • 存储结构仍然坚挺的捍卫摩尔定律

IO结构进化
请添加图片描述

1.2 并行计算

1.2.1 计算机系统结构的分类

Michael Flynn提出的Flynn分类法:

  • 单指令流、单数据流,Single Instruction Stream, Single Data Stream, SISD
  • 单指令流、多数据流,Single Instruction Stream, Multiple Data Stream, SIMD
  • 多指令流、单数据流,Multiple Instruction Stream, Single Data Stream, MISD
  • 多指令流、多数据流, Multiple Instruction Stream, Multiple Data Stream,
    MIMD

**单指令流单数据流,SISD(冯诺依曼)请添加图片描述

  • 每条指令操作单条数据
  • 指令集并行
  • 每个PU独占CU(CU控制单元 PU算数逻辑单元)
  • 流水线、动态调度、前瞻执行、超标量、多发射。

** 单指令流多数据流,SIMD(阵列处理机、向量)**
请添加图片描述

  • 每条指令操纵多条数据流,

  • 数据集并行

  • 多个PU可以私有存储,但要共享CU

  • 向量体系结构GPU
    多指令流多数据流,MIMD
    请添加图片描述

  • 每条指令操作单数据流

  • 任务级并行

  • 紧密耦合表现为线程级并行:多核,共享存储模式

  • 松散耦合表现为进程级并行:多处理器,消息传递模式
    多指令流单数据流,MISD(高性能、多机)
    请添加图片描述

  • 多条指令操作单数据流

  • 流式计算

  • 紧密耦合表现为片内流式计算:

  • 松散耦合表现为大数据工作流:

1.2.2 并行性

并行性: 计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。

  • 同时性:两个或两个以上的事件在同一时刻发生。
  • 并发性:两个或两个以上的事件在同一时间间隔内发生。

从处理数据角度,并行性等级从低到高

  • 字串位串:每次只对一个字的一位进行处理。 (最基本的串行处理方式,不存在并行性)
  • 字串位并:同时对一个字的全部位进行处理,不同字之间是串行的(开始出现并行性)
  • 字并位串:同时对许多字的同一位(称为位片)进行处理(具有较高的并行性)
  • 全并行:同时对许多字的全部位或部分位进行处理。(最高一级的并行)

从执行程序角度,并行性等级从低到高:

  • 指令内部并行:单条指令中各微操作之间的并行
  • 指令级并行:并行执行两条或两条以上的指令
  • 线程级并行:并行执行两个或两个以上的线程。(通常是以一个进程内派生的多个线程为调度单位)
  • 任务级或过程级并行:并行执行两个或两个以上的过程或任务(程序段)
  • 作业或程序级并行:并行执行两个或两个以上的作业或程序。

1.2.3 并行计算按开销分类

  • 计算密集型(Computing-Intensive):如大型科学工程计算与数值模拟;
  • 数据密集型(Data-Intensive):如数据仓库、数据挖掘、计算可视化;
  • 通信密集型(Communication-Intensive):如协同计算、流媒体服务

1.2.4 并行计算系统结构的应用领域

  • 高结构化的数值计算
  • 非结构化的数值计算
  • 实时多因素问题
  • 大存储容量和输入输出密集的问题
  • 图形学和设计问题
  • 人工智能

1.2.5 提高并行性的三个基本思想

  • 时间重叠(多部件流水线)引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。
  • 资源重复(多核)引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。(大模型)
  • 资源共享(软件并发)这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。如云计算中的虚拟机。

1.2.6 并行性的发展

单机系统中并行性的发展
在发展高性能单处理机过程中,起主导作用的是时间重叠原理。

实现时间重叠的基础:部件功能专用化

  • 把一件工作按功能分割为若干相互联系的部分;
  • 把每一部分指定给专门的部件完成;
  • 按时间重叠原理把各部分的执行过程在时间上重叠起来,使所有部件依次分工完成一组共同的工作。

在单处理机中,资源重复原理的运用

  • 多体存储器
  • 多操作部件:
    · 通用部件被分解成若干个专用部件,如加法部件、乘法部件、除法部件、逻辑运算部件等,而且同一种部件也可以重复设置多个。
    ·只要指令所需的操作部件空闲,就可以开始执行这条指令(前提是操作数已准备好)
    · 这实现了指令级并行。
  • 阵列处理机(并行处理机)设置许多相同的处理单元,让它们在同一个控制器的指挥下,同一条指令的要求,对向量或数组的各元素同时进行同一操作,就形成了阵列处理机

资源共享在单机的运用
在单处理机中,资源共享的概念实质上是用单处理机模拟多处理机的功能,形成所谓虚拟机的概念。每一个虚拟机的用户都感觉自己独占一台处理机。

多机系统中并行性的发展

  • 耦合度:反映多机系统中各机器之间物理连接的紧密程度和交互作用能力的强弱。“低耦合,高内聚”思想
  • 紧密耦合系统(直接耦合系统):在这种系统中,计算机之间的物理连接的频带较高,一般是通过总线或高速开关互连,可以共享主存。机器之间的相互作用是在变量一级上进行的。
  • 松散耦合系统(间接耦合系统):一般是通过通道或通信线路实现计算机之间的互连,可以共享外存设备(磁盘、磁带等)。机器之间的相互作用是在文件或数据集一级上进行的。

多机系统

  • 高可用 :结构鲁棒性(多活实例)、数据可靠(热备与副本)、可重构系统(多点协同)
  • 高性能:负载均衡(反向代理)、弹性计算(webservice)、低延迟(消息队列,分布式缓存)
  • 高可信:数据加密,身份认证,权限控制

1.2.7 并行计算的范式

相并行请添加图片描述
相并行(Phase Parallel)一个并行程序由一系列超级步组成,每个超级步也称为一个相。每个超级步内,各个进程执行独自的并行计算,然后继之以交互作用(包括通信同步等)。相并行也称为松散同步并行,优点是方便查错和性能分析,缺点是计算阶段和交互阶段不能重叠,难以维持负载平衡

分治并行
请添加图片描述

分治并行(Divide and Conquer Parallel)一个前导进程将其工作负载切分成多个小负载,并将它们指派给一些子进程,这些子进程并行地完成各自的计算,再由后续进程归并这些计算结果。这种切开和归并的过程很自然的导致递归,缺点是难以维持负载平衡。前导进程和后续进程可以是相同的进程,也可以是不同的进程,如MapReduce。

请添加图片描述

流水线并行
多个进程各自处在流水线的不同段同时重叠的执行操作已达到整体并行的效果。缺点是各个段的负载通常不同,难以维持负载平衡,负载不平衡导致流水线气泡,解决方法是重复设置瓶颈段,或者细分瓶颈段。

主-从并行
请添加图片描述

主-从并行(Master-Slave Parallel)一个主进程执行并行程序的串行部分,生成一些可以同时并行执行计算的子进程;当某一子进程完成计算后就报告给主进程,主进程再分配新的任务给它。这种并行又称为放牧式并行,主进程负责所有的协调工作,缺点是主进程易成为系统瓶颈,解决方法是多主多从,但又会引入多主协同的数据一致性问题。

工作池并行
![请添加图片描述](https://img-blog.csdnimg.cn/c00ee6a97ec14d8abf2741a53b62ff06.png工作池并行(Work Pool)开始时池中只有一件工作,任何空闲的进程均可以从池中取出它并执行,执行过程中可能产生一个或多个新的工作并把它们放回池中,以供别的空闲进程取用,当池中变空则并行程序结束。工作池是一个逻辑上的全局数据结构,可以是无序队列、有序队列、优先级多队列等等。企业级应用中通常采用的消息队列方案就是此类

并行计算的主要问题

  • 内存墙问题(Memory Wall)存储器访问能力与处理部件计算能力不平衡,造成处理器处于“饥饿”状态。
  • 功耗墙问题(Power Wall)
  • 生态墙问题

1.3 分布式计算

1.3.1为什么需要分布计算系统?

促进分布计算系统发展的两大技术:

  • 计算机硬件技术和软件技术的发展;
  • 计算机网络技术的发展。

** 两大技术改变了人们使用计算机的方式:**

  • 50年代,预约上机,占用全部资源;
  • 60年代,批处理技术;
  • 70年代,分时系统,多用户同时使用一台计算机;
  • 80年代,个人计算机,每个用户有专用计算机;
  • 90年代至今,通过计算机网络使用多台计算机。
    物理基础决定应用模式

多计算机系统环境带来的新问题:
多计算机系统环境带来的新问题:

  • 在使用上,用户必须知道本地对象和远程对象的区别
  • 在管理上,管理人员不能四处奔走进行文件备份等操作

解决上述新问题的方法是实现分布式操作系统
在分布计算系统中,多台计算机构成一个完整的系统,其行为类似一个单机系统。分布式操作系分布式操作系统是实现分布计算系统的核心。

1.3.2 分布计算系统的相关概念

什么是分布计算系统
分布计算系统是由多个独立的计算机系统相互连接而成的计算系统,从用户的角度来看它好像是一个集中的单机系统

分布计算系统是由多个相互连接的处理资源组成的计算系统,它们在整个系统的控制下可合作执行一个共同的任务,最少依赖于集中的程序、数据和硬件。这些处理资源可以是物理上相邻的,也可以是在地理上分散的。

分布计算系统定义的说明:

  • 系统是由多个处理器或计算机系统组成。
  • 两类结构:这些计算资源可以是物理上相邻的、由机器内部总线或开关连接的处理器,通过共享主存进行通信;这些计算资源也可以是在地理上分开的、由计算机通信网络(远程网或局域网)连接的计算机系统,使用报文(message)进行通信。
  • 这些资源组成一个整体,对用户是透明的,即用户使用任何资源时不必知道这些资源在哪里。
  • 一个程序可分散到各个计算资源上运行;
  • 各个计算机系统地位平等,除了受全系统的操作系统控制外,不存在主从控制和集中控制环节。

紧密耦合与松散耦合分布计算系统

  • 紧密耦合分布计算系统*请添加图片描述
  • 连接方式:内部总线或机器内互连网络
  • 处理资源间距离:物理上分散,相距很近;
  • 处理资源:多处理机;
  • 通信方式:共享存储器。

松散耦合分布计算系统结构
请添加图片描述

  • 连接方式:通信网络
  • 处理资源间距离:地理上分散,相距很远;
  • 处理资源:多计算机系统;
  • 通信方式:报文交换。

同构型与异构型分布计算系统

  • 对于同构型分布式系统而言,组成该系统的计算机的硬件和软件是相同的或非常相似的,同时组成该系统的计算机网络的硬件和软件也是相同的或非常相似的。
  • 对于异构型分布式系统而言,组成该系统的计算机的硬件或软件是不同的,或者组成该系统的计算机网络的硬件或软件也是不同的
    请添加图片描述

1.3.3分布计算系统的透明性

  • 分布计算系统的透明性:用户或程序员看不见网络的存在。这样从用户或程序员的角度看来,网络中的全部机器表现为一个,用户或程序员看不到机器的边界和网络本身。用户不必知道数据放在什么地方以及进程在何处执行
    分布计算系统的透明性表现:
  • 名字透明:名字透明指的是对象的命名在全局是唯一的,不管在什么地方访问该对象使用的名字都是一样的。这样一来,在系统中移动一个程序不影响它的正确性。
  • 位置透明:位置透明指的是资源的名字中不包含该资源的位置信息。这样一来,当该资源在系统中移动时,在资源名字保持不变的情况下,原有的程序都可正常运行。
  • 访问透明:访问透明。用户不用区分本地资源还是远程资源,访问本地资源和访问远程资源的方法是一样的。
  • 迁移透明。迁移透明指的是用户不知道一个资源或者他的作业是否迁移到另外一个位置。迁移透明需要名字透明的支持。
  • 复制透明。复制透明允许文件或其他对象的多个副本同时在系统中存在,但是这种情况对用户是透明的,对对象的修改应同时作用在对象的所有副本上。
  • 并发和并行透明。多个进程可能并发或并行访问同一个资源,或一个进程同时使用多个资源,在此情况下不会产生相互干扰和破坏。
  • 失效透明。系统中的某一部分失效时,整个系统不会失效,仍可正常运行。

分布计算系统具有透明性时有以下一些优点

  • 使软件的研制变得容易,因为访问资源的方法只有一种,软件的功能与其位置无关。
  • 系统的某些资源变动时不影响或较少影响应用软件。
  • 系统的资源冗余(硬件冗余和软件冗余)使操作更可靠,可用性更好。透明性使得在实现这种冗余的时候,各种冗余资源的互相替换变得容易。
  • 在资源操作方面,当把一个操作从一个地方移到若干其他地方时没有什么影响。

影响透明性的因素

  • 系统的异构性对透明性有一定的影响。
    ·通过网络服务松散集成。
    ·共享不同语言的程序。
    ·在已有的多个系统上加入前端软件。
  • 局部自治性对透明性的影响
    · 分布计算系统由分散在各地点的一批计算机组成,这些地点可能希望保持对处在该地点的机器的控制权,这种局部自治性限制了全局透明性
    ·资源控制方面。由分布计算系统连接的各机器是由不同的用户所操作,或一个机关的不同部门控制,希望在资源的使用上有较大的控制权。
    ·命名方面。即使同型号的机器,不同的用户也可能以不同的方式形成他们的目录
  • 网络互连对透明性的影响
    ·很多网络连接了不同厂商提供的不同系列的计算机
    · 现在的网络一般是直接从早期网络结构发展来的,其最重要的功能是通信,并未考虑到分布计算
    · 远程网络一般是很昂贵的资源,其特征是低带宽或高延迟

1.3.4 分布计算系统的体系结构与设计

分布计算系统的分层体系结构
分布计算系统可以分成若干逻辑层,层与层之间称为接口,每层有两个接口。层所提供的功能还可进一步分割成若干模块,模块之间也有接口。接口由以下三部分组成

  • 一套可以见到的抽象对象(资源)以及对这些对象所要求的操作和参数。
  • 一套控制这些操作的合法顺序的规则。
  • 操作和参数所需要的编码和格式化约定。

面向进程和报文传递的分布计算系统模型
请添加图片描述

分布计算系统由四层组成:第一层是由硬件或固件组成的硬核,第二层是分布式操作系统的内核,第三层是分布式操作系统的服务层,第四层是和用户有关的应用层。

基于中间件的分布计算系统请添加图片描述

分布计算系统的设计问题
各层或很多层所共有的 设计问题:

  1. 命名问题。
  2. 差错控制。
  3. 资源管理问题。
  4. 同步问题。
  5. 保护问题。
  6. 测试问题

1.4 量化原理

1.4.1 经常性原理

以经常性事件为重点对经常发生的情况采用优化方法的原则进行选择,以得到更多的总体上的改进

1.4.2 局部性原理

程序执行时所访问的存储器地址分布不是随机的,而是相对地簇聚。

  • 帕累托法则(Pareto‘s principle)
    程序执行时间的80%都是在执行程序中20%的代码。
    生活中的二八原则,最后的20%
  • 程序的时间局部性
    程序即将用到的信息很可能就是目前正在使用的信息(或刚刚用过不久的信息)。
  • 程序的空间局部性
    程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。

1.4.3 Benchmark原理

基准测试程序套件(Benchmark Suits) • 选择一组各个方面有代表性的测试程序,组成一个通用测试程序集合。避免了独立测试程序存在的片面性,尽可能全面地测试一个计算机系统在各个方面(跟其他典型计算机系统相比)的性能

1.4.4 Moore定律

单位面积的晶体管数量每18个月增加一倍,价格则相反

1.4.5 Dennard定律

在每一代技术中,晶体管密度增加一倍,功耗保持不变

1.4.6 Amdahl定律

描述了加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。

  • 可改进比例:在改进前的系统中,可改进部分的执行时间在总的执行时间中所占比例。(它是恒小于1的)百分比。
  • 部件加速比:可改进部分改进以后性能提高的倍数。它是改进前所需执行时间与改进后执行时间的比值。

1.4.7 计算开销评价模型

并行计算开销=计算开销+数据开销+通信开销+调度开销

• 通信时间用Tn表示;访存时间用Td表示;计算时间用Tc表示;
• 如果采用异步运行机制,
• 当Td<Tc时,Td会被Tc部分隐藏,此时总开销T=Tc;
• 当Td>Tc时,Tc会被Td部分隐藏,此时总开销T=Td;
• 当Td=Tc时,Tc与Td互相隐藏,此时具有最佳时间重叠性能。
• 因此, Tc与Td互相隐藏的比率,就是优化的关键点
• 通信开销p-p,数据开销p-m,都是点到点信息传输,
• 计算开销作用于p内计算部件,调度开销作用于p内调度部件,都是点内
• 并行计算开销=计算开销+传输开销

1.4.8 CPU性能公式

CPU时间 = IC ×CPI ×时钟周期时间
• IC( Instruction Count ):程序中指令的条数,取决于指令集结构和编译技术
• CPI(Cycles Per Instruction):每条指令执行的平均时钟周期数,取决于计算机组成和指令集结构

• 时钟周期时间:为系统时钟频率的倒数,取决于硬件实现技术和计算机组成

理想CPI为指令和数据访问 Cache 命中率为 100%时的 CPI则 CPI= CPI理想 + CPI停顿

猜你喜欢

转载自blog.csdn.net/weixin_61197809/article/details/134484490