计算机体系结构的历史演进¶
历史不是型号年表,而是观察“瓶颈如何迁移”的实验记录。每一代设计都在解决当时最昂贵的问题,同时把新的复杂性推到下一代。
从专用接线到存储程序¶
早期机器常需重新接线或设置开关来改变任务。存储程序思想把指令也编码为内存中的数据,CPU 依次取指和执行。程序由此可以被加载、复制和修改,通用计算机才真正成为软件平台。
冯·诺依曼结构让指令和数据共享存储通路,结构简单,却形成“冯·诺依曼瓶颈”:处理器算得越来越快,取指和访存带宽却有限。现代 cache、预取和宽总线都在缓解这条老问题。
集成电路与微处理器¶
真空管被晶体管替代后,器件更小、更可靠;集成电路又把大量器件和连线放到同一芯片。微处理器把 CPU 集成到单芯片,成本下降,个人计算和嵌入式系统迅速扩张。
摩尔定律描述可经济集成的晶体管数量长期增长,Dennard 缩放曾使晶体管变小后功耗密度大致可控。设计者可以通过提高频率、加深流水线和增加复杂执行单元,让单线程性能持续提升。
RISC 与 CISC 的争论¶
存储昂贵、编译器不成熟时,复杂指令可提高代码密度并减轻软件负担,形成 CISC 路线。随着集成度提高和编译技术进步,RISC 强调规则编码、较少寻址方式和 load/store 结构,便于流水化和硬件实现。
今天二者边界已模糊:x86 处理器常把复杂指令译成内部微操作;RISC-V 的压缩、向量和原子扩展,以及 Arm 的 Thumb 编码、SVE/SME,也说明现代“RISC”会为代码密度和专用并行不断扩展 ISA。真正有用的问题不是“谁绝对更好”,而是接口复杂性由软件、译码器还是执行核心承担。
功耗墙与多核转向¶
频率越高,动态功耗通常越大:
其中 \(\alpha\) 是翻转活动因子,\(C\) 是等效电容,\(V\) 是电压,\(f\) 是频率。电压不再容易同步下降后,继续拉高频率会遇到散热和能效限制。于是芯片把更多晶体管用于多核、更大 cache、向量单元和专用加速器。
这次转向的代价是并行性被推给软件:两个核心并不自动让串行程序快两倍,数据划分、同步和一致性成为新瓶颈。
从通用到领域专用¶
GPU、张量处理器和视频编解码器用较低灵活性换取更高能效。它们往往扩大规则并行度,减少复杂控制,把芯片面积用于更多算术单元或本地存储。
适用条件是工作负载足够稳定、并行结构清晰、数据搬运可控。若算法频繁变化或控制流高度不规则,专用化收益会被开发成本和低利用率抵消。
一条演进规律¶
改进不会消灭成本,只会移动成本:
- 流水线提高吞吐量,但引入冒险;
- cache 隐藏主存延迟,但引入一致性和不可预测性;
- 多核增加算力,但引入通信与同步;
- 专用加速提高能效,但牺牲通用性。
理解这条规律,比记住某代 CPU 的参数更能迁移到未来架构。
自测¶
- 存储程序思想解决了什么问题,又留下什么瓶颈?
- 为什么功耗墙会推动多核,而多核不能保证程序线性加速?
- 现代 RISC 和 CISC 为什么趋于融合?接口层与内部实现分别发生了什么?