冒险和预测(一)
- 1. 超长流水线的缺点
- 2. 冒险和分支预测
- 参考
1. 超长流水线的缺点
增加流水线的深度,在同主频下,其实就是降低了 CPU 的性能。
一个 Pipeline Stage,就需要一个时钟周期。如果我们把任务分成 31 个阶段,就需要 31 个时钟周期才能完场一个任务;而把任务拆分成 11 个阶段,就需要 11 个时钟周期就能完成任务。在这种情况下,31 个 Stage 的 3GHz 主频的 CPU,其实和 11 个Stage 的 1 GHz 主频的 CPU 性能差不多。事实上,每个 Stage 都需要有对应的 Pipeline 寄存器的开销,此时,更深的流水线性能可能还会更差些。
流水线技术并不能缩短单条指令的响应时间这个性能指标,但是可以增加在运行很多指令时候的吞吐率。
提升流水线深度,必须要和提升 CPU 主频同时进行。
因为在单个 Pipeline Stage 能够执行的功能变简单了,也就意味着单个时钟周期内能够完成的事情变少了。所以,只有提升时钟周期,CPU 在指令的响应时间这个指标上才能保持和原来相同的性能。同时,由于流水线深度的增加,我们需要的电路数量变多了,也就是所使用的晶体管也就变多了。
主频的提升和晶体管数量的增加都使得我们 CPU 的功耗变大了。
2. 冒险和分支预测
流水线技术带来的性能提升,是一个理想情况。在实际的程序执行中,不一定能做得到。
要想完全利用流水线,意味着:如果我们有 20 级流水线,意味着我们要确保这 20 条指令没有依赖关系。
这个依赖问题就是冒险(Hazard)问题。有数据冒险、结构冒险、控制冒险等其他的依赖问题。
为了解决这些依赖问题,我们有乱序执行、分支预测等相应的解决方案。
参考
极客时间《深入浅出计算机组成原理》:http://gk.link/a/11UMi