计算机组成和设计 - 流水线中的例外

290 阅读4分钟

流水线总结

例外和中断 是控制逻辑需要实现的任务之一。

例外:也称中断,指那些打断程序正常执行的意外时间,比如未定义指令。

中断: 来自于处理器外部的例外,一些体系用中断表示所有的例外。

RISCV体系中处理例外

未定义指令 和硬件故障带来的例外。

硬件故障,当例外发生时,处理器必须执行的基本动作是:在系统例外程序计数器中保存发生例外的指令地址,同时将控制权转交给操作系统。

1 RISCV使用 设置系统例外原因寄存器,该寄存器记录了例外原因。

2 向量式中断。 该方法用基址寄存器加上例外原因作为偏移,作为目标地址来控制流转换。基址寄存器中保存了向量式中断内存区域的起始地址。

流水线实现中的例外

流水线实现中,将例外处理看成另一种控制冒险,假设add指令执行时产生硬件故障。我们需要将清除掉add之后的指令。并从新地址开始取指。和处理分支指令不同的是,例外会引起系统状态的变化。

处理分支预测错误时,将取指阶段的指令变为NOP,以消除影响。 对于进入译码的指令,增加新逻辑控制译码阶段的多选器 使输出为0,流水线停顿。

在SEPC寄存器中保存引发例外的指令的地址。

指令间的并行性

指令并行性。

提高指令并行度两种方法。

1 增加流水线的级数

让更多指令堆叠执行

2 增加流水线内部的功能部件数量。

这样可以每周期发出多条指令,多发射技术。

推测

深度挖掘指令级并行的方法。 以预测为基础,推测方法允许编译器或处理器来猜测指令的行为,并允许其他与推测指令相关的指令提前开始执行。

例如我们可以对分支指令结果进行推测,这些分支指令之后的指令可以提早执行。

对于先store再load的指令序列,可以推测两条指令的访存地址不同,这样允许load先于store执行。

推测的难点在于预测结果可能出现错误,因此所有推测机制都必须包括预测结果正确性的检查机制。以及预测出错后的恢复机制。以消除推测执行带来的影响。

可以在编译时完成重排,也可以在执行时由硬件完成推测。编译器可以根据推测结果进行指令顺序重排,将分支后的指令移动到分支指令前。或者将load指令移动到store指令前。 处理器硬件也可以在动态执行完成相同的操作。

寄存器重命名

寄存器重命名的目标是,除了真数据相关,消除指令间存在的其他数据相关。

这些数据相关将会导致潜在的冒险,妨碍编译器进行灵活的代码调度。

不同循环的指令之间没有数据依赖的,这种称为反相关。是一种由于名称复用而被迫导致的顺序排列,不是真正的数据相关。

指令序列不断重复,都使用同一寄存器,指令实际上相互独立。

WAR WAW:产生冲突的原因是原来的值被错误的覆盖。 可以让微架构拥有更多的寄存器来缓解冲突。

寄存器重命名通过修改指令中寄存器的索引名,达到重命名机制。

流水线改善的是吞吐率,而不是指令固有的执行时间。

流水线和多发射机制都在尝试挖掘指令间的并行程度,程序中的数据和控制相关之后会变成各种冒险。

通过预测来调度和预测执行指令,降低冒险造成的行呢个影响。