关于《深入理解计算机系统》5.5题算术运算时钟周期限制的疑问
《深入理解计算机系统》5.5题时钟周期疑问解析
5.5题核心原因:指令级并行与关键路径瓶颈
先明确两个前提:double类型加法延迟3周期,乘法延迟5周期;现代CPU支持超标量并行和流水线重叠执行,只要指令间无数据依赖,就能同时启动或重叠执行。
回到题目循环:
- 第7行的
y[i] = a*x[i] + b包含乘法a*x[i]和加法+b,两者存在数据依赖(加法需要乘法的结果),但流水线可以让加法在乘法执行到第3周期时启动——乘法从周期1开始,周期5完成;加法从周期3开始,周期5完成(3周期延迟)。所以第7行整个操作的实际耗时是5周期,而非3+5=8。 - 第8行的操作形成了跨迭代的依赖链:下一次迭代的第8行操作必须等待当前迭代的第8行操作完成才能启动,而乘法的延迟是5周期,这就成了循环的瓶颈。
- 同时,第7行的操作和第8行的操作无跨迭代依赖,可以并行执行——在第8行的乘法执行的5周期内,第7行的操作已经完成。因此整个循环的单迭代开销由第8行的5周期延迟决定。
5.6题对比:无有效并行的依赖链
5.6题的循环结构中,关键路径是连续的依赖操作链:某行的加法依赖前一行的乘法,而该乘法又依赖上一次迭代的加法结果,形成了乘法(5周期)→加法(3周期)的串行依赖,且无法通过超标量CPU并行拆分。这种情况下,每一次迭代必须等上一次的乘加操作完全完成才能开始,因此单循环开销是5+3=8周期。
内容的提问来源于stack exchange,提问作者waynewingorc
相关产品推荐
相关产品推荐

