[发明专利]基于指令队列的程序循环代码动态检测及执行方法有效
申请号: | 201210493778.1 | 申请日: | 2012-11-28 |
公开(公告)号: | CN102968293A | 公开(公告)日: | 2013-03-13 |
发明(设计)人: | 张承义;高军;孙彩霞;艾飞虎;郭维;孙曜;王永文;窦强;倪晓强;隋兵才;陈微;赵天磊;王蕾;黄立波 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F9/30 | 分类号: | G06F9/30 |
代理公司: | 湖南兆弘专利事务所 43008 | 代理人: | 赵洪;谭武艺 |
地址: | 410073 湖南省长沙市砚瓦池正*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 指令 队列 程序 循环 代码 动态 检测 执行 方法 | ||
技术领域
本发明涉及微处理器代码执行方法领域,具体涉及一种基于指令队列的程序循环代码动态检测及执行方法。
背景技术
计算机程序中一般都会存在大量循环代码,用于表示需要重复多次执行的操作。循环代码的执行在微处理器中是重复的行为,尤其是对于指令读取而言,每次取指都是相同的地址和相同的指令。现代微处理器中,为了缓解处理器与外部存储访问之间的速度差异(即“存储墙”问题),都在片内集成了高速缓存(即cache),用来保存处理器运行时需要的指令和数据。高速缓存的容量较外部存储器小,读写速度快。在高速缓存中命中的读写操作,就无需再访问片外的存储器,从而在一定程度上缓解了“存储墙”问题。同时,由于高速缓存的读写端口有限,为了减少因指令和数据的读写冲突导致的停顿,大多数高性能微处理器都将高速缓存分割为指令缓存和数据缓存(称为“哈佛结构”),各自拥有独立的读写总线,提高指令读取和数据读写的并行性。在这种结构的处理器中,首先由取指部件提供指令地址,到指令缓存中读取指令。返回的指令接着进行译码、执行等操作。如果该指令是发生跳转的分支指令,则它的跳转目标指令地址根据分支指令的计算结果得到,作为后续指令地址,否则后续指令地址为当前指令地址连续的下一条指令地址。指令在执行的过程中可能由于操作数的不可用(数据相关)或执行部件的不可用(结构相关)而导致流水线停顿。为了避免流水线执行段的停顿阻塞流水线前端的取指,大多数处理器都在流水线的取指段和译码段、执行段之间增加一个指令队列,用来保存已经从指令缓存中取出但暂时无法流出到后续流水线的指令,这样流水线后端的停顿不会阻塞前端的取指,直到指令队列充满。
但是,当程序中的循环代码在这种现有技术的处理器流水线中执行时,循环代码将被展开,循环体中的指令将被重复地从指令存储器中读取,造成资源浪费。特别是在当前多核多线程处理器中,线程之间的交替执行可能会竞争高速缓存资源从而发生替换操作,在执行新的一次循环时原本已经读入指令缓存的指令仍可能发生失效,需要重新载入,导致性能降低。同时,重复的读取相同指令也会增加指令缓存访问的动态功耗,在功耗问题日益成为微处理器设计中首要挑战的情况下,这是一种功耗的浪费,存在优化的空间。
在一些处理器设计的技术方案中,也有一些技术方案通过编译手段标识循环体的起始位置、在执行时将循环指令保存在特定的存储器中、后续的循环指令从该存储器中获得,从而实现指令重用、减少指令缓存的重复访问。但是,这种方法需要增加额外的存储部件,能够检测的循环代码长度受限于存储容量,特别是在多线程处理器中,由于每个线程都需要独立的指令存储部件,因此带来的额外面积开销更大,可扩展性不好。而且,这种方法无法动态完成循环检测,不利于二进制代码的兼容性。
如图1所示,现有技术带指令队列的流水线前、后端结构,包括取指部件、指令队列、各功能部件等部分。指令队列之前的取指部件称为流水线前端,指令队列之后的各功能部件称为流水线后端;取指部件主要由程序计数器(PC)和指令缓存(指令cache)组成。取指部件根据程序计数器给出的指令地址到指令缓存中读取指令,然后根据写指针标识的位置存储到指令队列中,然后写指针递增。同时程序计数器也递增,开始读取顺序的下一条指令。如果指令不在当前的指令缓存中,则发生指令缓存失效,停顿流水线前端,直到指令从更高一级缓存或存储器中返回。指令队列判断当前读指针所标识的指令是否满足执行条件,如操作数是否就绪、功能部件是否空闲等。一旦条件满足,则将该指令发射到功能部件执行,同时读指针递增。如果指令是分支指令,则发射到分支部件执行。如果该分支指令执行的结果是跳转,则清空流水线和指令队列中的已有指令,将跳转目标地址传递给流水线前端的程序计数器,从新的指令地址开始重新取指。经典的带指令队列的流水线不支持循环检测功能,指令队列中的指令在发射到流水线后端的同时就在队列中清除,下次再执行时重新从指令缓存中读取。
发明内容
本发明要解决的技术问题是提供一种执行效率高、处理性能好、执行功耗低、硬件开销小、支持嵌套循环、兼容性强、可扩展性好的基于指令队列的程序循环代码动态检测及执行方法。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于指令队列的程序循环代码动态检测及执行方法,其实施步骤如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210493778.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:轴瓦输送压座装置
- 下一篇:带清扫器的可升降移动带式输送机