作者及发刊详情
James E. Smith and Andrew R. Pleszkun. 1988. Implementing Precise Interrupts in Pipelined Processors. IEEE Trans. Comput. 37, 5 (May 1988), 562--573. https://doi.org/10.1109/12.4607
摘要
当一条指令执行结束另一条指令开始前,如果保存的进程状态和程序执行的顺序模型相关时,中断要求非常精确。在一个流水线处理器中,由于上一条指令已经完成,下一条指令也许会被初始化,因此中断的精确控制通常是很困难的。本文描述和评估了在流水线处理器中的对精确中断问题的解决方案。
首先将描述精确中断问题,然后将详细描述第一个解决方案。第一个是强制指令按照架构顺序完成和修改处理器状态,其他的四种将允许指令以任意的序完成,但是将需要额外的硬件,以致于当中断发生时,精确的状态很难恢复。所有的方法将在并行流水下下讨论。基于CRAY-IS标量架构的仿真结果显示,第一种方法将导致性能下降16%,另外四种方法出现了类似的性能,其中三种导致了3%的性能损失。几种其他的扩展,包括虚拟内存和线性流水线架构也将会被讨论。
正文
高性能的处理器必定是流水化的,允许多条指令同时执行在不同阶段
流水线处理器发生中断时对指令执行序的影响
当中断来领时,并行执行的指令也许会调整处理器状态,导致指令执行序和顺序架构模型不同
当中断被检测到时,硬件也许不会处于和某一特定程序计数器值一致的状态
待保存的状态包括程序计数器(PC),寄存器和存储。具体根据如下条件而定:
a. 该指令前的所有指令全被执行且已经正确调整了处理器状态
b. 该指令后的所有指令尚未被执行且还没有调整处理器状态
c. 如果中断是被指令的异常所引起,PC也指向被中断的指令,由于架构或中断原因的不同,中断指令也许已经执行或尚未被执行
如果被保存的处理器状态和顺序架构模型不一致,或不满足上述条件,中断是不精确的。
中断的类型
程序中断,即自陷,在指令取指或执行时导致的异常引发
例如非法指令,数据溢出,页错误等
外部中断
例如IO中断、定时器中断
文章框架
第二章描述了模拟精确中断实现的模型架构
第三章到第六章描述了实现精确中断的方法
第七章呈现了仿真结果
方法一:顺序指令执行
通过这种方式,指令只能在先前所有提交的指令没有异常的情况下才能调整进程状态。
方法二:使用重排序buffer缓存即将issue的指令
当一条指令完成,结果和异常条件都会被发送到重排序buffer,当有效结果到达buffer入口时,硬件将检查异常,如无异常,则结果写回,若有异常,指令提交将会停止,并准备中断处理,后续写寄存器将会被停止。
方法三:通过历史记录buffer保存指令计算结果
硬件架构和方法二的reorder buffer类似,但所不同的是,但有效结果到达buffer入口时,无论异常即写回到寄存器文件中,同时异常报告也会保存到history buffer中,如果有异常则进行中断处理
当history buffer占满时,issue被堵塞
相比reorder buffer,该方法提高了流水线效率
方法四:建立提前于通用寄存器的寄存器副本
指令执行的结果和异常报告预先写到寄存器副本中,同样该副本也有reorder buffer,根据副本的状态再确认是否更新真寄存器文件的值。
性能评估
评
流水线处理器中精确中断的实现
相关链接
答主"三郎"介绍的很清晰。