每个分支错误预测的浪费周期数会相差很大吗?为什么?

问题描述 投票:0回答:1

当了解按顺序执行的基本 5 级管道处理器时,当处理器被刷新时,每个分支错误预测的浪费周期数是一个常数。

但是具有深管道的多问题无序现代处理器又如何呢?对于课程,我们在处理器上运行不同程序的模拟,每个错误预测的浪费周期数根据同一处理器的程序而有很大差异,在某些情况下,每个错误预测仅浪费 10 个周期,但在某些情况下,每个预测错误会浪费超过 100 个周期。错误预测。这比管道深度大得多。我期望一个接近管道深度并且独立于程序运行的数字。

我一直在尝试对此做出解释。据我所知,在现代处理器中,分支评估可能发生在不同的阶段,因此浪费的周期数不是恒定的。但我无法解释为什么对于不同的程序来说这种差异会大一个数量级。处理器是否“知道”哪些指令需要刷新?

现代处理器的浪费周期数是否变化很大并且取决于程序?如果是这样,这怎么可能?而且不同的程序之间的差异怎么会这么大呢?

performance cpu-architecture branch-prediction
1个回答
0
投票

我会尝试一下这个。

多核架构中乱序执行所浪费的周期数将超过流水线的深度,因为重新排序需要额外的努力。

现代推测核心中的分支可以发现不同阶段的错误预测(例如ID、EXE、MEM),这会导致错误预测后不同数量的浪费周期。有序处理器通常在解决错误预测时具有固定的阶段,因此浪费的周期数是恒定的。

对于乱序处理器,解决分支的点可能会有所不同,因此浪费的周期数可能会有所不同。另外,请记住,根据发现错误预测时推测的深度,推测性地执行指令的乱序处理器可能会导致更多的周期浪费。 推测的一个分支可能会导致其他推测的分支。 每个程序的情况都不相同,对乱序的惩罚也会有所不同。

关于您正在测试的不同程序以及为什么错误预测周期不同;造成这种情况的原因可能有很多。 预测器准确性、代码密度、并行性、访问模式。 关于访问模式,请考虑顺序,其中内存顺序将遵循程序顺序。 有多少线程? 缓存局部性(空间、时间)?使用的数据结构及其缓存友好性(链表不是缓存友好的,而数组是)?

© www.soinside.com 2019 - 2024. All rights reserved.