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

本文主要是介绍论文解析——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,根据副本的状态再确认是否更新真寄存器文件的值。

性能评估

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

相关链接

知乎中关于精确中断的讨论
答主“三郎”介绍的很清晰。

这篇关于论文解析——Implementing Precise Interrupts in Pipelined Processors的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/323297

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St