Assembly 分支预测

Assembly 分支预测,assembly,cpu-architecture,branch-prediction,Assembly,Cpu Architecture,Branch Prediction,考虑单个静态分支的以下实际结果序列。T意味着树枝被拿走了。N表示分支未被占用。对于这个问题,假设这是程序中唯一的分支 T T T T T T T T T N T T N 假设两级分支预测器使用一位分支历史,即一位BHR。由于程序中只有一个分支,因此BHR如何与分支PC连接以索引BHT并不重要。假设BHT使用一位计数器,并且所有条目都初始化为N。该序列中的哪个分支会被错误预测?使用下表。 现在我不是在问这个问题的答案,而是在这个问题上的指导和指点。两级分支预测器是什么意思?它是如何工作的?BHR

考虑单个静态分支的以下实际结果序列。T意味着树枝被拿走了。N表示分支未被占用。对于这个问题,假设这是程序中唯一的分支

T T T T T T T T T N T T N

假设两级分支预测器使用一位分支历史,即一位BHR。由于程序中只有一个分支,因此BHR如何与分支PC连接以索引BHT并不重要。假设BHT使用一位计数器,并且所有条目都初始化为N。该序列中的哪个分支会被错误预测?使用下表。

现在我不是在问这个问题的答案,而是在这个问题上的指导和指点。两级分支预测器是什么意思?它是如何工作的?BHR和BHT代表什么?维基百科:

两级自适应预测器 记得上一次的历史吗 分支的引用,并使用一个 每个传感器的饱和计数器 可能的2n历史模式

BHR:分支机构历史记录寄存器
BHT:分支机构历史记录表

这两个术语都在上面链接的文章部分进行了简要的解释,没有提及它们的首字母缩略词。

我只是在阅读了Agner Fog关于现代CPU at的微体系结构的文章后才真正得到了分支预测,特别是第三篇:


如果你想擅长低级编程,你可能应该通读。如果您想知道分支预测器是如何工作的,只需阅读微体系结构手册中有关分支预测的章节。它使用来自过去处理器的真实分支预测器来解释事物是如何工作的,从概念上简单的预测器(如P1中的预测器)开始,逐渐添加更多功能,直到您看到当今处理器中的怪物。

您文章中的哪个分支类型是上面的问题?它是一个具有一点局部分支历史的自适应两级预测器,更新:现代Intel,因为至少Haswell(和AMD Ryzen 2)使用了TAGE/ITTAGE预测器(标记的几何历史长度预测器),该预测器将过去的分支历史作为索引的一部分写入预测器表。在底部有一个关于这个的章节。TAGE可以“学习”涉及多个分支的非常长的模式,例如,重复使用相同数据的12元素气泡排序的所有分支,或解释器中的间接分支。这是一种不同的策略,而不仅仅是旧策略的进一步扩展,比如本地/全球历史。我的分支预测可能是一个有用的指南。文中还介绍了两级分支预测器的设计和工作原理。