Elastic(灵活的) Instruction Fetching
-
摘要:
- 背景:
- 分支预测(生成取值的地址)和指令缓存访问不应该紧密耦合,从而当指令取值阶段由于Icache发生miss或者back-pressure(不确定)而停止时,分支预测器可以提前运行并生成之后的取值地址。利用这些地址可以进行不同的优化,例如指令预取,并且可以隐藏跳转分支会产生的流水线空泡
- 指令取值和分支预测解耦和的缺点:会增加流水线深度,导致流水线刷新的成本增加;需要更大的BTB保存分支的目标地址,并且如果BTB未命中,也会增加额外的流水线空泡
- 论文工作:
- 提出了ELF(elastic fetching,灵活/弹性取值),一种混合的机制,能够解耦和分支预测和指令取值,并且最小化流水线刷新和BTB缺失而产生的额外的空泡
- 提供了两种ELF的具有不同复杂度和性能的实现,性能相对于基准解耦和取值单元的设计提高了3.7%和5.2%
- 背景:
-
介绍:
- 在高频率的设计中,一个周期无法足够用于访问大的BTB和BP,处理BTB表项内容,映射BP预测结果到BTB表项和最终计算下一个PC的地址
- 解耦的BP在遇到I-cache未命中或者其它长延迟事件时,会将生成的取值地址放入一个解耦的队列中
- 解耦和BP和Fetcher的优点:
- 提前执行BP和BTB得到的取值地址可以用于提供更加精确的指令预取器
- 在某些实现中,由于高频率的设计,如果BP预测分支跳转,则需要在流水线中插入一个或者多个空泡(在BTB命中的情况下也需要),来计算得到分支跳转的目标地址。通过解耦和BP和fetcher,分支地址可以被提前计算得到,从而掩盖一些空泡
- 解耦和BP和Fetcher的缺点:
- 需要一个更大的BTB结构,以获取预测跳转的分支的目标地址。如果使用解耦结构进行指令预取,此时BTB的覆盖范围需要比I-cache更大,即需要更大的BTB结构
- 解耦会增加流水线深度(预测的时间更长了)。因此在解耦结构中,取值PC需要首先通过BP,然后在传递给I-cache。在耦合结构中,两者并行发生。这种情况下,分支预测错误代价也会增加
- 流水线深度的增加也会发生在BTB发生缺失的关键路径上,这种情况下,在相关目标地址被译码/计算得到后,译码(或者之后的)阶段需要重新引导BP
- 论文工作:ELF(elastic fetching)
- 在稳定的状态时,解耦和BP和指令取值(Decoupled mode);在流水线刷新之后,重新耦合两者,以隐藏由于解耦和而增加的额外的延迟(Coupled mode)
- L-ELF(limited elastic fetching):硬件成本较低,IPC提升3.7%
- U-ELF(unlimited elastic fetching):硬件成本更高,IPC提升5.2%
-
解耦的取值设计