CN101853150B - 非循序执行的微处理器及其操作方法 - Google Patents
非循序执行的微处理器及其操作方法 Download PDFInfo
- Publication number
- CN101853150B CN101853150B CN 201010185555 CN201010185555A CN101853150B CN 101853150 B CN101853150 B CN 101853150B CN 201010185555 CN201010185555 CN 201010185555 CN 201010185555 A CN201010185555 A CN 201010185555A CN 101853150 B CN101853150 B CN 101853150B
- Authority
- CN
- China
- Prior art keywords
- mentioned
- load instructions
- project
- instruction
- order
- 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
Landscapes
- Advance Control (AREA)
Abstract
本发明提供一种非循序执行微处理器,用以减少因储存碰撞而重新执行加载指令的可能性,包括:第一队列存储器,包括多个项目;一第二队列存储器,包括多个项目;以及暂存器别名表,耦接于上述第一和第二队列存储器,暂存器别名表用以依据循序排列的多个指令以产生多个相依性,以便决定上述指令何时能够非循序执行,其中暂存器别名表用以指派上述第一队列存储器的一项目,并在所指派的项目中填入上述加载指令的一指令指针;指派上述第二队列存储器的一项目,并在所指派的项目中填入一相依性;以及使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述第二队列存储器的上述所指派项目中上述储存指令为了其储存数据所依附的上述指令。
Description
技术领域
本发明是有关于非循序执行微处理器(out-of-order executionmicroprocessor),特别是有关于非循序执行微处理器内的存储器加载指令的效能。
背景技术
微处理器具有加载指令(load instruction),用以将数据由存储器来源位置(source memory location)加载至微处理器的暂存器;以及储存指令,用以将数据由微处理器的暂存器储存至存储器目的地位置(destinationmemory location)。一般而言,微处理器会遭遇的情况是加载指令所指定(specify)的存储器来源地址等同于较先前的(older)储存指令的存储器目的地地址。换言之,较先前的储存指令将数据写入至加载指令正在读取的存储器地址。这种情况通常称为储存碰撞(store collision)。当储存碰撞发生时,为了要正确地执行程序,微处理器必须确定加载指令接收由较先的地址重迭的储存指令所写入的数据。
非循序执行微处理器并不依照程序顺序(out of the program order)来执行指令。当储存碰撞发生时,这会是个问题,原因在于加载指令可能会在较先前的储存指令之前被发布(issued)并执行,因此使得加载指令接收到错误的数据。在这种情况下,加载指令不能将加载的数据退返(retire)至其架构目的地暂存器(architectural destination register)。更确切地说,加载指令必须接收正确的储存数据,并且将正确的数据退返至目的地暂存器(destination register)。
让加载指令能够接收正确的储存数据的一种方法是重新执行(replay)。换言之,微处理器会检测前述的情况,并在执行储存指令之后,使得加载指令被重新发出并且重新执行。由于储存指令已经被执行,故在后续执行操作中,加载指令将可接收到正确的储存数据。
然而,重新执行指令所付出的代价是相当大的,特别是发生在具有非常多管线级的微处理器中。首先,储存指令可能依附于其它指令;事实上,储存指令是位于相依性长链接(long chain of dependencies)的一端,所以储存指令可能不会执行这么多时钟;因此,加载指令在被重新执行之前可能要等待很多时钟周期。若加载指令在重新执行前须等待的时钟周期愈多,则处理加载指令所造成的效能损失(penalty)也就愈严重。此外,当加载指令被重新发布并重新执行时,加载指令必须通过相关管线级(relevant pipelinestages)而被再次地传回(pass back again),并因此花费更多时钟周期。若加载指令需要通过愈多的管线级才能将加载指令传回,以处理加载指令的时钟周期数来看,则效能损失也就愈严重。
Panwar等人的专利(美国专利号:6,006,326)借着使用储存关于加载指令和储存指令的彩色位(color bits)的特殊阵列(special array)试图解决这个问题。彩色位阵列中所包含的项目(entries)对应于指令高速缓存的项目,当加载指令或储存指令由指令高速缓存(instruction cache)被读取时,彩色位阵列亦会被读取。在发布早先于储存指令的加载指令而造成的重新执行之后,彩色位阵列中相应的一个项目的彩色位会被更新为相同的色彩值(colorvalue),用以表示加载指令和储存指令的相依性(依附关系)。当储存指令和加载指令再度被设置于管线中而执行时,相依性比对逻辑(dependencychecking logic)检测到储存指令和加载指令具有相同的色彩值,故将相依性回报至指令调度逻辑器(instruction scheduling logic),其中指令调度逻辑器在具有类似色彩的储存指令(similarly colored store instruction)已经被调度后,才对此加载指令进行调度。
因为彩色位阵列需要为指令高速缓存的每个加载指令和储存指令储存彩色位,所以彩色位阵列的大小会是指令高速缓存项目个数的函数。因为指令高速缓存的项目数目通常很多,所以彩色位阵列的潜在缺点是其在微处理器中需要大量的储存空间。一个大的彩色位阵列会消耗大量的电源和微处理器的物理空间。
因此,需要一种新的机制,用以减少在非循序执行微处理器中发生储存碰撞时,重新执行加载指令的次数。
发明内容
本发明实施例提供一种非循序执行微处理器,用以减少因储存碰撞而重新执行加载指令的可能性,包括:队列存储器以及暂存器别名表。队列存储器包括多个项目,每个项目用以存放加载指令的指令指针和用来识别储存指令的信息,信息会使得第一加载指令在执行时被要求重新执行。暂存器别名表耦接于队列存储器,用于依据循序排列的多个指令以产生多个相依性,以便判断多个指令何时能够非循序执行,其中暂存器别名表用以在遇到第二加载指令时,判断第二加载指令的指令指针是否符合于队列存储器的项目的一者的指令指针,以及当判断符合时,使得第二加载指令依附于所符合的项目中的信息所识别的储存指令。
本发明实施例提供一种非循序执行微处理器的操作方法,用以减少因储存碰撞而必须在非循序执行微处理器中重新执行加载指令的可能性,非循序执行微处理器具有暂存器别名表,暂存器别名表用于依据循序排列的多个指令以产生多个相依性,以便判断多个指令何时能够非循序执行,非循序执行微处理器的操作方法包括:在第一加载指令重新执行时,指派队列存储器的多个项目的一者;于所指派的项目中存放加载指令的指令指针和用来识别储存指令的信息,信息会使得第一加载指令重新执行;于上述暂存器别名表遇到第二加载指令时,判断第二加载指令的指令指针是否符合于队列存储器的项目的一者的指令指针;以及使得第二加载指令依附于所符合的项目中的信息所识别的储存指令。
本发明实施例提供一种非循序执行微处理器,用以减少因储存碰撞而重新执行加载指令的可能性,包括:队列存储器以及暂存器别名表。队列存储器包括多个项目,每个项目存放用以识别储存指令的来源的信息以及相依性,其中相依性用以识别储存指令为了其储存数据所依附的指令,而储存数据的来源用以计算储存指令的储存地址。暂存器别名表耦接于队列存储器,暂存器别名表用于依据循序排列的多个指令以产生多个相依性,以便判断指令何时能够非循序执行,其中当暂存器别名表遇到加载指令时,暂存器别名表判断加载指令中用以计算其加载地址的来源是否符合于队列存储器的一项目中储存指令的来源,且若符合,则使得加载指令共享所符合的储存指令的相依性。
本发明实施例提供一种非循序执行微处理器的操作方法,用以减少因储存碰撞而必须在非循序执行微处理器中重新执行加载指令的可能性,非循序执行微处理器具有暂存器别名表,暂存器别名表用于依据循序排列的多个指令以产生多个相依性,以便判断指令何时能够非循序执行,非循序执行微处理器的操作方法包括:当暂存器别名表遭遇到储存指令时,指派队列存储器的多个项目的一者;于所指派的项目中,填入用以识别储存指令的来源的信息,并且储存指令的来源地址用以计算储存指令的储存地址;当暂存器别名表遇到加载指令时,判断用来计算加载指令的加载地址的来源是否符合于队列存储器的项目的一者中的储存指令的来源地址;以及若加载指令的来源符合于队列存储器的项目的一者中的储存指令的来源,则使得加载指令共享所符合的储存指令的相依性。
本发明实施例提供一种非循序执行微处理器,用以减少因储存碰撞而重新执行加载指令的可能性,包括:第一队列存储器、第二队列存储器以及暂存器别名表。第一队列存储器包括多个项目。第二队列存储器包括多个项目。暂存器别名表耦接于第一和第二队列存储器,暂存器别名表用以依据循序排列的多个指令以产生多个相依性,以便决定指令何时能够非循序执行,其中暂存器别名表用以:当暂存器别名表判断出加载指令必须被重新执行时,则指派第一队列存储器的项目,并在所指派的项目中填入加载指令的指令指针;当暂存器别名表遇到储存指令时,指派第二队列存储器的项目,并在所指派的项目中填入相依性,而相依性用以识别储存指令为了其储存数据所依附的指令;以及当暂存器别名表遇到加载指令被后续执行且判断后续执行的加载指令的指令指针符合于第一队列存储器的所指派的项目的指令指针时,使得后续执行的加载指令共享相依性,相依性用以识别第二队列存储器的所指派项目中储存指令为了其储存数据所依附的指令。
本发明实施例提供一种非循序执行微处理器的操作方法,用以减少因储存碰撞而必须在非循序执行微处理器中重新执行加载指令的可能性,非循序执行微处理器具有暂存器别名表,暂存器别名表用以依据循序排列的多个指令以产生多个相依性,以便决定指令何时能够非循序执行,非循序执行微处理器的操作方法包括:于判断出加载指令必须被重新执行时,指派第一队列存储器的多个项目的一者,并在所指派的项目中填入加载指令的指令指针;当加载指令遇到储存指令时,指派第二队列存储器的多个项目的一者,并在所指派的项目中填入相依性,而相依性用以识别储存指令为了其储存数据所依附的指令;以及当暂存器别名表遇到加载指令被后续执行且判断后续执行的加载指令的指令指针符合于第一队列存储器的所指派的项目的指令指针时,使得后续执行的加载指令共享相依性,相依性用以识别第二队列存储器的所指派项目中储存指令为了其储存数据所依附的指令。
附图说明
图1为本发明中具有扩充式RAT的微处理器的方块图;
图2为本发明中图1的SACQ的项目的方块图;
图3为本发明中图1的RAT的操作流程图;
图4为本发明中图1的ROB的操作流程图;
图5为本发明中图1的保留站的操作流程图;
图6为本发明中图1的SAAQ的项目的方块图;
图7显示图1的微处理器产生加载指令的扩充式相依性信息的流程图,用以说明当发生储存碰撞时避免重新执行的操作;
图8为本发明中图1的SDAQ的项目的方块图;
图9为本发明中图1的SDDQ的项目的方块图;
图10显示图1的微处理器产生加载指令的扩充式相依性信息的流程图,用以说明当发生储存碰撞时避免重新执行的操作;
图11为本发明中图1的微处理器指定并更新SDAQ项目的流程图。
具体实施方式
本文所述实施例为管线化(pipelined)的非循序执行微处理器,用以在发生储存碰撞时,减少加载指令重新执行的次数。微处理器包括一暂存器别名表(register alias table,RAT),用以预测加载指令何时会发生储存碰撞,并使得加载指令与一个附加指令(additional instruction)具有依附关系,而加载指令通常不会与该附加指令具有依附关系。在本文中,通过RAT而被加载指令依附的附加指令称为被依赖者指令(dependee instruction)。这种附加或扩充式的相依性会使得微处理器的发布逻辑器等到被依赖者指令已经执行后(即已经产生其执行结果),才发布加载指令。故被依赖者指令的执行结果能够被发送(转交)至加载指令,或是能够自数据高速缓存而被读取。因此,当发布逻辑器(issue logic)将加载指令发布来执行时,因为加载指令将会接收到正确的数据,所以加载指令不需被重新执行。
在一实施例中,RAT将用以识别(identify)操作数来源(sources ofoperands)的信息储存在队列存储器(queue)中,其中用以识别操作数来源的信息由RAT用以计算所遭遇到的最近的(most recent)储存指令的储存地址。当遇到加载指令时,RAT会比较用以计算加载地址的来源与队列存储器中储存地址的来源。若符合,则RAT预测储存碰撞会发生,故使得加载指令和储存指令具有相依性(依附关系)。换言之,RAT使得加载指令与储存指令依附于同一个被依赖者指令,而储存指令则为了其储存数据亦依附于此被依赖者指令。
在另一实施例中,当加载指令与具有未解析储存位置的较先的储存指令发生储存碰撞而接收到错误的数据,并因而被重新执行时,RAT会将此加载指令的指令指针(instruction pointer)和用以识别此储存指令的信息储存在一队列存储器中。随后,当RAT遇到另一个加载指令(RAT是由于储存指令的指令指针值符合于队列存储器中的其中一个指令指针,而判断出遇到另一个加载指令)时,RAT使得加载指令依附于相符的队列存储器项目所识别的储存指令。
在另一实施例中,当RAT遇到一储存指令时,RAT将一信息推入(pushinto)一第一队列存储器,其中上述信息用以识别储存指令为了其储存数据所依附到的指令。因此第一队列存储器用以储存有关于RAT最近遇到的储存指令的相依性信息(dependency information)。当加载指令与不具有储存数据(储存数据尚不存在或尚未有效)的较先的储存指令发生储存碰撞而接收到错误的数据,而加载指令因而被重新执行时,RAT将加载指令的指令指针储存于一第二队列存储器中。接着,当RAT遇到另一个储存指令(RAT是由于储存指令的指令指针值符合于队列存储器中的其中一个指令指针,而判断出遇到另一个储存指令)时,RAT使得加载指令依附于储存指令由于其储存数据而在第一队列存储器中所依附到的指令。RAT根据第二队列存储器中的每个项目中所存放的加载指令的重新执行历史,由第一队列存储器中选择储存指令。当RAT指派(allocates)加载指令到第二队列存储器的某一项目时,RAT清除该项目所对应的重新执行历史,并且在每次该加载指令重新执行后,增加重新执行历史的次数。若重新执行历史的次数超出一既定值,则RAT让加载指令成为循序的(ordered)加载指令,使得加载指令在所有较先的储存指令都被发布后,RAT才会发布加载指令。
参考图1,其显示本发明中具有扩充式的RAT 134的微处理器100的方块图。在一实施例中,微处理器100是x86巨架构微处理器(macroarchitecture microprocessor)。所谓x86巨架构微处理器是指能够正确地执行为x86架构微处理器设计的大部分应用程序的微处理器。若微处理器100能够获得其预期的结果,则称其应用程序能够正确地执行。具体而言,微处理器100用以执行x86指令集的指令,并且包括x86可见暂存器集合(x86 user-visible register set)。然而,本文中所述的用以降低加载指令被重新执行的机制(reduction mechanics)亦可使用于目前的或是未来的其它架构的微处理器。
微处理器100包括一指令高速缓存(instruction cache)106,用以储存来自系统存储器(图1未图标)的程序指令。微处理器100亦包括一指令解码器(instruction decorder)108,用以接收来自指令高速缓存106的指令并将其解码。在一实施例中,指令解码器108包括指令转译器(instructiontranslator),用以将微处理器100的一宏指令集(macroinstruction set)的宏指令转译为微处理器100的一微指令集(microinstruction set)的微指令。具体而言,指令解码器108将存储器存取指令(memory accessinstructions)(例如x86 MOV、PUSH、POP、CALL、RET等指令)转译为一个微指令的序列,上述序列包括一或多个加载微指令或储存微指令,其中为了简化说明将其称为一个加载指令或一个储存指令。在其它实施例中,上述加载指令和储存指令是微处理器100原生指令集(native instruction set)的一部分。
微处理器100亦包括一RAT 134,耦接于指令解码器108;一保留站(reservation station)136,耦接于RAT 134;一重整缓冲器(reorder buffer,简称为ROB)172,耦接于RAT 134和保留站136;执行单元138,耦接于保留站136和ROB 172;以及架构暂存器(architectural register)162,耦接于ROB 172和执行单元138。
执行单元138包括存储器重整缓冲器(memory order buffer,简称为MOB)182或者称为存储器子系统182,用以执行存储器存取指令,例如加载指令与储存指令。具体而言,MOB 182根据加载指令与储存指令,由与其耦接的数据高速缓存186中读出数据,或者是写入数据至与其耦接的高速缓存186中。此外,MOB 182对应于一总线接口单元(图1未显示),用以将数据由系统存储器读出,或者是写入系统存储器。虽然MOB 182并非依照程序次序地接收加载和储存指令来加以执行,但是MOB 182仍可以正确地解析出储存碰撞。换言之,MOB 182会确保每个加载指令接收到正确的数据,具体而言,接收到来自正确的储存指令(或多个储存指令,单一加载指令所指定的数据由多个储存指令所提供的情况下)的正确的数据以免发生储存碰撞。如有必要,MOB 182会产生一重新执行信号166至ROB 172,用以要求ROB 172将加载指令重新执行,以确保本身(MOB 182)能够接收到正确的数据。然而,本实施例试图减少MOB 182必须提出请求以重新执行加载指令的次数。执行单元138亦包括用以执行非存储器存取指令的其它执行单元184,例如整数指令执行单元、浮点数指令执行单元、多媒体指令执行单元,以及类似的执行单元。
RAT 134依照程序次序地由指令解码器108接收解码的指令,并且判断微处理器100中每一个指令与其它未退返指令的相依性。RAT 134会储存微处理器100中有关于每个未退返指令的暂存器更名信息(register renaminginformation)。暂存器更名信息包括(incorporates)这些未退返指令的程序次序。此外,RAT 134包括一复杂状态机(complex state machine),用以根据更名信息和RAT 134的其它输入,控制微处理器100的多种操作。
RAT 134包括一相依性产生器(dependency generator)188,用以根据每个指令的程序次序、每个指令所指定的操作数来源,以及更名信息(renaminginformation)来产生每个指令的相依性信息(dependency information)158。相依性信息158包括指令中每个输入操作数的一识别符(identifier),即输入操作数所依附的被依赖者指令的识别符。在一实施例中,识别器是ROB 172中的项目的一个索引(index),用以识别ROB 172中的一个项目,而该项目用以储存被依赖者指令以及被依赖者指令所相关的状态信息,如下所述。
相依性信息158包括一般的(normal)相依性信息。相依性信息158亦包括有关于加载指令的扩充式或附加的相依性信息,用以降低由于储存碰撞导致加载指令被重新执行的可能性。RAT 134根据提供来源操作数(sourceoperands)的指令的暂存器来产生一般的相依性信息。举例而言,在下列表1所示的程序码序列(code sequence)中,第(1)列中的指令ADD将R5和R6的内容相加并将结果放入R3。第(2)列中的指令SUB将R3的内容减掉R8的内容并将结果放入R7。因为指令ADD在程序次序上先前于指令SUB,且指令SUB指定R3作为其操作数来源之一,并且指令ADD指定R3作为其结果的目的地,所以指令SUB与指令ADD具有相依性(或是依附关系)。因此,指令SUB中第一操作数来源的一般的相依性信息包括指令ADD的ROB索引,使得保留站136在指令ADD被执行后(即指令ADD已经产生其结果并且该结果对指令SUB是有效的(存在的或可取得的时候))才会发布指令SUB。在一实施例中,微处理器100执行暂存器更名,ROB 172中由架构暂存器162更名而成的临时暂存器(temporary register)是作为用以提供输入操作数的暂存器。
(1)ADD R3,R5,R6
(2)SUB R7,R3,R8
表1
RAT 134被加以扩充(enhanced),用以预测加载指令何时会发生储存碰撞,并在一般的相依性信息之外亦产生扩充式相依性信息,使得加载指令依附于一个附加指令,而加载指令通常不会依附于该附加指令。RAT 134产生扩充式相依性信息是为了减少加载指令需被重新执行的可能性。在一实施例中,RAT 134将一被依赖者指令的ROB索引包括于一加载指令的一个未使用的输入操作数字段(一第三输入操作数字段)内,以便让上述加载指令依附于上述被依赖者指令。
RAT 134包括多个队列存储器,RAT 134借着上述队列存储器作出储存碰撞的预测,并产生扩充式的加载指令相依性。上述队列存储器包括储存地址碰撞队列存储器(store address collision queue,简称为SACQ)192、储存地址别名队列存储器(store address alias queue,简称为SAAQ)194、储存数据别名队列存储器(store data alias queue,简称为SDAQ)196以及储存数据相依性队列存储器(store data dependency queue,简称为SDDQ)198,图2、图6、图8和图9将分别详细说明每个上述队列存储器的项目。
RAT 134会派送(dispatches)已解码指令(decoded instruction)和有关于已解码指令的相依性信息158至保留站136。在派送指令之前,RAT 134会为指令指派ROB 172的一个项目。因此,指令会依照程序次序地被指派至ROB172,其中ROB 172是环形队列存储器(circular queue)。这使得ROB 172得以确保指令能够依照程序次序地被退返。RAT 134亦将相依性信息158提供予ROB 172,用以将指令的项目储存于ROB 172。当ROB 172重新执行一指令(如加载指令)时,ROB 172在重新执行该指令的期间,将储存在ROB项目中的相依性信息提供予保留站136。
保留站136包括多个队列存储器,用以存放(hold)由RAT 134接收的指令和相依性信息158。保留站136亦包括一发布逻辑器,用以当指令准备好将被执行时,将指令由队列存储器发布至执行单元138。当一指令的所有相依性都是已解析的(resolved)时,该指令是准备好将被发布且执行的。当被依赖者指令已经执行并使得其执行结果对所依附指令(依赖者指令)是有效的时,依赖者指令的相依性则是已解析的(即此执行结果对即将执行所依附指令的执行单元而言是有效的)。执行单元138经由架构暂存器162、经由ROB 172中由架构暂存器162更名而得的临时暂存器(图1未图示),或者经由直接来自执行单元138本身的转发路径(forwarding paths)176,来接收已执行指令的结果164。执行单元138亦提供其结果164至ROB 172,以便写入至临时暂存器。
MOB 182使用由加载指令和储存指令所指定的来源操作数来为加载指令解析(即计算)加载地址,以及为储存指令解析储存地址。操作数的来源包括架构暂存器162、常数,及/或由指令指定的位移(displacements)。MOB 182亦通过所解析的加载地址(resolved load address)由数据高速缓存186中读取加载数据。MOB 182亦通过所解析储存地址将储存数据写入至数据高速缓存186中。在一实施例中,MOB 182包括用以执行加载指令的一加载单元,以及用以执行储存指令的一或多个储存单元。
如上所述,在一些情况下,MOB 182必须要求加载指令的重新执行,其中重新执行以提供至ROB 172的重新执行信号166表示。重新执行信号166指定需被重新执行的指令(例如加载指令)的ROB索引,使得ROB 172能够以重新执行所需的指示(indication)将索引项目(indexed entry)加以更新。在一实施例中,重新执行信号166亦指定与加载指令碰撞的储存指令的ROB索引,该碰撞使得加载指令必须重新执行。当具有被标记为需被重新执行的ROB索引的指令将紧接着被退返时(即最先的未退反指令),ROB 172重新执行加载指令。换言之,ROB 172将加载指令和其相关的相依性信息158由ROB 172重新派送(re-dispatches)至保留站136,等待以后重新发布(re-issuance)至执行单元138并被其重新执行(re-execution)。在一实施例中,ROB 172不仅将加载指令重新执行,亦将后于(newer)加载指令的所有指令重新执行。当ROB 172重新执行加载指令时,ROB 172以重新执行信号168通知(signals)RAT 134此事件(event)。重新执行信号168用以指定被重新执行的加载指令的ROB索引。
参考图2,其显示用以说明本发明图1的SACQ 192的项目202(以下简称SACQ项目202)的方块图。SACQ项目202用以存放RAT 134所遇到的储存指令的信息。RAT 134会如图3和图4所述地指派、填入(populates)并使用SACQ项目202。SACQ项目202包括一有效位(valid bit)204,用以指出此SACQ项目202是否有效。在重置时,微处理器100将所有的SACQ项目202初始化为无效的(invalid),意即清除每个SACQ项目202的有效位204。SACQ项目202亦包括一srcA字段(srcA field)206和一srcB(srcB field)字段208,分别用以识别第一和第二操作数的来源,其中MOB 182使用srcA字段206和srcB字段208来计算储存指令的储存地址。srcA字段206和srcB字段208用以识别存放有操作数或作为操作数的常数的架构暂存器162。SACQ项目202亦包括一位移字段(displacement field)212,用以存放由储存指令所指定的位移,其中MOB 182使用位移字段212来计算其储存地址。SACQ项目202亦包括位移有效位(displacement valid bit)214,用以指出位移字段212的数值是否有效。若储存指令为了其储存数据依附至被依赖者指令,SACQ项目202亦会包括一索引字段(index field)216,用以存放被依赖者指令的ROB索引。在一实施例中,RAT 134将一既定值填入索引字段216,用以指出储存指令与其储存数据并无相依性。
参考图3,其显示用以说明本发明图1的RAT 134的操作的流程图。流程始于步骤304。
在步骤304,RAT 134解码一指令并产生其一般的相依性信息,其中一般的相依性信息被包括于图1的相依性信息158中。流程前进至判断步骤306。
在判断步骤306,RAT 134判断已解码指令是否为一储存指令。若是,流程前进至步骤308;否则,流程前进至判断步骤312。
在步骤308,RAT 134会指派SACQ项目202。换言之,就逻辑上而言,RAT 134用以将SACQ项目202推入SACQ 192的尾端(tail),亦用以将SACQ项目202由SACQ 192的前端(head)推出。接着,RAT 134将来自储存指令的合适的信息填入所指派的SACQ项目202的srcA字段206、srcB字段208和位移字段212中。若储存指令指定一位移,则RAT 134设定(sets)位移有效位214;否则,RAT 134会清除位移有效位214。储存指令若由于其储存数据依附至一被依赖者指令,RAT 134亦会将被依赖者指令的ROB索引填入索引字段216。最后,RAT 134会设定有效位204。在一实施例中,储存指令实际上是两个独立的微指令:一个是储存地址(store address,简写为STA)微指令,另一个则是储存数据(store data,简写为STD)微指令。STA微指令被发布至MOB 182的储存地址单元,其中储存地址单元用以计算储存地址。STD微指令被发布至MOB 182的储存数据单元,其中储存数据单元用以由来源暂存器(source register)取得储存数据,并且将储存数据发布(posts)至储存缓冲器,以便后续写入存储器。在本实施例中,当RAT 134遇见(sees)STA微指令时,RAT 134会指派SACQ 192的项目202并且将来自储存指令的合适的信息填入srcA字段206、srcB字段208和位移字段212中,而当RAT 134遇见(sees)STD微指令时,若储存指令为了其储存数据依附至被依赖者指令,RAT 134则会将被依赖者指令的ROB索引填入索引字段216,并且设定有效位204。流程退回至步骤304。
在判断步骤312,RAT 134判断已解码指令是否为一加载指令。若是,流程前进至判断步骤314;否则,流程前进至判断步骤318。
在判断步骤314,RAT 134会比较加载指令所指定的来源与SACQ项目202所指定的储存指令的来源,用以判断其(由加载指令指定的来源)是否符合于与SACQ项目202有关的任何储存指令。换言之,RAT 134会比较加载指令的第一来源操作数的字段与每个SACQ项目202的srcA字段206、比较加载指令的第二操作数的字段与每个SACQ项目202的srcB字段208,以及比较加载指令的位移字段与每个SACQ项目202的位移字段212。在一实施例中,RAT134亦允许加载指令以调换次序的方式(swapped order)指定相同的来源暂存器。若对任何一个SACQ项目202而言,上述三种字段均符合,而加载指令用以指定一位移且该位移有效位214是被设定的,或加载指令未指定一位移且该位移有效位214是被清除的,则流程前进至步骤316;否则,流程退回步骤304。
在步骤316,RAT 134预测出加载指令将与符合于SACQ项目202的较先的加载指令发生碰撞,故因而使得加载指令为了储存指令的储存数据,而分享(共享)储存指令的相依性。换言之,RAT 134为加载指令产生扩充式相依性(enhanced dependency)158,其中扩充式相依性158用以指定符合于SACQ项目202的指针字段216的数值,如步骤314所述。在一实施例中,MOB 182的作用在于:若MOB 182在相同时钟周期接收到发生储存碰撞的加载和储存指令,则MOB 182能够将正确的数据由储存指令转发(forwarding)至加载指令,使得加载指令不需被重新执行。因此,通过产生扩充式相依性让加载指令依附于被预测为将发生碰撞的储存指令,且储存指令是为了其储存数据依附至被依赖者指令,RAT 134将让保留站136等待至被依赖者指令之后,才将加载指令和被预测为将发生碰撞的储存指令发布出去,而在多数情况中,加载指令将不会早于被预测为将发生碰撞的储存指令被发布。流程退回步骤304。
在判断步骤318,RAT 134判断已解码指令是否为能够修正由任何SACQ项目202的srcA字段206或srcB字段208指定为(储存地址)来源的一指令。若是,则流程前进至步骤322;否则,流程退回步骤304。
在步骤322,RAT 134清除每个SACQ项目202的有效位204,其中有效位204用以指定SACQ项目202的srcA字段206或srcB字段208中的暂存器是否由步骤318判断后的已解码指令所修正。因为加载地址和储存地址将不会重迭,所以RAT 134会清除有效位204;因此,让后续的加载指令与SACQ项目202所相关的储存指令共享(分享)储存数据的相依性不太可能会具有帮助。流程退回步骤304。
参考图4,其显示用以说明本发明图1的ROB 172的操作的流程图。流程始于步骤402。
在步骤402,ROB 172退返一指令并通知(notify)RAT 134。流程前进至判断步骤404。
在步骤404,RAT 134扫描SACQ 192,用以判断是否有任何SACQ项目202的索引字段216符合于被ROB 172退返的指令的索引。若有,则流程前进至步骤406;否则,流程退回步骤402。
在步骤406中,RAT 134清除符合的SACQ项目202的有效位204。这样能够确保RAT 134不会为后续的加载指令产生扩充式相依性去依附至一个已被退返的指令。流程退回步骤402。
参考图5,其显示用以说明本发明图1的保留站136的操作的流程图。流程始于步骤502。
在步骤502,保留站136检查(examines)指令的相依性信息。流程前进至判断步骤504。
在步骤504,保留站136判断由有关于一指令的相依性信息指定的所有相依性(dependencies)是否都已被解析。在一实施例中,保留站136会检查由相依性信息158的ROB索引所指定的ROB 172项目中的完成位(completebit)。当所有的完成位都是设定的时候,则相依性已被解析。当一执行单元138产生一指令的执行结果时,执行单元138会设定ROB172项目中有关于该指令的完成位。具体而言,在RAT 134为加载指令产生扩充式相依性后(如图3步骤316所述),保留站136判断被预测为将发生碰撞的储存指令为了其储存数据所依附的该(加载)指令是否为完成的。若(加载)指令的所有相依性都已被解析,则流程前进至步骤506;否则,流程退回步骤502。
在步骤506,保留站136发布具有已被解析的相依性的指令至执行单元138。流程退回步骤402。该已被解析的相依性的指令包含加载指令以及其它种类的指令。
根据图2至图5的实施例,图1的微处理器100的操作将以下列表2和表3中程序码序列的处理加以说明。为了简化,在本实施例中,加载和储存指令不包括位移值(displacement value)。第(1)列中的加法指令ADD将暂存器R5和R6的内容相加并将结果放入暂存器R3。第(2)列中的储存指令ST将暂存器R3的内容储存至存储器的储存地址,其中储存地址是将暂存器R1和R2的内容相加而得。第(3)列中的加载指令LD将存储器的加载地址加载暂存器R7,其中加载地址是将暂存器R1和R2的内容相加而得。
(1)ADD R3,R5,R6
(2)ST R3,R1,R2
(3)LD R7,R1,R2
表2
当RAT 134遇到第(2)列的储存指令ST时,RAT 134会执行图3的步骤304至步骤308。换言之,RAT 134产生一般的相依性信息158、指派SACQ 192的项目,以及将暂存器R1和R2分别填入srcA字段206和srcB字段208。此外,因为暂存器R3是储存指令ST的储存数据的来源暂存器(sourceregister)且暂存器R3亦是加法指令ADD执行结果的目的地暂存器,储存指令ST会由于其储存数据(暂存器R3的储存数据)而依附至加法指令ADD,因此RAT 134会将加法指令ADD的ROB索引填入索引字段216。最后,RAT 134会清除位移有效位214并且设定有效位204。
当RAT 134遇到第(3)行的加载指令LD时,RAT 134执行程序的流程是由图3的步骤304,经步骤312至步骤316。换言之,在步骤304时,RAT 134产生一般的相依性信息158;在判断步骤314时,RAT 134检测到加载地址的来源(即暂存器R1和R2)正好符合于刚才为储存指令ST所填入的SACQ项目202的srcA字段206和srcB字段208,故因而产生扩充式相依性信息158。扩充式相依性信息158为刚才为储存指令ST所填入的SACQ项目202的索引字段216的值,并且扩充式相依性信息158会使得加载指令LD依附至第(1)列的加法指令ADD,意即使得加载指令LD为了储存指令ST的储存数据,而共享储存指令ST的相依性,依附至加法指令ADD。因此,根据图5,保留站136在加法指令ADD已经完成后(即加法指令ADD的执行结果对储存指令ST是有效的)才会发布加载指令LD,其中储存指令ST会将执行结果转发至加载指令LD。
接着,如图4所述,当ROB 172退返第(1)列的加法指令ADD时,RAT 134清除有关于第(2)列储存指令ST所对应的SACQ项目202的有效位204。
表3中的的程序码序列类似于表2中的程序码序列;然而,在第(2)列的储存指令ST和第(3)列的加载指令LD间的第(2’)列中,有一减法指令SUB,用以将暂存器R8的内容减去暂存器R9的内容,然后将结果放入暂存器R1。
(1)ADD R3,R5,R6
(2)ST R3,R1,R2
(2’)SUB R1,R8,R9
(3)LD R7,R1,R2
表3
当RAT 134遇到第(2’)列的减法指令SUB时,RAT 134执行程序的流程是由图3的步骤304,经步骤318至步骤322。换言之,因为减法指令SUB修改了被SACQ项目202的scrA字段206所指定的暂存器R1的内容,所以RAT134会产生一般的相依性信息158并且清除有关于第(2)列的储存指令ST的SACQ项目202的有效位204。
由图1~图5和表1~表3中的说明可以发现本发明的优点在于:RAT 134产生的扩充式相依性能够使得加载指令LD和储存指令ST依附于相同的指令。当RAT 134遇到加载指令LD和储存指令ST时,因为加载地址和储存地址仍未产生,故即使加载地址和储存地址会发生碰撞,RAT 134亦不会由于储存指令ST因此为加载指令产生一般的相依性。
相较于Panwar等人以彩色位阵列为基础的系统(美国专利案号6,006,326),图2~图5的实施例的优点是:为了预测储存碰撞并产生扩充式相依性信息,在本实施例中,不需要让加载指令重新执行其先前的执行;更确切地说,本实施例能够完全避免加载指令的重新执行,意即若用以计算加载地址和储存地址的来源是相同的,则本实施例能够避免加载和储存指令在第一次执行后的重新执行。如前所述,如果时钟周期的严重效能损失是源自于指令的重新执行,则这是显著的优点。
然而,RAT产生的扩充式相依性却可能是错误的相依性。换言之,虽然加载地址和储存地址并未重迭,但是RAT 134却错误地预测了一次储存碰撞,这项错误实际上会让微处里器花费更多时间来执行加载指令,这是因为:加载指令可能在扩充式相依性的被依赖者指令之前就已经被发布,而加载指令不需要被重新执行。然而,发明人发现,对多数程序而言,加载指令重新执行次数的减少所得到的益处远大于错误预测的后果。这可能是重新执行的效能损失相对较大所导致,其中在一实施例中,因为重新执行而导致的效能损失为50个时钟周期,而由错误预测所导致的效能损失为1或2个时钟周期,并且若加载地址和储存地址的来源是相同的,则其重迭的机率也很高。
相较于Panwar等人以彩色位阵列为基础的系统(美国专利案号6,006,326),图2~图5的实施例的另一种优点是:相较于彩色位阵列,本实施例不需要太多的储存空间,并且具有提供附加(concomitant)空间和节能的优点。虽然SACQ的每个项目都可能储存比彩色位实施例更多的位,但是因为彩色位阵列的大小相应于指令高速缓存的每个指令(或指令区块)的项目数量,而SACQ项目的数量远少于彩色位项目的数量,因此,SACQ项目的数量反而比较少。举例而言,在微处理器的一实施例中,发明人发现具有4个项目的SACQ能够大幅减少加载指令重新执行的次数。
相较于Panwar等人以彩色位阵列为基础的系统(美国专利案号6,006,326),图2~图5的实施例的另一种优点是:本实施例能够让加载指令比彩色字节更快被发布。具体而言,彩色位阵列根据其本身的储存指令来产生加载指令的相依性,这表示加载指令只能够在储存指令执行后被发布;反之,图2~图5和图8~图11的实施例根据发生碰撞的储存指令为了其储存数据而依附的被依赖者指令来产生扩充式相依性,并不是如同Panwar等人是根据有关于发生碰撞的储存指令本身来产生相依性,这表示在一些情况下,通过本处所述实施例,加载指令会比Panwar等人的实施例更快被发布。
如同即将被说明的表4中的程序码片段,在一些情况下,图2~图4的实施例并未预测到储存碰撞。然而,图6~图11的实施例能够预测到该等情况下的储存碰撞。表4中的程序码片段类似于表2中的程序码片段;然而,第(3)列的加载指令LD将暂存器R8(而非暂存器R2)的内容和暂存器R1的内容相加以计算加载地址。因为在第(2)列的储存指令用以计算储存地址的来源与第(3)列的加载指令用以计算加载地址的来源并不相同,所以即使加载地址储存地址互相符合,SACQ 192也不会如同图2~图5预测可能发生的储存碰撞;然而,图6~图11的实施例能够预测到可能的储存碰撞。
(1)ADD R3,R5,R6
(2)ST R3,R1,R2
(3)LD R7,R1,R8
表4
参考图6,其显示用以说明本发明图1的SAAQ 194的项目602(以下简称SAAQ项目602)的方块图。因为加载指令的加载地址与具有仍未被产生的储存地址的较先的储存指令发生储存碰撞,所以加载指令接收到错误的数据,且加载指令因此而被重新执行,故SAAQ项目602用以存放被重新执行的加载指令的信息。RAT 134会如图7所述地指派、填入并使用SAAQ项目602。SAAQ项目602包括一有效位602,用以指出SAAQ项目602是否有效。在重置时,微处理器100将所有的SAAQ项目602初始化为无效的(即清除每个SAAQ项目602的有效位604)。此外,在一实施例中,每当x86程序码片段的片段描述符(segment descriptor)中的程序码限制数值(code segment limit value)被写入时,每个SAAQ项目602的有效位604便被清除。SAAQ项目602亦包括一指令指针(instruction pointer,简写为IP)字段606,用以储存加载指令所停留的存储器地址。在一实施例中,IP字段606用于记录在加载指令之后的下一个指令的存储器地址,而非记录加载指令本身的存储器地址。SAAQ602亦包括一差值(delta)字段608,用以储存介于加载指令的ROB索引和储存指令的(在一实施例中,该储存指令为一STA指令)ROB索引之间的差值,该差值是造成加载指令重新执行的原因,如下所述。
参考图7,其显示本发明中图1的微处理器100产生加载指令的扩充式相依性信息的流程图,用以说明当发生储存碰撞时避免重新执行的操作。流程始于步骤702。
在步骤702,因为加载指令与仍未被MOB 182产生的地址的一较先的储存指令发生储存碰撞,所以MOB 182检测到已完成的加载指令接收到错误的数据。因此,MOB 182并不知道MOB182或执行单元138必需将发生碰撞的储存指令的数据转发至加载指令。在一实施例中,即使MOB 182知道有一或多个较先的储存指令的储存地址仍未被解析,也就是即使MOB 182知道在加载指令和具有未解析储存地址的储存指令之间有可能发生储存碰撞,MOB 182仍允许加载指令存取数据高速缓存186。MOB 182这样作是希望储存碰撞从未发生,在这种情况下,相较于MOB 182在储存地址被解析后才让加载指令停止等待(才发布加载指令),加载指令能够执行得更快。若存在储存碰撞的情况,即因为MOB 182应该都已经将正确的数据从具有未解析地址的发生碰撞的储存指令之处转发出去,加载指令因而接收到错误的数据时,则这么作的后果是加载指令必须被重新执行。流程前进至步骤704。
在步骤704,MOB 182产生重新执行信号166至ROB 172,用以指出步骤702所检测到的情况。具体而言,MOB 182输出加载指令的ROB索引和储存指令,其中ROB 172使用加载指令的ROB索引来更新加载指令的ROB项目的状态,以便指出加载指令需要被重新执行。流程前进至步骤706。
在步骤706,RAT 134监测(snoops)MOB 182在步骤704产生的重新执行信号166、记录(notes)加载指令的重新执行请求,以及计算加载指令的ROB索引和储存指令的ROB索引之间的差值并将该差值储存于其中。在一实施例中,当RAT 134在计算差值时,RAT 134会考虑ROB 172的环形队列存储器特性的绕回影响(wrap around affect)。在表4的实施例中,在步骤704,MOB 182输出第(3)列的加载指令LD的ROB索引和第(4)列的储存指令ST的ROB索引;因为上述两个指令在程序次序上是相邻的,所以RAT 134计算其ROB索引之间的差值为1。如上所述,在一实施例中,储存指令ST实际上是两个独立的微指令:一个是储存地址STA微指令,其次是紧接其后的STD微指令。在本实施例中,在步骤704中,ROB 172输出STA微指令的ROB索引,其中STA微指令在程序次序上先前于STD微指令;因此,RAT 134计算加载指令的ROB索引和STA微指令的ROB索引之间的差值为2。流程前进至步骤708。
在步骤708,ROB 172判断紧接的加载指令要被退返,即加载指令已经成为ROB 172中最先的指令。ROB 172发现(sees)加载指令被标记为需被重新执行并重新执行加载指令。换言之,ROB 172重新派送加载指令和其相依性信息158至保留站136,用以等待后续被重新发布至执行单元138,以便重新执行。在一实施例中,ROB 172不仅将加载指令重新执行,亦将后于加载指令的所有指令重新执行。此外,ROB 172产生重新执行信号168至RAT 134。流程前进至步骤712。
在步骤712,RAT 134会根据步骤708产生的重新执行指令168而指派SAAQ项目602。换言之,RAT 134将被指派的新SAAQ项目602推入SAAQ 194的尾端(tail),亦将由SAAQ 194的前端推出一个SAAQ项目602。接着,RAT134将来自储存指令的IP数值填入IP字段606。RAT 134亦将步骤706计算的差值填入差值字段608。最后,RAT 134设定有效位604。流程前进至步骤714。
在步骤714,RAT 134遇到一第二加载指令并为该加载指令产生其一般的相依性信息。此外,RAT 134会比较每个有效的SAAQ项目602的IP字段606与加载指令的IP数值。流程前进至判断步骤716。
在判断步骤716,RAT 134判断步骤714所执行的比较是否显示具有任何SAAQ项目602符合于加载指令的IP数值。若无,则流程结束;否则流程前进至步骤718。要注意的是,RAT 134在步骤714/716/718遇到的第二加载指令不同于RAT 134在步骤712填入的IP所属的加载指令。因此,当加载指令被重新执行时,RAT 134不会将储存指令目前的(actual)ROB索引填入SAAQ项目602。更确切地说,本发明的优点在于当加载指令被重新执行时,RAT 134会先将第一次遭遇到的加载指令和储存指令之间ROB索引的差值填入SAAQ项目602,以便RAT 134在下一次遇到第二加载指令或在其之后的加载指令时,RAT 134能够为较先的储存指令在先前已决定的差值字段608和目前的加载指令产生一扩充式相依性,如以下步骤718所述。发明人已经确认加载指令所需要等待的加载指令和储存指令之间ROB索引的差值极有可能相同于重新执行后的ROB索引。
在步骤718,RAT 134预测加载指令会与较先的储存指令发生碰撞,因而使得加载指令依附于储存指令,其中较先的储存指令的ROB索引是由符合的SAAQ项目602的差值字段608的数值计算而得。换言之,RAT 134为加载指令产生扩充式相依性158,其中扩充式相依性158用以指定ROB索引,而此ROB索引是一个差值,其等于加载指令的ROB索引减去在步骤716所决定的符合的SACQ项目602的差值字段608的数值(即储存指令的ROB索引)。本发明的优点在于:因为加载指令依附于储存指令,所以加载和储存指令将依程序次序被发布。具体而言,储存指令会被及时地(in time)执行(即产生其储存地址),以便MOB 182检测其与加载地址碰撞的地址。因此,当加载指令到达MOB 182时,而储存数据是可取得的(有效的、存在的),MOB 182将检测到加载和储存指令间发生碰撞,并且将储存数据转发给加载指令。若储存数据是无法取得的(无效的、不存在的),则MOB 182将重新执行加载指令,如以下图8~图11所讨论的实施例。在表4的实施例中,因为差值字段608的数值为1(若是STA微指令,则数值是2),所以RAT 134将为第(3)列的加载指令LD产生扩充式相依性158,用以指定第(2)列的储存指令ST,使得保留站136进行等待,然后在储存指令ST(或STA微指令)已经发布之后,才发布加载指令LD。流程中止于步骤718。
根据一实施例,SAAQ 194的IP字段606的长度少于IP地址的位数。因此,即使在步骤716判断有SAAQ项目的IP字段606符合于加载指令的IP数值,亦不能保证加载指令与在步骤708/712被重新执行的加载指令是相同的。此外,亦不能保证在索引的ROB 172项目中有一个储存指令,或者是其储存地址与加载指令的加载地址发生碰撞。更确切地说,RAT 134只是作出预测而已。然而,发明人发现,虽然RAT 134有预测错误的可能性,但是使用图6~图7的实施例仍可大幅减少加载指令重新执行的次数。
相较于Panwar等人以彩色位阵列为基础的系统(美国专利案号6,006,326),上述图6~图7和下述图8~图11的实施例的一种优点是:上述实施例所需的储存空间少于彩色位阵列,并且具有提供附加空间和节能的优点,如上所述。虽然SAAQ或SAAQ+SDDQ的每个项目都可能比彩色位阵列储存更多位数,但是因为彩色位阵列的项目必须对应到指令高速缓存的每个指令(或指令区块),所以SAAQ或SAAQ+SDDQ项目的数量却可能远少于彩色位阵列的项目数量;因此,SAAQ或SAAQ+SDDQ项目的总存储器数量反而比较少。举例而言,在微处理器的一实施例中,发明人发现具有4个项目的SAAQ、具有4个项目的SDAQ,以及具有2个项目的SDDQ能够大幅减少加载指令重新执行的次数。
相较于Panwar等人以彩色位阵列为基础的系统(美国专利案号6,006,326),上述图6~图7和下述图8~图11的实施例的另一种优点是:因为上述实施例提供加载指令重新执行的理由较多较细致,并且试图根据重新执行的不同理由,使用不同方法来预测储存碰撞,所以上述实施例能够大幅减少加载指令重新执行的次数。
只有当重新执行是因为已完成的加载指令接收到错误的数据所造成时,图6~图7的实施例才会填入SAAQ 194的项目,上述成因是加载指令与仍未被MOB 182产生的地址的较先的加载指令发生碰撞,MOB 182因而并未检测到其必需将发生碰撞的数据转发至加载指令。然而,发明人已经确定:有一些储存碰撞引起的(store collision-induced)加载指令重新执行是不能通过图6~图7的实施例而预测的。具体而言,有一些重新执行的起因在于MOB182检测到在执行了一加载指令时,MOB 182提供了错误的数据给该加载指令(因为其检测到在加载指令和储存指令间的储存碰撞),但是发生碰撞的储存指令的储存数据却是无效的(不存在的或无法取得的)。本发明的优点在于:图8~图11的实施例解决了这个问题。具体而言,RAT 134会试图为加载指令产生扩充式相依性,让加载指令分享储存指令的相依性,使得加载指令在储存指令为了其储存数据所依附的指令已经发布后,加载指令才会被发布执行,其细节如下所述。
参考图8,其显示用以说明本发明图1的SDAQ 196的项目802(以下简称『SDAQ项目802』)的方块图。SDAQ项目802用以存放被重新执行的加载指令的信息,加载指令被重新执行的原因是:当MOB 182执行加载指令时,因为加载指令的加载地址与具有无效的(不存在的或无法取得的)储存数据的储存指令发生碰撞,所以加载指令接收到错误的数据,加载指令因而被重新执行。RAT 134会如图10和图11所述地指派、填入并使用SDAQ项目802。SDAQ项目802包括一有效位804,用以指出SDAQ项目802是否有效。在重置时,微处理器100将所有的SDAQ项目802初始化为无效的(即清除每个SDAQ项目802的有效位804)。此外,在一实施例中,每当x86程序码片段的片段描述符中的程序码限制数值被写入时,每个SDAQ项目802的有效位804便被清除。SDAQ项目802亦包括一IP字段806,用以储存加载指令所停留的存储器地址。在一实施例中,IP字段806记录在加载指令之后的下一个指令的存储器地址,而非加载指令本身的存储器地址。SDAQ项目802亦包括一历史字段(historyfield)808,用以估计(approximates)加载指令的IP字段806的重新执行次数,其细节如以下详述。在一实施例中,历史字段808的数值逐渐递增并在数值等于4时饱和。SDAQ项目802亦包括一索引字段812,用以存放IP字段806所指定地址上最近的加载指令的ROB索引。SDAQ项目802亦包括一索引有效字段814,用以指出索引字段812的数值是否有效。
参考图9,其显示用以说明本发明图1的SDDQ 198的项目902(以下简称『SDDQ项目902』)的方块图。SDDQ项目902用以存放有关于RAT 134最近遇到的储存指令的相依性信息。RAT 134会如图10和图11所述地指派、填入并使用SDDQ项目902。SDDQ项目902包括一有效位04,用以指出SDDQ项目902是否有效。在重置时,微处理器100将所有的SDDQ项目902初始化为无效的(即清除每个SDDQ项目902的有效位904)。此外,类似于图4中的ROB172将SACQ 172无效化(invalidates)的方式,当ROB 172将具有符合于SDDQ项目902的索引字段906的索引字段的指令退返时,ROB 172将SDDQ项目902无效化。若储存指令为了其储存数据依附至一被依赖者指令,SDDQ项目902亦会包括索引字段906,用以存放被依赖者指令的ROB索引。在一实施例中,RAT 134将一既定值填入索引字段906,指出储存指令不会由于其储存数据而具有依附关系。
参考图10,其显示本发明中图1的微处理器100产生加载指令的扩充式相依性信息的流程图,用以说明当发生储存碰撞时避免重新执行的操作。流程始于步骤1004。
在步骤1004,RAT 134解码一指令并产生其一般的相依性信息,其中一般的相依性信息被包括于图1的相依性信息158中。流程前进至判断步骤1006。
在判断步骤1006,RAT 134判断已解码指令是否为一储存指令。若是,流程前进至步骤1008;否则,流程前进至判断步骤1012。
在判断步骤1008,RAT 134指派SDDQ项目902。换言之,在队列存储器逻辑结构上而言,RAT 134会将SDDQ项目902推入SDDQ 902的尾端(tail),亦会将SDDQ项目902由SDDQ 902的前端(head)推出。接着,若储存指令为了其储存数据相依至被依赖者指令,RAT 134则将被依赖者指令的ROB索引填入索引字段906。最后,RAT 134设定有效位904。在一实施例中,储存指令实际上是两个独立的微指令:一个是STA微指令,另一个则是STD微指令。在本实施例中,当RAT 134遇见STD微指令时,RAT 134指派SDDQ项目902、将被依赖者指令的ROB索引填入索引字段906(若储存指令为了其储存数据依附至被依赖者指令),以及设定有效位904。流程退回步骤1004。
在步骤1012,RAT 134判断已解码指令是否为一加载指令。若否,流程退回步骤1004;否则,流程前进至步骤1014。
在步骤1014,RAT 134会比较每个有效的SDAQ项目802的IP字段806与加载指令的IP数值。流程前进至判断步骤1016。
在判断步骤1016,RAT 134判断步骤1014所执行的比较是否显示具有任何SDAQ项目802符合于加载指令的IP数值。若无,则流程退回步骤1004;否则,流程前进至步骤1018。根据一实施例,SDAQ 196的IP字段806长度少于IP地址的位数。因此,即使在步骤1016判断有SDAQ项目符合于加载指令的IP数值,亦不能保证加载指令与在步骤1104中(图11)被重新执行的加载指令是同一个的。
在步骤1018,RAT 134检查符合的SDAQ项目802的历史字段808的数值。若历史字段808的数值为0或1,则RAT 134让加载指令分享(共享)被较后(新)的SDAQ项目902的索引字段906所指定的储存指令的相依性。若历史字段808的数值为2或3,则RAT 134让加载指令共享(分享)较先的SDAQ项目902的索引字段906所指定的储存指令的相依性(在一实施例中,SDDQ项目902的数目为2)。若历史字段808的数值大于3,则RAT 134让加载指令成为强制依照顺序执行的加载指令。换言之,RAT 134为加载指令产生扩充式相依性158,使得保留站136进行等待,然后在所有较先的储存指令(或STA微指令)已经发布之后,才发布加载指令LD。在其它实施例中,SDDQ项目902的数目不为2,并且随着历史字段808的数值的增加,RAT 134选择的SDDQ 198中更加老旧的储存指令。再者,在其它实施例中,历史字段808的最大数值大于4,且历史字段808的临界数值亦不同于图10的实施例。只有当SDDQ项目902有效时,RAT 134才会让加载指令共享(分享)SDDQ项目902所指定的储存指令的相依性;否则,若所有SDDQ项目902都无效时,根据一实施例,则RAT 134让加载指令成为强制依照顺序执行的加载指令,并且根据另一实施例,则RAT 134并不为加载指令产生扩充式相依性。流程前进至判断步骤1022。
在判断步骤1022,RAT 134判断索引有效字段814是否为了步骤1016被判断为符合的SDAQ项目802而被设定的。若SQAQ项目802是有效的,流程退回步骤1004;否则,步骤前进至步骤1024。
在步骤1024,RAT 134以目前的加载指令的ROB索引填入SDAQ项目802的索引字段812,并设定索引有效位字段814,其中目前的加载指令的地址是被IP字段指定的(即RAT 134在步骤1004所遇到的加载指令的ROB索引)。流程退回步骤1004。
参考图11,其显示本发明中图1的微处理器100指定并更新SDAQ 196的项目802(以下简称『SDAQ项目802』)的流程图。流程始于步骤1102。
在步骤1102,当MOB 182执行加载指令时,MOB 182检测到加载指令与不具有储存数据(即储存数据是无效的、不存在的或无法取得的)的储存指令发生碰撞,而且MOB 182提供给加载指令的数据是错误的。因此,MOB 182产生重新执行信号166给ROB 172,用以告知MOB 182所检测到的情况。具体而言,MOB 182输出加载指令的ROB索引给ROB 172,其中ROB 172使用加载指令的ROB索引来更新ROB 172的项目的状态,以便指出加载指令需要被重新执行。流程前进至步骤1104。
在步骤1104,ROB 172判断出步骤1105所检测到的加载指令紧接着要被退返,即加载指令已经成为ROB 172中最先的指令。ROB 172发现加载指令被标记为需被重新执行,因而重新执行加载指令。换言之,ROB 172从ROB 172重新派送加载指令和其相依性信息158至保留站136,用以等待后续被重新发布至执行单元138并加以重新执行。在一实施例中,ROB 172不仅将加载指令重新执行,亦将后于加载指令的所有指令重新执行。此外,ROB 172产生重新执行信号168至RAT 134。流程前进至步骤1106。
在步骤1106,RAT 134会比较重新执行的加载指令的IP数值与每个有效的SDAQ项目802的IP字段806。流程前进至判断步骤1108。
在判断步骤1108,RAT 134判断步骤1106所执行的比较是否显示具有任何SDAQ项目802符合于加载指令的IP数值。若无,则流程前进至步骤1112;否则,流程前进至步骤1114。
在步骤1112,RAT 134会指派SDAQ项目802。换言之,逻辑上而言,RAT134会将SDAQ项目802推入SDAQ 802的尾端(tail),亦会将SDAQ项目802由SDAQ 802的前端(head)推出。接着,RAT 134将加载指令的IP数值填入IP字段806。RAT 134亦将历史字段808清除为0。最后,RAT 134设定有效位804。流程中止于步骤1112。
在步骤1114,RAT 134会比较加载指令的ROB索引与每个有效的SDAQ项目802的索引字段812,其中每个有效的SDAQ项目802的索引有效位是被设定为有效的。流程前进至判断步骤1116。
在步骤1116,RAT 134判断步骤1114所执行的比较是否显示具有任何SDAQ项目802符合于加载指令的ROB索引。若无,则流程结束;否则,流程前进至步骤1118。
在步骤1118,RAT 134将符合的SDAQ项目802的历史字段808增量。因为在步骤1102决定将加载指令重新执行,所以加载指令在步骤1104被重新执行,RAT 134因而将历史字段808增量。然而,要注意的是,若加载指令是由于其它原因而被重新执行,例如图7的步骤702,则RAT 134不会将历史字段808增量。此外,RAT 134将索引有效字段814清除。流程中止于步骤1118。
根据图8~图11的实施例,图1的微处理器100的操作将以下列表5之中程序码序列的处理加以说明。为了简化,在本实施例中,加载和储存指令不包括位移值。表5的第3列至第5列类似于表4的第1列至第3列。然而,在表5,第1列的加法指令ADD和第2列的储存指令ST在程序次序上是先前于的第3列至第5列的指令,其中第1列的加法指令ADD将暂存器R8和R9的内容相加并将结果放入暂存器R4。第(2)列中的储存指令ST将暂存器R4的内容储存至存储器的储存地址,其中储存地址是将暂存器R1和R2的内容相加而得。因此,第2列的储存指令ST与第1列的加法指令ADD具有一般的相依性,如同第4列的储存指令ST与第3列的加法指令ADD具有一般的相依性。
(1)ADD R4,R8,R9
(2)ST R4,R1,R2
(3)ADD R3,R5,R6
(4)ST R3,R1,R2
(5)LD R7,R1,R8
表5
根据图11的步骤1104,假设第5列的加载指令会被重新执行,并且根据图11的步骤1112,RAT 134指派SDAQ项目802,并将有关于重新执行的加载指令的IP数值填入SDAQ项目802。一般而言,因为发生碰撞的储存指令已经被退返,所以当加载指令重新执行时,被重新执行的加载指令将成功地执行和退返,这是因为加载指令会在微处理器100中最先的未退返指令(即较先的发生碰撞的储存指令)已经退返后,才被重新执行。假设表5中的指令是程序循环的一部分,并且接着程序会第二次执行表5中的指令,根据图10的步骤1008,RAT 134指派SDDQ项目902,并将第2列储存指令ST为了其储存数据所依附的指令的ROB索引填入SDDQ项目902;根据步骤1008,RAT 134将第4列储存指令ST为了其储存数据所依附到的指令的ROB索引填入SDDQ项目902;根据图10的步骤1018,RAT 134为第5列的加载指令LD产生扩充式相依性158,使得第5列的加载指令LD与第4列的加载指令ST共享(分享)相依性;以及根据图10的步骤1024,RAT 134以加载指令LD的索引填入IP符合的(IP-matching)SDAQ项目802的索引字段812,并且将索引有效字段设定为有效的。这会使得保留站136进行等待,在第3列的加法指令ADD执行后,才会发布加载指令LD,亦通常会使得加载指令LD不会早于第4列的储存指令被发布。藉此将能避免因储存碰撞而产生的加载指令重新执行。
然而,假设这样作无法避免重新执行且加载指令LD需要被第二次重新执行(因为步骤1102决定的原因),RAT 134则会根据步骤1118将历史字段808增量(此时为1)并且清除索引有效字段814。进一步假设程序接着第三次执行表5中的指令,RAT 134则会根据步骤1008为两个储存指令ST指派SDDQ项目902并且填入SDDQ项目;根据步骤1018,为加载指令LD产生扩充式相依性158,使得加载指令LD共享(分享)储存指令ST的相依性;并根据步骤1024,以加载指令的ROB索引填入索引字段812,并且将索引有效字段814设定为有效的。
假设这样作仍无法避免重新执行且加载指令LD需要被第三次重新执行(因为步骤1102决定的原因),RAT 134则会根据步骤1118再将历史字段808增量(此时为2)并且清除索引有效字段814。进一步假设程序接着第三次执行表5中的指令,RAT 134则根据步骤1008为两个储存指令ST指派SDDQ项目902并且填入SDDQ项目。在第三次重新执行中,因为历史字段808的数值为2,所以RAT 134会根据步骤1018为加载指令LD产生扩充式相依性158,使得加载指令LD共享(分享)第2列储存指令LD的相依性;并且根据步骤1024,以加载指令的ROB索引填入索引字段812。藉此将能避免因储存碰撞而产生的加载指令重新执行。然而,若这样作仍无法避免重新执行,则在历史字段808的数值等于4后,这种模式将不继续操作下去,根据步骤1018,此时RAT134为加载指令产生扩充式相依性158,使得加载指令成为强制依照顺序执行的加载指令,藉此将能避免因储存碰撞而产生的加载指令重新执行。
根据本发明的数个实施例,微处理器100能够通过多种方式来避免加载指令重新执行。然而如上所述,要注意的是,在本发明实施例中,可能有其它因素会让微处理器花费更多时间来执行加载指令。举例而言,在一些情况下,由加载指令指定的来源地址可能不会与由储存指令指定的目的地地址发生碰撞,这使得RAT产生错误的预测,在上述情况中,扩充式相依性让保留站不必要地延迟了加载指令的发布。换言之,若无扩充式相依性,则保留站便能够将加载指令发布执行,并且加载指令亦能够正确且快速地被执行而无需被重新执行。然而,发明人发现,对多数程序而言,减少加载指令重新执行次数所得到的益处远大于错误预测的后果。这可能是重新执行的效能损失相对较大所导致,其中在一实施例中,因为重新执行而导致的效能损失为15个时钟周期,而由错误预测所导致的效能损失为1或2个时钟周期,并且若加载地址和储存地址的来源是相同的,则其重迭的机率也很高。产生上述益处的另外一种原因是RAT能够极正确地预测储存碰撞。
虽然本发明已经由数种实施例揭露如上,但其仅用以作为例子,并非用以限定本发明。计算器领域的本领域技术人员应能理解,在不脱离本发明的精神的前提下,当可对本发明作些许更动。举例而言,软件能够致能本发明的装置和方法的功能、制造、模型建立、仿真、各种性质,以及/或测试。其能够通过不同的程序语言而达成,例如程序语言(如C、C++)、硬件描述语言(hardware description language,HDL,如Verilog HDL、VHDL),或是其它可能的程序语言。上述软件能够设置于任何已知的计算器可读取储存媒体(computer usable medium),例如半导体、磁盘,或光盘(如CD-ROM、DVD-ROM)。本发明的装置和方法可能包括于任何半导体知识产权核心(semiconductorIP core)之内,例如(以HDL嵌入的)微处理器核心,或是当集成电路制造时,转移至硬件。此外,本发明可能通过硬件和软件的组合而实现。因此,本发明不应被此处所述的任何实施例所限制,本发明应该是根据所附权利要求范围与其等效的装置/方法而被定义。特别的是,本发明能够设置于一般用途计算器的微处理器装置内。最后,本领域技术人员应能理解到:在不脱离由权利要求范围定义的本发明范畴的前提下,其能够以本发明揭露的概念和特定的实施例作为基础,用以设计或修改其它架构来执行与本发明相同的目的。
Claims (18)
1.一种非循序执行微处理器,用以减少因储存碰撞而重新执行加载指令的可能性,包括:
一第一队列存储器,包括多个项目;
一第二队列存储器,包括多个项目;以及
一暂存器别名表,耦接于上述第一和第二队列存储器,上述暂存器别名表用以依据循序排列的多个指令以产生多个相依性,以便决定上述指令何时能够非循序执行,其中上述暂存器别名表用以:
当上述暂存器别名表判断出一加载指令必须被重新执行时,则指派上述第一队列存储器的一项目,并在所指派的项目中填入上述加载指令的一指令指针;
当上述暂存器别名表遇到一储存指令时,指派上述第二队列存储器的一项目,并在所指派的项目中填入一相依性,而上述相依性用以识别上述储存指令为了其储存数据所依附的一指令;以及
当上述暂存器别名表遇到上述加载指令被后续执行且判断上述后续执行的加载指令的指令指针符合于上述第一队列存储器的上述所指派的项目的指令指针时,使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述第二队列存储器的上述所指派项目中上述储存指令为了其储存数据所依附的上述指令,
非循序执行微处理器还包括:
一发布逻辑器,耦接于上述暂存器别名表,用以根据上述暂存器别名表所产生的上述相依性,将上述指令非循序地发布执行。
2.根据权利要求1所述的非循序执行微处理器,其中当执行上述加载指令时,若因为上述加载指令与一较先前的储存指令发生储存碰撞,且发生碰撞的上述较先前的储存指令的储存数据仍然是无效的,而使得上述暂存器别名表判断出上述加载指令必须被重新执行时,上述暂存器别名表是以指派上述第一队列存储器的上述项目,并于上述所指派的项目中填入上述加载指令的上述指令指针。
3.根据权利要求1所述的非循序执行微处理器,其中上述暂存器别名表根据上述加载指令的重新执行的历史,选择上述第二队列存储器的上述项目,使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述储存指令为了其储存数据所依附的上述指令。
4.根据权利要求3所述的非循序执行微处理器,其中上述加载指令的重新执行的上述历史包括在上述第一队列存储器的每个上述项目中的一历史字段,并且当上述暂存器别名表指派上述第一队列存储器的上述项目时,清除上述历史字段,并根据上述后续执行的加载指令,选择性地增加上述历史字段的数值。
5.根据权利要求4所述的非循序执行微处理器,其中若上述历史字段的数值小于一既定数值时,则上述暂存器别名表选择上述第二队列存储器的上述项目的最后一者,用以使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述储存指令为了其储存数据所依附的上述指令,其中若上述历史字段的数值大于或等于一既定数值时,则上述暂存器别名表选择上述第二队列存储器的上述项目中早于上述最后一者的一较先者,用以使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述储存指令为了其储存数据所依附的上述指令。
6.根据权利要求4所述的非循序执行微处理器,其中若上述历史字段大于一既定数值,则上述暂存器别名表用以为上述加载指令产生一相依性,使得上述发布逻辑器在所有上述较先的储存指令都已被发布后,才发布上述加载指令。
7.根据权利要求4所述的非循序执行微处理器,其中当上述暂存器别名表遇到上述后续执行的加载指令,并且判断出上述后续执行的加载指令的指令指针符合于上述第一队列存储器的一项目的上述指令指针时,上述暂存器别名表用以于上述第一队列存储器的所指派的项目的一字段中填入上述后续执行的加载指令的一识别符,接着当上述暂存器别名表判断出上述加载指令必须被重新执行时,上述暂存器别名表用以使用上述后续执行的加载指令的上述识别符来判断是否更新上述加载指令的重新执行的上述历史字段。
8.根据权利要求1所述的非循序执行微处理器,还包括:
一重整缓冲器,耦接于上述暂存器别名表,上述重整缓冲器包括一阵列,上述阵列包括多个项目,并且上述重整缓冲器依照程序次序地储存多个未退返指令,上述项目的每一者是由写入上述阵列的一索引所识别;
其中第二队列存储器的每个上述项目的相依性包括上述储存指令为了其储存数据所依附的上述指令的一重整缓冲器索引。
9.根据权利要求1所述的非循序执行微处理器,其中只有当上述加载指令的上述指令指针不符合上述第一队列存储器的任何上述项目的上述指令指针,上述暂存器别名表才于判断出上述加载指令必须被重新执行时,指派上述第一队列存储器的上述项目的一者,并于所指派的项目中填入一加载指令的一指令指针。
10.一种非循序执行微处理器的操作方法,用以减少因储存碰撞而必须在非循序执行微处理器中重新执行加载指令的可能性,上述非循序执行微处理器具有一暂存器别名表,上述暂存器别名表用以依据循序排列的多个指令以产生多个相依性,以便决定上述指令何时能够非循序执行,上述非循序执行微处理器的操作方法包括:
于判断出上述加载指令必须被重新执行时,指派第一队列存储器的多个项目的一者,并在所指派的项目中填入上述加载指令的一指令指针;
当上述加载指令遇到一储存指令时,指派一第二队列存储器的多个项目的一者,并在所指派的项目中填入一相依性,而上述相依性用以识别上述储存指令为了其储存数据所依附的一指令;以及
当上述暂存器别名表遇到上述加载指令被后续执行且判断上述后续执行的加载指令的指令指针符合于上述第一队列存储器的上述所指派的项目的指令指针时,使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述第二队列存储器的上述所指派项目中上述储存指令为了其储存数据所依附的上述指令,
其中上述非循序执行微处理器还包括一发布逻辑器,耦接于上述暂存器别名表,用以根据上述暂存器别名表所产生的上述相依性,将上述指令非循序地发布执行。
11.根据权利要求10所述的非循序执行微处理器的操作方法,其中当执行上述加载指令时,若因为上述加载指令与一较先前的储存指令发生储存碰撞,且发生碰撞的上述较先前的储存指令的储存数据仍然是无效的,而使得上述暂存器别名表判断出上述加载指令必须被重新执行时,上述暂存器别名表是指派上述第一队列存储器的上述项目,并于上述所指派的项目中填入上述加载指令的上述指令指针。
12.根据权利要求10所述的非循序执行微处理器的操作方法,还包括:
根据上述加载指令的重新执行的历史,选择上述第二队列存储器的上述项目,使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述储存指令为了其储存数据所依附的上述指令。
13.根据权利要求12所述的非循序执行微处理器的操作方法,其中上述加载指令的重新执行的上述历史包括在上述第一队列存储器的每个上述项目中的一历史字段,上述非循序执行微处理器的操作方法还包括:
清除上述历史字段;以及
根据上述后续执行的加载指令,选择性地增加上述历史字段的数值。
14.根据权利要求13所述的非循序执行微处理器的操作方法,其中若上述历史字段的数值小于一既定数值时,则上述选择上述第二队列存储器的上述项目的步骤包括选择上述第二队列存储器的上述项目的最后一者,用以使得后续执行上述加载指令共享上述相依性,上述相依性用以识别上述储存指令为了其储存数据所依附的上述指令,其中若上述历史字段的数值大于或等于一既定数值时,则上述选择上述第二队列存储器的上述项目的步骤包括选择上述第二队列存储器的上述项目中早于上述最后一者的一较先者,用以使得上述后续执行的加载指令共享上述相依性,上述相依性用以识别上述储存指令为了其储存数据所依附的上述指令。
15.根据权利要求13所述的非循序执行微处理器的操作方法,上述非循序执行微处理器的操作方法还包括:
若上述历史字段大于一既定数值,则上述暂存器别名表用以为上述加载指令产生一相依性,使得上述发布逻辑器在所有上述较先的储存指令都已被发布后,才发布上述加载指令。
16.根据权利要求13所述的非循序执行微处理器的操作方法,还包括:
当上述暂存器别名表遇到上述后续执行的加载指令,并且判断出上述后续执行的加载指令的指令指针符合于上述第一队列存储器的一项目的上述指令指针时,上述暂存器别名表用以于上述第一队列存储器的所指派的项目的一字段中填入上述后续执行的加载指令的一识别符;以及
当上述暂存器别名表判断出上述加载指令必须被重新执行时,上述暂存器别名表用以接着使用上述后续执行的加载指令的上述识别符来判断是否更新上述加载指令的重新执行的上述历史字段。
17.根据权利要求10所述的非循序执行微处理器的操作方法,其中第二队列存储器的每个上述项目的相依性包括上述储存指令为了其储存数据所依附的上述指令的一重整缓冲器索引。
18.根据权利要求10所述的非循序执行微处理器的操作方法,其中只有当上述加载指令的上述指令指针不符合上述第一队列存储器的任何上述项目的上述指令指针,上述暂存器别名表才于判断出上述加载指令必须被重新执行时,指派上述第一队列存储器的上述项目的一者,并于所指派的项目中填入一加载指令的一指令指针。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US18228309P | 2009-05-29 | 2009-05-29 | |
US61/182,283 | 2009-05-29 | ||
US12/604,930 US8464029B2 (en) | 2009-05-29 | 2009-10-23 | Out-of-order execution microprocessor with reduced store collision load replay reduction |
US12/604,930 | 2009-10-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101853150A CN101853150A (zh) | 2010-10-06 |
CN101853150B true CN101853150B (zh) | 2013-05-22 |
Family
ID=42804660
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010185555 Active CN101853150B (zh) | 2009-05-29 | 2010-05-19 | 非循序执行的微处理器及其操作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101853150B (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016534431A (ja) * | 2013-10-25 | 2016-11-04 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated | ロード/記憶ユニット及びデータキャッシュの順序付け及びバンド幅の向上 |
US10083038B2 (en) | 2014-12-14 | 2018-09-25 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on page walks in an out-of-order processor |
KR101837817B1 (ko) | 2014-12-14 | 2018-03-12 | 비아 얼라이언스 세미컨덕터 씨오., 엘티디. | 비순차 프로세서에서 페이지 워크에 따라 로드 리플레이를 억제하는 메커니즘 |
US10089112B2 (en) | 2014-12-14 | 2018-10-02 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor |
JP6286067B2 (ja) * | 2014-12-14 | 2018-02-28 | ヴィア アライアンス セミコンダクター カンパニー リミテッド | アウトオブオーダープロセッサでの長いロードサイクルに依存するロードリプレイを除外するメカニズム |
US10146546B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd | Load replay precluding mechanism |
WO2016097790A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude non-core cache-dependent load replays in out-of-order processor |
US10127046B2 (en) | 2014-12-14 | 2018-11-13 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude uncacheable-dependent load replays in out-of-order processor |
WO2016097814A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude shared ram-dependent load replays in out-of-order processor |
US9804845B2 (en) | 2014-12-14 | 2017-10-31 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor |
US10114646B2 (en) | 2014-12-14 | 2018-10-30 | Via Alliance Semiconductor Co., Ltd | Programmable load replay precluding mechanism |
WO2016097792A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude load replays dependent on write combining memory space access in out-of-order processor |
KR101837816B1 (ko) | 2014-12-14 | 2018-03-12 | 비아 얼라이언스 세미컨덕터 씨오., 엘티디. | 비순차 프로세서에서 i/o의존 로드 리플레이를 불가능하게 하는 메커니즘 |
KR101819314B1 (ko) | 2014-12-14 | 2018-01-16 | 비아 얼라이언스 세미컨덕터 씨오., 엘티디. | 비순차 프로세서에서 오프다이 제어 부재 접근에 따라 로드 리플레이를 억제하는 장치 |
WO2016097815A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude x86 special bus cycle load replays in out-of-order processor |
US10108420B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor |
WO2016097811A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude load replays dependent on fuse array access in out-of-order processor |
US10108421B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude shared ram-dependent load replays in an out-of-order processor |
US10120689B2 (en) | 2014-12-14 | 2018-11-06 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor |
US10088881B2 (en) | 2014-12-14 | 2018-10-02 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude I/O-dependent load replays in an out-of-order processor |
US10133579B2 (en) | 2014-12-14 | 2018-11-20 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude uncacheable-dependent load replays in out-of-order processor |
US10175984B2 (en) | 2014-12-14 | 2019-01-08 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor |
US10146539B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd. | Load replay precluding mechanism |
US10228944B2 (en) | 2014-12-14 | 2019-03-12 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
WO2016097804A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Programmable load replay precluding mechanism |
US10146540B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor |
WO2016097791A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
US9703359B2 (en) | 2014-12-14 | 2017-07-11 | Via Alliance Semiconductor Co., Ltd. | Power saving mechanism to reduce load replays in out-of-order processor |
CN108920191B (zh) * | 2018-06-05 | 2020-11-20 | 上海兆芯集成电路有限公司 | 处理器电路及其操作方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6006326A (en) * | 1997-06-25 | 1999-12-21 | Sun Microsystems, Inc. | Apparatus for restraining over-eager load boosting in an out-of-order machine using a memory disambiguation buffer for determining dependencies |
CN1507587A (zh) * | 2001-05-11 | 2004-06-23 | �Ҵ���˾ | 可避免写后读的危险的存储器指令的发出和执行 |
CN1690952A (zh) * | 2004-04-22 | 2005-11-02 | 国际商业机器公司 | 根据多组高速缓存组预测来选择执行的指令的装置和方法 |
CN1746842A (zh) * | 2004-09-08 | 2006-03-15 | 三星电子株式会社 | 用于乱序执行条件指令的硬件装置及其执行方法 |
CN101211257A (zh) * | 2006-12-30 | 2008-07-02 | 中国科学院计算技术研究所 | 基于局部相联查找的解决访存相关的方法和处理器 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5590352A (en) * | 1994-04-26 | 1996-12-31 | Advanced Micro Devices, Inc. | Dependency checking and forwarding of variable width operands |
US5987595A (en) * | 1997-11-25 | 1999-11-16 | Intel Corporation | Method and apparatus for predicting when load instructions can be executed out-of order |
US6463523B1 (en) * | 1999-02-01 | 2002-10-08 | Compaq Information Technologies Group, L.P. | Method and apparatus for delaying the execution of dependent loads |
US6625723B1 (en) * | 1999-07-07 | 2003-09-23 | Intel Corporation | Unified renaming scheme for load and store instructions |
US6622237B1 (en) * | 2000-01-03 | 2003-09-16 | Advanced Micro Devices, Inc. | Store to load forward predictor training using delta tag |
US20030065909A1 (en) * | 2001-09-28 | 2003-04-03 | Jourdan Stephan J. | Deferral of dependent loads until after execution of colliding stores |
-
2010
- 2010-05-19 CN CN 201010185555 patent/CN101853150B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6006326A (en) * | 1997-06-25 | 1999-12-21 | Sun Microsystems, Inc. | Apparatus for restraining over-eager load boosting in an out-of-order machine using a memory disambiguation buffer for determining dependencies |
CN1507587A (zh) * | 2001-05-11 | 2004-06-23 | �Ҵ���˾ | 可避免写后读的危险的存储器指令的发出和执行 |
CN1690952A (zh) * | 2004-04-22 | 2005-11-02 | 国际商业机器公司 | 根据多组高速缓存组预测来选择执行的指令的装置和方法 |
CN1746842A (zh) * | 2004-09-08 | 2006-03-15 | 三星电子株式会社 | 用于乱序执行条件指令的硬件装置及其执行方法 |
CN101211257A (zh) * | 2006-12-30 | 2008-07-02 | 中国科学院计算技术研究所 | 基于局部相联查找的解决访存相关的方法和处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN101853150A (zh) | 2010-10-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101853150B (zh) | 非循序执行的微处理器及其操作方法 | |
CN102087591B (zh) | 非循序执行的微处理器及其操作方法 | |
CN101847094A (zh) | 非循序执行的微处理器及其操作方法 | |
US11379234B2 (en) | Store-to-load forwarding | |
JP3540743B2 (ja) | 1次発行キューと2次発行キューを持つマイクロプロセッサ | |
TWI428825B (zh) | 微處理器以及相關儲存方法 | |
CN101984403B (zh) | 微处理器及其执行的方法 | |
KR100334479B1 (ko) | 컴퓨터 처리 시스템에서 로드 동작의 순서 변경 방법 및 장치 | |
US6912648B2 (en) | Stick and spoke replay with selectable delays | |
JP4538462B2 (ja) | 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機 | |
US7263600B2 (en) | System and method for validating a memory file that links speculative results of load operations to register values | |
CN102156627B (zh) | 执行快速重复载入数据串操作的微处理器 | |
US7003629B1 (en) | System and method of identifying liveness groups within traces stored in a trace cache | |
JP3866261B2 (ja) | ロード/ストア操作をバイパスするために投機的ソースオペランドを使用するシステムおよび方法 | |
US7962730B2 (en) | Replaying memory operation assigned a load/store buffer entry occupied by store operation processed beyond exception reporting stage and retired from scheduler | |
US8285937B2 (en) | Fused store exclusive/memory barrier operation | |
JP3683808B2 (ja) | 命令履歴情報を持つ基本キャッシュ・ブロック・マイクロプロセッサ | |
CN101901132B (zh) | 微处理器以及相关储存方法 | |
JPH10312282A (ja) | 命令完了を改良するための方法および装置 | |
CN105005463A (zh) | 具有世代重命名的计算机处理器 | |
US20030126409A1 (en) | Store sets poison propagation | |
JP3629551B2 (ja) | 基本キャッシュ・ブロックを利用したマイクロプロセッサ | |
US11175917B1 (en) | Buffer for replayed loads in parallel with reservation station for rapid rescheduling | |
JP2004038256A (ja) | プログラムカウンタ制御方法及びプロセッサ | |
Song | Reducing register pressure through LAER algorithm |
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 |