Appearance
第1章:机器接口与性能度量
指令集、实现与系统
指令集架构 ISA 规定指令效果、寄存器、数据类型、寻址和异常等可见行为。同一 ISA 可以有单周期、流水线、乱序等不同实现,只要满足规定的语义。
ABI 则规定编译后的程序怎样互相调用,例如参数放在哪些寄存器、栈如何对齐、谁保存寄存器。ISA 中存在加法指令,不意味着 ISA 已经规定 C 函数的调用方式。
| 对象 | 主要状态 | 主要责任 |
|---|---|---|
| 处理器核心 | 程序计数器、寄存器、执行队列 | 执行指令并保持可见结果正确 |
| 缓存与内存 | 数据块、标签、映射 | 提供容量、降低平均访问成本 |
| 互连与 I/O | 请求、队列、设备状态 | 在核心、内存和外设间搬运数据 |
| 操作系统 | 进程、页表、资源归属 | 设置保护与共享规则 |
操作系统设置页表,硬件依据页表翻译地址;编译器安排指令,处理器仍可以在规定范围内重排执行。理解接口必须同时明确哪一方制定规则、哪一方执行规则。
执行时间的分解
对一次运行,CPU 时间可写成
是动态指令数,不是程序文件中的静态指令数。CPI 是每条指令的平均周期数,可能因缓存失效、依赖和分支变化。频率更高并不自动更快,因为指令数和 CPI 也可能改变。
机器 A 执行 条指令,CPI 为 1.5,频率 3 GHz,用时 0.5 s。机器 B 频率 4 GHz,但 CPI 为 2.4,指令数相同,用时 0.6 s。只比较 GHz 会得到相反判断。
Amdahl 定律
原程序比例为 的时间被加速 倍,其余不变,则整体加速比为
若只优化占 30% 的部分,即使该部分耗时趋近零,总加速也不超过 。这里的比例必须基于优化前的运行时间;不能拿指令数量占比代替耗时占比。
吞吐量与延迟也应分开:增加并行执行单元可能让单位时间完成更多任务,却未必降低单个串行任务的等待时间。
练习
- 某优化让指令数降低 20%,CPI 增加 10%,频率不变。总时间如何变化?
- 一个系统 CPU 利用率很低,增加核心数为何可能没有效果?
- 区分 ISA、ABI、微体系结构中有关栈的不同规定。