CN104216681A - 一种cpu指令处理方法和处理器 - Google Patents
一种cpu指令处理方法和处理器 Download PDFInfo
- Publication number
- CN104216681A CN104216681A CN201310213735.8A CN201310213735A CN104216681A CN 104216681 A CN104216681 A CN 104216681A CN 201310213735 A CN201310213735 A CN 201310213735A CN 104216681 A CN104216681 A CN 104216681A
- Authority
- CN
- China
- Prior art keywords
- instruction
- result
- register
- processor
- used once
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title abstract 3
- 238000000034 method Methods 0.000 claims abstract description 30
- 230000002159 abnormal effect Effects 0.000 claims description 3
- 230000002596 correlated effect Effects 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 239000003550 marker Substances 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000000875 corresponding effect Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
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
本发明提供一种CPU指令处理方法和处理器,涉及计算机领域,能够节省寄存器资源,并降低读写继存器所需消耗的功耗。其方法为:当第一指令的结果只被第一指令之后的第二指令使用一次时,将第一指令和第二指令的中间结果不写回寄存器堆并且在寄存器重命名阶段对存储所述中间结果的寄存器不进行重命名,即不将存储所述中间结果的寄存器映射为物理寄存器。本发明的实施例用于指令间的结果传递。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种CPU指令处理方法和处理器。
背景技术
现在的处理器(Center Process Unit,CPU)中大都采用流水线技术,基本的五级流水线包括取指(即取出指令),译码(即对指令进行译码),执行(即对指令进行执行),访存(即将数据写到内存中,或者从内存中读取数据),写回(即将数据写到寄存器堆当中),同一个周期内,可以有5条指令分别处于不同的流水级。
执行的指令间存在着3种相关性,即数据相关、控制相关和结构相关。而数据相关中又分为3种:读后写相关(Read After Write,RAW),即后面的指令要用到前面指令所写的数据;写后写相关(Write After Write,WAW),即两条指令同时写同一个单元;读后写相关(Write After Read,WAR),即被读取的数据将会被后面的指令所写入。数据相关有可能导致流水线的阻塞,比如,流水线要求指令在译码阶段读取寄存器时,该寄存器是流水线中前面指令的目标寄存器,并且结果还没有写回,那么该指令就要在译码阶段等待。
为了解决上述阻塞问题,提高流水线的效率,目前业界的一般做法是使用前递技术(Forwarding),也称为旁路技术(Bypass),即当后面的指令用到前面指令的运算或者是访存结果时,就可以直接通过旁路获取结果,而不需要等到结果写回寄存器,并可以通过寄存器重名命来避免WAW和WAR相关,从而提高指令级并行的效率。实际上,程序中使用的寄存器是程序员可见的逻辑寄存器,这些程序员可见的寄存器又称为结构寄存器,而实际硬件执行中,会将这些寄存器重新映射到程序员不可见的微结构寄存器。
对于一般的整数运算指令序列来说,要经过取指、译码和寄存器重命名(Rename),然后送到发射队列(Issue queue)。在发射队列的指令,假如发现它的源操作数的值已经准备好了,那么它就可以发送到空闲的整点运算单元(Fix Point Arthmetic Unit,FX),进行整数的运算。运算结果进行写回(Write Back,WB),存储到寄存器堆当中。
其中寄存器重命名的阶段,就是将结构寄存器(程序员可见),映射到物理寄存器(程序员不可见)上的过程,该过程可以避免WRW,WAR相关。
在实现上述解决阻塞问题的过程中,发明人发现现有技术中至少存在如下问题:
随着功能单元(Function Unit)的增多,寄存器堆(Register File)越做越大,对于寄存器堆的读写,是相当耗能的。实际上,很多指令的结果,往往只会被后面一条,或者是接下来几条指令中的其中的一条所用,而且,仅被使用一次,对于这类只被使用一次的结果,写回寄存器堆,实际上是对寄存器资源的浪费。
发明内容
本发明的实施例提供一种CPU指令处理方法和处理器,能够节省寄存器资源,并且降低了读写继存器所需消耗的功耗。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种CPU指令处理方法,所述方法包括:
判断第一指令的结果是否只被所述第一指令之后的第二指令使用一次;
若所述结果只被所述第一指令之后的第二指令使用一次,则将所述第一指令的结果不写回寄存器堆;
将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令,作为所述第二指令的源操作数。
在第一种可能的实现方式中,结合第一方面,所述判断第一指令的结果是否只被所述第一指令之后的指令使用一次包括:
在译码阶段识别所述第一指令和第二指令是否有特殊标识,如果有特殊标识则确定第一指令的结果只被所述第一指令之后的第二指令使用一次。
在第二种可能的实现方式中,结合第一方面或第一方面的第一种实现方式,所述判断第一指令的结果是否只被所述第一指令之后的指令使用一次还包括:
若第一寄存器作为所述第一指令的结果的存放寄存器,同时只作为所述第二指令的源操作数,则确定所述第一指令的结果只被所述第一指令之后的指令使用一次,对所述第一指令和第二指令做特殊标识。
在第三种可能的实现方式中,结合第一方面的第二种可能的实现方式,对所述第一指令和第二指令做特殊标识包括:
将所述第一寄存器替换为特殊寄存器,且对第一指令和第二指令做特殊关系标记。
在第四种可能的实现方式中,结合第一方面的第二种可能的实现方式,对所述第一指令和第二指令做特殊标识包括:
在所述第一指令以及第二指令后添加特殊比特位,用于标记第一指令和第二指令的关系。
在第五种可能的实现方式中,结合第一方面或第一方面的第一至第四种可能的实现方式中的任意一项,所述将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令包括:
若所述第一指令和所述第二指令为连续的两条指令,则将所述第一指令的结果通过前递通路直接传递给所述第二指令,作为所述第二指令的源操作数;
若所述第一指令和所述第二指令为不连续的两条指令,则在所述第一指令执行后,将所述第一指令的结果缓存在所述功能单元中,当所述第二指令执行时,将所述第一指令的结果传递给所述第二指令,作为所述第二指令的源操作数。
在第六种可能的实现方式中,结合第一方面或第一方面的第一至第五种可能的实现方式,所述方法还包括:
若所述结果只被所述第一指令之后的第二指令使用一次,则对所述第一指令的结果所在的寄存器在重命名阶段不进行重命名操作。
在第七种可能的实现方式中,结合第一方面或第一方面的第一至第六可能的实现方式中的任意一项,所述方法还包括:
在所述第一指令执行完成后要通知重排序缓冲器,以便将所述第一指令按照所述重排序缓冲器中的排序规则进行提交;
在所述第二指令执行完成后要将所述第二指令的结果写回寄存器堆,并通知重排序缓冲器,以便将所述第二指令按照所述重排序缓冲器中的排序规则进行提交。
在第八种可能的实现方式中,结合第一方面或第一方面的第一至第七种可能的实现方式,所述方法还包括:
当所述第一指令和第二指令执行完成后,将所述第一指令和所述第二指令同时提交;
当所述第一指令和/或第二指令执行出现异常时,将所述第一指令和所述第二指令重新执行。
第二方面,提供一种处理器,所述处理器包括:
判决单元,用于判断第一指令的结果是否只被所述第一指令之后的第二指令使用一次;
执行单元,用于若所述结果只被所述第一指令之后的第二指令使用一次,则将所述第一指令的结果不写回寄存器堆;并执行第一指令和第二指令;
发射单元,用于将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令,作为所述第二指令的源操作数。
在第一种可能的实现方式中,结合第二方面,所述判决单元具体用于:
在译码阶段识别所述第一指令和第二指令是否有特殊标识,如果有特殊标识则确定第一指令的结果只被所述第一指令之后的第二指令使用一次。
在第二种可能的实现方式中,结合第二方面或第二方面的第一种实现方式,所述处理器还包括:
标识单元,在译码阶段识别第一寄存器作为所述第一指令的结果的存放寄存器,同时只作为所述第二指令的源操作数,则确定所述第一指令的结果只被所述第一指令之后的指令使用一次,对所述第一指令和第二指令做特殊标识。
在第三种可能的实现方式中,结合第二方面的第二种实现方式中的任意一项,所述标识单元具体用于:
将所述第一寄存器替换为特殊寄存器,且对第一指令和第二指令做特殊关系标记。
在第四种可能的实现方式中,结合第二方面的第二种实现方式,所述判决单元具体用于:
在所述第一指令以及第二指令后添加特殊比特位,用于标记第一指令和第二指令的关系。
在第五种可能的实现方式中,结合第二方面或第二方面的第一至第四种可能的实现方式中的任意一项,所述发射单元具体用于:
若所述第一指令和所述第二指令为连续的两条指令,则将所述第一指令的结果通过前递通路直接传递给所述第二指令,作为所述第二指令的源操作数;
若所述第一指令和所述第二指令为不连续的两条指令,则在所述第一指令执行后,将所述第一指令的结果缓存在所述功能单元中,当所述第二指令执行时,将所述第一指令的结果传递给所述第二指令,作为所述第二指令的源操作数;
在第六种可能的实现方式中,结合第一方面或第一方面的第一至第五种可能的实现方式,所述处理器还包括:
重命名单元,用于若所述结果只被所述第一指令之后的第二指令使用一次,则对所述第一指令的结果所在的寄存器在重命名阶段不进行重命名操作。
在第七种可能的实现方式中,结合第二方面或第二方面的第一至第六种可能的实现方式中的任意一项,所述处理器还包括:
通知单元,同于在所述第一指令执行完成后要通知重排序缓冲器,以便将所述第一指令按照所述重排序缓冲器中的排序规则进行提交;在所述第二指令执行完成后要将所述第二指令的结果写回寄存器堆,并通知重排序缓冲器,以便将所述第二指令按照所述重排序缓冲器中的排序规则进行提交。
在第八种可能的实现方式中,结合第二方面或第二方面的第一至第七种可能的实现方式中的任意一项,所述处理器还包括:
提交单元,用于当所述第一指令和第二指令执行完成后,将所述第一指令和所述第二指令同时提交;
异常处理单元,用于当所述第一指令和/或第二指令执行出现异常时,将所述第一指令和所述第二指令重新执行。
本发明实施例提供一种CPU指令处理方法和处理器,当第一指令的结果只被第一指令之后的第二指令使用一次时,将第一指令和第二指令的中间结果不写回寄存器堆并且在寄存器重命名阶段对存储所述中间结果的寄存器不进行重命名,即不将存储所述中间结果的寄存器映射为物理寄存器,从而节省了寄存器资源,并且降低了读写继存器所需消耗的功耗。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种CPU指令处理方法的流程示意图一;
图2为本发明实施例提供的一种CPU指令处理方法的流程示意图二;
图3为本发明实施例提供的一种处理器的结构示意图一;
图4为本发明实施例提供的一种处理器的结构示意图二;
图5为本发明实施例提供的一种处理器的结构示意图三;
图6为本发明实施例提供的一种处理器的结构示意图四;
图7为本发明实施例提供的一种处理器的结构示意图五;
图8为本发明实施例提供的另一种处理器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种CPU指令处理方法,如图1所示,所述方法包括:
101、判断第一指令的结果是否只被所述第一指令之后的第二指令使用一次。
需要注意的是,一条指令的结果只被该条指令之后的第二指令使用一次的关系指的是:
当一条指令执行后的中间结果作为该条指令之后的第二指令执行时所用的源操作数,并且这种关系只存在一次。
102、若所述结果只被所述第一指令之后的第二指令使用一次,则将所述第一指令的结果不写回寄存器堆。
103、将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令,作为所述第二指令的源操作数。
本发明实施例提供一种CPU指令处理方法,当第一指令的结果只被第一指令之后的第二指令使用一次时,将第一指令和第二指令的中间结果不写回寄存器堆并且在寄存器重命名阶段对存储所述中间结果的寄存器不进行重命名,即不将存储所述中间结果的寄存器映射为物理寄存器,从而节省了寄存器资源,并且降低了读写继存器所需消耗的功耗。
为了使本领域技术人员能够更清楚地理解本发明实施例提供的技术方案,下面通过具体的实施例,对本发明实施例提供的一种CPU指令处理方法进行详细说明,如图2所示,该方法包括:
201、处理器将程序代码进行编译,并在编译完成后读入指令。
具体的,可以通过以下方法实现:
若有程序指令需要被执行时,则处理器通过取指器将指令读入,若发现读入的两条指令的中间结果只被使用一次,则在编译器生成代码的时候可以用特殊的结构寄存器R0来存储所述中间结果。
示例性的,若一条程序代码为a[0]=b+c+d,一般情况下编译器编译后生成的代码如下:
ADD R3,R1,R2
ADD R5,R3,R4
STD 0(R6),R5
其中R1存放b的值,R2存放c的值,R4存放d的值,R6存放a[0]的地址;
假设其中第一条为指令A,第二条为指令B,其中指令A在指令B前面执行,并且指令A的执行结果存储于寄存器R3中,同时指令B的源寄存器也为R3,即指令A与指令B间的中间结果只被使用一次,那么我们可以修改编译器,将指令A与指令B的中间结果存放于特殊结构寄存器R0中,用以将存在上述特殊关系的两条指令标识出来,修改编译器后生成的代码如下:
ADD R0,R1,R2
ADD R5,R0,R4
STD 0(R6),R5
或给每条指令添加一个标记位,用以标记中间结果只被使用一次的两条指令,经编译后生成的代码如下:
ADD R3,R1,R2 1
ADD R5,R3,R4 1
STD 0(R6),R5 0
其中标记位为1时,表示两条指令存在中间结果被使用一次的关系;
当这两条指令需要被执行时,则处理器通过IF取值器将指令A与指令B读入。
202、处理器在译码阶段判断第一指令的结果是否只被第一指令之后的第二指令使用一次的情况,若存在,则对两条指令进行标识。
具体的,可以通过以下方法实现:
若在译码阶段,译码器发现第一指令使用了特殊寄存器R0作为结果寄存器,同时接下来的第二指令使用寄存器R0作为源操作数,那么译码阶段将会识别出第一指令和第二指令并对该两条指令进行特殊标识;
或译码器发现第一指令与第二指令的标记位都为1,则对该两条指令进行特殊标识。
示例性的,若发现指令A使用了特殊寄存器R0作为结果寄存器,同时接下来的某指令B使用寄存器R0中的值作为源操作数,那么译码阶段将会识别出指令A和指令B具备‘中间结果只被使用一次’的关系,对该两条指令进行特殊标识;
或发现指令A与指令B的标记位都为1,则对指令A与指令B进行特殊标识。
203、处理器在重命名阶段,若发现两条指令拥有特殊标记,则对存储中间结果的寄存器不进行重命名,并将指令流信息发送给重排序缓冲器和发射队列。
具体的,可通过以下方法实现:
当指令流到达重命名阶段,若发现两条指令拥有特殊标记,则对于存储这两条指令的中间结果的寄存器不进行重命名操作,即不将其映射为物理寄存器,而存储其他信息的寄存器需要进行重命名,并映射为物理寄存器。
示例性的,当指令A与指令B经过重命名阶段时,发现指令A与指令B拥有特殊标记,若指令A与指令B的中间结果被存储在R0中,则不对其中的R0寄存器进行重命名工作,其他寄存器照常进行重命名工作,即将对应的结构寄存器重命名为物理寄存器,若指令A与指令B的中间结果被存储在R3中,则不对其中的R3寄存器进行重命名工作,其他寄存器照常进行重命名工作,即将对应的结构寄存器重命名为物理寄存器,;
当重命名工作结束后,将指令流相关信息发送到重排序缓冲器与发射队列中,其中指令流信息是译码以后得到的指令信息。包括源操作数,目的操作数,需要进行的操作和命令信息。
204、处理器在发射队列中进行等待的指令的源操作数准备就绪后,将该指令发送到功能单元中进行运算。
具体的,可以通过以下方法实现:
当指令在发射队列中进行等待的时候,若寄存器堆中已经保存有最新的源操作数或功能单元已经算出最新的值,但是还没有写回寄存器堆中,则表明指令的源操作数已经准备就绪,将指令发送到功能单元中进行运算。
可选的,在进行计算后,还可以包括以下步骤:
205、若第一指令的结果只被第一指令之后的第二指令使用一次,当第一指令计算出结果时,不将所述结果发送到寄存器堆,而是缓存在功能单元中,等待第二指令执行时,将所述结果作为源操作数。
具体的,可以通过以下方法实现:
对于只具有一般关系的两条指令,经过功能单元计算结束后的结果直接写回寄存器堆并通知重排序缓冲器指令执行完毕等待最终提交,对于中间结果只被使用一次的两条指令,若第一指令计算出结果时,并不将所述结果发送到寄存器堆,而是缓存在功能单元中,等待第二指令执行时,将所述结果作为源操作数;
假如两条指令是连续的时候,第一指令执行的结果可以通过前向通路直接传递给第二指令进行计算而不需要缓存,第一指令执行结束时需要通知重排序缓冲器,当第二指令执行结束时,需要将结果写回寄存器堆,并通知重排序缓冲器。
示例性的,对于中间结果被使用一次的两条指令A和B,当A指令计算出结果时,该结果并不被发送到寄存器堆,而是缓存在功能单元中,并在B指令执行时,作为B指令的源操作数;
事实上,假如A指令和B指令是连续的时候,A指令执行的结果可以通过前向通路直接传递给B指令进行计算而不需要缓存,对于A指令,其经过功能单元计算结束后是需要通知重排序缓冲器的,当B指令执行结束后,需要将B指令的执行结果写回寄存器堆,并通知重排序缓冲器。
206、若第一指令的结果只被第一指令之后的第二指令使用一次,则重排序缓冲器需要在两条指令都执行完毕后同时进行提交。
具体的,可以通过以下方法实现:
若第一指令的结果只被第一指令之后的第二指令使用一次,为了避免第一指令执行时,忽然发生异常进入异常处理程序,而导致第一指令的结果丢失的情况,重排序缓冲器需要在第二指令执行结束时才可以提交第一指令和第二指令,即保证同时提交,假如第一指令执行结束了,而第二指令还没执行结束的时候,忽然发生异常,那么此时,第一和第二指令都不能提交,需要等待重新执行。
示例性的,对于A、B两条指令,重排序缓冲器需要在B指令完成时才可以提交A指令和B指令,即为了保证同时提交,从而避免A执行时,忽然发生异常而进入异常处理程序导致A指令的结果丢失的情况,假如A指令执行结束,而B指令还没执行结束的时候,忽然发生异常,那么此时,A指令和B指令都不能提交,需要等待重新执行。
本发明实施例提供一种CPU指令处理方法,当第一指令的结果只被第一指令之后的第二指令使用一次时,将第一指令和第二指令的中间结果不写回寄存器堆并且在寄存器重命名阶段对存储所述中间结果的寄存器不进行重命名,即不将存储所述中间结果的寄存器映射为物理寄存器,从而节省了寄存器资源,并且降低了读写继存器所需消耗的功耗。
本发明实施例提供一种处理器01,如图3所示,处理器01包括:
判决单元011,用于判断第一指令的结果是否只被第一指令之后的第二指令使用一次;
执行单元012,用于若结果只被第一指令之后的第二指令使用一次,则将第一指令的结果不写回寄存器堆;并执行第一指令和第二指令;
发射单元013,用于将第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给第二指令,作为第二指令的源操作数。
进一步的,判决单元011具体用于:
在译码阶段识别第一指令和第二指令是否有特殊标识,如果有特殊标识则确定第一指令的结果只被第一指令之后的第二指令使用一次。
再进一步的,如图4所示,处理器01还包括:
标识单元014,在译码阶段识别第一寄存器作为第一指令的结果的存放寄存器,同时只作为第二指令的源操作数,则确定第一指令的结果只被第一指令之后的指令使用一次,对第一指令和第二指令做特殊标识。
再进一步的,执行单元012具体用于:
将第一寄存器替换为特殊寄存器,且对第一指令和第二指令做特殊关系标记。
再进一步的,标识单元014具体用于:
在第一指令以及第二指令后添加特殊比特位,用于标记第一指令和第二指令的关系。
更进一步的,发射单元013具体用于:
若第一指令和第二指令为连续的两条指令,则将第一指令的结果通过前递通路直接传递给第二指令,作为第二指令的源操作数;
若第一指令和第二指令为不连续的两条指令,则在第一指令执行后,将第一指令的结果缓存在功能单元中,当第二指令执行时,将第一指令的结果传递给第二指令,作为第二指令的源操作数。
可选的,如图5所示,处理器01还包括:
重命名单元015,用于若结果只被第一指令之后的第二指令使用一次,则对第一指令的结果所在的寄存器在重命名阶段不进行重命名操作。
优选的,如图6所示,处理器01还包括:
通知单元016,同于在第一指令执行完成后要通知重排序缓冲器,以便将第一指令按照重排序缓冲器中的排序规则进行提交;在第二指令执行完成后要将第二指令的结果写回寄存器堆,并通知重排序缓冲器,以便将第二指令按照重排序缓冲器中的排序规则进行提交。
优选的,如图7所示,处理器01还包括:
提交单元017,用于当第一指令和第二指令执行完成后,将第一指令和第二指令同时提交;
异常处理单元018,用于当第一指令和/或第二指令执行出现异常时,将第一指令和第二指令重新执行。
本发明实施例提供一种处理器,当第一指令的结果只被第一指令之后的第二指令使用一次时,将第一指令和第二指令的中间结果不写回寄存器堆并且在寄存器重命名阶段对存储中间结果的寄存器不进行重命名,即不将存储中间结果的寄存器映射为物理寄存器,从而节省了寄存器资源,并且降低了读写继存器所需消耗的功耗。
本发明实施例提供一种处理器02,如图8所示,处理器02包括:
取指器021、译码器022、重命名部件023、发射队列024、重排序缓冲器025、寄存器堆026以及功能单元027,其中重命名部件023与发射队列024和重排序缓冲器025相连接,寄存器堆026与重排序缓冲器025、发射队列024相互连接,寄存器堆026和发射队列024与功能单元027相连接,功能单元027与重排序缓冲器025和寄存器堆026相连接,指令首先经过取指器021后到达译码器022;其中,译码器022用于:
判断第一指令的结果是否只被第一指令之后的第二指令使用一次;
若结果只被第一指令之后的第二指令使用一次,则将第一指令的结果不写回寄存器堆026。
进一步的,发射队列024用于:
将第一指令和第二指令发射到功能单元027中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给第二指令,作为第二指令的源操作数。
再进一步的,译码器022具体用于:
在译码阶段识别第一指令和第二指令是否有特殊标识,如果有特殊标识则确定第一指令的结果只被第一指令之后的第二指令使用一次。
再进一步的,译码器022具体用于:
在译码阶段识别第一寄存器作为第一指令的结果的存放寄存器,同时只作为第二指令的源操作数,则确定第一指令的结果只被第一指令之后的指令使用一次,对第一指令和第二指令做特殊标识。
再进一步的,译码器022具体用于:
将第一寄存器替换为特殊寄存器,且对第一指令和第二指令做特殊关系标记。
再进一步的,译码器022具体用于:
在第一指令以及第二指令后添加特殊比特位,用于标记第一指令和第二指令的关系。
再进一步的,发射队列024具体用于:
若第一指令和第二指令为连续的两条指令,则将第一指令的结果通过前递通路直接传递给第二指令,作为第二指令的源操作数;
若第一指令和第二指令为不连续的两条指令,则在第一指令执行后,将第一指令的结果缓存在功能单元027中,当第二指令执行时,将第一指令的结果传递给第二指令,作为第二指令的源操作数。
再进一步的,重命名部件023具体用于:
若结果只被第一指令之后的第二指令使用一次,则对第一指令的结果所在的寄存器在重命名阶段不进行重命名操作。
再进一步的,功能单元027具体用于:
在第一指令执行完成后要通知重排序缓冲器025,以便将第一指令按照重排序缓冲器025中的排序规则进行提交;在第二指令执行完成后要将第二指令的结果写回寄存器堆026,并通知重排序缓冲器025,以便将第二指令按照重排序缓冲器025中的排序规则进行提交。
更进一步的,重排序缓冲器025还用于:
当第一指令和第二指令执行完成后,将第一指令和第二指令同时提交;
当第一指令和/或第二指令执行出现异常时,将第一指令和第二指令重新执行。
本发明实施例提供一种处理器,当第一指令的结果只被第一指令之后的第二指令使用一次时,将第一指令和第二指令的中间结果不写回寄存器堆并且在寄存器重命名阶段对存储中间结果的寄存器不进行重命名,即不将存储中间结果的寄存器映射为物理寄存器,从而节省了寄存器资源,并且降低了读写继存器所需消耗的功耗。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法,装置和***可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (18)
1.一种CPU指令处理方法,其特征在于,所述方法包括:
判断第一指令的结果是否只被所述第一指令之后的第二指令使用一次;
若所述结果只被所述第一指令之后的第二指令使用一次,则将所述第一指令的结果不写回寄存器堆;
将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令,作为所述第二指令的源操作数。
2.根据权利要求1所述的方法,其特征在于,所述判断第一指令的结果是否只被所述第一指令之后的指令使用一次包括:
在译码阶段识别所述第一指令和第二指令是否有特殊标识,如果有特殊标识则确定第一指令的结果只被所述第一指令之后的第二指令使用一次。
3.根据权利要求1或2所述的方法,其特征在于,所述判断第一指令的结果是否只被所述第一指令之后的指令使用一次还包括:
若第一寄存器作为所述第一指令的结果的存放寄存器,同时只作为所述第二指令的源操作数,则确定所述第一指令的结果只被所述第一指令之后的指令使用一次,对所述第一指令和第二指令做特殊标识。
4.根据权利要求3所述的方法,其特征在于,对所述第一指令和第二指令做特殊标识包括:
将所述第一寄存器替换为特殊寄存器,且对第一指令和第二指令做特殊关系标记。
5.根据权利要求3所述的方法,其特征在于,对所述第一指令和第二指令做特殊标识包括:
在所述第一指令以及第二指令后添加特殊比特位,用于标记第一指令和第二指令的关系。
6.根据权利要求1至5任意一项所述方法,其特征在于,所述将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令包括:
若所述第一指令和所述第二指令为连续的两条指令,则将所述第一指令的结果通过前递通路直接传递给所述第二指令,作为所述第二指令的源操作数;
若所述第一指令和所述第二指令为不连续的两条指令,则在所述第一指令执行后,将所述第一指令的结果缓存在所述功能单元中,当所述第二指令执行时,将所述第一指令的结果传递给所述第二指令,作为所述第二指令的源操作数。
7.根据权利要求1至6中任一项所述方法,其特征在于,所述方法还包括:
若所述结果只被所述第一指令之后的第二指令使用一次,则对所述第一指令的结果所在的寄存器在重命名阶段不进行重命名操作。
8.根据权利要求1至7中任一项所述方法,其特征在于,在所述第一指令执行完成后要通知重排序缓冲器,以便将所述第一指令按照所述重排序缓冲器中的排序规则进行提交;
在所述第二指令执行完成后要将所述第二指令的结果写回寄存器堆,并通知重排序缓冲器,以便将所述第二指令按照所述重排序缓冲器中的排序规则进行提交。
9.根据权利要求1至8中任意一项所述的方法,其特征在于,所述方法还包括:
当所述第一指令和第二指令执行完成后,将所述第一指令和所述第二指令同时提交;
当所述第一指令和/或第二指令执行出现异常时,将所述第一指令和所述第二指令重新执行。
10.一种处理器,其特征在于,包括:
判决单元,用于判断第一指令的结果是否只被所述第一指令之后的第二指令使用一次;
执行单元,用于若所述结果只被所述第一指令之后的第二指令使用一次,则将所述第一指令的结果不写回寄存器堆;并执行第一指令和第二指令;
发射单元,用于将所述第一指令和第二指令发射到功能单元中进行运算,使第一指令先于第二指令执行,并将第一指令的处理结果传递给所述第二指令,作为所述第二指令的源操作数。
11.根据权利要求10所述的处理器,其特征在于,所述判决单元具体用于:
在译码阶段识别所述第一指令和第二指令是否有特殊标识,如果有特殊标识则确定第一指令的结果只被所述第一指令之后的第二指令使用一次。
12.根据权利要求10或11所述处理器,其特征在于,还包括:
标识单元,在译码阶段识别第一寄存器作为所述第一指令的结果的存放寄存器,同时只作为所述第二指令的源操作数,则确定所述第一指令的结果只被所述第一指令之后的指令使用一次,对所述第一指令和第二指令做特殊标识。
13.根据权利要求12所述处理器,其特征在于,所述标识单元具体用于:
将所述第一寄存器替换为特殊寄存器,且对第一指令和第二指令做特殊关系标记。
14.根据权利要求12所述处理器,其特征在于,所述标识单元具体用于:
在所述第一指令以及第二指令后添加特殊比特位,用于标记第一指令和第二指令的关系。
15.根据权利要求10至14中任一项所述处理器,其特征在于,所述发射单元具体用于:
若所述第一指令和所述第二指令为连续的两条指令,则将所述第一指令的结果通过前递通路直接传递给所述第二指令,作为所述第二指令的源操作数;
若所述第一指令和所述第二指令为不连续的两条指令,则在所述第一指令执行后,将所述第一指令的结果缓存在所述功能单元中,当所述第二指令执行时,将所述第一指令的结果传递给所述第二指令,作为所述第二指令的源操作数。
16.根据权利要求10至15中任一项所述处理器,其特征在于,所述处理器还包括:
重命名单元,用于若所述结果只被所述第一指令之后的第二指令使用一次,则对所述第一指令的结果所在的寄存器在重命名阶段不进行重命名操作。
17.根据权利要求10至16中任一项所述处理器,其特征在于,所述处理器还包括:
通知单元,用于在所述第一指令执行完成后要通知重排序缓冲器,以便将所述第一指令按照所述重排序缓冲器中的排序规则进行提交;在所述第二指令执行完成后要将所述第二指令的结果写回寄存器堆,并通知重排序缓冲器,以便将所述第二指令按照所述重排序缓冲器中的排序规则进行提交。
18.根据权利要求10至17中任一项所述处理器,其特征在于,所述处理器还包括:
提交单元,用于当所述第一指令和第二指令执行完成后,将所述第一指令和所述第二指令同时提交;
异常处理单元,用于当所述第一指令和/或第二指令执行出现异常时,将所述第一指令和所述第二指令重新执行。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310213735.8A CN104216681B (zh) | 2013-05-31 | 2013-05-31 | 一种cpu指令处理方法和处理器 |
PCT/CN2013/088251 WO2014190699A1 (zh) | 2013-05-31 | 2013-11-30 | 一种cpu指令处理方法和处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310213735.8A CN104216681B (zh) | 2013-05-31 | 2013-05-31 | 一种cpu指令处理方法和处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104216681A true CN104216681A (zh) | 2014-12-17 |
CN104216681B CN104216681B (zh) | 2018-02-13 |
Family
ID=51987936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310213735.8A Active CN104216681B (zh) | 2013-05-31 | 2013-05-31 | 一种cpu指令处理方法和处理器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104216681B (zh) |
WO (1) | WO2014190699A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108614736A (zh) * | 2018-04-13 | 2018-10-02 | 杭州中天微***有限公司 | 实现资源索引替换的装置及处理器 |
CN110825437A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 用于处理数据的方法和装置 |
CN111124492A (zh) * | 2019-12-16 | 2020-05-08 | 海光信息技术有限公司 | 指令生成方法、装置、指令执行方法、处理器及电子设备 |
CN111124500A (zh) * | 2019-12-12 | 2020-05-08 | 浪潮(北京)电子信息产业有限公司 | 一种指令执行方法、装置、设备及存储介质 |
CN111209039A (zh) * | 2018-11-21 | 2020-05-29 | 展讯通信(上海)有限公司 | 指令处理方法及装置 |
CN117472445A (zh) * | 2023-12-26 | 2024-01-30 | 睿思芯科(深圳)技术有限公司 | 基于发射缓冲的超标量处理***、方法及相关设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6145074A (en) * | 1997-08-19 | 2000-11-07 | Fujitsu Limited | Selecting register or previous instruction result bypass as source operand path based on bypass specifier field in succeeding instruction |
WO2001061469A2 (en) * | 2000-02-16 | 2001-08-23 | Koninklijke Philips Electronics N.V. | Apparatus and method for reducing register write traffic in processors with exception routines |
EP1199629A1 (en) * | 2000-10-17 | 2002-04-24 | STMicroelectronics S.r.l. | Processor architecture with variable-stage pipeline |
CN1363063A (zh) * | 2000-02-16 | 2002-08-07 | 皇家菲利浦电子有限公司 | 减少处理器中写入通信量的方法和*** |
CN1560732A (zh) * | 2004-03-03 | 2005-01-05 | 浙江大学 | 静态实现数据旁路及寄存器文件数据写入控制的处理器及编译方法 |
CN1761940A (zh) * | 2003-03-19 | 2006-04-19 | 皇家飞利浦电子股份有限公司 | 具有数据旁路的流水线指令处理器 |
WO2007057831A1 (en) * | 2005-11-15 | 2007-05-24 | Nxp B.V. | Data processing method and apparatus |
US20080016327A1 (en) * | 2006-06-27 | 2008-01-17 | Amitabh Menon | Register File Bypass With Optional Results Storage and Separate Predication Register File in a VLIW Processor |
CN101361039A (zh) * | 2006-01-20 | 2009-02-04 | 松下电器产业株式会社 | 处理器 |
US20100199074A1 (en) * | 2009-02-05 | 2010-08-05 | International Business Machines Corporation | Instruction set architecture with decomposing operands |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719055B (zh) * | 2009-12-03 | 2012-10-10 | 杭州中天微***有限公司 | 快速执行加载存储指令模块 |
-
2013
- 2013-05-31 CN CN201310213735.8A patent/CN104216681B/zh active Active
- 2013-11-30 WO PCT/CN2013/088251 patent/WO2014190699A1/zh active Application Filing
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6145074A (en) * | 1997-08-19 | 2000-11-07 | Fujitsu Limited | Selecting register or previous instruction result bypass as source operand path based on bypass specifier field in succeeding instruction |
WO2001061469A2 (en) * | 2000-02-16 | 2001-08-23 | Koninklijke Philips Electronics N.V. | Apparatus and method for reducing register write traffic in processors with exception routines |
CN1363063A (zh) * | 2000-02-16 | 2002-08-07 | 皇家菲利浦电子有限公司 | 减少处理器中写入通信量的方法和*** |
EP1199629A1 (en) * | 2000-10-17 | 2002-04-24 | STMicroelectronics S.r.l. | Processor architecture with variable-stage pipeline |
US20020124155A1 (en) * | 2000-10-17 | 2002-09-05 | Stmicroelectronics S.R.L. | Processor architecture |
CN1761940A (zh) * | 2003-03-19 | 2006-04-19 | 皇家飞利浦电子股份有限公司 | 具有数据旁路的流水线指令处理器 |
CN1560732A (zh) * | 2004-03-03 | 2005-01-05 | 浙江大学 | 静态实现数据旁路及寄存器文件数据写入控制的处理器及编译方法 |
WO2007057831A1 (en) * | 2005-11-15 | 2007-05-24 | Nxp B.V. | Data processing method and apparatus |
CN101361039A (zh) * | 2006-01-20 | 2009-02-04 | 松下电器产业株式会社 | 处理器 |
US20080016327A1 (en) * | 2006-06-27 | 2008-01-17 | Amitabh Menon | Register File Bypass With Optional Results Storage and Separate Predication Register File in a VLIW Processor |
US20100199074A1 (en) * | 2009-02-05 | 2010-08-05 | International Business Machines Corporation | Instruction set architecture with decomposing operands |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108614736A (zh) * | 2018-04-13 | 2018-10-02 | 杭州中天微***有限公司 | 实现资源索引替换的装置及处理器 |
US11340905B2 (en) | 2018-04-13 | 2022-05-24 | C-Sky Microsystems Co., Ltd. | Device and processor for implementing resource index replacement |
US11734014B2 (en) | 2018-04-13 | 2023-08-22 | C-Sky Microsystems Co., Ltd. | Device and processor for implementing resource index replacement |
CN110825437A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 用于处理数据的方法和装置 |
CN110825437B (zh) * | 2018-08-10 | 2022-04-29 | 昆仑芯(北京)科技有限公司 | 用于处理数据的方法和装置 |
CN111209039A (zh) * | 2018-11-21 | 2020-05-29 | 展讯通信(上海)有限公司 | 指令处理方法及装置 |
CN111124500A (zh) * | 2019-12-12 | 2020-05-08 | 浪潮(北京)电子信息产业有限公司 | 一种指令执行方法、装置、设备及存储介质 |
CN111124500B (zh) * | 2019-12-12 | 2022-03-08 | 浪潮(北京)电子信息产业有限公司 | 一种指令执行方法、装置、设备及存储介质 |
CN111124492A (zh) * | 2019-12-16 | 2020-05-08 | 海光信息技术有限公司 | 指令生成方法、装置、指令执行方法、处理器及电子设备 |
WO2021120712A1 (zh) * | 2019-12-16 | 2021-06-24 | 成都海光微电子技术有限公司 | 指令生成方法、装置、指令执行方法、处理器、电子设备及存储介质 |
CN117472445A (zh) * | 2023-12-26 | 2024-01-30 | 睿思芯科(深圳)技术有限公司 | 基于发射缓冲的超标量处理***、方法及相关设备 |
CN117472445B (zh) * | 2023-12-26 | 2024-04-23 | 睿思芯科(深圳)技术有限公司 | 基于发射缓冲的超标量处理***、方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2014190699A1 (zh) | 2014-12-04 |
CN104216681B (zh) | 2018-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8386754B2 (en) | Renaming wide register source operand with plural short register source operands for select instructions to detect dependency fast with existing mechanism | |
JP5243836B2 (ja) | マイクロプロセッサにおける種々の命令タイプを対象としたユニバーサル・レジスタ・リネーム機構 | |
US8904153B2 (en) | Vector loads with multiple vector elements from a same cache line in a scattered load operation | |
TWI507980B (zh) | 最佳化暫存器初始化操作 | |
TWI497412B (zh) | 用於使用相依矩陣追蹤解除配置之載入指令之方法、處理器及裝置 | |
US20120060016A1 (en) | Vector Loads from Scattered Memory Locations | |
KR101655713B1 (ko) | 이동 제거 연산들에서의 플래그 트래킹을 위한 시스템들 및 방법들 | |
CN104216681A (zh) | 一种cpu指令处理方法和处理器 | |
CN101894013B (zh) | 处理器内指令级流水线控制方法及其*** | |
JP2003523573A (ja) | プロセッサにおける書き込みトラヒックを減少するシステム及び方法 | |
US20160011876A1 (en) | Managing instruction order in a processor pipeline | |
TWI730312B (zh) | 在處理器管線中管理指令順序 | |
JP2008226236A (ja) | 構成可能なマイクロプロセッサ | |
US20220050684A1 (en) | Program counter (pc)-relative load and store addressing | |
CN114721724A (zh) | 一种基于risc-v指令集的六级流水线处理器 | |
EP2972791B1 (en) | Method and apparatus for forwarding literal generated data to dependent instructions more efficiently using a constant cache | |
CN101539852A (zh) | 处理器和信息处理设备 | |
US20070198814A1 (en) | Method and apparatus for distributing flush instructions | |
US8037366B2 (en) | Issuing instructions in-order in an out-of-order processor using false dependencies | |
US5812812A (en) | Method and system of implementing an early data dependency resolution mechanism in a high-performance data processing system utilizing out-of-order instruction issue | |
US11451241B2 (en) | Setting values of portions of registers based on bit values | |
CN109683959B (zh) | 处理器的指令执行方法及其处理器 | |
US10133620B2 (en) | Detecting errors in register renaming by comparing value representing complete error free set of identifiers and value representing identifiers in register rename unit | |
CN101706715B (zh) | 指令调度装置和方法 | |
US6266761B1 (en) | Method and system in an information processing system for efficient maintenance of copies of values stored within registers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |