5

分支预测器逻辑有多“粘”?如果代码正在从指令缓存中删除,统计信息会保留吗?

换句话说,如果代码很复杂或者不能批量处理,分支预测还有帮助吗?

让我们假设比 2011 年更新的商用英特尔服务器硬件。

4

1 回答 1

8

分支预测器的确切工作方式因处理器而异。但是几乎所有重要的分支预测器都需要程序中分支的历史才能运行。

此历史记录在分支历史缓冲区中。

这些有多种口味。最常研究的两个是:

  • 本地历史- 跟踪每个分支的历史。
  • 全球历史- 跟踪所有分支的综合历史。

现代处理器将具有用于不同目的的多个缓冲区。在所有情况下,缓冲区的大小都是有限的。因此,当他们的房间用完时,需要驱逐一些东西。

英特尔和 AMD 均未提供有关其分支预测器的详细信息。但据信,两家公司的当前处理器可以跟踪数千个分支机构及其历史。


回到正题,分支预测器使用的数据将“粘住”,只要它停留在历史缓冲区中。因此,如果代码足够小且表现良好,不会超出缓冲区,则预测器的性能是最好的。

  • 如果大部分计算花费在少量代码上,本地历史缓冲区将能够跟踪所有经常被命中的分支。
  • 如果计算到处都是,分支预测器可能要跟踪的分支太多,因此其性能会下降。

请注意,指令uop缓存虽然独立于分支预测器,但将表现出相同的效果。因此,在尝试构建测试用例和基准测试以研究其行为时,可能很难挑出分支预测器。

因此,这是另一种具有局部性优势的性能案例。

于 2014-06-11T01:22:34.410 回答