分支预测器逻辑有多“粘”?如果代码正在从指令缓存中删除,统计信息会保留吗?
换句话说,如果代码很复杂或者不能批量处理,分支预测还有帮助吗?
让我们假设比 2011 年更新的商用英特尔服务器硬件。
分支预测器逻辑有多“粘”?如果代码正在从指令缓存中删除,统计信息会保留吗?
换句话说,如果代码很复杂或者不能批量处理,分支预测还有帮助吗?
让我们假设比 2011 年更新的商用英特尔服务器硬件。
分支预测器的确切工作方式因处理器而异。但是几乎所有重要的分支预测器都需要程序中分支的历史才能运行。
此历史记录在分支历史缓冲区中。
这些有多种口味。最常研究的两个是:
现代处理器将具有用于不同目的的多个缓冲区。在所有情况下,缓冲区的大小都是有限的。因此,当他们的房间用完时,需要驱逐一些东西。
英特尔和 AMD 均未提供有关其分支预测器的详细信息。但据信,两家公司的当前处理器可以跟踪数千个分支机构及其历史。
回到正题,分支预测器使用的数据将“粘住”,只要它停留在历史缓冲区中。因此,如果代码足够小且表现良好,不会超出缓冲区,则预测器的性能是最好的。
请注意,指令和uop缓存虽然独立于分支预测器,但将表现出相同的效果。因此,在尝试构建测试用例和基准测试以研究其行为时,可能很难挑出分支预测器。
因此,这是另一种具有局部性优势的性能案例。