为什么增加管道深度并不总是意味着增加吞吐量?

use*_*392 7 assembly intel pipelining

这可能更像是一个讨论问题,但我认为stackoverflow可能是一个正确的问题.我正在研究指令流水线的概念.我被告知,一旦管道级数增加,管道的指令吞吐量就会增加,但在某些情况下,吞吐量可能不会改变.在什么条件下,这会发生吗?我认为停滞和分支可能是问题的答案,但我想知道我是否遗漏了一些至关重要的东西.

小智 4

当等待结果或缓存未命中时,整个过程可能会被其他指令停止。管道本身并不保证操作是完全独立的。以下是有关 x86 Intel/AMD 架构复杂性的精彩演示:http://www.infoq.com/presentations/click-crash-course-modern-hardware

它非常详细地解释了此类内容,并涵盖了一些有关如何进一步提高吞吐量和隐藏延迟的解决方案。JustJeff 提到了乱序执行,并且你有程序员模型未公开的影子寄存器(x86 上超过 8 个寄存器),并且你还有分支预测。