条件码与条件分支
条件码寄存器保存什么?
- 内容: 最近一次算术运算或逻辑操作的状态信息;
- 用途: 供条件分支指令判断是否跳转;
跳转指令怎样改变控制流?
- 机制: 把程序计数器设置为目标地址, 跳到程序的另一部分;
- 组合: 条件码加跳转指令即可实现条件分支;
用条件控制怎样实现条件分支?
- 思路: 测试条件, 成立跳到 then 段, 不成立跳到 else 段;
t = test-expr;
if (!t) goto else;
then-statement;
goto done;
else:
else-statement;
done:
用条件传送怎样实现条件分支?
- 思路: 两种结果都算出来, 再用条件传送指令选出应该保留的一个;
v = then-expr;
ve = else-expr;
t = test-expr;
if (!t) v = ve;
- 优势: 执行路径不依赖数据, 无需跳转指令, CPU 不做预测也能保持流水线充满;
分支预测为什么会带来性能损失?
- 机制: CPU 遇到条件跳转时先猜测分支方向并继续取指执行;
- 收益: 猜测正确时流水线保持充满, 无需等待;
- 代价: 猜测错误要丢弃已经完成的工作, 重新执行正确分支, 惩罚很高;
- 结论: 条件传送不依赖数据, 通常比用条件控制实现分支更快;