现代处理器设计——超标量处理器基础1-4

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuiliusheng/article/details/82081714

现代处理器设计——超标量处理器基础(1-4)

  1. 体系结构(architecture):通常称为指令集体系结构,对指令集处理器的指令集合进行说明,并定义处理器的功能性行为。

  2. 逻辑实现:体系结构的具体设计,也称为微体系结构(microarchitecture)。某种体系结构在其ISA的生命周期内可以有多种逻辑实现。逻辑实现通常在硬件中实现,对软件透明。

  3. 物理实现:设计的具体物理表现形式。对于微处理器而言,这个具体的物理表现形式通常是单芯片或者多芯片的封装。对于一个逻辑实现,可以有多个不同的物理实现

  4. 不同的类型的ISA的不同点集中在如何定义操作数类型以及操作数上。

  5. DSI(Dynamic-Static Interface)动态-静态接口。传统上,所有在编译时由软件和编译器静态完成的任务和优化,认为在DSI之上;所有在运行时由硬件动态完成的任务及优化,认为是在DSI之下的。ISA设计中一个关键问题:DSI的位置。理想情况下,DSI的位置应该使得静态技术和动态技术很好的协同配合,在编译器的复杂性和硬件复杂性之间做出权衡,并得到最好的组合。

  6. 当流水下深度增加时,CPI可能会上升

    • 取指和执行之间的流水级数会增加,从而增加了分支预测错误时的开销
    • 如果流水线长到连基本的ALU操作也需要多个时钟周期,那么即便通过结果定向硬件,在两条相关指令之间所必须等待时间也需要多个时钟周期
    • 当时钟周期随着流水线深度而增加时,存储器的延迟(以时钟周期数目计)将会明显增加,从而增加存储操作的平均延迟
    • 在流水线中有硬件和延迟的开销,会减少在性能上的收益
  7. 硬件仿真器:功能仿真器和性能仿真器

    • 功能仿真器:模拟体系结构级的机器,用于验证程序能够正确执行
    • 性能仿真器:模拟一个设计的微体系结构,用于测量执行一个程序所需要的时钟周期的数目
  8. 设计超标量处理器的一个主要动机:开发可以获得一定(相对于向量来说降低)级别的并行度(公式1.10)的通用处理器。目的是确保大部分程序都能够获得一定程度的指令级并行,以减轻顺序执行时瓶颈所产生的影响。
    这里写图片描述
    这里写图片描述

  9. Flynn瓶颈:大多数程序的ILP小于2(基本块内部)

    Fisher的乐观估计:在许多程序中,几乎拥有无限的ILP

  10. 操作延迟(OL):指一条指令产生结果后使用的机器时钟周期数,就是指令执行时所需要的时钟周期数

    机器并行度(MP):指机器支持的可以同时执行的最大指令数目

    发射延迟(IL):指发射两条连续的指令之间所需要的机器时钟周期数。此时发射是指一条新的指令初始化后进入流水线

    发射并行度(IP):指每个时钟周期内可以发射的最大指令数

  11. 超流水线处理器:传统的流水线处理器如果需要多个时钟周期来执行简单指令(定点加法),那么应当归类为超流水处理器。主要特点:某条指令的结果不能被后续的m-1条指令所利用。

    参数定义:OL=1个时钟周期=m个次时钟周期,IL=1个次时钟周期

  12. 超标量处理器参数定义:OL=1个时钟周期,IL=1个时钟周期,IP=n条指令/时钟周期

  13. 限制时钟频率的两个因素:

    • 组合逻辑的最长和最短传输延迟之差。如果所有信号的传输路径是一样长的,则这个因素可以被忽略。延长最短路径
    • 正确建立时钟信号所需要的额外延迟。为了锁存流水段的结果而引入。锁存结果的延迟包括信号通过一个反馈回路的传播延迟,以及信号在回路中的建立时间。同时还会存在时钟扭曲,时钟信号到达各个锁存器的时刻可能不相同。
  14. 一个k级流水线的价格C:

    C = G + k L

    其中k为流水线的段数,L为每增加一个锁存器的价格,G为原本非流水硬件的价格

    流水线的性能:

    P = 1 T / k + S

    其中T为非流水线系统延迟,S是由于引入锁存器而带来的延迟

    价格性能比:

    C P = L T + G S + L S k + G T k K o p t = G T L S

    当k小于Kopt时,流水线系统称为 不够完全流水化,即可以进一步实现流水化,增加流水线深度

    当k大于Kopt时,流水线系统称为 过度流水化,此时增加流水线深度而提高的性能由于价格增加而抵消

    这里写图片描述

  15. 流水线理想假设

    • 一致的运算分量:要完成的整个运算量可以均匀的分成延迟一致的若干分量

      将以前的运算量分为若干分量时,没有引入无效时间;段间缓冲的引入没有带来额外的延迟

    • 重复的运算:输入数据有大量相同的,重复的运算

      所有的流水段总是被充分利用

    • 独立的运算:所有相同的重复运算之间没有相关性

  16. 处理一条指令的时间延迟称为“指令周期”,每一段的时间延迟决定了“机器周期”。指令周期是一个逻辑概念,代表指令的执行周期。机器周期是一个物理概念,包含了数字逻辑电路中存储单元的时钟等,也是流水线的时钟周期。

  17. 流水线中的外部碎片:某些流水段没有被使用;内部碎片:某些流水段存在时间空闲(迁就于最长延迟)

  18. 指令流水线设计的挑战

    • 一致的运算分量=>保持流水段均衡
    • 重复的运算=>统一指令类型
    • 独立的运算分量=>尽量减少流水线停顿
  19. 随着流水化程度的增加,流水线的硬件资源会显著地增加,其中最突出的时寄存器文件和存储器端口数目的增加,一获得更高的访问并行度

  20. AMDAHL 470v/7的12级指令流水线示例

    • 第一段:计算下一条指令的地址
    • 第二段:完成cache的访问初始化
    • 第三段:将指令从cache中读到指令部件I-unit
    • 第四段:指令译码
    • 第五段:读取两个通用寄存器,这些寄存器用作地址寄存器
    • 第六段:计算出操作数在存储器中的地址
    • 第七段:完成cache访问的初始化,并准备读取存储器操作数
    • 第八段:将操作数从cache中读取到I-unit中,同时也完成寄存器操作数的读取
    • 第九和十段:执行部件E-unit中的两个运算段
    • 第十一段:对计算结果进行错误检查
    • 第十二段:结果存放到目的寄存器中
  21. 控制相关可以看做是关于程序计数器的寄存器数据相关(RAW),条件分支指令要写PC,而取下一条指令要读PC。

  22. 流水线互锁机制:化解流水线相关的硬件机制。流水线互锁硬件要检测出所有的流水线相关,并保证所有的相关得到满足。流水线互锁机制包括停止流水线的某一段以及数据在定向路径中的传输控制等。(ALU的RAW,Load的RAW,条件分支指令)

  23. 降低深流水线中分支指令带来的负面影响的两种方法:

    • 减少前段流水线(取指段到完成分支指令的相应段的距离)的段数,例如RISC,减少译码的复杂性,前段段数就会比较少
    • 将前段流水线的一部分移至后端,例如将译码结果存储在某个cache中,跳过之后的译码段
  24. 增加流水线深度的权衡

    • 硬件开销和性能提升之间的权衡
    • 增加CPI和提高时钟频率之间的权衡
  25. 并行流水线:同一周期启动多条指令执行

    多配置流水线:在流水线的执行阶段为不同类型的指令提供不同的执行部件(子流水线)

    超标量流水线:属于并行流水线,也属于多配置流水线

    动态流水线:支持乱序执行的并行流水线。动态流水线通过使用复杂的多记录缓冲来实现乱序执行,并允许指令以可变的顺序进入和离开缓冲。

  26. 标量流水线的加速比:一般针对非流水机器,它取决于流水线的深度

    并行流水线的加速比:往往相对于标量流水线来计算,它取决于并行流水线的宽度。宽度为s的并行流水线的每一段都可以同时处理s条指令
    这里写图片描述

  27. 多配置流水线的优点:每条流水线只执行一种指令,因此可以根据其特点进行专门的优化设计并采用高效的硬件实现。每条指令只需要执行必要的延迟并流过该子流水线的所有段
    这里写图片描述

  28. 实现每周期s条指令的取指吞吐率的两个障碍:读取的s条指令没有对齐;控制流改变了取指集中的指令

    • 对齐问题的解决方案:依靠编译的静态级数,利用cache的信息,将指令合理地放置在存储器中,从而保证要去的指令同物理阵列行对齐;执行时依靠硬件协助解决,即使指令组跨越了阵行列边界,对齐硬件也能保证一个周期内取出s条指令。
  29. 指令译码主要包括指令的识别、指令类型的确定以及指令间相关性的检测。指令译码的复杂度受两个因素影响:ISA和并行流水线的宽度。

  30. 预译码:将指令译码的部分工作转移到指令cache进行,当cache失效并需要从存储器调入一个cache块时,在内存与cache之间可以增加一个硬件将cache块中的指令进行预译码。译码的信息以预译码标识位的形式连同指令一起存在于指令cache中,在指令译码时简化操作。

  31. 预译码对处理器设计的两个主要影响:

    • 由于在存储器到指令cache的通路上增加了预译码操作而增加了指令cache的失效开销
    • cache的大小由于存储预译码标识位而增大
  32. 指令分派(dispatch):超标量属于多配置流水线,其执行段使用了很多不同类型的执行部件,不同类型的指令需要在不同的执行部件上执行,因此存在分派阶段,确定指令应该在哪一个执行部件上执行。

  33. 保留站将指令译码和执行加以分离,从而平衡了译码段以及执行段吞吐率的频繁变化,消除了译码段不必要的停顿,同时也为执行部件输送足够的指令。

  34. 集中式保留站:可以被各种类型的指令共用,使用率较高,但是硬件设计非常复杂,需要集中控制并且要设置多个端口来满足多个部件的同时访问

    分布式保留站:只需要一个端口和少数几条记录项,硬件简单,但是总的利用率低。当一种类型的保留站中各记录项都被占用时,所有这种类型的后续指令都必须停顿。

  35. 发射和分派:在分布式保留站中,分派是指译码后指令同相应类型的功能部件之间的连接;而发射是指指令在功能部件中执行的初始化。在集中式保留站中,两个可以互用。
    这里写图片描述
    这里写图片描述

  36. 设置多个功能部件时一种空间并行性的体现;功能部件流水化实现时时间并行性的体现。

  37. 指令流、寄存器数据流和存储器数据流。总的性能目标就是使三条流通路的容量最大

    • 指令流:分支指令处理。(取指段和译码段)
    • 寄存器数据流:ALU指令处理
    • 存储器数据流:load/store指令处理
  38. 条件分支指令的停顿开销:生成目标地址引起的开销和条件判定引起的开销

    • PC相对寻址,一个周期开销
    • 寄存器间接寻址,两个周期开销
    • 带偏移的寄存器间接寻址,三个周期开销
    • 条件码寄存器,分派阶段读取,两个时钟周期开销
    • 通用寄存器比较,三个周期开销
      这里写图片描述
      这里写图片描述
  39. BTAC(分支目标地址缓冲)和BHT都是在取指段使用当前指令地址PC访问,但BTAC访问延迟是单周期的,而BHT是双周期的。如果BTAC命中说明当前的取指序列中存在分支指令,则预测分支将会跳转并更新PC。在第二个周期中(译码段),根据从BHT中得到的历史信息,将预测同一条分支指令的方向。如果两者预测相同,则不变,否则BTAC预测失效。

  40. PAs:多个BHSR,多个PHT。s指share,因为PHT的个数无法使得每一个分支都有一个,因此一组分支共享一个PHT,所以称为s

  41. trace cache是一种基于历史信息的取指机制,它将指令的动态执行轨迹信息存储在一个cache中,通过指令地址和分支结果加以访问。轨迹信息是根据动态的分支指令行为收集起来的,包括多个不连续的基本块。每当指令地址命中trace cache,接下来的指令流就从trace cache中取指。trace cache可以看作是按程序先前的执行轨迹对其基本块进行了重排序,当不连续的基本块第一次在支配路径上执行时,结束提交段对其进行合并对齐处理,并生成一个trace存入trace cache中。

  42. 写寄存器称为寄存器的定义,读寄存器称为寄存器的使用。每个寄存器的定义可能对应多个寄存器的使用,定义和最后一次使用之间的持续时间称为该值的活跃区间。

  43. 使用独立的RRF进行寄存器重命名时,读取源操作数的三种情况
    这里写图片描述

  44. 独立的RRF和ARF,两者可以相互独立,也可以集合成一个寄存器文件实现。前者在指令完成之后仍然需要一次数据搬运,后者不需要。集中寄存器文件的实现只需要将寄存器的名称从重命名寄存器改为体系结构寄存器即可。缺点在于提高了硬件复杂度,其次在现场切换要保存机器状态时,包含机器体系结构状态的寄存器子集必须在状态开始保存之前被显式地标出。

  45. 数据流极限:DFG的关键路径(相关边的延迟累加,总的累计延迟最长的相关链)

  46. 一般情况下,保留站中的记录在指令发射后就进行回收并供后续指令分派使用,从而尽可能地避免由于保留站饱和导致的停顿。但是某些指令由于执行时会产生异常,将来某个周期可能要重新调度执行,所以这些保留站直到指令执行完毕且确定无异常后才进行回收。

  47. 指令唤醒:保留站中的某个记录通过监听总线,发现操作数可用,设置“就绪”位为1,表示该指令可以被发射执行,这个过程称为指令唤醒。

  48. 保留站监听总线,匹配标签,执行指令唤醒的过程的硬件称为唤醒逻辑

    保留站在所有的就绪指令中选择指令执行的硬件称为选择逻辑

  49. ROB中的指令从队列的头部提交,每次提交的指令数量取决于可以提交指令数目以及提交带宽,而提交带宽又取决于另外一个路由网络的容量和寄存器写回可用的端口数,最为关键的是体系结构寄存器文件写端口的数,这些端口从重命名寄存器或者ROB向体系结构寄存器传递数据。

  50. 寄存器重命名的目的:消除寄存器重用引起的假相关;建立两条相关指令之间的生产者-消费者关系

  51. 超越数据流极限:值预测、动态指令重用

    • 值预测:同一条静态load指令载入的值往往是可预测的,同时许多指令的计算结果也是可预测的。某些指令往往重复地计算出相同的一组(一个)结果,通过追踪这些指令的计算结果,未来的计算值可以根据历史信息进行预测
    • 动态指令重用:同一指令序列在执行时往往使用相同的一组输入数据,因此机器经常进行重复的工作。总台指令重用技术试图追踪冗余计算,当探测到冗余计算时,先前的计算结果直接被使用而不进行计算操作。
  52. 存储器数据流指令的执行的三个步骤:生成存储器地址,存储器地址转换和数据访问。

  53. 存储器地址转换:虚地址转化为物理地址。一般通过访问快表TLB来完成。TLB是硬件控制的表结构,保存着虚拟地址到物理地址的映射。TLB本质上是存储器中页表的cache。如果当前被转换的虚拟地址所在的页的映射情况未在TLB中,即发生了TLB失效。如果该映射在页表中,则可以通过访问存储器中的页表获取该映射,一旦失效的映射被载入TLB,转换过程也就结束了。如果映射不在页表中,即相关的页还没有进行映射,也不在存储器中,这种情况将导致页故障,并需要访问磁盘存储器检索失效的页。页故障将触发程序异常,同时需要挂起当前程序。
    这里写图片描述

  54. 数据cache缓冲存储器中的部分数据,TLB用来缓冲页表部分中的数据,数据cache和TLB之间的交互如图所示。
    这里写图片描述
    这里写图片描述

  55. 两种乱序执行load指令的技术:载入旁路和载入定向。

    • 载入旁路:当前载入地址和前导store指令不存在别名,即load和store之间不存在存储器数据相关时,将在后的load指令置于前导store指令之前执行
    • 载入定向:当load和store存在别名,即存在RAW相关,则将store的数据直接传递给load指令,load不再访问存储器。
  56. 增加存储器带宽:多端口数据cache(或者是交叉多体存储器)。

  57. load指令的预测:在取指段进行,无需译码和分派。预测表的每一项记录都包含预测的有效地址,在取指段就可以读出,不必再经过保留站等待基址寄存器的值和执行流水线的地址生成。此时对数据cache的访问再下一周期就可以开始,一般在译码段的末尾就能从cache读到数据。(载入地址预测技术)

  58. 载入值预测:对要载入的数据值进行预测,扩展载入预测表,增加载入的数据,从而实现载入值预测。

  59. 存储器相关性预测:在load/store指令执行时跟踪存储器相关信息,并在该load/store指令重新执行时利用这些信息对存储器相关性进行预测,以方便载入旁路和载入定向的提前执行

猜你喜欢

转载自blog.csdn.net/shuiliusheng/article/details/82081714
今日推荐