发明名称 基于指令队列的程序循环代码动态检测及执行方法
摘要 本发明公开了一种基于指令队列的程序循环代码动态检测及执行方法,其实施步骤如下:1)从指令缓存中取指并保存到指令队列中,将指令队列中保存的指令发射到功能部件执行,当执行指令为分支指令且执行结果为跳转时获取跳转方向以及跳转目标距离,如果跳转方向为向后跳转且跳转目标距离在指令队列的长度以内则进入下一步;2)从指令缓存中取出程序循环代码对应的指令并填充在指令队列中;3)将指令缓存旁路,从指令队列中取出指令并执行,在程序循环代码的所有指令执行完毕后恢复指令缓存的工作状态。本发明具有执行效率高、处理性能好、执行功耗低、硬件开销小、支持嵌套循环、兼容性强、可扩展性好的优点。
申请公布号 CN102968293B 申请公布日期 2014.12.10
申请号 CN201210493778.1 申请日期 2012.11.28
申请人 中国人民解放军国防科学技术大学 发明人 张承义;高军;孙彩霞;艾飞虎;郭维;孙曜;王永文;窦强;倪晓强;隋兵才;陈微;赵天磊;王蕾;黄立波
分类号 G06F9/30(2006.01)I 主分类号 G06F9/30(2006.01)I
代理机构 湖南兆弘专利事务所 43008 代理人 赵洪;谭武艺
主权项 一种基于指令队列的程序循环代码动态检测及执行方法,其特征在于实施步骤如下:1)从指令缓存中取指并保存到指令队列中,将指令队列中保存的指令发射到功能部件执行,当执行指令为分支指令且执行结果为跳转时获取跳转方向以及跳转目标距离,如果跳转方向为向后跳转且跳转目标距离在指令队列的长度以内,则预测当前执行的分支指令与跳转目标地址之间的代码为程序循环代码,并进入下一步;2)从指令缓存中取出程序循环代码对应的指令并填充在指令队列中;3)将指令缓存旁路,直接从指令队列中取出指令并发射到功能部件执行,在程序循环代码的所有指令执行完毕后恢复指令缓存的工作状态;所述步骤2)的详细步骤如下:2.1)预先在指令队列中增加循环头指针,预先在分支处理部件增加循环检测标志寄存器、循环执行标识寄存器和循环代码头指令程序计数器寄存器,在预测当前执行的分支指令与跳转目标地址之间的代码为程序循环代码后将循环头指针指向为指令队列当前写指针的位置、将循环检测标志寄存器赋值为1、将循环执行标识寄存器赋值为0、将循环代码头指令程序计数器寄存器赋值为当前分支指令的跳转目标程序计数器值;2.2)从指令缓存中取出程序循环代码对应的指令并存储在指令队列中写指针所指向的位置并顺序递增写指针的值,当写指针的下一个位置为循环头指针时暂停取指;同时在读指针指向的指令如果满足分派条件则分派到功能部件执行,保持循环头指针不变并顺序递增读指针直至读指针的下一个位置为循环头指针,此时循环检测标志寄存器赋值为0,继续递增写指针,跳转步骤1)继续取指执行;当执行指令为分支指令且执行结果为跳转时判断跳转指令的跳转方向,如果为向前跳转则清空指令队列和流水线中的指令,将循环检测标志寄存器赋值为0,根据程序计数器中当前的分支指令跳转目标程序计数器值继续从指令缓存中取指,跳转步骤1)继续执行,流水线重新回到正常执行状态,否则跳转执行下一步;2.3)将分支指令跳转目标程序计数器值和循环代码头指令程序计数器寄存器值进行比较,如果分支指令跳转目标程序计数器值大于循环代码头指令程序计数器寄存器值,则判定存在嵌套循环且内层循环代码已在指令队列中,清空已发射流水线中的指令,然后根据分支指令跳转目标程序计数器值和循环代码头指令程序计数器寄存器值的差值回退读指针,重新分派指令执行;如果分支指令跳转目标程序计数器值小于循环代码头指令程序计数器寄存器值,则清空指令队列和流水线中的指令,将循环检测标志寄存器赋值为0,根据程序计数器中当前的分支指令跳转目标程序计数器值继续从指令缓存中取指,跳转步骤1)继续执行,流水线重新回到正常执行状态;如果分支指令跳转目标程序计数器值等于循环代码头指令程序计数器寄存器值,则判定完成了循环代码的填充,清空已发射流水线中的指令,将指令队列的读指针赋值为循环头指针、将循环检测标志寄存器赋值为0、将循环执行标识寄存器赋值为1,进入后续的将指令缓存旁路操作。
地址 410073 湖南省长沙市砚瓦池正街47号中国人民解放军国防科学技术大学计算机学院