🔮 LocalBP 分支预测器动画演示

gem5 中最简单的分支预测器 - 2-bit 饱和计数器

📝 汇编代码 (x86-64)

0x401000: xor eax, eax ; sum = 0
0x401002: xor ecx, ecx ; i = 0
0x401004: loop:
0x401004: add eax, ecx ; sum += i
0x401006: inc ecx ; i++
0x401008: cmp ecx, 4 ; compare i with 4
0x40100B: jl loop ; if (i < 4) goto loop ← 分支指令!
0x40100D: ret ; return

👋 欢迎!这个动画演示 LocalBP 如何预测一个简单循环的分支。

循环执行 4 次 (i=0,1,2,3),前 4 次分支跳转 (Taken),最后 1 次不跳转 (Not Taken) 退出循环。

计数器初始值为 0 (00),即"强不跳转"状态。

点击 "下一步" 开始演示!

🔢 索引计算 (jl 指令)

PC 地址: 0x40100B
右移 2 位: 0x100402
& 0x3FF: 2
当前 i = -

📊 计数器表 localCtrs[]

🔄 2-bit 饱和计数器状态机

00 强不跳
01 弱不跳
10 弱跳转
11 强跳转

← Not Taken (减1)      Taken (加1) →

📋 当前预测

计数器值
-
预测结果
-
实际结果
-
预测正确?
-

📜 预测历史

循环次数 i 值 计数器(前) 预测 实际 结果 计数器(后)
0
总预测次数
0
正确次数
0%
准确率