CN1248109C - 信息处理单元和信息处理方法 - Google Patents
信息处理单元和信息处理方法 Download PDFInfo
- Publication number
- CN1248109C CN1248109C CN 200310101739 CN200310101739A CN1248109C CN 1248109 C CN1248109 C CN 1248109C CN 200310101739 CN200310101739 CN 200310101739 CN 200310101739 A CN200310101739 A CN 200310101739A CN 1248109 C CN1248109 C CN 1248109C
- Authority
- CN
- China
- Prior art keywords
- instruction
- branch
- prefetch
- request
- cache
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
本发明给出一种信息处理单元,包括:一预取缓冲器,用于通过具有两倍于指令长度或更大的宽度的总线取出指令,以存储所预取出的指令;一解码器,用于对存储在所述预取缓冲器中的指令进行解码;和一运算单元,用于运行经解码的指令。一指令请求控制电路,当解码出分支指令时,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求。一预取控制电路,当通过运行分支指令确认了分支发生时,将分支目标指令取出到所述预取缓冲器中,而当分支不发生时,忽略分支目标指令。
Description
技术领域
本发明涉及一种信息处理技术,并且,更加具体地,涉及一种其中通过使用流水线式处理执行指令取出、指令解码、和指令运行的信息处理技术。
背景技术
一种信息处理单元使用流水线式处理来执行指令取出、指令解码、和指令的运行,需要在运行分支(跳转)指令的同时,对后续指令进行解码。因此,当实际上进行一个分支时,在流水线中会产生一个空白时隙,这会导致性能的恶化。为解决这一问题,采用了诸如延迟分支、分支预测、和双取出这样的方法。
在下面的专利文献1中提到的信息处理单元具有:指令取出单元,用于在连续侧和目标侧二者上取出指令序列;高速缓存控制单元,用于响应来自指令取出单元的取出请求,从高速缓冲存储器或主存储器中取出指令;存储器总线访问单元,用于访问主存储器;指令缓冲器,用于保持所取出的指令;和分支预测单元,用于在执行分支指令之前,进行存储在指令缓冲器中的分支指令的分支预测。当分支指令的分支方向没有确定时,高速缓存控制单元根据得自分支预测单元的分支预测方向,限制对高速缓存未命中后的主存储器的存储器总线访问。因此,在其中带有高速缓冲存储器的微处理器中,对外部主存储器的访问受到限制,以致提高了访问主存储器的效率。
[专利文献1]
日本专利申请公开第2001-154845号
上面所提到的延迟分支是指:当延迟分支指令出现时,向分支目标的分支会发生在该分支指令后续的一个指令(延迟时隙)之后。延迟分支操作可能会有这样一个问题:如果没有指令被插入该延迟时隙,负担(penalty)会持续存在,并且由于通常只有一个指令可以被插入到延迟时隙中,一个为指令取出而占用两个周期的流水线式结构会导致负担的产生。
上面提到的分支预测是指:通过解码执行分支预测,以执行其预取。如果预测失误,分支预测也会导致负担。因此,有必要提高预测命中率,不过这一提高需要复杂且大规模的机构。
上面提到的双取出是指:准备两个端口,一个用于进行分支的情况,另一个用于没有进行分支的情况,在双取出工作过程中,准备一个预取缓冲器,预解码其内容,并且如果给出了一个分支指令,那么分支目标指令和连续侧上的指令都被取出。这导致需要用于取出的两条总线,这使得机构规模变大并且复杂化。
而且,当分支预测导致预测失败时,或者当双取出导致高速缓存未命中时,会产生对外部主存储器的不必要的访问,这将导致负担的加剧。
发明内容
本发明的一个目的是提供一种方法,其中使用一个简单的逻辑电路代替大规模电路,以在执行分支指令时消除负担。
按照本发明的一个方面,提供一种信息处理单元,包括:一个预取缓冲器,用于通过具有两倍于指令长度或更大的宽度的总线来取出指令,以存储所预取的指令;一个用于对存储在预取缓冲器中的指令进行解码的解码器;和一个运算单元,用于执行已解码的指令。当解码出分支指令时,一个指令请求控制电路执行用于预取分支目标指令的预取请求,否则该指令请求控制电路顺序地执行用于预取指令的预取请求。当通过运行分支指令而确保发生分支时,一个预取控制电路把分支目标指令取出到预取缓冲器中,而当不发生分支时,预取控制电路忽略分支目标指令。
当解码出分支指令时,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求。这使得准备两种指令成为可能,一种是进行分支时的指令,另一种是不进行分支时的指令。因此,不管进行分支与否,无需使用大规模的预测电路或类似装置,它仍然使得消除分支负担成为可能。
按照本发明的另一个方面,提供一种信息处理方法,包括:第一预取步骤,通过一个具有两倍于指令长度或更大的宽度的总线来预取指令,以存储所预取的指令;解码步骤,对预取到的指令进行解码;运算步骤,运行经解码的指令;指令请求步骤,当解码出分支指令时,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求;和第二预取步骤,当通过运行分支指令确认了分支发生时,预取分支目标指令,而当分支不发生时,忽略分支目标指令。
附图说明
图1是表示按照本发明的一个实施例的信息处理单元的框图;
图2是表示作为本发明的实施例中的处理对象的计算机程序(指令组)的一个实例的示意图;
图3是表示由一个普通信息处理单元执行的操作过程的时序图,其中以简单的方式一个接一个地处理指令;
图4是表示在按照本发明的实施例的信息处理单元中,当满足分支条件以致允许分支时的操作过程的时序图:和
图5是表示在按照本发明的实施例的信息处理单元中,当不满足分支条件以致不允许分支时的操作过程的时序图。
具体实施方式
图2表示作为本发明的实施例中的处理对象的计算机程序(指令组)“a”到“v”的一个例子。每个指令“a”到“v”具有16位的指令长度。对应于每个地址的一个位置可以存储一个字节(8位)。例如,在对应于位置200到210的地址中,分别存储了指令“a”到“f”,而在对应于位置400到406的地址中,分别存储了指令“s”到“v”。位置400被标注为“label 0(零)”。在运行程序的时候,首先运行指令“a”。在指令“a”周期中,例如,把寄存器“r0(零)”的值与寄存器“r2”的值进行比较。随后运行指令“b”。指令“b”是这样一个指令:作为上面所提到的比较的结果,如果寄存器“r0”和“r2”具有相等的值,则分支到“label 0(零)”(位置400)。如果上述寄存器不具有相同的值,那么指令“b”是用于不进行分支而顺序地运行指令的指令。象指令“b”这样的指令被定义为分支指令。分支指令包括条件分支指令和/或无条件分支指令。在条件分支指令的情况下,象指令“b”中的情况那样,根据诸如比较结果或其它类似条件来进行分支。在无条件分支指令的情况下,象CALL指令和JUMP指令那样,无条件进行分支。
分支指令“b”特指为延迟分支指令(例如,可以被表示为“:D”),下文中,将会对延迟分支指令进行说明。在条件分支指令的情况中,如果符合条件,则分支到某一分支目标,而如果不满足条件,则不进行分支。如果不进行分支(不进行跳转),则在指令“b”之后,延迟分支指令“b”顺序执行指令“c”、“d”、“e”和“f”,如果进行分支(进行跳转),则在指令“b”之后,按顺序执行指令“c”、“s”、“t”、“u”、和“v”。这意味着,不管进行分支与否,总是要运行延迟分支指令“b”后面的指令“c”,并且随后进行分支。紧跟在延迟指令“b”后面的指令“c”被称为延迟时隙指令。
图1是按照本发明的实施例的信息处理单元的方框图。这个信息处理单元执行由五个阶段组成的流水线式处理,这五个阶段包括:指令地址请求阶段(下文中称为“IA阶段”)131;指令取出阶段(下文中称为“IF阶段”)132;指令解码阶段(下文中称为“ID阶段”)133;运行阶段(下文中称为“EX阶段”)134;和寄存器反写阶段(下文中称为“WB阶段”)135。将基于诸如指令的位长度为16位的例子这一情况进行下面的说明。
CPU(中央处理单元Central Processing Unit)101通过指令高速缓冲存储器(下文中称为“指令高速缓存(instruction cache)”)102与主存储器121相连接。更加明确地讲,诸如SDRAM这样的主存储器121通过一个32位总线122与外部总线120相连接。指令高速缓存102通过32位总线117与外部总线120相连接。CPU 101通过用于指令的32位总线112与指令高速缓存102相连接。指令高速缓存102预先从主存储器121读取经常用到的指令(程序)的一部分并存储在其中,而从中赶出很少用到的指令。由CPU 101请求的指令存在于指令高速缓存102中的这种情况称为高速缓存命中。当发生高速缓存命中时,CPU 101可以接收来自指令高速缓存102的指令。相反,由CPU 101请求的指令不存在于指令高速缓存102中时的这种情况称为高速缓存未命中。当发生高速缓存未命中时,指令高速缓存102使用总线访问信号116访问主存储器121来执行读出请求以读出该指令。CPU 101可以通过指令高速缓存102从主存储器121中读取指令。总线112的传输速率大大高于外部总线120的传输速率。因此发生高速缓存命中时的指令读出速度要远大于发生高速缓存未命中时的速度。此外,由于指令(程序)被连续读出的概率很高,因此高速缓存命中率变高。因此,使用指令高速缓存102使得CPU 101读出指令的整体速度得到了提高。
CPU 101包括指令队列(预取缓冲器)103、指令取出控制单元104、指令解码器105、分支单元106、运算单元107、载入和存储单元108、和寄存器109。指令队列103中例如最多可以存储每条具有16位长度的四条指令,该指令队列103通过32位总线112与指令高速缓存102相连接,并通过16位总线115与指令解码器105相连接。这意味着,指令队列103以32位为单位在其中写入来自指令高速缓存102的每条指令,并从其中以16位为单位读出指令,以将其输出到指令解码器105。指令取出控制单元104向指令高速缓存102输入/从指令高速缓存102输出一个高速缓存访问控制信号110,并控制指令队列103的输入/输出。指令解码器105对存储在指令队列103中的每一条指令逐一地进行解码。运算单元107逐一地运行(操作)每一条经指令解码器105解码的指令。由运算单元107的运行产生的结果被写入到寄存器109中。当经指令解码器105解码的指令表示一个载入/存储指令时,载入和存储单元108在寄存器109和主存储器121之间进行载入或存储。
指令取出操作过程以这样的方式执行:指令取出控制单元104根据CPU 101的状态向指令高速缓存102发出指令请求(IA阶段131),随后在下一个周期中,指令被取出到指令队列103中(IF阶段132)。不过,需要注意的是:由于这里所介绍的实施例的特征在于:以在指令队列103中存储后续指令的方式减小分支负担,因此以32位为单位执行指令取出操作(即,以两个指令为单位),该长度为指令长度的两倍。然后,指令队列103中的第一指令由指令解码器105进行解码(ID阶段133),在随后的周期中,进行该指令所代表的动作(EX阶段134),并且被写回到寄存器109中(WB阶段135),至此结束一个指令。CPU 101的特征在于,以流水线方式执行上述的操作。
如果由指令解码器105解码出的指令是分支指令,那么指令解码器105向指令取出控制单元104和分支单元106输出一个分支指令解码通告信号113。当分支指令解码通告信号113输入到其中时(即,当解码出分支指令时),指令取出控制单元104执行一个预取请求以预取分支目标指令,否则指令取出控制单元104顺序地执行预取请求以预取指令。明确的讲,指令取出控制单元104通过向指令高速缓存102输出高速缓存访问控制信号110来执行预取请求。该预取请求使得从指令高速缓存102中预取出来的指令写入到指令队列103。
如上面所述,在运行分支指令之前,在解码阶段,执行预取请求以预取分支目标指令。其后,在执行分支指令的阶段,确定是否进行分支。这意味着运算单元107的操作导致运行恰在分支指令之前的指令,并且运行结果被写入到寄存器109中。寄存器109中的运行结果被输入到分支单元106中。运算单元107的操作导致分支指令的运行,并且例如,通过设置在寄存器109中的标记,把表示分支条件是否已经实现的信息被输入到分支单元106中。根据分支指令解码通告信号113和分支指令运行结果119,分支单元106向指令取出控制单元104输出一个分支指令运行通告信号114。这意味着,根据分支指令的运行结果,通过使用分支指令运行通告信号114,分支单元106通告是否进行分支。当进行分支时,指令取出控制单元104把分支目标指令预取到指令队列103,其中已经如上所述对该分支目标指令进行了预取请求。当分支不进行时,指令取出控制单元104忽略分支目标指令(已经如上所述对该分支目标指令进行了预取请求)的预取,并执行后续指令的预取、解码和运行,同时向指令高速缓存102输出一个访问取消信号111。当发生高速缓存未命中时,已经接收到用于预取上述分支目标的预取请求的指令高速缓存102已经准备好访问主存储器121。当访问取消信号111输入到其中时,指令高速缓存102将取消对主存储器121的访问,从而消除了对主存储器121的不必要的访问,并防止了性能下降。
需要注意的是,为了简化说明的目的,该运行结果119已经被解释为从寄存器109输入到分支单元106,然而,运行结果119可以实际上通过使用旁路电路被输入到分支单元106,而无须等待EX阶段134运行完成
图3是表示由普通的信息处理单元执行的操作的用于参考的时序图,其中通过一个简单的方式一个接一个地对指令进行处理。下面将给出对该图的说明,其中采用了对图2中的程序进行处理的情况作为例子。高速缓存访问地址IA1是当分支不进行时指令请求所指向的地址。高速缓存访问数据IF1是当分支不进行时由指令高速缓存102输出给指令队列103的数据。高速缓存访问地址IA2是当进行分支时指令请求所指向的地址。高速缓存访问数据IF2是当进行分支时由指令高速缓存102输出给指令队列103的数据。
在周期CY1中,在IA阶段131发出对指令“a”的指令请求。这里,高速缓存访问地址IA1和IA2是指令“a”的地址。
接下来,在周期CY2中,在IF阶段132取出指令“a”,并且在IA阶段131发出对延迟分支指令(条件分支指令)“b”的指令请求。这里,高速缓存访问地址IA1和IA2是用于指令“b”的地址,同时高速缓存访问数据IF1和IF2代表指令“a”。
下面,在周期CY3中,在ID阶段133对指令“a”进行解码,在IF阶段132取出延迟分支指令“b”,并且在IA阶段131发出对指令“c”(延迟时隙)的指令请求。这里,高速缓存访问地址IA1和IA2是用于指令“c”的地址,同时高速缓存访问数据IF1和IF2代表指令“b”。
接下来,在周期CY4中,在EX阶段134执行指令“a”,在ID阶段133对延迟分支指令“b”进行解码,在IF阶段132取出指令“c”,在IA阶段131发出对指令“d”的指令请求。这里,高速缓存访问地址IA1和IA2是用于指令“d”的地址,同时高速缓存访问数据IF1和IF2代表指令“c”。
在上面介绍的延迟分支指令“b”的解码之后的EX阶段134,确定是否进行分支,据此,跟在周期CY5后面的处理发生变化。下面将给出对不进行分支的处理过程的说明。
在周期CY5中,在WB阶段135将指令“a”写入到寄存器中,在Ex阶段134运行延迟分支指令“b”,在ID阶段133对指令“c”进行解码,在IF阶段132取出指令“d”,并且在IA阶段131发出对指令“e”的指令请求。这里,高速缓存访问地址IA1是用于指令“e”的地址,且高速缓存访问数据IF1代表指令“d”。
在后面的周期CY6中,在WB阶段135将延迟分支指令“b”写入到寄存器中,在EX阶段134执行指令“c”,在ID阶段133对指令“d刀进行解码,在IF阶段132取出指令“e”,在IA阶段131发出对指令“f”的指令请求。这里,高速缓存访问地址IA1是用于指令“f”的地址,并且高速缓存访问数据IF1代表指令“e”。
在周期CY7及其后续的周期中,也会进行与上面所提到的那些操作同样的操作。如上面所解释的,当不进行分支时,处理是以起始于指令“a”的连续方式简单地进行的,导致不存在空白的时隙且实现高效率的流水线式处理。
接下来,将会对进行分支时的情况进行说明。在周期CY5,当进行分支时,指令“d”被取消,其中在前面提到的周期CY4中已经发出了对该指令“d”的指令请求。结果,周期CY4中的IA阶段131变成了一个空白时隙,从而引起了不必要的处理操作。在周期CY5中,在WB阶段135将指令“a”写入寄存器,在EX阶段134运行延迟分支指令“b”,在ID阶段133对指令“c”进行解码,IF阶段132变成了一个空白时隙,并且在IA阶段131发出对分支目标指令“s”的指令请求。这里,高速缓存访问地址IA2是用于指令“s”的地址,并且高速缓存访问数据IF2代表指令“d”。
在随后的周期CY6中,在WB阶段135将延迟分支指令“b”写入到寄存器中,在EX阶段134运行指令“c”,ID阶段133变成了一个空白时隙,在IF阶段132取出分支目标指令“s”,并且在IA阶段131发出对指令“t”的指令请求。这里,高速缓存访问地址IA1是用于指令“t”的地址,且高速缓存访问数据IF1代表指令“s”。
在后面的周期CY7中,在WB阶段135将指令“c”写入到寄存器中,EX阶段134变成了一个空白时隙,在ID阶段133对分支目标指令“s”进行解码,在IF阶段132取出指令“t”,并且在IA阶段131发出对指令“u”的指令请求。这里,高速缓存访问地址IA1是用于指令“u”的地址,且高速缓存访问数据IF1代表指令“t”。
在周期CY8和随后的各周期中,也会执行与上面所提到的处理过程相似的处理。如上面所说明的,当进行分支时,产生了如阴影部分所示出的空白时隙“d”,从而无法实现高效的流水线式处理。由于直到分支指令“b”的EX阶段134之前,都无法做出是否条件允许进行分支的判决,因此,必须要等到直到做出该判决,才能决定在后面的处理中是取出分支目标指令还是继续取出连续的指令,这就导致了负担。当进行分支时,仍要执行与分支不进行时相同的操作,直到经过了指令“c”之后,但是对于分支目标指令“s”的指令请求不会被发出,直到确定在延迟分支指令“b”的EX阶段134要发生分支。结果,此前已经对其发出了指令请求的指令“d”被取消,导致在流水线中产生了一个空白时隙。此外,即使执行了分支预测时,如果预测失误,负担也会出现。
图4是表示在按照图1中所示的本发明的实施例的信息处理单元中,满足允许分支的分支条件时的操作过程的时序图。下面所给出的说明,采用了处理图2中的程序时的情况作为实例。高速缓存访问地址IA1是向其发出指令请求的那个地址。高速缓存访问数据IF1是在指令高速缓存102的高速缓存命中时输出给指令队列103的数据。
首先,在周期CY1中,在IA阶段131对两个指令“a”和“b”发出指令请求。指令“b”表示延迟分支指令。在IA阶段131,可以以32位为单位发出指令请求,即,以两个指令为单位。这里,高速缓存访问地址IA1是用于指令“a”和“b”的地址。
接着,在周期CY2中,在IF阶段132取出这两个指令“a”和“b”,同时在IA阶段131对两个指令“c”和“d”发出指令请求。在IF阶段132,可以以32位为单位执行取出,即,以两个指令为单位。这一取出操作使指令“a”和“b”被存储在指令队列103中。这里,高速缓存访问地址IA1是用于指令“c”和“d”的地址,同时高速缓存访问数据IF1代表指令“a”和“b”。
接下来,在周期CY3中,在ID阶段133对一个指令“a”进行解码,同时在IF阶段132取出两个指令“c”和“d”。在ID阶段133,解码是以16位为单位进行的,即,以一个指令为单位。指令“c”和“d”被输入给指令队列103以用于取出,而指令“a”从指令队列103中输出以进行解码,从而指令队列103具有指令“b”、“c”和“d”存储在其中。这里,高速缓存访问数据IF1表示指令“c”和“d”。由于在本例中最大只允许指令队列103存储四条指令,因此在这个周期内没有执行指令请求。
下面,在周期CY4中,在EX阶段134中运行指令“a”,在ID阶段133对指令“b”进行解码,并且在IA阶段131对两个分支目标指令“s”和“t”发出指令请求。在EX阶段134,运行是以16位为单位进行的,即,以一个指令为单位。指令高速缓存103具有指令“c”和“d”存储在其中。这里,高速缓存访问地址IA1是用于分支目标指令“s”和“t”的地址。
在上面所说明的周期CY4中,指令解码器105对分支指令“b”进行解码,以输出指令解码通告信号133。通过接收指令解码通告信号133,指令取出控制单元104执行对分支目标指令“s”和“t”的指令请求。这里,不管指令队列103处于何种状态都会发出该请求。
接下来,在周期CY5中,在WB阶段135,指令“a”被写入到寄存器中,在EX阶段134运行延迟分支指令“b”,在ID阶段133对指令“c”进行解码,在IF阶段132取出分支目标指令“s”和“t”,并且在IA阶段131对指令“u”和“v”发出指令请求。由于指令“c”跟在延迟分支指令“b”的后面,因此即使当进行分支时,指令“c”(延迟时隙)也会被发送到ID阶段。当通过运行分支指令“b”而确定了满足分支条件时,对指令“u”和“v”发出指令请求。在WB阶段135,寄存器的写入是以16位为单位进行的,即,以一个指令为单位。指令高速缓存103具有指令“s”和“t”存储在其中。这里,高速缓存访问地址IA1是用于指令“u”和“v”的地址,而高速缓存访问数据IF1代表指令“s”和“t”。
在这一周期CY5中,分支单元106输出分支指令运行通告信号114,用于表示通过运行分支指令“b”确认了分支条件得到满足,从而导致发生分支。指令取出控制单元104通过控制信号118删除包含在指令队列103里的指令“d”。
下面,在周期CY6中,在WB阶段135,延迟分支指令“b”被写入到寄存器中,在EX阶段134运行指令“c”,在ID阶段133对分支目标指令“s”进行解码,并且在IF阶段取出指令“u”和“v”。指令队列103具有指令“t”、“u”和“v”保存在其中。这里,高速缓存访问数据IF1代表指令“u”和“v”。
其后,在周期CY7中和随后的各个周期中,也会执行与上面所提到的那些处理相似的处理。如上面所说明的,当进行分支时,阴影部分所表示的空白时隙“d”由分支目标指令“s”的时隙填充,从而实现高效流水线式处理和致使没有产生负担。
在这里所介绍的实施例中,用于指令112的总线的宽度被扩展为总线115的宽度(指令长度)的两倍大小,实现了用于供给指令的带宽的增大,借此可以利用这额外的带宽减少进行分支时引起的负担。如果用于指令112的总线的宽度(指令长度)是总线115的两倍或更多,那么用于指令112的总线的宽度就是足够的。
如前面所述,在周期CY5中,在EX阶段确定了延迟条件分支指令“b”的条件。如果此处进行了分支,那么从分支单元106发送出来的分支指令运行通告信号114被用于通知指令取出控制单元104发生了分支。指令取出控制单元104通过接收该通告,命令指令队列103删除在先数据“d”以及取出已经在前一周期CY4中请求过的指令“s”和“t”。这意味着使得指令队列103具有这样的状态:分支目标指令“s”和随后的分支目标指令“t”存在于其中。而且,指令取出控制单元104对后续的分支目标指令“u”和“v”进行指令请求。通过执行上面所说明的指令取出操作,分支目标指令“s”可以被送到周期CY6中的ID阶段,从而使得进行分支时没有负担周期(penalty cycle)。
图5是表示在按照图1中的本发明的实施例的信息处理单元中,当不满足分支条件以致不允许分支时的操作的时序图。下文中所说明的操作过程采用了当对图2中的程序进行处理时的情况作为例子。高速缓存访问地址IA1表示对其发出指令请求的地址。高速缓存访问数据IF1代表当在指令高速缓存102中发生了高速缓存命中时输出给指令队列103的数据。
由于在周期CY1到CY4中执行的操作与图4中所示的操作是相同的,所以这里省略了对它们的说明。下述是对周期CY5及其后续周期进行的说明。
在周期CY5中,在WB阶段135,指令“a”被写入到寄存器中,在EX阶段134运行延迟分支指令“b”,在ID阶段133对指令“c”(延迟时隙)进行解码,并且在IA阶段131对两个指令“e”和“f”发出指令请求。因为指令“c”跟在延迟分支指令“b”的后面,所以即使当分支发生时,指令“c”也会被送到ID阶段。当通过运行分支指令“b”确定了分支条件不满足时,会对指令“e”和“f”发出指令请求,而不会取出分支目标指令“s”和“t”。指令高速缓存103具有指令“d”存储在其中。这里,高速缓存访问地址IA1是用于指令“e”和“f”的地址。
在这个周期CY5中,分支单元106输出通告信号114,用以表示通过运行分支指令“b刀没有确认满足分支条件,从而使得不发生分支。指令取出控制单元104通过高速缓存访问控制信号110对指令高速缓存102执行关于指令“e”和“f”的指令请求。
接下来,在周期CY6中,在WB阶段135,延迟分支指令“b”被写入到寄存器中,在EX阶段134运行指令“c”,在ID阶段133对指令“d”进行解码,并且在IF阶段132取出指令“e”和“f”。指令高速缓存103具有指令“e”和“f”存储在其中。这里,高速缓存访问数据IF1代表指令“e”和“f”。
其后,在周期CY7及其后续各周期中,也会执行类似于上面所提到的处理过程。如上面所说明的,当分支不进行时,对分支目标指令“s”发出的指令请求之后没有进行在取出后的处理,如阴影部分所示,而是进行了顺序处理,例如指令“d”的解码,从而实现了高效的流水线处理并且未导致负担。在周期CY5中,分支指令“b”的条件没有得到满足,以致不发生分支,从分支单元106中发送出来的分支指令运行通告信号114被用于通知指令取出单元104;通过分支指令,不发生分支。该指令取出控制单元104通过接收该通知,命令指令队列103取消分支目标指令的取出操作,并为指令“e”和“f”发出请求,其中指令“e”和“f”是存在于指令队列103中的指令“d”的后续指令。
上面所述的取出操作在周期CY6中允许跟在延迟时隙“c”后面的指令“d”被送到ID阶段,并且还允许后续指令“e”和“f”在周期CY6中被取出,从而使得即使在分支不进行时也不会导致负担。
此外,在周期CY5中给出来自指令取出控制单元104的访问取消信号111,该信号能够阻止对外部主存储器121的访问,该访问是由在请求分支目标指令“s”和“t”时产生的高速缓存未命中而引起。更加明确地讲,当访问取消信号111被输入到指令高速缓存102中时,由于该指令高速缓存102不会给出总线请求116,因此该指令高速缓存102不会执行对主存储器121的访问。结果,可以防止对总线的不必要的访问,防止了性能降低。
按照这里所介绍的实施例,所给出的信息处理单元具有:预取缓冲器103,用于通过具有两倍于指令长度或更大的宽度的总线来取出指令;解码器105,用于对存储在预取缓冲器中的指令进行解码:和运算单元107,用于运行经解码的指令。在分支指令已被解码之后,指令取出单元104执行用于预取分支目标指令的预取请求,否则该指令取出控制单元104顺顷序地执行用于预取指令的预取请求。此外,在通过运行分支指令确认了分支的发生时,指令取出控制单元104将分支目标指令取出到预取缓冲器103中,而当分支不发生时,该指令取出控制单元104忽略分支目标指令。
当分支指令已解码之后,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求。这使得同时准备两种指令成为可能,其中一种是进行分支时的指令,而另一种是分支不进行时的指令。从而,这还使消除分支负担成为可能,不管分支进行与否,无需使用大规模预测电路或其它类似机构。此外,准备信号114以用于通知指令高速缓存102或存储器控制器,在执行了分支指令之后不发生分支,这可以防止由高速缓存未命中引起的对主存储器121的不必要的访问。从而,不管分支指令是否被认可,通过使用一个简单的逻辑电路,而无需使用大规模预测电路或其它类似电路,就可以使分支负担的消除成为可能,因此避免了对外部总线120的不必要访问。
本发明的实施例在所有方面都被看做是示例性的并且并不具有限制性,并且在权利要求的等价内容的范围和含义之内的一切改变都希望包含在其中。本发明可以以其它具体形式实现,而不会超出其主题或基本特征。
如上面所述,在分支指令已经解码之后,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求。这使得准备两个指令成为可能,其中一个是在进行分支时的指令,而另一个是当分支不进行时的指令。因此,不管分支进行与否,无需使用大规模预测电路或其它类似电路,可以使消除分支负担成为可能。
Claims (18)
1.一种信息处理单元,包括:
一预取缓冲器,用于通过具有两倍于指令长度或更大的宽度的总线来取出指令,以存储所预取出的指令;
一解码器,用于对存储在所述预取缓冲器中的指令进行解码;
一运算单元,用于运行经解码的指令;
一指令请求控制电路,当解码出分支指令时,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求;和
一预取控制电路,当通过运行分支指令确认了分支发生时,将分支目标指令取出到所述预取缓冲器中,而当分支不发生时,忽略分支目标指令。
2.根据权利要求1的信息处理单元,其中所述预取缓冲器通过一指令高速缓冲存储器从一主存储器中预取指令。
3.根据权利要求2的信息处理单元,其中当分支不产生时,所述预取控制电路向指令高速缓冲存储器输出一个用于取消预取请求的控制信号,从而防止由高速缓存未命中引起的对主存储器的访问,其中该预取请求已经被执行以预取分支目标指令。
4.根据权利要求2的信息处理单元,其中所述预取缓冲器通过具有两倍于指令长度或更大的宽度的总线从指令高速缓冲存储器中预取指令,并且通过具有等于指令长度的宽度的总线将该指令输出到所述解码器。
5.根据权利要求4的信息处理单元,其中所述预取缓冲器最多存储四条指令。
6.根据权利要求1的信息处理单元,其中所述解码器和所述运算单元以一条指令为单位执行操作。
7.根据权利要求1的信息处理单元,其中当出现延迟分支指令时,所述指令请求控制电路和所述预取控制电路执行操作,使得分支在跟在延迟分支指令后面的一指令之后发生。
8.根据权利要求1的信息处理单元,其中分支指令包括条件分支指令和/或无条件分支指令。
9.根据权利要求1的信息处理单元,还包括一用于在其中写入所述运算单元的运行结果的寄存器。
10.一种信息处理方法,包括:
第一预取步骤,通过一个具有两倍于指令长度或更大的宽度的总线来预取指令,以存储所预取的指令;
解码步骤,对预取到的指令进行解码;
运算步骤,运行经解码的指令;
指令请求步骤,当解码出分支指令时,执行用于预取分支目标指令的预取请求,否则顺序地执行用于预取指令的预取请求;和
第二预取步骤,当通过运行分支指令确认了分支发生时,预取分支目标指令,而当分支不发生时,忽略分支目标指令。
11.根据权利要求10的信息处理方法,其中所述第一预取步骤通过一指令高速缓冲存储器从主存储器中预取指令。
12.根据权利要求11的信息处理方法,其中当分支不发生时,所述第二预取步骤向指令高速缓冲存储器输出一个用于取消预取请求的控制信号,从而防止由高速缓存未命中引起的对主存储器的访问,其中该预取请求已经被执行以预取分支目标指令。
13.根据权利要求11的信息处理方法,其中所述第一预取步骤通过具有两倍于指令长度或更大的宽度的总线从指令高速缓冲存储器中预取指令,并且通过具有等于指令长度的宽度的总线将该指令输出到所述解码步骤。
14.根据权利要求13的信息处理方法,其中所述第一预取步骤最多存储四条指令。
15.根据权利要求10的信息处理方法,其中所述解码步骤和所述运行步骤以一条指令为单位执行操作。
16.根据权利要求10的信息处理方法,其中当出现延迟分支指令时,所述指令请求步骤和所述第二预取步骤执行操作,使得分支在跟在延迟分支指令后面的一指令之后发生。
17.根据权利要求10的信息处理方法,其中所述分支指令包括条件分支指令和/或无条件分支指令。
18.根据权利要求10的信息处理方法,其中所述运行步骤向一寄存器写入运行结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310101739 CN1248109C (zh) | 2002-10-22 | 2003-10-22 | 信息处理单元和信息处理方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP307184/2002 | 2002-10-22 | ||
CN 200310101739 CN1248109C (zh) | 2002-10-22 | 2003-10-22 | 信息处理单元和信息处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1497436A CN1497436A (zh) | 2004-05-19 |
CN1248109C true CN1248109C (zh) | 2006-03-29 |
Family
ID=34256618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200310101739 Expired - Fee Related CN1248109C (zh) | 2002-10-22 | 2003-10-22 | 信息处理单元和信息处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1248109C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8677106B2 (en) * | 2009-09-24 | 2014-03-18 | Nvidia Corporation | Unanimous branch instructions in a parallel thread processor |
WO2011076120A1 (en) * | 2009-12-25 | 2011-06-30 | Shanghai Xin Hao Micro Electronics Co. Ltd. | High-performance cache system and method |
TWI636362B (zh) * | 2011-06-24 | 2018-09-21 | 林正浩 | 高性能快取方法和裝置 |
CN102841865B (zh) * | 2011-06-24 | 2016-02-10 | 上海芯豪微电子有限公司 | 高性能缓存系统和方法 |
CN106990942A (zh) * | 2011-06-29 | 2017-07-28 | 上海芯豪微电子有限公司 | 分支处理方法与系统 |
CN103513957B (zh) * | 2012-06-27 | 2017-07-11 | 上海芯豪微电子有限公司 | 高性能缓存方法 |
CN103268219B (zh) * | 2013-05-28 | 2016-05-11 | 北京航空航天大学 | 基于流水线架构的海量文件指导型预取并行处理加速方法 |
-
2003
- 2003-10-22 CN CN 200310101739 patent/CN1248109C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1497436A (zh) | 2004-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5222223A (en) | Method and apparatus for ordering and queueing multiple memory requests | |
US6131155A (en) | Programmer-visible uncached load/store unit having burst capability | |
US7461237B2 (en) | Method and apparatus for suppressing duplicative prefetches for branch target cache lines | |
JP3095802B2 (ja) | 性能向上命令キャッシュを備えるデータ処理システム | |
US5838945A (en) | Tunable software control of harvard architecture cache memories using prefetch instructions | |
JPH1091437A (ja) | 命令とデータの先取りを最適化するためのハードウェア機構 | |
CN1103960C (zh) | 在多级流水线结构中处理条件跳转的结构和方法 | |
US20030229762A1 (en) | Apparatus, method, and system for synchronizing information prefetch between processors and memory controllers | |
CN1667570A (zh) | 用最近条目队列补充分支目标缓冲器的方法和系统 | |
CN1282024A (zh) | 具有静态转移预测支持的去耦取指令-执行引擎 | |
US11231933B2 (en) | Processor with variable pre-fetch threshold | |
JP2002073330A (ja) | データ処理装置 | |
CN1248109C (zh) | 信息处理单元和信息处理方法 | |
US5898852A (en) | Load instruction steering in a dual data cache microarchitecture | |
CN111142941A (zh) | 一种非阻塞高速缓存缺失处理方法及装置 | |
JP3683248B2 (ja) | 情報処理装置及び情報処理方法 | |
WO2003091820A2 (en) | Instruction cache and method for reducing memory conflicts | |
CN112148366A (zh) | 一种芯片降低功耗提升性能的flash加速方法 | |
US9507600B2 (en) | Processor loop buffer | |
US20080065870A1 (en) | Information processing apparatus | |
JPH05127710A (ja) | プログラマブルコントローラおよびシーケンス制御方法 | |
US20050015552A1 (en) | System for supporting unlimited consecutive data stores into a cache memory | |
CN1385782A (zh) | 微处理器 | |
KR100861073B1 (ko) | 적응형 파이프라인을 적용한 병렬 처리 프로세서 구조 | |
JP2005084999A (ja) | キャッシュメモリ制御装置およびキャッシュメモリ制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |