论文解析——Implementing Precise Interrupts in Pipelined Processors

作者及发刊详情

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,根据副本的状态再确认是否更新真寄存器文件的值。

性能评估

流水线处理器中精确中断的实现

相关链接

知乎中关于精确中断的讨论

答主"三郎"介绍的很清晰。

相关推荐
jwensh2 天前
【Jenkins】pipeline 的基础语法以及快速构建一个 jenkinsfile
pipeline·jenkins
驱动小百科6 天前
NPU是什么?电脑NPU和CPU、GPU区别介绍
电脑·cpu·gpu·npu·电脑硬件
和码说15 天前
编程考古-CPU(上)
cpu·计算机科学·编程考古
obullxl21 天前
Transformers 框架 Pipeline 任务详解:文本转音频(text-to-audio 或 text-to-speech)
人工智能·ai·pipeline·transformers·文本转音频
Bio Coder1 个月前
shell查看服务器的内存和CPU总量
运维·服务器·内存·cpu
rs勿忘初心1 个月前
linux常见资源查询命令(持续更新)
linux·内存·cpu·资源查询
沉下心来学鲁班1 个月前
欺诈文本分类检测(十八):基于llama.cpp+CPU推理
人工智能·语言模型·分类·cpu·llama.cpp
橘色的喵1 个月前
C++编程:嵌入式Linux-ARM与外设中断交互的程序设计
linux·arm开发·select·interrupt·中断·低延迟·设备交互
迷茫运维路1 个月前
Jenkins声明式Pipeline流水线语法示例
运维·pipeline·jenkins·声明式
ShiinaKaze2 个月前
用图说明 CPU、MCU、MPU、SoC 的区别
mcu·cpu·mpu·soc·计算机架构