这也许是更多的是讨论问题的,但我认为计算器可以问它正确的地方。我学习指令流水线的概念。我一直在告诉我们,吞吐量一次流水线级数增加一个流水线指令增加,但在某些情况下,吞吐量可能不会改变。在什么情况下,会出现这种情况?我想到的是拖延和分支可能是问题的答案,但我不知道如果我失去了一些东西是至关重要的。

有帮助吗?

解决方案

在整个可通过其他指令等待结果时,或在高速缓存未命中被停止。流水线本身并不保证操作是完全独立的。 下面是有关在x86的Intel / AMD架构的复杂性有很大演示: http://www.infoq.com/presentations/click-crash-course-modern-hardware

据介绍这样的东西很详细,并涵盖如何进一步提高吞吐量和延迟隐藏一些解决方案。 JustJeff提到乱序执行为一体,并且您有不是由程序员模型(在x86多于8个寄存器)暴露影子寄存器,并且还具有的分支预测。

其他提示

同意。最大的问题是暂停(等待前面的指令的结果),和不正确的分支预测。如果您的管道是20级深,你拖延等待条件或操作的结果,你要等待更长的时间比,如果你的管道只有5个阶段。如果预测错误的分支,你必须冲洗20只说明了管道,而不是5。

我想大概你可以有一个深刻的管道在多个阶段试图访问相同的硬件(ALU,等等),这将导致性能损失,但希望你足够的额外单位,以支持每个阶段抛出。

指令级并行已收益递减。特别是,指令之间的数据相依性确定可能的平行度。

考虑读取的写入(被称为RAW在教科书)之后的情况。

在其中第一操作数得到的结果的语法,考虑本实施例中。

10: add r1, r2, r3
20: add r1, r1, r1

线10的结果必须由线10的计算开始的时间是已知的。数据转发减轻这个问题,但只...到数据获取已知的点。

我也认为增加流水线之外的时间量在一系列最长的指令将采取执行不会导致性能增加。我认为,拖延和分支是根本问题,但。

绝对档/气泡在长管道引起的吞吐量的损失巨大。当然,更长的管道中的更多的时钟周期被浪费。

我试了很长一段时间想其他的场景中长管道可能会导致性能损失,但一切又回到摊位。 (以及执行单元和问题的方案号,但是这些没有太多与管道长度做。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top