论文解析——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

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM