流水线与冒险
流水线通过将指令处理划分为多个阶段,重叠执行连续指令,从而提高吞吐量;冒险是指阻止下一条指令在后续周期中继续执行的情况——包括资源冲突、数据依赖和分支。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
流水线是一种通过将指令处理划分为顺序阶段来重叠执行多条指令的技术,而冒险是指任何导致某个阶段停顿的条件,因为它无法在下一个时钟周期正确进行。
Scope
本主题涵盖经典的指令流水线及其限制的三类冒险:结构冒险(资源冲突)、数据冒险(指令间依赖)和控制冒险(分支)。它包括标准的解决方法——转发/旁路、停顿和分支处理。它不包括高级并行发射(指令级并行)、深入的分支方向预测(分支预测)和动态重排序(乱序执行)。
Core questions
- 将指令执行划分为多个阶段如何在不降低延迟的情况下提高吞吐量?
- 什么是结构冒险、数据冒险和控制冒险,以及每种冒险的原因是什么?
- 转发如何在不停顿的情况下解决许多数据冒险?
- 流水线中分支的代价是什么,以及如何缓解?
Key concepts
- 流水线阶段(取指、译码、执行、访存、写回)
- 吞吐量与延迟
- 结构冒险
- 数据冒险
- 控制冒险
- 转发与旁路
- 流水线停顿与气泡
- 分支开销
Key theories
- 流水线吞吐量与冒险
- 一个k级流水线在填充后理想情况下每个周期完成一条指令,但结构冒险、数据冒险和控制冒险会引入停顿,从而使吞吐量低于理想值;流水线设计的核心在于最小化这些停顿。
Mechanisms
指令处理被分成多个阶段,这样当一条指令正在执行时,其他指令正在被取指和解码。当两条指令需要相同的资源时,就会出现结构冒险;当一条指令需要尚未产生的结果时,就会出现数据冒险;当下一条指令依赖于未解决的分支时,就会出现控制冒险。转发将结果直接在阶段之间传递,当转发不足时,停顿会插入气泡,而分支处理则减少了控制冒险的开销。
Clinical relevance
流水线是几乎所有处理器中的基础性能技术,理解冒险可以解释为什么指令排序和分支行为会影响速度。编译器指令调度和程序员对依赖关系及分支模式的了解可以显著提高流水线硬件的性能。
History
流水线技术在20世纪60年代早期的高性能机器中出现,如IBM Stretch和CDC 6600。简单的五级流水线在20世纪80年代随着RISC处理器的出现成为规范的教学和设计模型,而冒险及其补救措施的系统分类则在Hennessy-Patterson的著作中被编纂成文。
Key figures
- John L. Hennessy
- David A. Patterson
- Seymour Cray
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- 流水线是否能让单条指令运行得更快?
- 不能。流水线不会减少完成一条指令所需的时间(延迟);它通过重叠执行来增加单位时间内完成的指令数量(吞吐量),这很像装配线在不加速任何单个产品的情况下提高产量。
- 什么是转发?
- 转发,或称旁路,是将刚计算出的结果直接从产生它的阶段路由到需要它的后续阶段,而不是等待它写回寄存器文件。这在不停顿流水线的情况下解决了许多数据冒险。