Branch Target Buffer (BTB) 和 Branch History Table (BHT) 是现代处理器中分支预测单元(Branch Prediction Unit, BPU)的核心组件,专注于优化分支目标地址和方向预测。以下从硬件结构的角度深度解析它们的内部机制、数据组织方式和实现细节。
1. 分支目标缓冲区 (BTB)
1.1 BTB 的作用
- BTB 的功能:BTB 是一个硬件缓存,存储每条分支指令的目标地址,避免 CPU 每次执行分支跳转时重新计算目标地址。
- 访问过程:当处理器检测到一条可能的分支指令时,BTB 根据分支指令地址(PC, Program Counter)查找目标地址。如果命中,直接跳转到目标地址;否则进入分支目标计算的慢路径。
1.2 BTB 的硬件结构
BTB 的硬件设计类似于缓存,采用行列组织的方式存储数据。其基本结构包括:
-
索引表(Index Table):
- 存储分支指令地址的低位,用于定位 BTB 的行。
- 通常使用哈希函数从分支指令地址中提取索引。
-
标签存储(Tag Storage):
- 存储分支指令地址的高位,用于验证是否命中。
-
目标地址字段(Target Address Field):
- 存储分支跳转的目标地址。
-
分支类型字段(Branch Type Field):
- 标识分支类型(如条件分支、无条件跳转、函数调用等)。
-
有效位(Valid Bit):
- 指示该条目是否有效,防止误预测。
1.3 数据存储结构
BTB 的每个条目通常由以下字段组成:
字段 | 描述 | 位宽(示例) |
---|---|---|
Tag | 分支指令地址的高位 | 10 bits |
Target Address | 跳转目标地址 | 32 bits |