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架构:结合高性能核和高效能核,在不同负载下动态调整,以达到高性能和低功耗的平衡。
  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# 学习对象在全民造车、造芯的大时代,在努力去解决卡脖子的时代,ASIC硬件、SOC底层软件、Linux Kernel等操作系统软件(内核/驱动)、软硬件方面的系统架构师等的岗位需求也越来越明显,社会一直都是非常缺人的,缺的是核心的那一小撮、领头的那一小撮,社会所缺的更是能够软硬件融合的那一小撮人……总之,要想在这个时代,站稳自己的脚跟,能够在大公司或行业上拥有一席之地,就必需深入学习底层技术原理,核心技术才是您的看家本领。本课程设计之初,主要针对SOC底层软件开发的者、系统开发者,或者励志成为这样的人。既适合资深/高级工程师来查缺补漏,又适合初级工程师入门。(理论上该课程和ASIC硬件电路设计无关,该课程偏软件,但事实购买该课程的做ASIC的同学已然超过了15%)适用人群1、芯片开发者(包括底层软件、或做ASIC硬件的)。不限行业,例如车、云、物联网、移动端等领域;2、汽车行业开发者(主机厂、tier1、SOC厂家、各级供应商);3、嵌入式开发者、kernel开发者、驱动、软件工程师;4、学生。既适合学生从入门到精通,也适合资深工程师查缺补漏;您的收益:1、全体系的掌握ARMv8/ARMv9的核心知识点(ARM基础、异常中断GIC、MMU/Cache、architecture...);2、掌握ARM架构、掌握SOC架构、掌握常规IP(gic、smmu、timer、AXI/ACE/CHI、TZC400...);3、快速熟悉常规系统软件(bootrom、spl、ATF、TEE、bootloader、kernel...), Secureboot安全启动...4、技术水平提升N个level, 掌握快速的学习方法;# 学习什么在ARM蓬勃发展的年代,不仅仅涉及到物联网IOT、移动领域(如手机)、汽车电子领域,现在还涉及到PC、服务器的,简直就是各行各业。ARMv8出来已经有10年了,ARMv9也2年时间了。在技术不断更新迭代的背景下,此时再去学习十五年前的ARMv7、二十年前的ARMv5/v6显然不是明智的选择。本课程主要基于当前最新的架构ARMv8的aarch64和ARMv9,如涉及具体的ARM Core IP主要还是以最新的ARM Core IP为主,软件架构也是以当前最主流的/未来所趋势的架构来讲解。以下也给大家列举初了一个ARM产品的timeline的总结(在本课程中有着大量的这种总结),从这张图中,您是可以清晰的看到本课程拥有独具一格的风格、拥有全网最新(且唯一)的资料总结或学习路线。# 本课程大纲和规划(课程持续更新中,课程总量统计:2022/10/02  当前是 61节课, 22小时)第一章:主要是快速学习: ARM简介、指令集、寄存器总结等。第二章:本系列视频的一大亮点,系统全面地讲解了arm异常中断gic等相关的软硬件知识,本人一直在倡导“学arm安全其实就是学arm架构,学arm架构其实就是学习arm的异常和中断”,异常中断是领着你进入架构的入门,是让你变成系统软硬件架构师的必走之路。第三章:安全专题,这也是本视频最核心的东西。因为你无论买书还是看博客等,你都很难找到讲解安全的教程,这里就是有和无的区别。本人系统的整理的安全的知识,带领你快速入门。第四章:mmu专题,透过事务看本质的讲解,白话式的演讲。在所有模块中,mmu也算是相对较简单模块。相信人人听得懂,人人学得会。第五章:cache专题,一切追求实事求是,不人云亦云,一切知识点都有迹可循,推翻了网络的很多观念。在众多模块中,cache算是一个比较难的模块。了解了cache后,才能算真正了解系统的软硬件架构。第六章:虚拟化,本人不擅长,会啥就随便讲点啥。(以后学会了再来补)第七章:architecture,就是零散和零碎的系统架构知识,如exclusive、arch timer、reset、系统启动、SOC设计、AMBA/AXI/ACE、DSU、WFE/WFI这样的。第八章: 新增的ARMv9 CCA/RME安全架构专题第九章:主要放置一些直播课。# 课程收益1、知道我学习什么,我要怎么去学习,从此之后有了一个明确的学习路线。2、认识一些共同目标的人,相互讨论问题,共同进步。勤学、共学、助学。3、ARM不再神秘,SOC不在神秘,让您短期内就能cover住全局4、熟悉ARM Architecture架构知识5、熟悉SOC架构知识6、熟悉主流的系统软件框架7、熟悉各项硬件原理和机制,如异常中断、MMU、cache、TLB、VMSA、Trustzone6、深入了解当前的系统架构、软硬件架构,能够看懂这些大家,将来也能够自己设计。7、熟悉系统的启动流程、Secureboot等8、熟悉各类标准和规范9、能够进入芯片厂商干活、能够在非芯片产生成为技术担当。10、学习资料的获取方法,会看11500多页的ARM手册,会看数以百计的ARM各项参考手册。 本课程会持续更新。也希望通过本课程的学习,能够让大家的ARMv8/ARMv9开发技术能有质的飞越,能找到自己心仪的工作。在购买之前,也建议大家看一看第一章第一节的课程介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值