所谓并行性(parallelism)是指计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。只要在时间上相互重叠,就存在并行性。它包括同时性与并发性。
同时性(simultaneity):两个或以上的事件在同一时刻发生。
并发性(concurrency):两个或以上的事件在同一时间间隔发生。
从计算机系统中执行程序的角度看,并行等级从低到高分为:
指令内部:一条指令内部各个微操作之间并行执行 主要取决于硬件和组成的设计
指令之间:多条指令并行执行 主要处理好指令之间存在的相互关联
任务或进程(线程)之间:多个任务或程序段并行执行 主要如何分解任务和同步
作业或程序之间:多个作业或多道程序的并行执行 主要在于并行算法,怎样将有限的硬件,软件资源同时有效地分配给正在解题的多个程序。
多处理器
多计算机
网格计算
从计算机系统中处理数据的并行性来看,并行等级从低到高分为:
位串字串:同时只有一个字的一位进行处理,这通常指传统的串行单处理机,没有并行性
位并字串:同时对一个字的全部位进行处理
位片串字并:同时对许多个字的同一位(称位片)进行处理
全并行:同时对许多字的全部或部分位组进行处理。
从计算机加工信息的各个步骤和阶段看,并行等级分为:
存储器操作并行:可用单体单字,多体单字,多体多字在一个存储周期内访问多个字。
处理器操作步骤并行:如指令流水线技术。
处理器操作并行:通过重复设置大量处理单元,让它们在同一控制器控制下按同一指令要求对向量,数组中各元素同时操作,如阵列机。
指令,任务,作业并行:较高级的并行。
并行性开发途径:
时间重叠:在并行性的概念中引入时间元素,让多个处理过程在时间相互错开,轮流地使用同一套硬件设备的各个部分,加快硬件周转来赢得速度。
资源重复:在并行概念中引入空间元素,通过重复设置硬件资源来提高可靠性或性能。
资源共享:用软件方法让 多个用户按一定时间顺序轮流使用同一套资源来提高资源利用率,相应地也就提高了系统的性能,如多道程序分时系统就是通过共享CPU,主存等来提高资源利用率。
并行技术:
多道程序分析系统
多功能部件
流水线单处理机
向量机
阵列机
相联处理
超标量处理机
超流水线处理机
超长指令字计算机
多微处理机系统
数据流计算机
大规模并行处理(MPP):多处理机,多计算机等
多机系统的耦合度
多机系统包括多处理器机系统和多计算机系统
多处理器机系统是由多台处理机组成的单一系统,各个处理机都有自己的控制部件,可带本地存储器,能执行各自的程序,但都受逻辑上同一的操作系统控制。
多计算机系统则是由多台独立的计算机组成的系统。各计算机分别在逻辑上独立的操作系统控制下运行。
一般用耦合度反映多机系统中各个机器之间物理连接的紧密度和交叉作业能力的强弱。
最低耦合:各种脱机处理系统是最低耦合系统,除了通过某种存储介质外,各计算机之间无物理连接,也无共享的联机硬件资源。
松散耦合:如果多台计算机通过通道或通信线路实现互连,共享某些如磁盘等外围设备,以较低频带在文件或数据集一级相互作用,则这种系统被称为松散耦合系统,也叫间接耦合系统。难以满足任务一级的并行处理,而适合于分布式处理。
紧密耦合:如果多台计算机经总线或高速开关互连,共享主存,有较高的信息传输速率,可实现数据集一级,任务级,作业级并行,则称此系统为紧密耦合系统,或直接耦合系统。
加快机器语言的解释可以从两个方面实现
1.选用更高速的器件(从硬件方面)
2.通过控制机构同时解释两条,多条指令(从系统结构)
采用流水线技术进行指令重叠
指令的重叠解释是在解释第k条指令的操作完成之前,就可以解释第k+1或者更多条指令。重叠不能加快(有时可能减慢)一条指令的解释,却能加快多条指令的解释。
那么为了实现重叠,对计算机组成有那些要求呢?
1.在取下一条指令和分析当前指令取操作数时不能有访存冲突。
解决办法:
(1)让操作数和指令分别存放于两个独立编址且可同时访问的存储器中,但这增加了主存总线控制的复杂性和软件设计的麻烦。
(2)让指令和操作数混存,但采用多体交叉主存结构,只要重叠的指令在解释时同时访存而访存的地址在不同的存储体内,就可以并行运行。
(3)让重叠的指令分布于不同的存储体太过理想化,于是可以增设采用先进先出方式工作的指令缓冲寄存器(简称指缓),由于计算时大量中间结果都在通用寄存器中,因此主存并非满负荷工作,设置指缓可乘主存有空时,预取下一条或多条指令存于指缓中。
2.对于重叠部分,每个部分要采用独立的机构执行,不然它们无法并行。而且还要硬件上解决控制上的同步。由于各个部件经过的时间会有所不同,为平滑这些子部件的速度差,一般在它们之间设有锁存器。所有锁存器都受同一时钟信号控制来实现各个子部件信息流的同步推进。
3.解决相关问题
(1)转移指令的处理,可以采用延迟转移技术
(2)指令相关处理,在程序运行过程中,不许修改指令
(3)主存空间数相关处理,主存空间数相关是相邻两条指令之间出现对主存同一单元要求先写而后读的关联。可以采用推后读法。
(4)通用寄存器组相关的处理 可以采用推后分析和设置相关专用通路。
流水线的扩展
向下扩展:指的是把子过程进一步细分,让每个子过程经过的时间都同等程度地减少,吞吐率就会进一步提高。
向上扩展:在多个处理机之间流水。多个处理机串行地对数据集处理,各处理机专门完成其中的一个任务。
流水处理的级别有
部件级 指构成部件内的各个子部件间的流水。如浮点运算的流水,cache内的流水。
处理机级 是指构成处理机的各部件之间的流水。指令流水线。
系统级 是指构成计算机系统的多个处理机之间的流水,也称宏流水。
按流水的功能分:
单功能流水:只能实现单一功能的流水。
多功能流水:指同一流水线的各个段之间可以有多种不同连接方式以实现多种不同的功能和运算。
按多功能流水线的各段是否允许同时用于多种不同功能连接流水,可把流水分为静态流水和动态流水。
静态流水:在某一时间内各段只能按一种功能连接流水,只有等流水线全部流空后,才能切换成按另一种功能连接流水。
动态流水:各个功能段在同一时间内可按不同运算或功能连接。
从机器表示的数据可分为标量流水线和向量流水线。标量流水线的主要性能
1.吞吐率Tp:吞吐率是流水线单位时间理能流出的任务数或结果数。
2.加速度Sp:加速比表示流水方式相对于非流水顺序方式速度提高的比值。
3.效率:流水线的效率是指流水线中设备的实际使用时间占整个运行时间之比,也称为流水线设备的时间利用率。
指令级的高度并行
1.超标量处理机:采用多指令流水线,每个时间△t同时流出m条指令(称为度m)。
2.超长指令字(VLIW):指令字长可达数百位,多个功能部件并发工作,共享大容量寄存器堆。在编译时,编译程序找出指令潜在的并行性,将多个功能并行执行的不相关或无关的操作先压缩组合在一起,形成一条有多个操作段的超长指令。
3.超流水线处理机:超流水线是指流水线长,而△t时间特别短的流水处理机。
4.超标量超流水线处理机:是将超标量流水线与超流水线相结合。
陈列处理机:
是将大量重复设置的处理单元(PE)按一定方式互连成阵列,在单一控制部件(CU)控制下,对各自所分配的不同数据并行执行同一指令规定的操作,是操作机并行的SIMD计算机。这种处理机主要用于对大量向量,数组要求高速运行的场合。它属于按资源重复技术发展出来的向量(数组)处理机。
多处理机:
多处理机是指有两台及以上的处理机,共享I/O子系统,机间经共享主存或高速通信网络通信,在操作系统控制下,协同求解大而复杂问题的计算机系统。它属于MIMD。
使用多处理机有两个目的
1.通过多台处理机对多个作业,任务进行并行执行来提高求解大而复杂的问题,从而提高系统的整体性能。
2.使用冗余的多个处理机,通过重新组织来提高系统的可靠性,适应性和可用性。
多处理机是属于多指令流多数据流系统。
因此在硬件结构上,它的多个处理机要用多个指令部件分别控制,通过机间互连网络实现异步通信。
在算法上,不限于向量,数组处理,还要挖掘和实现更多通用算法中隐含的并行性。
在系统管理上,要更多地依靠操作系统等软件手段,有效地解决资源分配和管理,特别是任务分配,处理机调度,进程的同步和通信等问题。
多处理机的并行性主要体系于指令的外部,使得程序并行性的识别比较困难。它要解决如何最大限度地开发系统的并行性,必须综合研究算法,程序语言,编译,操作系统,指令以及硬件。
多处理器要研究如何用专门的指令或语句来控制并行任务的派生。根据并发任务之间的数据相关或控制依赖关系,又要研究用何种手段来并行任务(进程)的同步。
多处理器还要研究如何将一个大的作业或任务进行分割,合理选择任务的粒度大小和各个任务粒度大小的均匀性,使并行度高,又要让额外的派生,汇合,通信等辅助开销小。
紧耦合多处理
紧耦合多处理是通过共享主存实现处理机间通信的,其通信速度受限主存频宽。各处理机与主存经互连网络连接。处理机间通过中断信号来实现进程同步。
松耦合多处理机
松耦合多处理机中,每台处理机都有一个容量较大的局部存储器,用于存储经常用的指令和数据,以减少紧耦合系统存在的中访存冲突。
不同处理机间或通过通道互连实现通信,以共享某些外部设备;或通过消息传递系统(MTS)来交换信息,这是各处理机可带自己的外设。
大规模并行处理机MPP
MPP的系统软件要求能让用户像使用单处理机那样来使用MPP,是将数百至数千个高性能,低成本的微处理器用专门的网络互连,可以构成SIMD,MIMD系统。
集群系统
集群系统是将多个高性能的工作站或高档微型计算机,使用高速的通信网络加以互连组成的系统。主机间采用消息传递。
相关(dependence)是指两条指令之间存在某种依赖关系。确定程序中指令之间存在什么样的相关,对于充分发挥流水线的效率有重要意义。
相关有3种类型:数据相关,名相关,控制相关
1.数据相关(data dependence):对于指令i和j,指令j直接或间接使用指令i的结果,侧称指令j与指令i数据相关。
2.名相关(name dependence):是指两条指令使用了相同的寄存器或主存单元单元,但他们之间没有数据相关。
(1)反相关,如果指令j写的名和指令i读的名称相同,则称i与j发生了反相关。
(2)输出相关,如果指令i与j写相同的名,则称他们发生了输出系统。
(3)控制相关,是指由分支指令引起的相关。
流水线冲突(pipeline hazards)是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。
1.结构冲突(structural hazards)因硬件资源满足不了指令重叠的要求而发生的冲突。解决办法是将功能单元流水线化或重复资源。
2.数据冲突(data hazards)当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突。采用延迟技术(会造成停顿),采用硬件使用定向技术,编译时采用指令调度技术(将由冲突的指令顺序调整)
3.控制冲突(control hazards)流水线遇到分支指令和其它会改变pc值的指令所引起的冲突。采用延迟转移技术,采用分支预取技术
指令调度
1.静态调度(static scheduling),静态调度的流水线依靠编译器对代码进行静态调度,以较少相关好冲突。之所以称为静态调度是因为它不是在程序执行的过程中,而是在编译期间进行代码调度和优化。它通过把相关的指令拉开距离来减少可能产生的停顿。
2.动态调度(dynamic scheduling),是在程序的执行过程中,依靠专门硬件对代码进行调度。动态调度能在保持数据流和异常行为的情况下,通过硬件对指令执行顺序进行重新安排,较少数据相关导致的停顿。
目前流行的高性能并行计算机系统结构通常有5类:并行向量处理机(PVP),对称多处理机(SMP),大规模并行处理机(MPP),分布共享存储(DSM)多处理机,机群(cluster)。
多处理机
对称式共享存储器多处理机(SMP),采用集中式共享存储器结构,有时也被称为UMA结构。处理器的个数较少,可通过大容量的Cache和总线互连使各处理器共享一个单独的物理存储器。
相对于SMP,还可以使用分布的物理存储器,支持规模较大的多处理机系统。为支持较多的处理器,存储器必须分布到各个处理器上,而不是采用集中式的存储器。
大规模的多处理器必须采用多个存储器,它们在物理上分布于各个处理结点中。在各个处理机之间通信的实现上,可有两种选择方案。
第一种是分布式共享存储器(DSM),通过共享地址空间来进行的,就像对称共享存储器结构中的一样。把物理上分离的多个存储器作为一个逻辑上共享的存储空间进行编址,这样任何一个处理器就可以访问该共享空间中的任何一个单元。
DSM计算机与UMA相反,因此也被称为NUMA(Non-Uniform Memory Access)。
另一种是把整个地址空间由多个独立的地址空间构成,它们在逻辑上也是独立的,远程的处理器不能对其直接寻址。在这种计算机的不同处理器中,相同的物理地址指向的是不同的存储器。不同的处理结点经过专门的网络互连。而现在的这种计算机多以机群形式存在。
对于共享地址空间的计算机,可利用load和store指令中的地址隐含地进行数据通信。
而对于多个地址空间独立的计算机,数据通讯需要通过处理器间显示地传递消息来完成。因而也常称为消息传递处理机。消息可以看出是一个远程进程调用(Remote Process Call,RPC)。
消息可以是同步的,也可以是异步的。
cache一致性
在多个处理器中用来维护一致性的协议称为Cache一致性协议(Cache-coherent protocol)。实现Cache一致性协议的关键是跟踪共享数据块的状态。
目前有两类协议,它们采用了不同的共享数据状态跟踪技术。
1.目录法(directory):物理存储器中数据块的共享状态被保存在一个称为目录的地方。
目录是一种专用的数据结构,用于记录可进入cache的每个数据块的状态,哪些处理器有该块的副本以及是否被修改过等信息。
2.监听法(snooping):当物理存储器中的数据块被调入cache中时,其共享状态信息与该数据块一起呗放到该cache中,系统中没有集中的状态表。
这些cache通常连载共享存储器的总线上,各个cache控制器通过监听总线来判断它们是否有总线上请求的数据块。
1.写作废发,把其他CACHE中 的副本作废。
2.写更新法,播写法,即一个cache写时,对其他cache中的副本同时进行更新。
在多处理机中实现同步,所需的主要功能是一组能以原子操作的方式读出并修改存储单元的硬件原语。
有了原子操作,就可以采用多处理机的一致性机制来实现旋转锁(spin locks)。
旋转锁是指处理器不停地请求获得使用权的锁。处理器围绕该锁反复执行循环程序,直到获得该锁。旋转锁适合锁占用的时间少,加锁过程延迟小的场合。
在无cache一致性机制的条件下,最简单的办法是锁变量保存在存储器中,处理器可以不断地通过一个原子请求其使用权。
若计算机支持cache一致性,就可以将锁调入cache,并通过一致性机制使锁保持一致。
于是多个处理器就可以通过锁来进行同步。
线程级并行(Thread Level Parallelism, TLP)
同时多线程技术(Simultaneous MultiThreading,SMT)是一种在多流出,动态调度的处理器上同时开发线程级并行和指令级并行的技术,它是多线程技术的一种改进。
由于各自相互独立线程的多条指令可以同时流出,而不用考虑他们之间的相互依赖,其相互依赖较少即便有也可以采用动态调度来解决。
机群计算机
机群是一种价格低廉,易于构建,和扩缩性极强的并行计算机系统。它由多台同构或异构的独立计算机通过高性能网络或局域网互连在一起,协调完成特定的并行计算任务。从用户的角度看,机群就是一个单一,集中的计算资源。构成机群的每台计算机都被称为一个结点。每个结点都是一个完整的系统,拥有本地磁盘和操作系统,可以作为一个单独的计算资源供用户使用。机群的各个结点一般通过商品化网络连接在一起,网络接口与结点的I/O总线以松散耦合的方式相联。
由于机群系统结构松散,结点独立性强,网络连接复杂,造成机群系统管理不便,难于使用。流行的方法是在各个结点的操作系统之上再构建一层操作系统来管理整个机群,这就是机群操作系统。
机群操作系统除了硬件管理,资源共享,网络通信等功能外,还必须实现单一系统映像(Single System Image,SSI),它是机群的一个重要特征,正是通过它才使得机群在使用,控制,管理和维护上更像一个工作站。
SSI的四重含义
1.单一系统,尽管系统中有多个处理器,用户仍然把整个机群视为一个单一的计算机系统来使用。
2.单一控制,逻辑上,最终用户或系统用户使用的服务都来自机群中唯一一个位置。
3.对称性,用户可以从任意一个结点上获得机群服务,各个结点是对称的。
4.位置透明,用户不必了解真正提供服务的物理设备的具体位置。
一个简单的机群系统中的SSI至少提供3种服务
1.单一登录(single sign on)即用户可以通过机群总任意一个结点登录。
2.单一文件系统(single file system),在机群系统中,有一些对整个机群所有结点而言都相同的软件,它们没有必要在每一个结点上重复安装。
3.单一作业管理系统(single job management system)用户可以透明地从任一结点提交作业,作业可以以批处理,交互或并行的方式被调度执行。
此外,并行编程模型以及相关的并行编程环境也是机群系统不可缺少的软件。并行编程工具有
MPI(Message Passing Interface),是一个基于消息传递的并行编程工具。
机群的分类
根据组成机群的各个结点和网络是否系统,机群可分为同构和异构。
根据结点是PC还是工作站分为PC机群和工作站机群。
根据机群的使用目的分为高可用性机群(某些结点出现故障,仍能继续对外提供服务),负载均衡机群(根据结点工作状况进行任务分配),高性能计算机机群(提高系统性能,降低成本)。
单CPU指令执行优化
虽然时钟速度可以进一步提高,但是信号在数据通路上的传播速度却受制于光速难以进一步提高,因此无法通过不断提高时钟速度来提高CPU的速度。
针对无条件转移指令:可以在延时槽插入一条必须执行的指令或空操作指令。
针对条件转移指令:可以采用分支预测技术,对于分支预测出错时,找到正确的地址并转移到该目的地继续执行并不困难,困难是如何取消已执行和将要执行的指令。常采用的方法有:
(1)执行预测分支,但修改寄存器时存入一个临时寄存器,只有当预测正确时,再把它复制到实际的寄存器。
(2)写寄存器值时先保存原值,当预测错误时恢复原值。
这两种方案在第一次预测还未知时由遇到第二次条件转移,情况变得更糟。
常用的预测技术有:
(1)可假设总发生后向跳转,因为大部分循环都往回跳转。
(2)CPU维护一张历史表,当发生条件转移时,CPU查表。
乱序执行和寄存器重命名
通常设计上要求指令按顺序发出,按顺序执行完成,因为不如此当中断发生时,就很难保存计算机的状态,以后也难恢复,因为我们不能说某个指令之前的所有指令都已执行了,这是由于CPU的精确中断特性导致的。
乱序执行,跳过相关指令去执行后面的不相关指令,即指令的发出可以不按顺序,结束也可以不按顺序。内部的指令调度算法必须保证程序运行结果和按照顺序执行时的结果相同。
寄存器重命名,译码单元在译码的时候,对由资源相关的指令重新分配寄存器,以避免资源冲突,这些重新分配的寄存器对于程序员是不可见的,由译码单元管理。对于采用重命名方式中,程序员可见的寄存器只是一个逻辑名称,由译码器解决逻辑名到实际寄存器的绑定。
寄存器重命名可以减少WAR和WAW相关,但不能解决RAW相关。
RAW相关:当前指令用到上一条指令结果作为操作数
WAR相关:保存结果的寄存器正被读
WAW相关:保存结果的寄存器正被写
推测执行
在不知道是否需要执行前就执行代码的技术称为推测执行,它需要编译器和硬件的支持,需要体系结构进行扩展。
在大多数情况下,跨越基本块边界的乱序执行超过了硬件的能力,因此编译器必须显示地移动指令。将代码提前到转移之前执行叫指令提升。
推测执行的问题:
(1)指令不能产生不可改变的结果,即它将来不需要执行时结果可以撤销。
(2)若推测执行的指令成本高(产生异常或cache未命中等),但后期发现它是无需执行的,推测执行优化就得不偿失。
并行总结:
1. 片内并行
(1)指令级并行:在一个时钟周期发射多条指令(超标量,超长指令字)。不仅CPU可以采用指令级并行,存储器也可以采用。
(2)片内多线程:允许CPU同时管理多个控制线程,如果一个被阻塞,CPU有机会执行另一线程;
(3)超线程:允许两个线程同时运行;
(4)多核
2. 协处理器 增加一个专用的处理器来提高速度
3. 多处理器 各CPU共享公共内存
4. 多计算机 通过互连网络传递消息来通信
5. 网格计算