第1页:多处理机封面
多处理机封面
多处理机
第2页:多处理机目录
多处理机目录
- 8.1 引言
- 8.2 对称式共享存储器系统结构
- 8.3 分布式共享存储器系统结构
- 8.4 同步
- 8.5 同时多线程
- 8.6 多处理机实例
第3页:单处理机系统结构正在走向尽头?2.多处理
单处理机系统结构正在走向尽头?2.多处理
- 期望
- 将来更加普及
- 单处理机系统结构正在走向尽头?2.多处理机正起着越来越重要的作用。近两年来,我们已经开始进入多处理机将起主要作用的新时期。
- 问题
- 如何发挥其潜在计算能力?(并行程序)
- 应用是否具有足够的并行性?并行计算机应用软件已有了稳定的发展。(尽管缓慢)并行处理已经成为重要和主流的技术。3.本章重点:中小规模的计算机(处理器的个数<128)(多处理机设计的主流)
第4页:Flynn分类法SISD、SIMD
Flynn分类法SISD、SIMD
- Flynn分类法SISD、SIMD、MISD、MIMD2.MIMD已成为通用多处理机系统结构的选择,原因
- MIMD具有灵活性。
- MIMD可以充分利用商品化微处理器在性能价格比方面的优势。计算机机群系统(cluster)是一类广泛被采用的MIMD计算机。8.1.1并行计算机系统结构的分类
第5页:根据系统中处理器个数的多少
根据系统中处理器个数的多少
- 根据系统中处理器个数的多少,可把现有的MIMD计算机分为两类:(每一类代表了一种存储器的结构和互连策略)
- 集中式共享存储器结构动画
- 最多由几十个处理器构成。
- 通过大容量的Cache和总线互连使各处理器共享一个单独的物理存储器。这类计算机有时被称为
- SMP计算机(Symmetric shared-memory MultiProcessor)
- UMA计算机(Uniform Memory Access)
第6页:引言
引言
第7页:分布式存储器结构动画
分布式存储器结构动画
- 分布式存储器结构动画
- 处理器
- 存储器
- I/O
- 互连网络接口
- 在许多情况下,分布式存储器结构优于集中式共享存储器结构。
第8页:引言
引言
第9页:分布式存储器结构的优点
分布式存储器结构的优点
- 分布式存储器结构的优点
- 如果大多数的访问是针对本结点的局部存储器,则可降低对存储器和互连网络的带宽要求。
- 对局部存储器的访问延迟低。
- 处理器之间的通信较为复杂,且各处理器之间访问延迟较大。
- 每个结点内包含个数较少(例如2~8)的处理器;
- 处理器之间可采用另一种互连技术(例如总线)相互连接形成簇。
第10页:地址空间的组织方案(两种)
地址空间的组织方案(两种)
- 地址空间的组织方案(两种)
- 共享地址空间
- 物理上分离的多个存储器作为一个逻辑上共享的存储空间进行编址。
- 任何一个处理器可以访问该共享空间中的任何一个单元(如果它具有访问权),而且不同处理器上的同一个物理地址指向的是同一个存储单元。
- 这类机器的结构被称为分布式共享存储器结构(DSM: Distributed Shared-Memory)NUMA机器(NUMA: Non-Uniform Memory Access)
第11页:整个地址空间由多个独立的地址空间构成
整个地址空间由多个独立的地址空间构成
- 整个地址空间由多个独立的地址空间构成,它们在逻辑上也是独立的,远程的处理器不能对其直接寻址。
- 每一个处理器-存储器模块实际上是一台单独的计算机
- 现在的这种机器多以集群的形式存在2.两种通信机制
- 共享地址空间的机器利用load和store指令中的地址隐含地进行数据通信。
- 多个地址空间的机器通过处理器间显式地传递消息来完成。(消息传递多处理机)
第12页:消息传递计算机通过传递消息来请求某些服务
消息传递计算机通过传递消息来请求某些服务
- 消息传递计算机通过传递消息来请求某些服务或传输数据,从而完成通信。例如:一个处理器要对远程存储器上的数据进行访问或操作:
- 发送消息,请求传递数据或对数据进行操作;远程进程调用(RPC,Remote Process Call)
- 目的处理器接收到消息以后,执行相应的操作或代替远程处理器进行访问,并发送一个应答消息将结果返回。
- 同步消息传递请求处理器发送一个请求后一直要等到应答结果才继续运行。
第13页:异步消息传递发送方不经请求就直接把数据送
异步消息传递发送方不经请求就直接把数据送
- 异步消息传递发送方不经请求就直接把数据送往数据接收方。3.通信机制的性能指标(3个)
- 通信带宽理想状态下的通信带宽受限于处理器、存储器和互连网络的带宽。
- 通信延迟理想状态下通信延迟应尽可能地小。通信延迟=发送开销+跨越时间+传输延迟+接收开销
- 跨越时间:数字信号从发送方的线路端传送到接收方的线路端所经过的时间。
- 传输时间:全部的消息量除以线路带宽。
第14页:通信延迟的隐藏
通信延迟的隐藏
- 通信延迟的隐藏
- 如何才能较好地将通信和计算或多次通信之间重叠起来,以实现通信延迟的隐藏。
- 通常的原则:只要可能就隐藏延迟。
- 通信延迟隐藏是一种提高性能的有效途径,但它对操作系统和编程者来讲增加了额外的负担。4.不同通信机制的优点
- 共享存储器通信的主要优点
- 与常用的对称式多处理机使用的通信机制兼容。
- 易于编程,同时在简化编译器设计方面也占有优势。
第15页:当通信数据量较小时
当通信数据量较小时
- 当通信数据量较小时,通信开销较低,带宽利用较好。
- 通过硬件控制的Cache减少了远程通信的频度,减少了通信延迟以及对共享数据的访问冲突。
- 消息传递通信机制的主要优点
- 硬件较简单。
- 通信是显式的,因此更容易搞清楚何时发生通信以及通信开销是多少,以便编程者和编译程序设法减少通信开销。
第16页:可在支持上面任何一种通信机制的硬件模型上
可在支持上面任何一种通信机制的硬件模型上
- 可在支持上面任何一种通信机制的硬件模型上建立所需的通信模式平台。
- 在共享存储器上支持消息传递相对简单。
- 在消息传递的硬件上支持共享存储器就困难得多。所有对共享存储器的访问均要求操作系统提供地址转换和存储保护功能,即将存储器访问转换为消息的发送和接收。
第17页:程序中的并行性有限
程序中的并行性有限
- 程序中的并行性有限
- 相对较高的通信开销8.1.3并行处理面临的挑战系统加速比=
第18页:第一个挑战有限的并行性使机器要达到好的加
第一个挑战有限的并行性使机器要达到好的加
- 第一个挑战有限的并行性使机器要达到好的加速比十分困难。例8.1假设想用100个处理器达到80的加速比,求原计算程序中串行部分最多可占多大的比例?解Amdahl定律为由上式可得,并行比例=0.9975
第19页:引言:第二个挑战
引言:第二个挑战
- 第二个挑战
- 多处理机中远程访问的延迟较大
- 主要取决于
- 通信机制、互连网络的种类和计算机的规模
- 在现有的计算机中,处理器之间的数据通信大约需要100~1000个时钟周期。
- 在几种不同的共享存储器并行计算机中远程访问一个字的典型延迟
第20页:引言数据表
引言数据表
本页含数据表/图示,源文件文字与数字粘连,未能安全切分为表格,以下为原文提取文字,具体数值请对照原课件图片核对。
理机最大数量互连网络通信机制计算机类型50064多总线SMPSun Starfireservers500512胖超立方体NUMASGI Origin 300030020483维环网NUMACray T3E1000328×8交叉开关SMPHP V series40032开关总线SMPHP AlphaServer GS
第21页:例8.2 假设有一台32个处理器的多处理
例8.2 假设有一台32个处理器的多处理
- 例8.2假设有一台32个处理器的多处理机,对远程存储器访问时间为400ns。除了通信以外,假设所有其他访问均命中局部存储器。当发出一个远程请求时,本处理器挂起。处理器的时钟频率为1GHz,如果指令基本的IPC为2(设所有访存均命中Cache),求在没有远程访问的情况下和有0.2%的指令需要远程访问的情况下,前者比后者快多少?
第22页:时,机器的CPI为1/基本IPC=1/2
时,机器的CPI为1/基本IPC=1/2
- 时,机器的CPI为1/基本IPC=1/2=0.5有0.2%远程访问的机器的实际CPI为CPI=基本CPI+远程访问率×远程访问开销=0.5+0.2%×远程访问开销远程访问开销为远程访问时间/时钟周期时间=400ns/1ns=400个时钟周期∴CPI=0.5+0.2%×400=1.3因此在没有远程访问的情况下的计算机速度是有0.2%远程访问的计算机速度的1.3/0.5=2.6倍。
第23页:引言:问题的解决
引言:问题的解决
- 问题的解决
- 并行性不足:采用并行性更好的算法
- 远程访问延迟的降低:靠系统结构支持和编程技术3.在并行处理中,影响性能(负载平衡、同步和存储器访问延迟等)的关键因素常依赖于:应用程序的高层特性如数据的分配,并行算法的结构以及在空间和时间上对数据的访问模式等。
- 依据应用特点可把多机工作负载大致分成两类
- 单个程序在多处理机上的并行工作负载
- 多个程序在多处理机上的并行工作负载
第24页:并行程序的计算/通信比率
并行程序的计算/通信比率
- 反映并行程序性能的一个重要的度量
- 计算与通信的比率
- 并行程序的计算/通信比率
- 计算/通信比率随着处理数据规模的增大而增加;随着处理器数目的增加而降低。
第25页:多个处理器共享一个存储器
多个处理器共享一个存储器
- 多个处理器共享一个存储器。
- 当处理机规模较小时,这种计算机十分经济。教材中图8.1是这种计算机的一个简单示意图。
- 支持对共享数据和私有数据的Cache缓存私有数据供一个单独的处理器使用,而共享数据则是供多个处理器使用。
- 共享数据进入Cache产生了一个新的问题Cache的一致性问题8.2对称式共享存储器系统结构
第26页:8.2对称式共享存储器系统结构1.不一致
8.2对称式共享存储器系统结构1.不一致
- 8.2对称式共享存储器系统结构1.不一致产生的原因(Cache一致性问题)
- I/O操作Cache中的内容可能与由I/O子系统输入/输出形成的存储器对应部分的内容不同。
- 共享数据不同处理器的Cache都保存有对应存储器单元的内容。例两个处理器的读写
第27页:8.2对称式共享存储器系统结构由两个处理
8.2对称式共享存储器系统结构由两个处理
- 8.2对称式共享存储器系统结构由两个处理器(A和B)读写引起的Cache一致性问题X单元存储器内容CPU B Cache内容CPU A Cache内容时间事件10111 CPU A读X1112 CPU B读X0103 CPU A将0存入X
第28页:8.2对称式共享存储器系统结构2.存储器
8.2对称式共享存储器系统结构2.存储器
- 8.2对称式共享存储器系统结构2.存储器的一致性(非正式定义)如果对某个数据项的任何读操作均可得到其最新写入的值,则认为这个存储系统是一致的。
- 存储系统行为的两个不同方面
- What:读操作得到的是什么值
- When:什么时候才能将已写入的值返回给读操作
- 需要满足以下条件
- 处理器P对单元X进行一次写之后又对单元X进行读,读和写之间没有其他处理器对单元X进行写,则P读到的值总是前面写进去的值。
第29页:8.2对称式共享存储器系统结构
8.2对称式共享存储器系统结构
- 8.2对称式共享存储器系统结构
- 处理器P对单元X进行写之后,另一处理器Q对单元X进行读,读和写之间无其他写,则Q读到的值应为P写进去的值。
- 对同一单元的写是顺序化的,即任意两个处理器对同一单元的两次写,从各个处理器的角度看来顺序都是相同的。(写顺序化)
- 在后面的讨论中,我们假设
- 直到所有的处理器均看到了写的结果,这个写操作才算完成;
- 处理器的任何访存均不能改变写的顺序。就是说,允许处理器对读进行重排序,但必须以程序规定的顺序进行写。
第30页:8.2对称式共享存储器系统结构在一致的多
8.2对称式共享存储器系统结构在一致的多
- 8.2对称式共享存储器系统结构在一致的多处理机中,Cache提供两种功能
- 共享数据的迁移降低了对远程共享数据的访问延迟,也减少了对共享存储器带宽的要求。
- 共享数据的复制不仅降低了访存的延迟,也减少了访问共享数据所产生的冲突。一般情况下,小规模多处理机采用硬件的方法来实现Cache的一致性。
第31页:8.2对称式共享存储器系统结构
8.2对称式共享存储器系统结构
- 关键
- 跟踪记录共享数据块的状态
- 8.2对称式共享存储器系统结构1.Cache一致性协议在多个处理器中用来维护一致性的协议。
- 两类协议(采用不同的共享数据状态跟踪技术)
- 目录法(directory)物理存储器中共享数据块的状态及相关信息均被保存在一个称为目录的地方。
- 监听法(snooping)
- 每个Cache除了包含物理存储器中块的数据副本之外,也保存着各个块的共享状态信息。
第32页:8.2对称式共享存储器系统结构
8.2对称式共享存储器系统结构
- 8.2对称式共享存储器系统结构
- Cache通常连在共享存储器的总线上,各个Cache控制器通过监听总线来判断它们是否有总线上请求的数据块。2.两种更新协议(维持一致性要求)
- 写作废协议在处理器对某个数据项进行写入之前,保证它拥有对该数据项的唯一的访问权。(作废其他副本)
第33页:实现一致性的基本方案:8.2
实现一致性的基本方案:8.2
- 8.2对称式共享存储器系统结构主存单元X的内容CPU BCache内容CPU ACache内容总线行为处理器行为000Cache失效CPU A读X000Cache失效CPU B读X01作废X单元CPU A将1写入单元X111Cache失效CPU B读X例在写回Cache、监听总线的情况下,写作废协议的实现
第34页:8.2对称式共享存储器系统结构
8.2对称式共享存储器系统结构
- 8.2对称式共享存储器系统结构
- 写更新协议当一个处理器对某数据项进行写入时,通过广播使其他Cache中所有对应于该数据项的副本进行更新。例在写回Cache、监听总线的情况下,写更新协议的实现。主存单元X的内容CPU BCache内容CPU ACache内容总线行为处理器行为000Cache失效CPU A读X000Cache失效CPU B读X111对单元X进行写广播CPU A将1写入单元X111CPU B读X
第35页:8.2对称式共享存储器系统结构
8.2对称式共享存储器系统结构
- 8.2对称式共享存储器系统结构
- 写更新和写作废协议性能上的差别主要来自
- 在对同一个数据进行多次写操作而中间无读操作的情况下,写更新协议需进行多次写广播操作,而写作废协议只需一次作废操作。
- 在对同一Cache块的多个字进行写操作的情况下,写更新协议对于每一个写操作都要进行一次广播,而写作废协议仅在对该块的第一次写时进行作废操作即可。写作废是针对Cache块进行操作,而写更新则是针对字(或字节)进行。
- 考虑从一个处理器A进行写操作后到另一个处理器B能读到该写入数据之间的延迟时间。写更新协议的延迟时间较小。
第36页:8.2对称式共享存储器系统结构1.小规模
8.2对称式共享存储器系统结构1.小规模
- 写操作的顺序性
- 由总线实现(获取总线控制权的顺序性)
- 写直达Cache
- 因为所有写的数据同时被写回主存,所以从主存中总可以取到最新的数据值。
- 8.2对称式共享存储器系统结构1.小规模多处理机中实现写作废协议的关键利用总线进行作废操作:把要作废的地址放到总线上(一个放,多个读)
- 对于写回Cache,得到数据的最新值会困难一些,因为最新值可能在某个Cache中,也可能在主存中。
第37页:8.2对称式共享存储器系统结构2.在写回
8.2对称式共享存储器系统结构2.在写回
- 8.2对称式共享存储器系统结构2.在写回法Cache条件下的实现技术
- Cache的标识(tag)用于实现监听。
- 作废一个块只需将其有效位(valid)置为无效。
- 给每个Cache块加一个特殊的状态位。状态
- 共享(shared)——至少一个副本,clean
- 专有(exclusive)——唯一副本,dirtyCache块的拥有者:拥有唯一的Cache块副本的处理器。
第38页:8.2对称式共享存储器系统结构
8.2对称式共享存储器系统结构
- 8.2对称式共享存储器系统结构
- 在每个结点内嵌入一个Cache状态控制器。控制器根据来自处理器或总线的请求,改变所选择的数据块的状态。
- 因为每次总线操作均要检查Cache的地址标识,这可能会影响CPU对Cache的访问。可通过下列两种技术之一来减少影响
第39页:存储器分布于各结点中
存储器分布于各结点中
- 可以不支持Cache一致性
- 规定共享数据不进入Cache,仅私有数据才能保存在Cache中。
- 优点
- 所需的硬件支持很少(因为远程访问存取量仅是一个字(或双字)而不是一个Cache块)如何将支持Cache一致性的共享存储器模式扩展到可扩缩的大规模多处理机系统?
- 存储器分布于各结点中,所有的结点通过网络互连。访问可以是本地的,也可是远程的。
第40页:e一致性问题的关键
e一致性问题的关键
- e一致性问题的关键
- 寻找替代监听协议的一致性协议。(采用目录协议)8.3.1基于目录的Cache一致性1.目录协议
- 目录
- 一种专用的数据结构,用于记录可以进入Cache的每个数据块的状态、哪些处理器有该块的副本以及是否修改过等信息。
第41页:目录与存储器一起分布到各结点中
目录与存储器一起分布到各结点中
- 目录与存储器一起分布到各结点中,从而对于不同目录内容的访问可以在不同的结点进行。
- 特点:存储块的共享状态信息可以在唯一的一个固定单元中找到。这使一致性协议避免了广播操作。
- 对每个结点增加目录表后的分布式存储器多处理机的系统结构。
第42页:分布式共享存储器系统结构
分布式共享存储器系统结构
第43页:目录协议必须完成两种主要的操作
目录协议必须完成两种主要的操作
- 目录协议必须完成两种主要的操作
- 处理读失效
- 处理对共享、干净(clean)块的写一个共享块的写失效处理可用这两个操作组合而成。3.目录必须跟踪记录每个Cache块的状态存储块的状态有三种
- 共享在一个或多个处理器上具有这个块的副本,且存储器中的值是最新的(所有Cache中的副本均相同)。
第44页:未缓冲所有处理器的Cache都没有该块的
未缓冲所有处理器的Cache都没有该块的
- 未缓冲所有处理器的Cache都没有该块的副本。
- 专有仅有一个处理器上有该块的副本,且已对该块进行了写操作,而主存中的副本仍是旧的。这个处理器称为该块的拥有者。4.由于写作废操作的需要,还必须记录哪些处理器有该块的副本。方法:对每个主存块设置一个位向量
- 当该块被共享时,每个位指出与之对应的处理器是否有该块的副本。
- 当该块为专有时,可根据位向量来寻找其拥有者。
第45页:对于本地Cache中非“专有”
对于本地Cache中非“专有”
- 对于本地Cache中非“专有”状态Cache块的写入操作总会产生写失效,处理器封锁直到写操作完成。5.一个例子
- 本地结点、宿主结点以及远程结点的关系
- 本地结点:发出访问请求的结点
- 宿主结点:包含所访问的存储单元及其目录项的结点
- 远程结点可以和宿主结点是同一个结点,也可以不是同一个结点。
第46页:CPUCache本地结点APCache远
CPUCache本地结点APCache远
- CPUCache本地结点APCache远程结点C宿主结点B(Home)副本目录存储器宿主结点:存放有对应地址的存储器块和目录项的结点K
第47页:响应访问请求时,要将宿主结点中相应的值返
响应访问请求时,要将宿主结点中相应的值返
- 响应访问请求时,要将宿主结点中相应的值返回给请求结点。
- 数据写回在两种情况下发生
- Cache中某个块被替换时必须写回到其宿主结点的存储器。
- 响应宿主结点发出的取数和取数/作废消息时也要写回。
第48页:目录协议的基本点
目录协议的基本点
- 目录协议的基本点
- 在每个结点中增加了目录存储器用于存放目录。
- 存储器的每一块在目录中有对应的一项。
- 每一个目录项主要由两个字段构成
- 状态:描述所对应的存储块的当前状态。
- 位向量:每一位对应于一个处理器,用于指出该处理器的Cache中是否有该存储块的副本。当处理器对某一块进行写操作时,只要根据位向量通知具有相应副本的处理器进行作废操作。位向量中记录的处理器集合称为共享集合。
第49页:在基于目录的协议中
在基于目录的协议中
- 在基于目录的协议中,目录承担了一致性协议操作的主要功能。
- 发往一个目录的消息会产生两种不同类型的动作
- 目录可能接收三种不同的请求
第50页:当一个块处于未缓冲状态时
当一个块处于未缓冲状态时
- 当一个块处于未缓冲状态时,对该块发出的请求及目录的处理操作为
- 读失效
- 将存储器数据送往请求方处理器,且该处理器成为该块的唯一共享结点,本块的状态变成共享。
- 写失效
- 将存储器数据送往请求方处理器,该块的状态变成专有,表示该块仅存在唯一的有效副本。
- 其共享集合仅包含该处理器,指出该处理器是其拥有者。
第51页:当一个块处于共享状态时
当一个块处于共享状态时
- 当一个块处于共享状态时,其在存储器中的数据是当前最新的,对该块发出的请求及其处理操作为
- 读失效
- 将存储器数据送往请求方处理器,并将其加入共享集合。
- 写失效
- 将数据送往请求方处理器,对共享集合中所有的处理器发送写作废消息。
- 将共享集合改为仅含有该处理器,该块的状态变为专有。
第52页:当某块处于专有状态时
当某块处于专有状态时
- 当某块处于专有状态时,该块的最新值保存在共享集合所指出的唯一处理器(拥有者)中。有三种可能的目录请求
- 读失效
- 将“取数据”的消息发往拥有者处理器,使该块的状态转变为共享。
- 将数据送回宿主结点写入存储器,进而把该数据送回请求方处理器,将请求方处理器加入共享集合。
- 此时共享集合中仍保留原拥有者处理器(因为它仍有一个可读的副本)。
第53页:分布式共享存储器系统结构:写失效
分布式共享存储器系统结构:写失效
- 写失效
- 该块将有一个新的拥有者。
- 给旧的拥有者处理器发送消息,要求它将数据块送回宿主结点写入存储器,然后再从该结点送给请求方处理器。
- 把请求处理器加入共享者集合,使之成为新的拥有者。该块的状态仍旧是专有。
- 数据写回
- 当一个块的拥有者处理器要从其Cache中把该块替换出去时,必须将该块写回其宿主结点的存储器中,从而使存储器中相应的块中存放的数据是最新的(宿主结点实际上成为拥有者),该块的状态变成非共享,其共享集合为空。
第54页:对基于目录的Cache一致性的多种改进
对基于目录的Cache一致性的多种改进
- 对基于目录的Cache一致性的多种改进
- 有限映射目录
- 链式结构目录5.基于目录的Cache一致性协议是完全由硬件实现的。此外,还可以用软硬结合的办法实现。
第55页:同步机制通常是在硬件提供的同步指令的基础
同步机制通常是在硬件提供的同步指令的基础
- 同步机制通常是在硬件提供的同步指令的基础上,通过用户级软件例程来建立的。8.4同步8.4.1基本硬件原语在多处理机中实现同步,所需的主要功能是
- 一组能以原子操作的方式读出并修改存储单元的硬件原语。它们能够自动读/修改单元。
- 通常情况下,用户不直接使用基本的硬件原语,原语主要供系统程序员用来编制同步库函数。
第56页:同步:典型操作
同步:典型操作
- 典型操作
- 原子交换(atomic exchange)
- 功能
- 将一个存储单元的值和一个寄存器的值进行交换。建立一个锁,锁值:
- 0
- 表示开(可用)
- 1
- 表示已上锁(不可用)
- 实现同步的关键
- 操作的原子性。
- 处理器上锁时,将对应于该锁的存储单元的值与存放在某个寄存器中的1进行交换。如果返回值为0,存储单元的值此时已置换为1,防止了其他进程竞争该锁。
第57页:测试并置定(test_and_set)
测试并置定(test_and_set)
- 测试并置定(test_and_set)
- 先测试一个存储单元的值,如果符合条件则修改其值。3.读取并加1(fetch_and_increment)
- 它返回存储单元的值并自动增加该值。4.使用指令对
- LL(load linked或load locked)的取指令
- SC(store conditional)的特殊存指令
第58页:指令顺序执行
指令顺序执行
- “1”
- 成功
- “0”
- 不成功
- 指令顺序执行
- 如果由LL指明的存储单元的内容在SC对其进行写之前已被其他指令改写过,则第二条指令SC执行失败。
- 如果在两条指令间进行切换也会导致SC执行失败。
- SC将返回一个值来指出该指令操作是否成功
第59页:同步:例
同步:例
- 例
- 实现对由R1指出的存储单元进行原子交换操作。try:ORR3, R4, R0// R4中为交换值。把该值送入R3LLR2, 0(R1)//把单元0(R1)中的值取到R2SCR3, 0(R1)//若0(R1)中的值与R3中的值相//同,则置R3的值为1,否则置为0BEQZR3, try//存失败(R3的值为0)则转移MOVR4, R2//将取的值送往R4最终R4和由R1指向的单元值进行原子交换,在LL和SC之间如有别的处理器插入并修改了存储单元的值,SC将返回0并存入R3中,从而使这段程序再次执行。
第60页:LL/SC机制的一个优点
LL/SC机制的一个优点
- LL/SC机制的一个优点
- 用来构造别的同步原语例如:构造原子操作fetch_and_increment:try:LL R2, 0(R1)DADDIUR2, R2, #1SCR2, 0(R1)BEQZR2, try
- 指令对的实现必须跟踪地址由LL指令指定一个寄存器,该寄存器存放着一个单元地址,这个寄存器常称为连接寄存器。
第61页:采用多处理机的一致性机制来实现旋转锁
采用多处理机的一致性机制来实现旋转锁
- 采用多处理机的一致性机制来实现旋转锁。
- 旋转锁处理器环绕一个锁不停地旋转而请求获得该锁。它适合于这样的场合:锁被占用的时间很少,在获得锁后加锁过程延迟很小。
第62页:无Cache一致性机制在存储器中保存锁变
无Cache一致性机制在存储器中保存锁变
- 无Cache一致性机制在存储器中保存锁变量,处理器可以不断地通过一个原子操作请求使用权。比如:利用原子交换操作,并通过测试返回值而知道锁的使用情况。释放锁的时候,处理器只需简单地将锁置为0。例如,用原子交换操作对旋转锁进行加锁,R1中存放的是该旋转锁的地址。DADDIUR2, R0, #1lockit:EXCHR2, 0(R1)BNEZR2, lockit
第63页:支持Cache一致性
支持Cache一致性
- 支持Cache一致性
- 将锁调入Cache,并通过一致性机制使锁值保持一致。
- 优点
- 可使“环绕”的进程只对本地Cache中的锁(副本)进行操作,而不用在每次请求占用锁时都进行一次全局的存储器访问。
- 可利用访问锁时所具有的局部性,即处理器最近使用过的锁不久又会使用。(减少为获得锁而花费的时间)
第64页:改进旋转锁(获得第一条好处)
改进旋转锁(获得第一条好处)
- 改进旋转锁(获得第一条好处)
- 只对本地Cache中锁的副本进行读取和检测,直到发现该锁已经被释放。然后,该程序立即进行交换操作,去跟在其他处理器上的进程争用该锁变量。
- 修改后的旋转锁程序:lockit:LDR2, 0(R1)BNEZR2, lockitDADDIUR2, R0, #1EXCHR2, 0(R1)BNEZR2, lockit
- 3个处理器利用原子交换争用旋转锁所进行的操作。
第65页:总线/目录操作锁的状态处理器P2
总线/目录操作锁的状态处理器P2
- 总线/目录操作锁的状态处理器P2处理器P1处理器P0步骤无共享环绕测试是否lock=0环绕测试是否lock=0占有锁1P0发出对锁变量的作废消息专有(P0)(收到作废命令)(收到作废命令)将锁置为02总线/目录收到P2Cache失效;锁从P0写回共享Cache失效Cache失效3P2 Cache失效被处理共享lock=0(因总线/目录忙而等待)4P1 Cache失效被处理共享执行交换,导致Cache失效Lock=05总线/目录收到P2Cache失效;发作废消息专有(P2)交换完毕:返回0并置lock=1执行交换,导致Cache失效6总线/目录处理P1Cache失效;写回专有(P0)进入关键程序段交换完毕:返回17无环绕测试是否lock=083个处理器利用原子交换争用旋转锁所进行的操作
第66页:LL/SC原语的另一个优点
LL/SC原语的另一个优点
- LL/SC原语的另一个优点
- 读写操作明显分开LL不产生总线数据传送,这使下面代码与使用经过优化交换的代码具有相同的特点:lockit:LLR2, 0(R1)BNEZR2, lockitDADDIUR2, R0, #1SCR2, 0(R1)BEQZR2, lockit第一个分支形成环绕的循环体,第二个分支解决了两个处理器同时看到锁可用的情况下的争用问题。尽管旋转锁机制简单并且具有吸引力,但难以将它应用于处理器数量很多的情况。
第67页:大规模多处理机中,若所有的处理器都同时
大规模多处理机中,若所有的处理器都同时
- 。大规模多处理机中,若所有的处理器都同时争用同一个锁,则会导致大量的争用和通信开销。
第68页:例8.3 假设某条总线上有10个处理器同
例8.3 假设某条总线上有10个处理器同
- 例8.3假设某条总线上有10个处理器同时准备对同一变量加锁。如果每个总线事务处理(读失效或写失效)的时间是100个时钟周期,而且忽略对已调入Cache中的锁进行读写的时间以及占用该锁的时间。
- 假设该锁在时间为0时被释放,并且所有处理器都在旋转等待该锁。问:所有10个处理器都获得该锁所需的总线事务数目是多少?
- 假设总线是非常公平的,在处理新请求之前,要先全部处理好已有的请求。并且各处理器的速度相同。问:处理10个请求大概需要多少时间?
第69页:它们都各自完成以下操作序列
它们都各自完成以下操作序列
- 它们都各自完成以下操作序列,每一个操作产生一个总线事务
- 访问该锁的i个LL指令操作
- 试图占用该锁(并上锁)的i个SC指令操作
- 1个释放锁的存操作指令因此对于i个处理器来说,一个处理器获得该锁所要进行的总线事务的个数为2i+1。由此可知,对n个处理器,总的总线事务个数为:对于10个处理器来说,其总线事务数为120个,需要12000个时钟周期。
第70页:本例中问题的根源
本例中问题的根源
- 本例中问题的根源
- 锁的争用、对锁进行访问的串行性以及总线访问的延迟。
- 旋转锁的主要优点
- 总线开销或网络开销比较低,而且当一个锁被同一个处理器重用时具有很好的性能。1.如何用旋转锁来实现一个常用的高级同步原语:栅栏
- 栅栏强制所有到达该栅栏的进程进行等待,直到全部的进程到达栅栏,然后释放全部的进程,从而形成同步。
第71页:栅栏的典型实现用两个旋转锁
栅栏的典型实现用两个旋转锁
- 栅栏的典型实现用两个旋转锁
- 用来保护一个计数器,它记录已到达该栅栏的进程数;
- 用来封锁进程直至最后一个进程到达该栅栏。
- 一种典型的实现其中
- lock和unlock提供基本的旋转锁
- 变量count记录已到达栅栏的进程数
- total规定了要到达栅栏的进程总数
第72页:);//确保更新的原子性if(
);//确保更新的原子性if(
- );//确保更新的原子性if(count==0)release=0;//第一个进程则重置releasecount=count+1;//到达进程数加1unlock(counterlock);//释放锁if(count==total){//进程全部到达count=0;//重置计数器release=1;//释放进程}else {//还有进程未到达spin(release=1);//等待别的进程到达}
第73页:对counterlock加锁保证增量操作
对counterlock加锁保证增量操作
- 对counterlock加锁保证增量操作的原子性。
- release用来封锁进程直到最后一个进程到达栅栏。
- spin(release=1)使进程等待直到全部的进程到达栅栏。
- 实际情况中会出现的问题可能反复使用一个栅栏,栅栏释放的进程运行一段后又会再次返回栅栏,这样有可能出现某个进程永远离不开栅栏的状况(它停在旋转操作上)。
- 一种解决方法当进程离开栅栏时进行计数(和到达时一样),在上次栅栏使用中的所有进程离开之前,不允许任何进程重用并初始化本栅栏。但这会明显增加栅栏的延迟和竞争。
第74页:另一种解决办法
另一种解决办法
- 另一种解决办法
- 采用sense_reversing栅栏,每个进程均使用一个私有变量local_sense,该变量初始化为1。
- sense_reversing栅栏的代码。优缺点:使用安全,但性能比较差。对于10个处理器来说,当同时进行栅栏操作时,如果忽略对Cache的访问时间以及其他非同步操作所需的时间,则其总线事务数为204个,如果每个总线事物需要100个时钟周期,则总共需要20400个时钟周期。
第75页:_sense=! local_sense
_sense=! local_sense
- _sense=! local_sense;//local-sense取反lock(counterlock);//确保更新的原子性count++;//到达进程数加1unlock(counterlock);//释放锁if(count==total){//进程全部到达count=0;//重置计数器release=local_sense;//释放进程}else {//还有进程未到达spin(release==local_sense);//等待信号}
第76页:当竞争不激烈且同步操作较少时
当竞争不激烈且同步操作较少时
- 当竞争不激烈且同步操作较少时,我们主要关心的是一个同步原语操作的延迟。
- 即单个进程要花多长时间才完成一个同步操作。
- 基本的旋转锁操作可在两个总线周期内完成
- 一个读锁
- 一个写锁我们可用多种方法改进,使它在单个周期内完成操作。3.同步操作最严重的问题:进程进行同步操作的顺序化。它极大地增加了同步操作的时间。
第77页:线程级并行性
线程级并行性
- 线程级并行性(Thread Level Parallelism,TLP)
- 线程是指具有自己的程序和数据的进程。它可以是一个并行执行程序的一部分,也可以是一个独立的程序。
- 每个线程包含自己执行所需要的状态,包括指令、数据、程序计数器、寄存器状态等。
- 多线程使多个线程以重叠的方式共享单个处理器的功能单元。
- 硬件必须对较快地完成线程间的切换提供支持。
- 线程的切换应该比进程的切换高效得多。
- 进程的切换一般需要成百上千个处理器时钟周期。
第78页:同时多线程
同时多线程
- 细粒度(fine-grained)多线程技术
- 在每条指令之间都能进行线程的切换,从而导致多个线程的交替执行。
- 通常以时间片轮转的方法实现这样的交替执行,在轮转的过程中跳过当时处于停顿的线程。
- CPU必须在每个时钟周期都能进行线程的切换。
- 主要优点:既能够隐藏由长时间停顿引起的吞吐率的损失,又能够隐藏由短时间停顿带来的损失。
- 主要缺点:减慢了每个独立线程的执行
第79页:粗粒度(coarse-grained)多
粗粒度(coarse-grained)多
- 粗粒度(coarse-grained)多线程技术
- 线程之间的切换只发生在时间较长的停顿出现时。例如:第二级Cache失效。
- 减少了切换次数,也不太会降低单个线程的执行速度。
- 缺点:减少吞吐率损失的能力有限,特别是对于较短的停顿来说更是如此。
- 原因:由粗粒度多线程的流水线建立时间的开销造成的。由于实现粗粒度多线程的CPU只执行单个线程的指令,因此当发生停顿时,流水线必须排空或暂停。停顿后切换的新的线程在第一条指令执行完之前必须先填满整个流水线。
第80页:同时多线程技术
同时多线程技术
- 同时多线程技术
- Simultaneous MultiThreading,SMT
- 一种在多流出、动态调度的处理器上同时开发线程级并行和指令级并行的技术。1.提出SMT的主要原因
- 现代多流出处理器通常含有多个并行的功能单元,而单个线程不能有效地利用这些功能单元。
- 通过寄存器重命名和动态调度机制,来自各个独立线程的多条指令可以同时流出,而不用考虑它们之间的相互依赖关系,其相互依赖关系将通过动态调度机制得以解决。8.5.1将线程级并行转换为指令级并行
第81页:一个超标量处理器在4种情况下的资源使用情
一个超标量处理器在4种情况下的资源使用情
- 一个超标量处理器在4种情况下的资源使用情况
- 不支持多线程技术的超标量处理器由于缺乏足够的指令级并行而限制了流出槽的利用率。
- 支持粗粒度多线程的超标量处理器
- 通过线程的切换部分隐藏了长时间停顿带来的开销,提高了硬件资源的利用率。
- 只有发生停顿时才进行线程切换,而且新线程还有个启动期,所以仍然可能有一些完全空闲的时钟周期。
第82页:同时多线程:的4种方法
同时多线程:的4种方法
第83页:支持细粒度多线程的超标量处理器
支持细粒度多线程的超标量处理器
- 支持细粒度多线程的超标量处理器
- 线程的交替执行消除了完全空闲的时钟周期。
- 由于在每个时钟周期内只能流出一个线程的指令,ILP的限制导致了一些时钟周期中依然存在不少空闲流出槽。
- 支持同时多线程的超标量处理器
- 在同一个时钟周期中可以让多个线程使用流出槽。
- 理想情况下,流出槽的利用率只受限于多个线程对资源的需求和可用资源间的不平衡。
第84页:开发的基础:动态调度的处理器已经具备了开
开发的基础:动态调度的处理器已经具备了开
- 开发的基础:动态调度的处理器已经具备了开发线程级并行所需的许多硬件设置。
- 动态调度超标量处理器有一组虚拟寄存器,可以用作各独立线程的寄存器组。
- 由于寄存器重命名机制给各寄存器提供了唯一的标识,多个线程的指令可以在数据路径上混合执行,而不会导致各线程之间源操作数和目的操作数的混乱。
- 多线程可以在一个乱序执行的处理器的基础上实现,只要为每个线程设置重命名表、分别设置各自的程序计数器并为多个线程提供指令确认的能力。
第85页:同时多线程只有在细粒度的实现方式下才有意
同时多线程只有在细粒度的实现方式下才有意
- 同时多线程只有在细粒度的实现方式下才有意义
- 细粒度调度方式会对单个线程的性能产生不利的影响可以通过指定优先线程来减小这种影响,既能保持多线程在性能上的优势,又对单个线程的性能影响比较少。
- 多个线程的混合执行不可避免地会影响单个线程的执行速度
第86页:为提高单个线程的性能
为提高单个线程的性能
- 为提高单个线程的性能,应该为指定的优先线程尽可能多地向前取指(或许在分支指令的两条路径上都要向前取指)。
- 在分支预测失效和预取缓冲失效的情况下需要清空取指单元。但是这样限制了其他线程可用来调度的指令条数,从而减少了吞吐率。
- 所有的多线程处理器都必须在这里寻求一种折中方案。
第87页:只要一有可能,处理器就运行指定的优先线程
只要一有可能,处理器就运行指定的优先线程
- 只要一有可能,处理器就运行指定的优先线程。
- 从取指阶段开始就优先处理优先线程:只要优先线程的指令预取缓冲区未满,就为它们优先取指。
- 只有当优先线程的缓冲区填满以后才为其他线程预取指令。
- 当有两个优先线程时,意味着需要并发预取两条指令流,这给取指部件和指令Cache都增添了复杂度。
- 指令流出单元也要优先考虑指定的优先线程,只有当优先线程停顿不能流出的时候才考虑其他线程。
第88页:设计同时多线程处理器时面临的其他主要问题
设计同时多线程处理器时面临的其他主要问题
- 设计同时多线程处理器时面临的其他主要问题
- 需要设置更大的寄存器组,用来保存多个线程的现场。
- 不能影响时钟周期,特别是在关键路径上。如指令流出和指令完成
- 指令流出时,有更多的候选指令需要考虑。
- 指令完成时,选择提交哪些指令可能会比较困难。
- 需要保证由于并发执行多个线程带来的Cache冲突和TLB冲突不会导致明显的性能下降。
第89页:需要重视的两个实际情况
需要重视的两个实际情况
- 需要重视的两个实际情况
- 在许多情况下,多线程所导致的潜在额外性能开销是很小的,简单的线程切换选择算法就足够好了。
- 目前的超标量处理器的效率是比较低的,还有很大的改进余地,即使增加一些开销也是值得的。
第90页:在超标量处理器上增添8个线程的同时多线程
在超标量处理器上增添8个线程的同时多线程
- 在超标量处理器上增添8个线程的同时多线程能力时获得的性能提高(单位:指令数/每拍)
第91页:SMT与基本的超标量处理器在几个主要指标
SMT与基本的超标量处理器在几个主要指标
第92页:同时多线程:两个特点
同时多线程:两个特点
- 两个特点
- 超标量处理器本身功能十分强大,它具有很大的一级Cache、二级Cache以及大量的功能单元。仅仅采用指令级并行,不可能利用全部的硬件性能,因此超标量处理器的设计者不可能不考虑使用诸如同时多线程这样的技术来开发线程级并行。
- 同时多线程的能力也很强大,可以支持8个线程,并为两个线程同步取指。将超标量和同时多线程结合起来,在指令级并行基础上进一步开发线程级并行,可以获得显著的性能提高。
第93页:Origin 2000是一个分布共享存储
Origin 2000是一个分布共享存储
- Origin 2000是一个分布共享存储器结构的大规模并行多处理机系统,采用超结点的模块结构,可以从1个处理器扩展到128个处理器。
- Origin 2000采用超标量MIPS R10000处理器,运行UNIX的64位IRIX操作系统。
- Origin是基于NUMA系统结构例
第94页:Origin系统结构
Origin系统结构
第95页:1个或2个MIPS R10000微处理器
1个或2个MIPS R10000微处理器
- 1个或2个MIPS R10000微处理器、第二级高速缓存(L2 Cache)、主存储器、目录存储器及Hub等,Hub用于连接微处理器、存储器、I/O和路由器等。
- Origin存储器系统每个结点的主存储器容量:4GB
- 结点的Hub内含4个接口和交叉开关
- 存储器最大传输率为780Mbps
- I/O和路由器接口最大传输率:2×780Mbs(1.56Gbps)
- Origin的路由器有6个端口,用于连接结点或其他路由器。Origin的路由器和互连网络是ASIC芯片,通过芯片内部的交叉开关选择数据传送路径。
第96页:4处理器系统
4处理器系统
- 4处理器系统4.两个结点互连的情况Origin系统可由1~128个处理器组成。
第97页:16处理器系统5.由8结点构成的16处理
16处理器系统5.由8结点构成的16处理
- 16处理器系统5.由8结点构成的16处理器系统为了减少数据在路由器之间的传送延迟,加快传送速度,可将处于对角位置的路由器进行连接。
第98页:6.128处理器系统128
6.128处理器系统128
- 6.128处理器系统128处理器构成的Origin 2000系统由4个立方体组成,在立方体之间传送数据多经过了一级路由器。
- 在结点内部实现的是SMP(对称多处理器)结构,由于只有两个处理器,所以不存在SMP结构的总线瓶颈问题。
- 在结点之间实现的是大规模并行处理结构,但又解决了共享存储器问题。因此在Origin系统中,无论是访问存储器的时间还是结点间传送数据的带宽都很理想。例
第99页:128处理器系统
128处理器系统
第100页:例7 .Origin系统中CPU访问存储
例7 .Origin系统中CPU访问存储
- 例7.Origin系统中CPU访问存储器的延迟时间
- 假设
- CPU的主频为195MHz
- Cache不命中
- 最小延迟时间:CPU访问本结点存储器的时间
- 最大延迟时间:CPU访问距离最远的存储器的时间
第101页:多处理机实例数据表
多处理机实例数据表
本页含数据表/图示,源文件文字与数字粘连,未能安全切分为表格,以下为原文提取文字,具体数值请对照原课件图片核对。
最小延迟时间系统CPU数343 ns343 ns318 ns2441 ns554 ns318 ns4623 ns759 ns318 ns8691 ns759 ns318 ns16764 ns836 ns318 ns32851 ns1067 ns318 ns64959 ns1169 ns318 ns128Origin系统中CPU访问存储器的延迟时间
第102页:多处理机实例数据表
多处理机实例数据表
本页含数据表/图示,源文件文字与数字粘连,未能安全切分为表格,以下为原文提取文字,具体数值请对照原课件图片核对。
例8.Origin系统的带宽每个Hub连到路由器和互连网络的最大频宽为1.56 Gbps(全双工,2×780 Mbps)带宽(无快速传送连线)带宽(无快速传送连线)系统处理器数3.12 Gbps1.56 Gbps86.24 Gbps3.12 Gbps1612.5 Gbps6.24 Gbps32--12.5 Gbps64--25 Gbps128
第103页:例9 .Origin系统的存储器层次结构
例9 .Origin系统的存储器层次结构
- 例9.Origin系统的存储器层次结构可分为
- 寄存器、L1 Cache、L2 Cache和主存储器
- 寄存器和L1 Cache在R10000微处理器中
- 寄存器的存取时间最短
- L1 Cache又分成指令Cache和数据Cache两部分(避免取指令和存/取数据发生冲突)
- L2 Cache安装在结点卡中,统一存放指令和数据,由SRAM组成。
- 主存储器地址是统一编址的,每个处理器通过互连网络可访问系统中任一存储单元。
第104页:例10 .实现Cache的一致性基于目
例10 .实现Cache的一致性基于目
- 例10.实现Cache的一致性
- 基于目录协议与写作废协议
- 每个结点中,有一个存储器和一个目录存储器。
- 每块对应于一个目录项,每个目录项包含其对应存储器块的状态信息和系统中各Cache共享该存储块情况的位向量,根据位向量可以知道哪些Cache中有其副本。