流水线总结
例外和中断 是控制逻辑需要实现的任务之一。
例外:也称中断,指那些打断程序正常执行的意外时间,比如未定义指令。
中断: 来自于处理器外部的例外,一些体系用中断表示所有的例外。
RISCV体系中处理例外
未定义指令 和硬件故障带来的例外。
硬件故障,当例外发生时,处理器必须执行的基本动作是:在系统例外程序计数器中保存发生例外的指令地址,同时将控制权转交给操作系统。
1 RISCV使用 设置系统例外原因寄存器,该寄存器记录了例外原因。
2 向量式中断。 该方法用基址寄存器加上例外原因作为偏移,作为目标地址来控制流转换。基址寄存器中保存了向量式中断内存区域的起始地址。
流水线实现中的例外
流水线实现中,将例外处理看成另一种控制冒险,假设add指令执行时产生硬件故障。我们需要将清除掉add之后的指令。并从新地址开始取指。和处理分支指令不同的是,例外会引起系统状态的变化。
处理分支预测错误时,将取指阶段的指令变为NOP,以消除影响。 对于进入译码的指令,增加新逻辑控制译码阶段的多选器 使输出为0,流水线停顿。
在SEPC寄存器中保存引发例外的指令的地址。
指令间的并行性
指令并行性。
提高指令并行度两种方法。
1 增加流水线的级数
让更多指令堆叠执行
2 增加流水线内部的功能部件数量。
这样可以每周期发出多条指令,多发射技术。
推测
深度挖掘指令级并行的方法。 以预测为基础,推测方法允许编译器或处理器来猜测指令的行为,并允许其他与推测指令相关的指令提前开始执行。
例如我们可以对分支指令结果进行推测,这些分支指令之后的指令可以提早执行。
对于先store再load的指令序列,可以推测两条指令的访存地址不同,这样允许load先于store执行。
推测的难点在于预测结果可能出现错误,因此所有推测机制都必须包括预测结果正确性的检查机制。以及预测出错后的恢复机制。以消除推测执行带来的影响。
可以在编译时完成重排,也可以在执行时由硬件完成推测。编译器可以根据推测结果进行指令顺序重排,将分支后的指令移动到分支指令前。或者将load指令移动到store指令前。 处理器硬件也可以在动态执行完成相同的操作。
寄存器重命名
寄存器重命名的目标是,除了真数据相关,消除指令间存在的其他数据相关。
这些数据相关将会导致潜在的冒险,妨碍编译器进行灵活的代码调度。
不同循环的指令之间没有数据依赖的,这种称为反相关。是一种由于名称复用而被迫导致的顺序排列,不是真正的数据相关。
指令序列不断重复,都使用同一寄存器,指令实际上相互独立。
WAR WAW:产生冲突的原因是原来的值被错误的覆盖。 可以让微架构拥有更多的寄存器来缓解冲突。
寄存器重命名通过修改指令中寄存器的索引名,达到重命名机制。
流水线改善的是吞吐率,而不是指令固有的执行时间。
流水线和多发射机制都在尝试挖掘指令间的并行程度,程序中的数据和控制相关之后会变成各种冒险。
通过预测来调度和预测执行指令,降低冒险造成的行呢个影响。