use*_*112 12 performance x86 assembly cpu-architecture branch-prediction
在"英特尔手册"第3卷中,它包含硬件事件计数器的说明:
BACLEAR_FORCE_IQ
计算指令队列强制BACLEAR的次数. IQ还负责基于由L2分支预测单元提供的静态方案和动态数据来提供条件分支预测方向.如果在目标阵列中找不到条件分支目标并且IQ预测分支被采用,则IQ将强制分支地址计算器发出BACLEAR.BAC声明的每个BACLEAR在指令获取管道中产生大约8个周期的气泡.
我一直以为分支地址计算器执行静态预测算法(当分支目标缓冲区不包含分支条目时)?
任何人都可以确认上述哪两个是正确的?我找不到任何东西.
如果在目标数组中没有找到条件分支目标
怎么找不到呢?您可以使用位掩码对其进行掩码,以找到表中的索引并获取下一个分支目标。
好吧,如果您在阅读结果后检查调用地址与结果上的标签不匹配,则会得到“未采用”结果。
现在我们进入声明的第二部分。
IQ 预测该分支已被采用
所以分支目标说“不被采用”,而 IQ 预测它将被采用,我们有一个矛盾。
为了解决这个矛盾,智商获胜,因为分支目标只是“如果我们跳,我们跳到这里”,但智商根据更多逻辑来预测我们是否跳。
因此
那么 IQ 将强制分支地址计算器发出 BACLEAR。BAC 置位的每个 BACLEAR 在指令获取管道中生成大约 8 个周期的气泡。
这对于 14-19 级管道来说是很好的。8 个周期是如果 IQ 可以从指令中读取实际目标地址(与 PC 结合),如果需要在寄存器中读取值(可能尚未退役),则可能需要更长的时间。