文章目录

    • 前言
    • 性能评测方法
    • 指令执行
    • 指令级并行(ILP)
    • 单指令多数据(SIMD架构)
    • 单指令多线程(SIMT架构)
    • Cache设计
    • DMA技术
    • AMBA总线架构设计
    • 中断系统
    • XIP技术
    • IPC通信
    • 小结

索引

前言

指性能评测方法

指令执行分析

实例分析指令

取指策略

指令级并行(ILP)

多执行单元

指令流水线技术(Pipeline)

分支预测(Branch Prediction)

超标量架构(Superscalar)

超长指令架构(VLIW)

转下章节……


前言

芯片技术迭代不断年年有新品发布,如何选择一款适合的平台?如何洞察芯片底层的技术更新?希望一起交流,我负责记录。

指性能评测方法

  • ​​IPC​​ (Instructions Per Cycle):每周期指令数
  • MIPS(Million Instructions executed Per Second)MIPS表示每秒执行百万条指令,是衡量CPU处理能力的一种标准。它反映了CPU在同一秒内能够执行多少指令。

  • ​​DMIPS/MHz​​ = IPC × (Dhrystone指令数/参考机指令数)
  • ​​CoreMark/MHz​​ = IPC × (CoreMark迭代指令数/周期数)

特性​​

​​DMIPS/MHz​​

​​CoreMark®/MHz​​

​​基准测试起源​​

基于 Dhrystone (1984)

EEMBC CoreMark (2009)

​​测试内容​​

整数运算、字符串处理、函数调用

链表操作、矩阵运算、状态机、CRC

​​代码结构​​

简单循环(易被编译器优化)

复杂数据结构(更贴近真实负载)

​​单位意义​​

每MHz执行百万条Dhrystone指令数

每MHz完成CoreMark迭代次数

​​现代适用性​​

已过时(易被编译器作弊优化)

行业标准(抗编译器优化)

​​典型值范围​​

1.0 - 3.5 DMIPS/MHz

3.0 - 6.0 CoreMark/MHz

指令执行分析

讨论指令执行我们必需往祖坟上刨。Intel 4004,80C51 是典型的“顺序、非流水”微架构。80C51由于出生晚指令执行更规范,经典,易懂。以80C51为例进行分析。

;​​加法指令​​:将累加器A的值与一个操作数相加,结果存回A,并设置标志位(CY, AC, OV等)。
;​​ADD A, #data​​:2字节指令(操作码 + 立即数),执行时间:1个机器周期(12个时钟周期)。
;​​ADD A, direct​​:2字节指令 (操作码 + 直接地址)。执行时需从RAM(直接地址)读取操作数,而非立即数,但仍在1个机器周期内完成。
;​​ADD A, @Ri:1字节指令 ​​:(操作码:间接寻址)。需从R0/R1指向的RAM地址读取操作数,增加内部RAM访问时间,但仍为1个机器周期。
;C = A + B    假设变量 A、B、C分别存储在内部RAM的地址 30H、31H、32H中
MOV A, 30H    ; 将A的值加载到累加器(1机器周期)
ADD A, 31H    ; A + B,结果在A中(1机器周期)
MOV 32H, A    ; 结果存入C(1机器周期)

实例分析指令

ADD A, 31H

这是一个直接寻指指令,将一个地址(31H)的值与累加器A相加。这条指令长度为2字节。

执行过程分解:​阶段1:取指(S1-S6);阶段2:执行(S7-S12)​

S1~S2:

CPU将程序计数器(PC)中的16位地址发送到地址总线上。在S1期间,ALE信号变高,指示地址有效。在S2结束时,ALE信号下降变低,这个下降沿告诉外部的地址锁存器(如74HC373)​​锁存地址的低8位(PCL)​​,因为51单片机的P0口是地址/数据复用的。

​S3~S4:​

 CPU从程序存储器(ROM)中读取​​第一个字节(操作码)​​,并通过P0口的数据总线将其取回。 读取信号(PSEN#)在S3期间变低有效,允许ROM输出数据。在S4期间,读取到的操作码被存入CPU内部的​​指令寄存器(IR)​​ 中。至此,CPU知道了它要执行的是一条“MOV A, #data”指令.

S5~S6:

PC+1,指向操作数(31H)的地址,同时CPU译码识别出需读取直接地址。

S7~S8:

发送PC+1地址(指向31H),ALE信号再次有效并锁存地址。

S9-S10​​:

从程序存储器读取直接地址 31H(操作数地址),但此时不直接使用该值,而是将其作为RAM地址。从RAM地址 31H读取数据​​:通过内部RAM总线读取 B的值。

S11-S12​​:

​ALU执行加法​​:将A的值与从 31H读取的 B相加。结果写回A​​,并更新标志位,​​CY​​:进位标志(若和≥256)AC​​:低4位进位(用于BCD调整)OV​​:有符号溢出(若结果超出-128~127)。

取指策略

ARM 的产品线分为三大类,其取指策略截然不同:

        Cortex-M​​ (微控制器):​​32位取指​​,极致能效比。

        Cortex-R​​ (实时处理器):​​128位取指​​,高性能和实时性。

        Cortex-A​​ (应用处理器):​​超宽取指 + 多发射​​,追求绝对性能。

指令级并行(ILP)

多执行单元

多执行单元是所有并行操作的基础。一般芯片内核都有多个ALU(算术和逻辑运算单元),MUL(乘法器),MAC(乘加单元)……

例如Cortex-M4:

​​取指位宽​​: ​​32位​​,用于高效抓取变长Thumb-2指令流。并行性​​: 不是传统的多发射、多流水线。而是 ​​“单发射、多执行单元”​​ 的架构。

前端(取指、译码)是单车道​​。​​

后端(执行)是多车道​​,有专门的快车道(地址计算单元)、重载车道(MAC单元)和普通车道(主ALU)。这种设计完美契合了Cortex-M4的目标市场:​​在保持低功耗和较小芯片面积(成本)的同时,为嵌入式应用(尤其是数字信号控制和混合信号控制)提供强大的计算吞吐量。​​ 它通过硬件 specialization(专门化)来实现并行,而不是通过复杂的多发射逻辑。

指令流水线技术(Pipeline)

每个时钟周期都会有一条指令完成执行(从流水线的末端输出)。这就实现了 ​​“单发射、但每个周期完成一条指令”​​ 的理想状态,即 ​​CPI = 1​​。

分支预测(Branch Prediction)

当遇到条件分支指令(如if、loop)时,处理器需要判断是跳转还是继续顺序执行。如果等到结果计算出来再取指,会导致流水线​​停滞(Stall)​​(即出现气泡)。预测​​机制它会预测所有向后的分支(通常是循环)为“跳转”,从而提前从目标地址取指,避免流水线停滞,减少了等待周期。

超标量架构(Superscalar)

1、超标量 → ​​隐式并行​,硬件​​负责发现并行。

2、多发射

多发射超级标量结构的cpu支持指令级并行,每个周期可以发射多条指令(2-4条居多),这样,可以使得cpu的IPC(InstructionPer Clock) > 1, 从而提高cpu处理速度。超级标量机能同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件,在程序运行期间,由硬件(通常是状态记录部件和调度部件)来完成指令调度。

3、乱序执行

超长指令架构(VLIW)

1、VLIW → 显式并行​​。​​编译器​​负责发现并行 ​​。

2、指令包总位宽 = (操作码位数 + 操作数位数) * 并行槽位数量 + 控制位。以经典256位VLIW(TI C6000系列)为例:​​一个典型的8并行槽位VLIW指令包被划分为多个​​功能单元区段​​,每个区段包含一条完整指令的操作码和操作数,编译器将无依赖指令打包成​​超长指令字​​(如256位)。

3、缺点:硬件简单执行,​​无动态调度能力,不同宽度VLIW处理器(如4路 vs 8路)需重新编译​;空槽用NOP填充(浪费带宽)。

例如:

; TI C64x+ 指令包(8条并行操作) 
[LDW.D1 *A0++, A1 || LDW.D2 *B0++, B1] ; 并行加载 
[MPY.M1 A1, A2, A3 || MPY.M2 B1, B2, B3] ; 并行乘法 
[ADD.L1 A3, A4, A5 || ADD.L2 B3, B4, B5] ; 并行加

转下章节……

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐