CN113254079B - 一种用于实现自增指令的方法及系统 - Google Patents
一种用于实现自增指令的方法及系统 Download PDFInfo
- Publication number
- CN113254079B CN113254079B CN202110716307.1A CN202110716307A CN113254079B CN 113254079 B CN113254079 B CN 113254079B CN 202110716307 A CN202110716307 A CN 202110716307A CN 113254079 B CN113254079 B CN 113254079B
- Authority
- CN
- China
- Prior art keywords
- instruction
- self
- register
- increment
- base address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种用于实现自增指令的方法,包括:利用写入自增指令的逻辑寄存器映射关联的物理寄存器作为自增指令的基地址寄存器;构建自增指令基地址寄存器的专用忙表,至少包括所有物理寄存器和所有物理寄存器对应的工作状态信息,所有物理寄存器添加有ID属性;根据接收的自增指令查询自增指令基地址寄存器的专用忙表,更改物理寄存器对应的工作状态信息;通过更改后的自增指令基地址寄存器的专用忙表和预置的非自增指令寄存器的忙表确定自增指令的基地址寄存器的最终工作状态信息;根据自增指令的基地址寄存器的最终工作状态信息判断是否唤醒自增指令的发射状态;通过发射槽接收自增指令的发射状态,并依次发射。由此提高了程序的执行性能。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种用于实现自增指令的方法及系统。
背景技术
根据指令架构的不同,指令的种类和数量也不同,例如arm、x86、RISCV等指令集架构的标准指令集中就没有自增指令。为了提高处理器运行C语言中i++之类含数值自增循环的运行效率,通常可用一条自定义指令即自增指令完成。效率提升的原理是,原本需要有两条指令完成的任务,现在只需要一条指令就可以完成,剩下的一条指令可以用作一次流水线的取指解码执行等操作。如果程序中有多条含有数值自增的循环指令,那么这种程序执行效率上的提升就更为明显。可见,通过增加自定义的的指令即自增指令,可以很大程度上增强处理器的性能。例如load自增指令和store自增指令,就将存储指令和计算指令融合成一条指令,从而大幅增强存储性能。
但是,在实现自增指令时需要利用寄存器完成,具体实现为从一个逻辑寄存器rs1中取值,经过指令计算得到结果后,又将结果值重新写到逻辑寄存器rs1中,此时rs1即是源寄存器,又是目的寄存器。由于,逻辑寄存器不能随意更改名字,否则会打乱原始的数据依赖关系,导致错误的结果。为了既保证原先的数据依赖关系,又能将没有数据依赖关系的寄存器更改名字,这就需要用到寄存器重命名,实现寄存器重命名的方式可以通过额外增加新的目的寄存器,用于存放自增指令自增后的结果值。还可以通过不额外增加新的目的物理寄存器,利用自增指令的逻辑寄存器rs1使用最近映射得到的物理寄存器prsM,即从物理寄存器prsM中取出数据进行计算,得到的结果值又重新回写到prsM。这种方式的重命名映射策略,自增指令会对同一个物理寄存器进行读写,即自增指令的基地址寄存器同时是源寄存器和目的寄存器时,但是,这就给在发射指令阶段时,对自增指令的唤醒、发射顺序调度带来麻烦,使得自增指令的发射控制错乱。
发明内容
本发明所要解决的技术问题在于,提供一种用于实现自增指令的方法,能够通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短。
为了解决上述技术问题,本发明第一方面公开了一种用于实现自增指令的方法,所述方法包括:利用写入自增指令的逻辑寄存器映射关联的物理寄存器作为所述自增指令的基地址寄存器;构建自增指令基地址寄存器的专用忙表,所述自增指令基地址寄存器的专用忙表至少包括所有物理寄存器和所述所有物理寄存器对应的工作状态信息,其中,所述所有物理寄存器添加有ID属性;根据接收的自增指令查询所述自增指令基地址寄存器的专用忙表,更改所述物理寄存器对应的工作状态信息;通过更改后的所述自增指令基地址寄存器的专用忙表和预置的非自增指令寄存器的忙表确定所述自增指令的基地址寄存器的最终工作状态信息;根据所述自增指令的基地址寄存器的最终工作状态信息判断是否唤醒所述自增指令的发射状态;通过发射槽接收所述自增指令的发射状态,并依次发射所述自增指令。
在一些实施方式中,工作状态信息包括占用状态和非占用状态,所述根据接收的自增指令查询所述自增指令基地址寄存器的专用忙表,更改所述物理寄存器对应的工作状态信息,包括:接收缓存指令,对所述缓存指令进行解析生成多个缓存信号;判断所述缓存信号是否包括自增指令;若所述缓存信号是自增指令,则更改自增指令基地址寄存器的专用忙表中,所述自增指令对应的基地址寄存器的工作状态信息为占用状态;若所述缓存信号不是自增指令,则保持自增指令基地址寄存器的专用忙表中,所述自增指令对应的基地址寄存器的工作状态信息。
在一些实施方式中,物理寄存器包括复位状态和非复位状态,根据所述自增指令的基地址寄存器的最终工作状态信息判断是否唤醒所述自增指令的发射状态,包括:所述物理寄存器为非复位状态时,当存在发射槽无可唤醒的自增指令、自增指令所属的分支预测失败、load自增指令内存排序失败的其中一种非唤醒状态时,则设置所述物理寄存器的最终工作状态信息为非占用状态;当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态。
在一些实施方式中,当所述非唤醒状态为发射槽无可唤醒的自增指令,所述当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态,之后包括:当发射槽无可唤醒的自增指令时,则发送包括唤醒新一组的自增指令的唤醒指令;根据所述唤醒指令设置所述唤醒指令包含的自增指令在所述自增指令的基地址寄存器的专用忙表中所对应的基地址寄存器的工作状态信息为非占用状态;将唤醒的自增指令根据指令类型发送至对应的发射槽中进行自增指令的发射。
在一些实施方式中,所述将唤醒的自增指令根据指令类型发送至对应的发射槽中进行自增指令的发射,包括:若自增指令的类型为内存访问的相关指令,则遍历mem发射槽,通过所述mem发射槽发射;若自增指令的类型为整数指令,则遍历int发射槽,通过所述int发射槽发射;若自增指令的类型为浮点指令,则遍历fp发射槽,通过所述fp发射槽发射。
在一些实施方式中,当所述非唤醒状态为自增指令所属的分支预测失败,所述当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态,之后包括:获取所述自增指令的分支指令,对所述分支指令进行解析;若所述自增指令的数据值已经回写到所对应的物理寄存器时,则在分支指令解析后,将所述物理寄存器恢复到执行分支指令前的数据值。
在一些实施方式中,当所述非唤醒状态为load自增指令内存排序失败,所述当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态,之后包括:获取所述load自增指令,保存所述load自增指令执行前的自增指令的基地址寄存器的数据值;当load自增指令内存排序失败后,且所述自增指令的数据值已经回写到所对应的物理寄存器时,从发生内存排序失败的自增指令处重新进行指令解析,保存所述自增指令已经回写到所对应的物理寄存器的数据值;重新读出所述load自增指令执行前的自增指令的基地址寄存器的数据值和所述自增指令已经回写到所对应的物理寄存器的数据值作为内存排序失败后的所述自增指令正确的基地址寄存器的数据值。
在一些实施方式中,通过发射槽接收所述自增指令的发射状态,并依次发射所述自增指令,之前,包括:根据物理寄存器的ID属性生成真相关唤醒指令或自增指令的结果回写唤醒指令;通过所述真相关唤醒指令或自增指令的结果回写唤醒指令唤醒所述自增指令的基地址寄存器。
根据本发明的第二个方面,提供了一种用于实现自增指令的方法生成,所述方法包括:在执行自增指令时,还存在待执行的算数逻辑运算指令,其中,所述自增指令和所述算数逻辑运算指令待写入同一寄存器,向所寄存器中仅写入所述自增指令。
根据本发明的第三个方面,提供了一种用于实现自增指令的系统,所述系统包括:存储有可执行程序代码的存储模块;与所述存储器耦合的处理模块;所述处理模块执行如上述的用于实现自增指令的方法。
与现有技术相比,本发明的有益效果在于:
实施本发明能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,通过为寄存器增加id属性,并且构建自增指令专属的专用忙表以完成自增指令的控制,避免分支预测失败或load自增指令内存排序失败的寄存器刷新、寄存器写冲突与值覆盖等多重问题以及消除对其它非自增指令的影响,由此可以达到通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短的效果。
附图说明
图1为本发明实施例公开的一种现有的自增指令的重命名阶段示意图;
图2为本发明实施例公开的一种现有的实现自增指令的流水线结构示意图;
图3为本发明实施例公开的一种现有的实现自增指令时,两条自增指令发射顺序错误的框图;
图4为本发明实施例公开的一种用于实现自增指令的流程示意图;
图5为本发明实施例公开的一种用于实现自增指令的方法的流程示意图;
图6为本发明实施例公开的一种用于实现自增指令的一种应用框图;
图7为本发明实施例公开的一种用于实现自增指令的又一种应用框图;
图8为本发明实施例公开的又一种用于实现自增指令的方法的流程示意图;
图9是本发明实施例公开的一种用于实现自增指令的再一种应用框图;
图10是本发明实施例公开的再一种用于实现自增指令的方法的流程示意图;
图11是本发明实施例公开的一种用于实现自增指令的另一种应用框图;
图12是本发明实施例公开的另一种用于实现自增指令的方法的流程示意图;
图13是本发明实施例公开的一种内存排序失败情况的示意框图;
图14是本发明实施例公开的一种寄存器读写冲突的示意框图;
图15是本发明实施例公开的一种自增指令值被覆盖的示意框图;
图16是本发明实施例公开的一种用于实现自增指令的系统示意图。
具体实施方式
为了更好地理解和实施,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。
根据程序架构的不同,指令的种类和数量也不同,例如arm、x86、RISCV等指令集架构的标准指令集中就无法设定自增指令,不过为了扩展指令的可用场景或者优化程序性能,一般都支持自定义指令集。为了提高处理器运行C语言中i++之类含数值自增循环的运行效率,通常可用一条自定义指令即自增指令完成。效率提升的原理是,原本需要有两条指令完成的任务,现在只需要一条指令就能完成,剩下了一条指令就可以做完流水线的取指解码执行等操作。如果程序中有很多含有数值自增的循环,那么这种程序执行效率上的提升就更为明显。可见,通过增加自定的的指令,可以很大程度上增强了处理器的性能。比如load自增指令和store自增指令,就将存储指令和计算指令融合成一条指令,从而大幅增强存储性能。
在增加自增指令时,是从一个逻辑寄存器中取值,经过指令计算得到结果后,又将结果值重新写到逻辑寄存器中,则此时的逻辑寄存器既是源寄存器,又是目的寄存器。该自增指令的格式如下,假设自增指令的指令名为incr,那么对寄存器加或减一个值(本申请仅以自增指令只有rs1、rs2为两个源寄存器时举例,其实和rs1寄存器进行的操作可以是寄存器、立即数、寄存器和立即数等等),得到的结果又重新写回寄存器中,其中,rs1通常是一个基地址寄存器,地址自增后,又继续重复自增。该自增指令通常会用在快速连续读写数据的阶段。
由于逻辑寄存器不能随意更改名字,否则会打乱原始的数据依赖关系,导致错误的结果,那么为了既保证原先的数据依赖关系,又要保证将没有数据依赖关系的寄存器更改名字,这就需要用到寄存器重命名技术。按照通用的逻辑寄存器重命名策略,每条指令的目的寄存器映射到新的物理寄存器,指令的源寄存器映射为逻辑寄存器最近映射到的那个物理寄存器。有两种方式可以在保留数据依赖关系的同时,完成自增指令的寄存器的重命名:
方式一:增加一个新的目的物理寄存器,用于存放自增指令自增后的结果。即原本逻辑寄存器rs1,取出其数据时是作为源寄存器,往其写入自增结果时是作为目的寄存器。经过重命名后,逻辑寄存器rs1作为源寄存器时使用最近映射得到的物理寄存器prsM,作为目的寄存器时重新映射到一个新的未使用的物理寄存器prsN (M≠N)。这样重命名后,自增指令的读写操作就分离了,读写的物理寄存器不一样,多条有依赖关系的自增指令将使用不同的物理寄存器。这种方式主要修改的是重命名逻辑,图1为采用这种增加自增指令目的寄存器的方式,其中xN表示与处理器架构紧密相关且数量有限的逻辑寄存器,pN表示数量可用户自定义的物理寄存器,可以注意到,读写分离后,两指令之间的数据依赖得到保证(两自增指令读写未分离前,虽然也存在数据依赖,但是这个依赖关系是隐式的,处理器一般识别不了)。
方式二:不额外增加新的目的物理寄存器,自增指令的rs1使用最近映射得到的物理寄存器prsM。即从物理寄存器prsM中取出数据进行计算,得到的结果又重新回写到prsM。这种方式的重命名映射策略,自增指令会对同一个物理寄存器进行读写,虽然少使用了一个物理寄存器,但需要考虑一些额外的问题即本申请在此需要解决的问题。
为了方便阐述本申请的方案,将以如图2所示的流水线结构进行问题的拆分,其中,每个阶段包括如下功能:
取指解码阶段:负责从指令cache(缓存指令)中取出待分析的指令,并将指令按照指令格式解码成一组或多组信号以传递给后续流水线阶段。
重命名阶段:为了在保留数据依赖关系的同时,用更多数量的物理寄存器,扩展指令集(如RISCV)有限的逻辑寄存器数量。
发射阶段:根据发射槽中各个指令的寄存器数据准备状态,发射选择逻辑会按照进入发射槽的先后顺序,依次发射一组(可能是多个)准备好的指令。
寄存器读阶段:从寄存器中读出指令对应寄存器所需的数据。
执行阶段:按照每种指令不同的功能,将寄存器中取得的数据,按照一定的逻辑进行运算,并得到结果。
寄存器回写阶段:大多数计算类指令都有一个目的寄存器,在计算完成后,需要将结果回写,以释放对应的物理寄存器的工作占用状态。
本发明实施例公开了一种用于实现自增指令的方法及系统,能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,通过为寄存器增加id属性,并且构建自增指令专属的专用忙表以完成自增指令的控制,避免分支预测失败或load自增指令内存排序失败的寄存器刷新、寄存器写冲突与值覆盖等多重问题以及消除对其它非自增指令的影响,由此可以达到通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短的效果。
实施例一
在通常的多发射内核中,为了能保证指令能尽快执行,如果流水线发射阶段指令的所有源寄存器都是数据已准备好状态,那么发射选择逻辑将根据内核发射宽度N,从发射槽中选择最先准备好的N条指令(如果准备好的指令小于N,那么也可以根据实际情况,只发射对应的指令)。
为了保证寄存器重命名阶段的正常进行,通常会使用busy_table来记录每个物理寄存器的状态。busy_table在实现时为一个ram,深度Depth为定义的物理寄存器的个数,busy_table[N]==1’b1则表示标号为N的物理寄存器正分配为其它指令的目的寄存器且计算结果尚未写回物理寄存器。
假设自增指令的rs1逻辑寄存器映射到prs1物理寄存器,由于自增指令的基地址寄存器prs1是一个被先读后写的寄存器。读的是源数据,回写的是自增后的结果。由于在寄存器重命名阶段,自增指令的prs1默认视为源寄存器,而源寄存器只会根据读busy_table[prs1]的状态,来判断prs1数据是否准备好。这样prs1的busy状态就只和之前真相关的非自增指令有关,也就是说自增指令在流水线全阶段默认不会给对应基地址寄存器prs1的busy状态设置为true。
自增指令基地址寄存器prs1不影响prs1寄存器的busy状态,这个在如下两种情况下,自增指令能取得正确的基地址物理寄存器值prs1_data:
第一条自增指令能取得prs1源数据;
如果在下一条使用同样prs1基地址物理寄存器的自增指令,在前一条自增指令的自增结果回写到prs1后,才从发射槽中发射出去,后一条自增指令取得的prs1将正确取得前一条自增指令自增后的值。
但是,如下几种情况下,自增指令将取出错误的值,或者结果回写寄存器失败。
第一种可能出现问题的情况就是:多条自增指令发射顺序可能紊乱的问题。对于乱序发射流水线而言,只要当前自增指令的所有源寄存器数据prs1_data和prs2_data都准备好了,那么就可以从发射槽中发射出去了。但是如果前一条自增指令的prs2_data一直没准备好,而其后面自增指令的prs1已经提前准备好了,那么就会出现两条自增指令发射顺序出错的问题,进而导致自增指令取得的源prs1_data错误以及计算结果出错。
在各种指令集架构中,逻辑寄存器数量一般比较少且由选择的指令集架构固定不可更改,如RISCV指令集架构的整数逻辑寄存器有且仅有32个。为了提高内核性能,通常会通过重命名的方式,在解决完非数据相关后,把较少的逻辑寄存器,寄存器重命名映射到更多的用户可自定义数量的物理寄存器上,这样就可达到提高内核性能的目的。图3显示的为两条自增指令发射顺序出错的框图,其中x1-x5表示逻辑寄存器,p1-p6表示物理寄存器。
第二种可能出现问题的情况就是:当同时发射的指令数大于1时,如果前后两个自增指令的所有源寄存器都准备好了,那么可能这两条自增指令可能会一起从发射槽中发射出去,然后在寄存器读阶段,由于前一条自增指令的结果还没开始计算且没回写到寄存器,导致后一条自增指令取得的基地址源寄存器数据错误。多发射情况下自增指令取指出错的可能情况如图4所示。
为了加快指令发射与增强指令管理,一般内核设计时,发射单元会按指令类型划分,不同的指令进入不同的发射单元。如整数计算指令、分支跳转指令会进入int发射单元,和内存访问相关的指令会进入mem发射单元,和浮点相关的指令会进入fp发射单元。由于有三种发射单元相互独立,因此各自发射逻辑调度逻辑仅仅会根据寄存器数据是否准备好,就考虑发射。这在没有自增指令时,发射逻辑并没有问题。但是当存在自增指令且其基地址寄存器同时是源寄存器和目的寄存器时,这就给自增指令的唤醒、发射顺序调度带来新的麻烦。
由于自增指令的prs1是源寄存器又是目的寄存器,因为对于使用同样物理寄存器的自增指令必须控制其发射顺序。为了控制自增指令和其后受影响的其它指令,同时解决前面提到的各种自增指令带来的各种问题,采用了如下的技术方案。
请参阅图5,图5为本发明实施例公开的一种用于实现自增指令的方法的流程示意图。如图5所示,该用于实现自增指令的方法可以包括以下操作:
101、利用写入自增指令的逻辑寄存器映射关联的物理寄存器作为自增指令的基地址寄存器。本申请的自增指令是在不增加寄存器的情况下写入,由此采用了现有技术的映射关联的逻辑寄存器作为自增指令的基地址寄存器的方式为前提。
102、构建自增指令基地址寄存器的专用忙表,自增指令基地址寄存器的专用忙表至少包括所有物理寄存器和所述所有物理寄存器对应的工作状态信息,其中,所有物理寄存器添加有ID属性。
具体实现为:在寄存器的重命名阶段增加了一个自增指令基地址寄存器prs1专用的自增指令基地址寄存器的专用忙表busy_table,可将其名称定义为incr_busy_table。
为了统一所有寄存器的工作状态,所有物理寄存器添加有ID属性,当重命名阶段输出一个有效的自增指令后,就将该自增指令基地址寄存器对应的物理寄存器id值加1,后续使用同样物理寄存器的指令,都自动继承该id值。示例性地,在复位后,所有物理寄存器id值需要有个默认值,一般以0作为id的默认值。如果id是一个32位宽变量,那么当自增指令很多时,此id值将在0->32'dffff_ffff递增,达到最大值32'dffff_ffff后将重新回到0。如下表格提供了为一组重命名后指令的寄存器更新id值的示例。
103、根据接收的自增指令查询自增指令基地址寄存器的专用忙表,更改物理寄存器对应的工作状态信息。
具体实现为:接收从解码阶段向重命名阶段发送的自增指令,其中,工作状态信息包括占用状态和非占用状态,在具体实现上可以将占用状态示意为true,将非占用状态示意为false,工作状态信息为busy,示例性地如图6所示,可以为缓存指令,对该缓存指令进行解析从多个缓存信号,判断该缓存信号是否包括自增指令,若存在有效的自增指令时,就会将将lsincr_busy_table中对应的prs1物理寄存器设置busy状态由false改为true(默认状态为false,即可以直接从寄存器中读取值)。后续使用同样物理寄存器的指令,就必须等到该自增指令发射出去并释放该物理寄存器后,才能从发射槽中发出。若不存在有效的自增指令时,则rs1逻辑寄存器对应物理寄存器的工作状态不变。
104、通过更改后的自增指令基地址寄存器的专用忙表和预置的非自增指令寄存器的忙表确定自增指令的基地址寄存器的最终工作状态信息。
由于存在非自增指令与自增指令共存的状态,最终的自增指令的寄存器的busy状态,就需要查询两个忙表,一个是预置的记录有非自增指令的所有寄存器和自增指令非基地址寄存器状态的busy_table,以及一个由上述方法构建的专门记录自增指令基地址源寄存器rs1的incr_busy_table。如图7所示,为以普通加法指令add和自增指令incr为例,阐述了非自增指令和自增指令查询忙表的过程,其中pN代表重命名后的物理寄存器,对于非自增指令包括有不同的目的寄存器和源寄存器,而自增指令的目的寄存器和源寄存器可作为同一寄存器,示例性地,非自增指令目的寄存器为p3,则更改p3对应的工作状态为true,自增指令的目的寄存器为P1,则更改p1对应的工作状态为true,在查询最终的自增指令所对应的基地址寄存器即源寄存器时,所采用的就是更改后的自增指令基地址寄存器的专用忙表和预置的非自增指令寄存器的忙表,在所有指令的源寄存器PN中对两个表进行查询,将查询结果以择一有则全有的方式进行确定,示例性地,查询P3的工作状态在非自增指令的忙表中为true,那么不管自增指令的p3工作状态是true还是false,都以p3为true作为自增指令的基地址寄存器p3的最终工作状态。
105、根据自增指令的基地址寄存器的最终工作状态信息判断是否唤醒自增指令的发射状态。
由于自增指令的基地址寄存器是源寄存器,也是目的寄存器,因此所有自增指令经过重命名阶段后,后续自增指令读基地址寄存器的busy状态时一定是true,即后续在发射阶段再通过真相关唤醒或者自增指令结果回写唤醒,才能将自增指令对应基地址寄存器唤醒并发射出去。其中,物理寄存器包括复位状态和非复位状态,若物理寄存器为非复位状态时,当存在发射槽无可唤醒的自增指令、自增指令所属的分支预测失败、load自增指令内存排序失败的其中一种非唤醒状态时,则设物理寄存器的最终工作状态信息为非占用状态。当物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒自增指令的发射状态,从而避免发送出非唤醒状态的错误指令。
106、通过发射槽接收自增指令的发射状态,并依次发射自增指令。
这样可以根据上述方法所实现的自增指令在发射槽中留有顺序分明且确定内容的自增指令。
在其他优选实施方式中,自增指令刚进入到发射槽时,基地址寄存器一定是处于busy状态的。这意味着如果要将该自增指令发射出去,那么必须通过一定的方式唤醒该基地址寄存器。对于自增指令而言,有两种方式唤醒该基地址寄存器:真相关唤醒、自增指令结果回写唤醒。可以实现为:根据物理寄存器的ID属性生成真相关唤醒指令或自增指令的结果回写唤醒指令,通过真相关唤醒指令或自增指令的结果回写唤醒指令唤醒自增指令的基地址寄存器。
对于自增指令基地址寄存器而言,真相关唤醒通常指的是多条使用同一个基地址物理寄存器自增指令的第一个自增指令。由于该基地址寄存器中值来自前面非自增指令的目的寄存器,这就存在数据相关。在发射槽中等待唤醒的时候,就可以检测从后续执行或寄存器回写阶段传回真相关唤醒的物理寄存器wb_pN与唤醒有效信号wb_p_val,以及寄存器对应的id值wb_pN_id。如果发射槽中该自增指令的基地址寄存器以及其id值,与真相关唤醒的一组信号匹配,那么就可以将该自增指令的基地址寄存器唤醒,即将该自增指令的基地址寄存器设置为unbusy。自增指令结果回写唤醒,是指基地址已完成自增并准备或已将自增后值回写到物理寄存器中。这种唤醒方式,同样会往发射阶段的发射槽传回一组信号:基地址已自增需要被唤醒的物理寄存器wb_piN、唤醒有效信号wb_pi_val、寄存器对应的id值wb_piN_id。
对于两种方式的唤醒,在唤醒非自增指令的所有源寄存器或者自增指令的非基地址寄存器时,都只需要保证三个条件:物理寄存器相等、有效信号为true、两物理寄存器id值一样,就可以将对应的物理寄存器唤醒。但是对于自增指令的基地址寄存器而言,设置基地址寄存器为unbusy需要满足的有些许区别:物理寄存器相等、有效信号为true、回写唤醒物理寄存器id值比基地址寄存器id值小1。这种差别,根本原因在于id值的更新策略。由此,根据这种为寄存器添加ID属性的方式能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,通过为寄存器增加id属性,并且构建自增指令专属的专用忙表以完成自增指令的控制,消除对其它非自增指令的影响,由此可以达到通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短的效果。
进一步地,如图8所示,其中,步骤201-步骤204的实现方式可以参照上述的步骤101-104,在此不进行赘述。
205、当发射槽无可唤醒的自增指令时,则发送包括唤醒新一组的自增指令的唤醒指令。当自增指令所属的发射单元的所有发射槽中,已经没有可供唤醒的基地址为pN的自增指令,那么此时就应该发射一组信号到incr_busy_table,这样可以提高工作效率,使得实时有指令在发射。
206、根据唤醒指令设置唤醒指令包含的自增指令在自增指令的基地址寄存器的专用忙表中所对应的基地址寄存器的工作状态信息为非占用状态
该环形指令用来设置该自增指令对应的物理寄存器为unbusy(即busy==false)。
这里以自增指令是内存访问相关指令为例进行问题的阐述。当自增指令的基地址寄存器已在执行阶段完成自增运算后,即可触发图8逻辑唤醒发射槽中自增指令或清除自增指令专用忙表incr_busy_table的寄存器busy状态。
207、将唤醒的自增指令根据指令类型发送至对应的发射槽中进行自增指令的发射。
由于自增指令可能属于内存访问相关指令、整数指令、浮点指令。根据类型的不同,需要遍历的发射槽也不同,如下:
如果自增指令是内存访问相关指令,那么遍历的发射槽应该是mem发射槽;
如果自增指令是整数指令,那么遍历的发射槽应该是int发射槽;
如果自增指令是浮点指令,那么遍历的发射槽应该是fp发射槽。
示例性地,如图9所示,当自增指令的基地址寄存器已在执行阶段完成自增运算后,即可以开始遍历所有发射槽有无可以唤醒的自增指令,若有可以唤醒的自增指令,则执行步骤207将对应的自增指令发送至对应的发射槽,若无可唤醒的自增指令,则清除自增指令专用忙表incr_busy_table的寄存器busy状态,执行如步骤205-206的操作。
根据本实施例提供的方法能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,通过为寄存器增加id属性,并且构建自增指令专属的专用忙表以完成自增指令的控制,由此可以达到通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短的效果。
进一步地,如图10所示,其中,步骤301-步骤304的实现方式可以参照上述的步骤101-104,在此不进行赘述。
305、当非唤醒状态为自增指令所属的分支预测失败,获取自增指令的分支指令,对分支指令进行解析。
在高级语言中,for、if、else、switch等语句,编译汇编链接后,指令层面都是通过跳转指令来实现的。跳转一般分为两种:无条件跳转和条件跳转。无条件跳转一般用来进入函数或者从函数返回。条件跳转会根据条件的满足情况,分别进入不同的分支执行不同的运算。分支预测是根据分支预测算法(通常也是基于历史分支跳转记录)来预测未来将进入哪个分支执行,从而提前将指令从指令缓存icache中取出、解码重命名等一系列操作。分支预测如果正确,那么将节省很多时间,加快程序的运行。如果分支预测失败,那么需要从分支预测失败的指令处重新开始取指译码并刷新流水线以恢复寄存器状态。
分支指令执行后才能得到分支信息,以判断分支预测是否正确。在分支解析前,自增指令自增后的数据可能已经回写到寄存器中。如果不恢复寄存器的值为分支指令之前的状态,那么正确分支中指令取得此寄存器中值将是错误的。
306、若自增指令的数据值已经回写到所对应的物理寄存器时,则在分支指令解析后,将物理寄存器恢复到执行分支指令前的数据值。
在含有自增指令的分支预测失败后,如果自增指令的自增地址值已经回写到物理寄存器,那么需要在分支解析后,把寄存器的值恢复到分支执行前的值。示例性地,如图11所示,寄存器p1的值在分支预测失败时出现了错误。那么在获取到分支指令后,在分支指令解析钱,若自增指令回写了寄存器,寄存器则需要恢复到初始值,恢复初始值的方式可以在物理寄存器文件中进行记录,之后由于寄存器值得到了回复,那么就可以在指令序列2的分支上自增指令取得寄存器p1正确的值。
根据本实施例提供的方法,能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,通过为寄存器增加id属性,并且构建自增指令专属的专用忙表以完成自增指令的控制,避免分支预测失败以及消除对其它非自增指令的影响,由此可以达到通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短的效果。
进一步地,如图12所示,其中,步骤401-步骤404的实现方式可以参照上述的步骤101-104,在此不进行赘述。
405、当非唤醒状态为load自增指令内存排序失败,获取load自增指令,保存load自增指令执行前的自增指令的基地址寄存器的数据值。
如果自增指令是内存访问指令,同时是load类型的指令(即从内存中根据地址读取数据的指令),那么就有可能出现内存排序失败的情况。示例性地,如图13所示,以一组简单的load和store类指令来阐述内存排序失败的情况,其中sw指令表示往内存指令地址存4B数据,ld指令表示从内存指令地址取8B数据。其中
sw x1 -> 0(x2);
ld x3 <- 0(x4)
如果x2,x4所指向的是同一个memory地址,那么load操作将依赖于先发起的store操作。如果load被先于store发送至memory,load从memory中读取的将是错误的值,这样一次内存排序错误就发生了。发生内存排序错误时,流水线将会刷新,且重命名映射表会被复位。
406、当load自增指令内存排序失败后,且自增指令的数据值已经回写到所对应的物理寄存器时,从发生内存排序失败的自增指令处重新进行指令解析,保存自增指令已经回写到所对应的物理寄存器的数据值。
首先检测在寄存器的读写阶段,是否有自增指令,如果检测到的为非自增指令,则表示内存排序正常,可以正常执行后续阶段,无需额外的操作,若检测到了自增指令,则表示内存排序失败,在内存失败后,将从发生内存排序失败的指令处重新开始取指(也包括后续指令),并重新进入解码等阶段。重新取指后,发生内存排序失败指令的逻辑寄存器都和之前的一样,但是重命名后物理寄存器有点区别:源物理寄存器还是和之前一样,但是目的物理寄存器变为不同的。因此,发生内存排序失败的load自增指令,所经过的处理线程实现为:第二次重新取指->重命名->发射->寄存器文件读。
407、重新读出load自增指令执行前的自增指令的基地址寄存器的数据值和所述自增指令已经回写到所对应的物理寄存器的数据值作为内存排序失败后的所述自增指令正确的基地址寄存器的数据值。
经过上述的处理线程的这几个阶段的操作后,重新读出的自增指令的prs1_data应该和内存排序失败前取出prs1物理寄存器中值一致。
根据本实施例提供的方法,能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,寄存器程序运行效率更高、指令更精简、整体运行时间更短的效果。
进一步地,如图14所示,为了尽快将自增后地址值尽快回写到物理寄存器,可以选择在流水线执行阶段得到自增结果后,就立即将值回写到寄存器。一般内核设计时,对于算数逻辑运算指令,会在执行阶段就立即发出真相关唤醒信号到发射单元的发射槽中,专业的说这是旁路功能。旁路功能可以在一定程度上加快程序的执行,所以在内核设计中很常见。算数逻辑运算指令(也称ALU指令)在执行阶段返回真相关唤醒信号时,其计算结果还没有回写到物理寄存器。算数逻辑运算指令,为了匹配流水线上其它指令的执行周期,可能会产生延时0~N个周期的数据一样的旁路。在这种情况下,指令序列上在自增指令前的ALU指令,可能在同一时刻往写同一个寄存器写两个不同的值,或者自增指令已经将自增后地址快速回写到寄存器文件,而ALU指令的结果在此后才写同一个寄存器,导致正确的值被覆盖。在这两种情况下,ALU指令的计算结果不能再继续回写到寄存器文件中了。
示例性地,如图14和图15所示,以ALU指令中的加法指令add为例,分别阐述了产生寄存器写冲突或值覆盖情况下的解决方案。其中,resA表示add指令的计算结果,resI表示自增指令自增后的基地址值。图14中,在重命名后的指令序列有数据依赖,对于自增指令的p3寄存器,在寄存器执行阶段,由旁路唤醒物理寄存器p3,之后在同一时刻,自增指令和非自增指令都在申请写入到p3寄存器中,这会产生同一时刻写同一个物理寄存器的冲突,那么此时就会取消算数逻辑运算指令,即,自增指令和算数逻辑运算指令待写入同一寄存器,向寄存器中仅写入自增指令。图15中,在同样的背景下,如果自增指令在执行阶段所消耗周期比ALU指令短时,后发射的自增指令可能比先发射的ALU指令先执行完并先写回寄存器,这就会导致自增指令的自增结果错误地被ALU指令结果覆盖,在此就会取消add指令的回写,仅写入自增指令。
由此,根据本实施例提供的方法,能够解决在实现自增指令的寄存器重命名阶段中,不额外增加新的目的物理寄存器,即自增指令使用最近映射得到的物理寄存器。从物理寄存器中取出数据进行计算,得到的结果又重新写回的重命名映射策略所产生的例如发射次序紊乱和发射调度错乱等问题,通过为寄存器增加id属性,并且构建自增指令专属的专用忙表以完成自增指令的控制,避免分支预测失败或load自增指令内存排序失败的寄存器刷新、寄存器写冲突与值覆盖等多重问题以及消除对其它非自增指令的影响,由此可以达到通过该自增指令使得程序运行效率更高、指令更精简、整体运行时间更短的效果。
实施例二
请参阅图16,图16是本发明实施例公开的一种用于实现自增指令的系统的示意图。如图16所示,该系统可以包括:
存储有可执行程序代码的存储器601;
与存储器601耦合的处理器602;
处理器602调用存储器601中存储的可执行程序代码,用于执行实施例一所描述的用于实现自增指令的方法。
实施例三
本发明实施例公开了一种计算机可读存储介质,其存储用于电子数据交换的计算机程序,其中,该计算机程序使得计算机执行实施例一所描述的用于实现自增指令的方法。
实施例四
本发明实施例公开了一种计算机程序产品,该计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,且该计算机程序可操作来使计算机执行实施例一中所描述的用于实现自增指令的方法。
以上所描述的实施例仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施例的具体描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,存储介质包括只读存储器(Read-Only Memory,ROM)、随机存储器(Random Access Memory,RAM)、可编程只读存储器(Programmable Read-only Memory,PROM)、可擦除可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)、一次可编程只读存储器(One-timeProgrammable Read-Only Memory,OTPROM)、电子抹除式可复写只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(CompactDisc Read-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
最后应说明的是:本发明实施例公开的一种用于实现自增指令的方法及系统所揭露的仅为本发明较佳实施例而已,仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各项实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应的技术方案的本质脱离本发明各项实施例技术方案的精神和范围。
Claims (10)
1.一种用于实现自增指令的方法,其特征在于,所述方法包括:
利用写入自增指令的逻辑寄存器映射关联的物理寄存器作为所述自增指令的基地址寄存器;
构建自增指令基地址寄存器的专用忙表,所述自增指令基地址寄存器的专用忙表至少包括所有物理寄存器和所述所有物理寄存器对应的工作状态信息,其中,所述所有物理寄存器添加有ID属性;
根据接收的自增指令查询所述自增指令基地址寄存器的专用忙表,更改所述物理寄存器对应的工作状态信息;
通过更改后的所述自增指令基地址寄存器的专用忙表和预置的非自增指令寄存器的忙表确定所述自增指令的基地址寄存器的最终工作状态信息,所述预置的非自增指令寄存器的忙表是预置的记录有非自增指令的所有寄存器和自增指令非基地址寄存器状态的忙表;
根据所述自增指令的基地址寄存器的最终工作状态信息判断是否唤醒所述自增指令的发射状态;
通过发射槽接收所述自增指令的发射状态,并依次发射所述自增指令。
2.根据权利要求1所述的用于实现自增指令的方法,其特征在于,所述工作状态信息包括占用状态和非占用状态,所述根据接收的自增指令查询所述自增指令基地址寄存器的专用忙表,更改所述物理寄存器对应的工作状态信息,包括:接收缓存指令,对所述缓存指令进行解析生成多个缓存信号;
判断所述缓存信号是否包括自增指令;
若所述缓存信号是自增指令,则更改自增指令基地址寄存器的专用忙表中所述自增指令对应的基地址寄存器的工作状态信息为占用状态;
若所述缓存信号不是自增指令,则保持自增指令基地址寄存器的专用忙表中所述自增指令对应的基地址寄存器的工作状态信息。
3.根据权利要求1或2所述的用于实现自增指令的方法,其特征在于,所述物理寄存器包括复位状态和非复位状态,根据所述自增指令的基地址寄存器的最终工作状态信息判断是否唤醒所述自增指令的发射状态,包括:
所述物理寄存器为非复位状态时,当存在发射槽无可唤醒的自增指令、自增指令所属的分支预测失败、load自增指令内存排序失败的其中一种非唤醒状态时,则设置所述物理寄存器的最终工作状态信息为非占用状态;
当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态。
4.根据权利要求3所述的用于实现自增指令的方法,其特征在于,当所述非唤醒状态为发射槽无可唤醒的自增指令,所述当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态,之后包括:
当发射槽无可唤醒的自增指令时,则发送包括唤醒新一组的自增指令的唤醒指令;
根据所述唤醒指令设置所述唤醒指令包含的自增指令在所述自增指令的基地址寄存器的专用忙表中所对应的基地址寄存器的工作状态信息为非占用状态;
将唤醒的自增指令根据指令类型发送至对应的发射槽中进行自增指令的发射。
5.根据权利要求4所述的用于实现自增指令的方法,其特征在于,所述将唤醒的自增指令根据指令类型发送至对应的发射槽中进行自增指令的发射,包括:
若自增指令的类型为内存访问的相关指令,则遍历mem发射槽,通过所述mem发射槽发射;
若自增指令的类型为整数指令,则遍历int发射槽,通过所述int发射槽发射;
若自增指令的类型为浮点指令,则遍历fp发射槽,通过所述fp发射槽发射。
6.根据权利要求3所述的用于实现自增指令的方法,其特征在于,当所述非唤醒状态为自增指令所属的分支预测失败,所述当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态,之后包括:
获取所述自增指令的分支指令,对所述分支指令进行解析;
若所述自增指令的数据值已经回写到所对应的物理寄存器时,则在分支指令解析后,将所述物理寄存器恢复到执行分支指令前的数据值。
7.根据权利要求3所述的用于实现自增指令的方法,其特征在于,当所述非唤醒状态为load自增指令内存排序失败,所述当所述物理寄存器的最终工作状态信息为非占用状态时,则判断为不能唤醒所述自增指令的发射状态,之后包括:
获取所述load自增指令,保存所述load自增指令执行前的自增指令的基地址寄存器的数据值;
当load自增指令内存排序失败后,且所述自增指令的数据值已经回写到所对应的物理寄存器时,从发生内存排序失败的自增指令处重新进行指令解析,保存所述自增指令已经回写到所对应的物理寄存器的数据值;
重新读出所述load自增指令执行前的自增指令的基地址寄存器的数据值和所述自增指令已经回写到所对应的物理寄存器的数据值作为内存排序失败后的所述自增指令正确的基地址寄存器的数据值。
8.根据权利要求1所述的用于实现自增指令的方法,其特征在于,通过发射槽接收所述自增指令的发射状态,并依次发射所述自增指令,之前包括:
根据物理寄存器的ID属性生成真相关唤醒指令或自增指令的结果回写唤醒指令,所述真相关唤醒指令是多条使用同一个基地址物理寄存器的自增指令的第一个自增指令;
通过所述真相关唤醒指令或自增指令的结果回写唤醒指令唤醒所述自增指令的基地址寄存器。
9.用于执行自增指令的方法,其特征在于,所述自增指令通过权利要求1-8任一项所述的用于实现自增指令的方法生成,所述方法包括:
在执行自增指令时,还存在待执行的算数逻辑运算指令,其中,所述自增指令和所述算数逻辑运算指令待写入同一寄存器;
向所述寄存器中仅写入所述自增指令。
10.一种用于实现自增指令的系统,其特征在于,所述系统包括:
存储有可执行程序代码的存储模块;
与所述存储模块耦合的处理模块;
所述处理模块执行如权利要求1-8任一项所述的用于实现自增指令的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110716307.1A CN113254079B (zh) | 2021-06-28 | 2021-06-28 | 一种用于实现自增指令的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110716307.1A CN113254079B (zh) | 2021-06-28 | 2021-06-28 | 一种用于实现自增指令的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113254079A CN113254079A (zh) | 2021-08-13 |
CN113254079B true CN113254079B (zh) | 2021-10-01 |
Family
ID=77189831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110716307.1A Active CN113254079B (zh) | 2021-06-28 | 2021-06-28 | 一种用于实现自增指令的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113254079B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113703842B (zh) * | 2021-09-10 | 2024-03-26 | 中国人民解放军国防科技大学 | 一种基于分支预测的值预测方法、装置及介质 |
CN114327644B (zh) * | 2022-03-16 | 2022-06-03 | 广东省新一代通信与网络创新研究院 | 一种处理器预测访存相关性的实现方法 |
CN117008972B (zh) * | 2023-09-27 | 2023-12-05 | 武汉深之度科技有限公司 | 一种指令分析方法、装置、计算设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4002851A (en) * | 1974-06-06 | 1977-01-11 | Telefonaktiebolaget L M Ericsson | Telecommunication system controlled by stored program instructions |
CN101169710A (zh) * | 2006-10-26 | 2008-04-30 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN102566976A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 管理重命名寄存器的寄存器重命名系统和方法 |
CN111538534A (zh) * | 2020-04-07 | 2020-08-14 | 江南大学 | 一种基于指令凋零的多指令乱序发射方法及处理器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7506139B2 (en) * | 2006-07-12 | 2009-03-17 | International Business Machines Corporation | Method and apparatus for register renaming using multiple physical register files and avoiding associative search |
US20080077782A1 (en) * | 2006-09-26 | 2008-03-27 | Arm Limited | Restoring a register renaming table within a processor following an exception |
US9946549B2 (en) * | 2015-03-04 | 2018-04-17 | Qualcomm Incorporated | Register renaming in block-based instruction set architecture |
GB2538237B (en) * | 2015-05-11 | 2018-01-10 | Advanced Risc Mach Ltd | Available register control for register renaming |
US10528355B2 (en) * | 2015-12-24 | 2020-01-07 | Arm Limited | Handling move instructions via register renaming or writing to a different physical register using control flags |
-
2021
- 2021-06-28 CN CN202110716307.1A patent/CN113254079B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4002851A (en) * | 1974-06-06 | 1977-01-11 | Telefonaktiebolaget L M Ericsson | Telecommunication system controlled by stored program instructions |
CN101169710A (zh) * | 2006-10-26 | 2008-04-30 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN102566976A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 管理重命名寄存器的寄存器重命名系统和方法 |
CN111538534A (zh) * | 2020-04-07 | 2020-08-14 | 江南大学 | 一种基于指令凋零的多指令乱序发射方法及处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN113254079A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113254079B (zh) | 一种用于实现自增指令的方法及系统 | |
US6877089B2 (en) | Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program | |
JP2898820B2 (ja) | 自己並列化式のコンピュータ・システムおよび方法 | |
US6408385B1 (en) | Data processor | |
US6415380B1 (en) | Speculative execution of a load instruction by associating the load instruction with a previously executed store instruction | |
US8543796B2 (en) | Optimizing performance of instructions based on sequence detection or information associated with the instructions | |
US8943298B2 (en) | Meta predictor restoration upon detecting misprediction | |
US6665793B1 (en) | Method and apparatus for managing access to out-of-frame Registers | |
US5187793A (en) | Processor with hierarchal memory and using meta-instructions for software control of loading, unloading and execution of machine instructions stored in the cache | |
US9753730B2 (en) | Decoding instructions from multiple instructions sets | |
US10162635B2 (en) | Confidence-driven selective predication of processor instructions | |
US10740105B2 (en) | Processor subroutine cache | |
US7051191B2 (en) | Resource management using multiply pendent registers | |
CN101884025B (zh) | 用于使过程返回序列加速的方法和系统 | |
CN101194228B (zh) | 执行微处理器和微控制器的子例行程序的快速返回的装置 | |
US20190235876A1 (en) | Methods for scheduling micro-instructions and apparatus using the same | |
US7234046B2 (en) | Branch prediction using precedent instruction address of relative offset determined based on branch type and enabling skipping | |
US7873813B2 (en) | Variable length VLIW instruction with instruction fetch control bits for prefetching, stalling, or realigning in order to handle padding bits and instructions that cross memory line boundaries | |
CN115629806B (zh) | 一种处理指令的方法、系统、设备和存储介质 | |
KR20220057482A (ko) | 데이터 구조 포기 | |
US7836277B2 (en) | Pre-tracing instructions for CGA coupled processor in inactive mode for execution upon switch to active mode and continuing pre-fetching cache miss instructions | |
US9983932B2 (en) | Pipeline processor and an equal model compensator method and apparatus to store the processing result | |
CN114138334A (zh) | 一种循环程序执行方法、装置以及处理器 | |
US7093112B2 (en) | Method and apparatus for caching short program loops within an instruction FIFO | |
US6550003B1 (en) | Not reported jump buffer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |