【好奇一刻】芯片性能评估&内核优化路线(1)
文章目录
-
- 前言
- 性能评测方法
- 指令执行
- 指令级并行(ILP)
- 单指令多数据(SIMD架构)
- 单指令多线程(SIMT架构)
- Cache设计
- DMA技术
- AMBA总线架构设计
- 中断系统
- XIP技术
- IPC通信
- 小结
索引
前言
芯片技术迭代不断年年有新品发布,如何选择一款适合的平台?如何洞察芯片底层的技术更新?希望一起交流,我负责记录。
指性能评测方法
- 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] ; 并行加
转下章节……
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)