CPU内部结构窥探·「6」--ARMv8架构内部数据通路详解及优化技术

ARMv8架构内部数据通路详解及优化技术

ARMv8架构是ARM处理器的一个重要版本,引入了64位处理能力,并在性能和功能上进行了显著增强。本文将详细介绍ARMv8架构中的数据通路,包括关键组件及其协作方式。

概念铺垫

1. 系统总线

系统总线是连接处理器内部各个组件和外部设备的数据传输通道。在数据通路中,总线负责传输指令、数据和控制信号,确保各个组件能够协调工作。

2.总线架构

ARMv8处理器内部通常包含多个总线,如指令总线、数据总线和控制总线。指令总线传输指令,数据总线传输数据,控制总线传输控制信号和状态信息。

3.总线接口

总线接口用于连接处理器内部组件和外部设备,如内存、存储设备和外设。通过总线接口,处理器能够与外部设备进行数据交换,实现多核并行处理和外设控制。


在ARMv8架构中,处理器执行指令时数据通路的工作流程可以分为以下几个主要阶段:取指(Fetch)、译码(Decode)、操作数读取(Operand Read)、执行(Execute)和结果写回(Write Back)。此外,ARMv8处理器采用了多种优化技术,如流水线(Pipeline)、超标量(Superscalar)、寄存器重命名(Register Renaming)和分支预测(Branch Prediction),以提高处理器性能和效率。

数据通路的工作流程

1. 取指(Fetch)

步骤
  1. 程序计数器(PC):存储当前要执行的指令的内存地址。
  2. 指令缓存(Instruction Cache, I-Cache):处理器首先在指令缓存中查找当前PC指向的指令。
  3. 指令总线(Instruction Bus):如果指令缓存命中,指令通过指令总线传输到指令寄存器(Instruction Register);如果未命中,则通过内存管理单元(MMU)从主存获取指令。
详细过程
  • PC读取:程序计数器的值传送到指令地址生成单元,生成要取指的地址。
  • I-Cache查找:指令地址生成单元将地址传送到I-Cache,检查指令是否在缓存中。
  • 内存访问:如果I-Cache未命中,通过MMU和系统总线从主存读取指令,更新I-Cache。
  • 指令传输:指令通过指令总线传输到指令寄存器,准备进行下一步的译码。

2. 译码(Decode)

步骤
  1. 指令寄存器(Instruction Register):存储当前要执行的指令。
  2. 控制单元(Control Unit):将指令译码,生成控制信号,确定操作类型和操作数。
  3. 寄存器文件(Register File):确定需要读取的源操作数寄存器。
详细过程
  • 指令解析:控制单元读取指令寄存器中的指令,并将其拆分为操作码(Opcode)和操作数字段。
  • 生成控制信号:根据操作码生成相应的控制信号,用于控制ALU、FPU/SIMD单元、寄存器文件和内存访问。
  • 确定操作数:控制单元确定指令中指定的源操作数寄存器,并准备读取这些寄存器中的数据。

3. 操作数读取(Operand Read)

步骤
  1. 寄存器文件:读取源操作数寄存器中的数据。
  2. 内存管理单元(MMU):如果操作数在内存中,通过MMU和数据缓存(Data Cache, D-Cache)获取数据。
  3. 数据总线(Data Bus):传输从内存读取的数据。
详细过程
  • 读取寄存器:寄存器文件根据译码阶段确定的源操作数寄存器,读取相应的寄存器数据。
  • 内存访问:如果操作数需要从内存中读取,通过MMU和D-Cache进行地址转换和数据缓存查找。
    • D-Cache查找:检查操作数是否在数据缓存中,如果命中,则直接读取。
    • 主存读取:如果D-Cache未命中,通过系统总线从主存读取数据,并更新缓存。
  • 操作数准备:将读取的操作数传送到ALU或FPU/SIMD单元,准备执行运算。

4. 执行(Execute)

步骤
  1. 算术逻辑单元(ALU):执行整数算术和逻辑运算。
  2. 浮点和矢量单元(FPU/SIMD):执行浮点和矢量运算。
  3. 条件判断:根据运算结果更新状态寄存器(Condition Flags)。
详细过程
  • ALU操作:如果指令是整数运算,操作数传送到ALU,ALU执行加减乘除、逻辑运算、位移操作等,并生成结果。
  • FPU/SIMD操作:如果指令是浮点或矢量运算,操作数传送到FPU/SIMD单元,执行浮点加减乘除、矢量运算等,并生成结果。
  • 状态寄存器更新:根据运算结果,更新状态寄存器中的条件标志,如零标志、负标志、溢出标志和进位标志。

5. 结果写回(Write Back)

步骤
  1. 寄存器文件:将运算结果写回目的寄存器。
  2. 内存管理单元(MMU):如果结果需要存储到内存,通过MMU和D-Cache进行地址转换和数据存储。
  3. 数据总线:传输结果数据到内存。
详细过程
  • 写回寄存器:如果运算结果是写回到寄存器文件,控制单元将结果传送到目的寄存器,更新寄存器文件。
  • 存储到内存:如果运算结果需要存储到内存,通过MMU和D-Cache进行地址转换和缓存查找。
    • D-Cache存储:将结果数据写入D-Cache,如果缓存命中,则更新缓存内容。
    • 主存更新:如果缓存未命中,或者需要强制写回主存,通过系统总线将数据传送到主存。
  • 完成指令执行:更新程序计数器(PC),指向下一条指令的地址,准备进入下一轮指令取指阶段。

数据通路优化技术

1. 流水线(Pipeline)

概念

流水线是一种将指令执行过程分解为多个阶段的方法,使得多条指令可以同时在不同的阶段执行。每个阶段独立完成一部分工作,从而实现指令的并行处理。

工作原理
  • 阶段划分:ARMv8处理器通常将指令执行分为多个阶段,例如取指(Fetch)、译码(Decode)、操作数读取(Operand Read)、执行(Execute)、存储(Memory Access)和写回(Write Back)。
  • 并行执行:不同的指令在不同的流水线阶段并行执行。例如,当第一条指令在执行阶段时,第二条指令可能在译码阶段,第三条指令可能在取指阶段。
  • 流水线寄存器:每个阶段之间有流水线寄存器,用于存储当前阶段的输出,作为下一个阶段的输入。
优化效果
  • 提高吞吐量:通过并行执行多条指令,提高了处理器的指令吞吐量。
  • 减少每条指令的平均执行时间:尽管单条指令的执行时间不变,但由于多条指令并行执行,总的执行时间减少。
相关技术
  • 流水线深度:增加流水线的深度(增加阶段数)可以进一步提高吞吐量,但也可能增加分支预测失败和流水线冲刷的代价。
  • 超长指令字(VLIW):一些处理器采用超长指令字架构,在单个指令周期内执行多条操作,进一步提高并行度。

2. 超标量(Superscalar)

概念

超标量架构允许处理器在一个时钟周期内发射和执行多条指令。通过增加多个功能单元(如ALU、FPU/SIMD单元),处理器可以并行处理更多的指令。

工作原理
  • 指令发射:在每个时钟周期,处理器可以发射多条指令到不同的执行单元。
  • 并行执行:多个执行单元(如ALU、FPU)并行执行不同的指令,增加指令级并行性(ILP)。
  • 指令调度:动态指令调度机制根据指令的依赖关系和执行单元的可用性,动态安排指令的执行顺序。
优化效果
  • 提高指令吞吐量:通过并行执行多条指令,提高了每个时钟周期内的指令完成数。
  • 减少执行延迟:并行执行减少了指令序列中的依赖延迟,提高了整体性能。
相关技术
  • 动态指令调度(Dynamic Scheduling):处理器动态决定指令的执行顺序,避免指令间的依赖冲

突。

  • 静态指令调度(Static Scheduling):编译器在编译时决定指令的执行顺序,优化指令并行度。

3. 寄存器重命名(Register Renaming)

概念

寄存器重命名是一种解决数据相关性(如WAR、WAW依赖)的方法。通过动态分配物理寄存器,处理器避免了寄存器间的命名冲突,增加指令并行执行的机会。

工作原理
  • 逻辑寄存器和物理寄存器:将逻辑寄存器映射到更多的物理寄存器,通过重命名避免数据相关性问题。
  • 重命名表(Rename Table):维护逻辑寄存器到物理寄存器的映射关系。
  • 重命名过程:在指令译码阶段,将指令中使用的逻辑寄存器动态映射到物理寄存器,更新重命名表。
优化效果
  • 消除相关性:通过重命名消除WAR(写后读)和WAW(写后写)依赖,提高指令并行度。
  • 增加并行度:更多的物理寄存器提供了更多的操作数存储空间,允许更多的指令同时执行。
相关技术
  • 寄存器分配算法:不同的寄存器分配算法影响重命名的效率和性能。
  • 重命名缓冲区(Rename Buffer):用于临时存储重命名后的寄存器映射信息,保证指令执行的正确性。

4. 分支预测(Branch Prediction)

概念

分支预测是一种减少分支指令导致的流水线冲刷的方法。通过预测分支指令的执行路径,处理器可以提前取指和执行指令,减少分支延迟。

工作原理
  • 历史信息:基于分支指令的历史执行结果,预测下一次分支的走向。
  • 预测算法:使用简单的静态预测或复杂的动态预测算法(如二级预测器、全局历史预测)。
  • 预测缓存(Branch Target Buffer, BTB):存储分支指令的预测信息,包括预测结果和目标地址。
  • 流水线预取:根据预测结果,处理器提前取指和执行预测路径上的指令。
优化效果
  • 减少分支延迟:通过正确预测分支走向,减少因分支指令导致的流水线冲刷,提高指令执行效率。
  • 提高流水线利用率:提前取指和执行预测路径上的指令,提高流水线的利用率和指令吞吐量。
相关技术
  • 静态预测:基于简单规则(如前向分支总是预测不跳转,后向分支总是预测跳转)进行预测。
  • 动态预测:基于历史信息和复杂算法(如二级预测器、全局历史预测)进行预测,提高预测准确性。
  • 分支目标缓存(BTB):存储分支目标地址,快速确定分支跳转目标,减少取指延迟。

综合优化

技术结合

以上优化技术常常结合使用,以进一步提高处理器性能。例如,超标量架构结合动态指令调度和寄存器重命名,可以最大限度地提高指令并行度。分支预测技术则可以减少分支指令带来的性能损失,确保流水线的高效运行。

实例应用

  • Intel的Hyper-Threading技术:结合多线程和超标量架构,提高处理器的并行处理能力。
  • ARM的big.LITTLE架构:结合高性能核和高效能核,在不同负载下动态调整,以达到高性能和低功耗的平衡。

你可能感兴趣的:(计算机体系结构,微机原理,计算机组成原理,arm)