处理器(CPU/MPU)的双发射是什么?

内容分享2小时前发布
0 0 0

处理器(CPU/MPU)的双发射是什么?

这是一个处理器微架构层面的概念,对于理解现代高性能CPU(包括一些Cortex-M7/M55/M85等高端MCU内核)如何提升性能至关重要。

核心摘要

双发射 是一种处理器设计技术,允许CPU的译码器在一个时钟周期内,同时解码并派发两条指令到不同的执行单元中去执行。它的终极目标是让处理器在一个时钟周期内完成超过一条指令,从而提升指令级并行(ILP)和整体性能。

你可以把它想象成一个银行的柜台:

单发射:只有一个柜台,每个时钟周期只能服务一位顾客(处理一条指令)。双发射:有两个柜台,每个时钟周期可以同时服务两位顾客(处理两条指令)。


1. 从“单发射”说起

要理解双发射,首先要明白传统的“单发射”流水线是如何工作的。

在一个标准的5级流水线(取指 -> 译码 -> 执行 -> 访存 -> 写回)中:

取指(IF):从指令缓存中取一条指令。译码(ID):解析这条指令,弄清楚它要做什么(是加法?还是加载数据?)。执行(EX):在ALU(算术逻辑单元)等部件中执行计算。访存(MEM):如果需要,访问数据缓存。写回(WB):将结果写回到寄存器。

单发射设计中,流水线的每一个阶段,每个时钟周期都只处理一条指令。理想情况下,CPI(Cycles Per Instruction,每条指令所需周期数)等于1。


2. “双发射”是如何工作的?

双发射处理器对流水线进行了增强,主要体现在译码和派发阶段。

取指:一个时钟周期内,CPU可以从指令缓存中取出多条指令(比如两条)。这通常需要更宽的指令总线和支持多指令取出的取指单元。

译码与派发(核心)

CPU有一个多发射译码器。它不再是逐条译码,而是同时查看多条指令(例如,一个指令包)。译码器会快速检查这些指令之间是否存在依赖关系(比如第二条指令需要使用第一条指令的结果)。如果这些指令没有依赖关系,并且所需的执行单元有空闲,译码器就可以在一个时钟周期内,将这两条指令同时派发到流水线的执行阶段。

执行与后续:之后,这两条指令就像两辆并排行驶在高速路上的车,各自独立地经过执行、访存(如果需要)、写回等阶段。

一个简单的例子:
考虑以下两条指令:


ADD R1, R2, R3
; (R1 = R2 + R3)
MOV R4, #10
; (R4 = 10)

这两条指令:

没有依赖关系:它们操作的是不同的寄存器(R1 和 R4)。需要的执行单元不同:ADD需要ALU,MOV可能只需要一个简单的整数单元。

在一个双发射处理器中,译码器可以同时将这两条指令派发出去,让它们在同一个时钟周期开始执行。从而,这个时钟周期就完成了两条指令的工作。


3. 关键挑战与限制

双发射并非总能实现。译码器在每个周期都需要做出判断,能否同时发射两条指令。主要的限制来自:

数据相关性(Data Hazard)

真数据相关(True Dependency / RAW):如果第二条指令需要用到第一条指令的结果,它们就不能同时发射。

ADD R1, R2, R3
; 先计算 R1
MOV R4, R1
; 然后需要使用 R1 -> 有依赖,不能同时发射!
这种情况下,处理器必须等待第一条指令执行完成,结果就绪后,才能发射第二条指令。

结构相关性(Structural Hazard)

如果两条指令需要同一个硬件执行单元,它们就无法同时执行。

ADD R1, R2, R3
; 需要ALU
MUL R4, R5, R6
; 也需要ALU -> 资源冲突,不能同时发射!
双发射处理器通常配备多个执行单元(例如多个ALU、专用的加载/存储单元、分支单元等)来减少这种冲突。

控制相关性(Control Hazard)

遇到分支指令(如if/else、循环)时,处理器在分支目标地址确定之前,无法知道下一条该取哪里的指令。这会打断指令流的连续性,严重影响多发射效率。这个问题主要通过分支预测技术来缓解。


4. 与超标量(Superscalar)的关系

双发射是超标量技术的一种具体实现超标量是一个更广义的概念,指的是CPU内核拥有在一个时钟周期内派发并执行多条指令的能力。“双发射”特指“一个周期发射两条指令”的超标量设计。同理,还有三发射四发射甚至更宽的设计(如苹果M系列、Intel/AMD的桌面CPU可能高达6发射甚至更宽)。发射宽度越宽,设计越复杂。


5. 在嵌入式领域的应用(Cortex-M)

Cortex-M0/M0+/M3/M4 等内核是单发射处理器。它们每个周期最多完成一条指令。Cortex-M7 是ARM Cortex-M系列中首个采用双发射超标量流水线的高性能内核。这是其性能远超M4的关键原因之一。它的流水线非常复杂,可以同时派发两条指令到两个不同的执行流水线(例如,一个整数运算指令和一个内存访问指令)。Cortex-M55/M85 等后续高性能内核也继承了这种多发射设计。

总结对比

特性 单发射 (e.g., Cortex-M4) 双发射 (e.g., Cortex-M7)
核心能力 一个时钟周期最多解码和派发1条指令 一个时钟周期最多可解码和派发2条指令
流水线利用 理想CPI = 1 理想CPI < 1 (e.g., 0.5,即周期完成2条指令)
性能 较低 更高,在代码并行度高时,性能可达近乎翻倍
硬件复杂度 相对简单,功耗和面积更小 复杂得多,需要多套执行单元、复杂的译码和依赖检测逻辑
对代码的要求 无特殊要求 代码的并行度直接影响效率。依赖少的顺序代码能更好地利用双发射优势

结论:

双发射是一种通过增加硬件复杂度和功耗为代价,来显著提升CPU指令级并行度和性能的关键技术。它让处理器能够“一心二用”,同时处理两条指令,是现代高性能处理器设计的基石之一。

© 版权声明

相关文章

暂无评论

none
暂无评论...