1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| ========== 第 1 次循环 (计数器: 0→1) ========== 10010036000: system.cpu.branchPred: [tid:0, sn:0] Branch predictor predicted 0 for PC:0x401817 DirectCond # 预测结果: 0 (不跳转) 10010036000: system.cpu.branchPred: [tid:0, sn:0] PC:0x401817 BTB:miss # BTB 未命中,第一次遇到这个分支 10010036000: system.cpu.branchPred: predict(tid:0, sn:0, PC:0x401817, DirectCond) -> taken:0, target:(0x401819=>0x401821).(0=>1) provider:NoTarget # 预测不跳转,目标地址未知 10010036000: system.cpu.branchPred: [tid:0] [squash sn:0] Mispredicted: DirectCond, PC:0x401817 # 预测错误!需要冲刷流水线 10010036000: system.cpu.branchPred: Commit branch: sn:0, PC:0x401817 DirectCond, pred:0, taken:1, target:0x4017fd # 提交: 预测=0(不跳), 实际=1(跳了), 跳转目标=0x4017fd
========== 第 2 次循环 (计数器: 1→2) ========== 10010862000: system.cpu.branchPred: [tid:0, sn:0] Branch predictor predicted 0 for PC:0x401817 DirectCond # 预测结果: 0 (不跳转) 10010862000: system.cpu.branchPred: [tid:0, sn:0] PC:0x401817 BTB:hit # BTB 命中,已经记录过这个分支 10010862000: system.cpu.branchPred: predict(tid:0, sn:0, PC:0x401817, DirectCond) -> taken:0, target:(0x401819=>0x401821).(0=>1) provider:NoTarget # 预测不跳转 10010862000: system.cpu.branchPred: [tid:0] [squash sn:0] Mispredicted: DirectCond, PC:0x401817 # 预测错误! 10010862000: system.cpu.branchPred: Commit branch: sn:0, PC:0x401817 DirectCond, pred:0, taken:1, target:0x4017fd # 提交: 预测=0, 实际=1, 又错了
========== 第 3 次循环 (计数器: 2→3) ========== 10011702000: system.cpu.branchPred: [tid:0, sn:0] Branch predictor predicted 1 for PC:0x401817 DirectCond # 预测结果: 1 (跳转) ← 计数器终于到 2 了,开始预测跳转 10011702000: system.cpu.branchPred: [tid:0, sn:0] PC:0x401817 BTB:hit # BTB 命中 10011702000: system.cpu.branchPred: predict(tid:0, sn:0, PC:0x401817, DirectCond) -> taken:1, target:(0x4017fd=>0x401805).(0=>1) provider:BTB # 预测跳转,目标地址由 BTB 提供 10011702000: system.cpu.branchPred: Commit branch: sn:0, PC:0x401817 DirectCond, pred:1, taken:1, target:0x4017fd # 提交: 预测=1, 实际=1, 预测正确!(没有 Mispredicted)
========== 第 4 次循环 (计数器: 3→3 饱和) ========== 10012556000: system.cpu.branchPred: [tid:0, sn:0] Branch predictor predicted 1 for PC:0x401817 DirectCond # 预测结果: 1 (跳转) 10012556000: system.cpu.branchPred: [tid:0, sn:0] PC:0x401817 BTB:hit # BTB 命中 10012556000: system.cpu.branchPred: predict(tid:0, sn:0, PC:0x401817, DirectCond) -> taken:1, target:(0x4017fd=>0x401805).(0=>1) provider:BTB # 预测跳转 10012556000: system.cpu.branchPred: Commit branch: sn:0, PC:0x401817 DirectCond, pred:1, taken:1, target:0x4017fd # 提交: 预测=1, 实际=1, 预测正确!
========== 第 5 次循环 - 退出 (计数器: 3→2) ========== 10013664000: system.cpu.branchPred: [tid:0, sn:0] Branch predictor predicted 1 for PC:0x401817 DirectCond # 预测结果: 1 (跳转) 10013664000: system.cpu.branchPred: [tid:0, sn:0] PC:0x401817 BTB:hit # BTB 命中 10013664000: system.cpu.branchPred: predict(tid:0, sn:0, PC:0x401817, DirectCond) -> taken:1, target:(0x4017fd=>0x401805).(0=>1) provider:BTB # 预测跳转 10013664000: system.cpu.branchPred: [tid:0] [squash sn:0] Mispredicted: DirectCond, PC:0x401817 # 预测错误!循环退出了 10013664000: system.cpu.branchPred: Commit branch: sn:0, PC:0x401817 DirectCond, pred:1, taken:0, target:0x401819 # 提交: 预测=1(跳), 实际=0(不跳), 退出循环,跳转到下一条指令 0x401819
|