CN110647361B - 一种空闲物理寄存器的获取方法和装置 - Google Patents
一种空闲物理寄存器的获取方法和装置 Download PDFInfo
- Publication number
- CN110647361B CN110647361B CN201910849594.6A CN201910849594A CN110647361B CN 110647361 B CN110647361 B CN 110647361B CN 201910849594 A CN201910849594 A CN 201910849594A CN 110647361 B CN110647361 B CN 110647361B
- Authority
- CN
- China
- Prior art keywords
- ptr
- alloc
- register
- registers
- free
- 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
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000011084 recovery Methods 0.000 claims abstract description 6
- 101000648528 Homo sapiens Transmembrane protein 50A Proteins 0.000 claims description 6
- 102100028770 Transmembrane protein 50A Human genes 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 6
- 230000000630 rising effect Effects 0.000 claims description 6
- 238000013461 design Methods 0.000 abstract description 5
- 238000005516 engineering process Methods 0.000 abstract description 3
- 238000013507 mapping Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
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/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
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
本发明涉及乱序超标量微处理器设计技术,具体涉及一种空闲物理寄存器的获取方法和装置,本发明方法包括初始化用于记录所有可以被用来进行重命名的物理寄存器的物理寄存器空闲列表,所述物理寄存器空闲列表具有分配指针和回收指针,初始时所述物理寄存器空闲列表的第n项记录的空闲物理寄存器的编号为n,回收指针指向第0项,分配指针指向第m项,将用于保存寄存器重命名流水站要使用的空闲物理寄存器的编号的m个寄存器按照从0到m‑1的顺序依次分配给被重命名的指令;根据流水线的状态决定如何更新m个寄存器和分配指针。本发明具有时序好、硬件开销小的优点。
Description
技术领域
本发明涉及微处理器设计技术领域的乱序超标量微处理器设计技术,具体涉及一种空闲物理寄存器的获取方法和装置。
背景技术
目前主流的商用高性能微处理器(CPU)几乎都采用乱序超标量结构,这种结构以不同于程序的顺序执行指令,从而更大程度的开发指令级并行性。指令间存在的相关限制了指令的乱序执行。相关有数据相关和名相关两种类型。数据相关也叫写后读相关,当一条指令的结果要被其后面的指令使用时就产生了数据相关。当存在这种相关时,两条指令只能按照程序序执行。名相关是指两条指令使用了相同的寄存器或者主存单元,即同一个名字,但是指令之间却不存在数据的流动。名相关有两种:读后写相关和写后写相关。当一条指令要读一个寄存器,而其后面的指令要写这个寄存器时就产生了寄存器的读后写相关;当一条指令和其后面的指令都要写同一个寄存器时就产生了寄存器的写后写相关。
微处理器的体系结构寄存器(即程序员可见的寄存器)通常只有32个,导致程序中寄存器的名相关非常常见,消除寄存器名相关对提高乱序超标量微处理器的性能至关重要,因此,乱序超标量微处理器都会采用寄存器重命名技术。寄存器重命名是指当某个体系结构寄存器作为一条指令的目的寄存器时,将其映射到微处理器实现的一个空闲的物理寄存器的过程。如图1(a)所示,ADD指令要写体系结构寄存器R1,SUB指令要读寄存器R1,ADD和SUB之间存在写后读相关;MUL指令要写R1,SUB和MUL之间存在读后写相关;ADD和MUL都要写R1,存在写后写相关。采用寄存器重命名技术后,ADD指令要写体系结构寄存器R1,将其映射到物理寄存器P1,SUB指令要写体系结构寄存器R2,将其映射到物理寄存器P2,MUL也要写R1,将其映射到物理寄存器P3,如图1(b)所示,存在写后读相关的ADD和SUB,它们之间的数据依赖关系依然存在,而存在读后写相关的SUB和MUL以及存在写后写相关的ADD和MUL,因为寄存器重命名,它们之间的名相关被消除了。
在进行寄存器重命名时,需要获取空闲的物理寄存器,以将作为指令目的寄存器的体系结构寄存器映射到这些物理寄存器上。现有技术的普遍做法是将所有可以被用来进行重命名的物理寄存器组织成一个物理寄存器空闲列表,我们不妨将其取名为preg_freelist。如果有N个物理寄存器,那么物理寄存器空闲列表preg_freelist就有N项。每项记录一个物理寄存器的编号,初始时第n项记录的编号为n,其中0≤n<N。物理寄存器空闲列表preg_freelist有两个指针,一个用来指示从哪一项开始获取空闲的物理寄存器的编号,我们不妨将其叫做分配指针alloc_ptr,另一个用来指示被释放的物理寄存器被写入空闲列表的哪项,我们不妨将其叫做回收指针dealloc_ptr。初始时,所有物理寄存器都是空闲的,分配指针alloc_ptr和回收指针dealloc_ptr都指向物理寄存器空闲列表preg_freelist的第0项。
在寄存器重命名流水站,假设重命名宽度为m,那么需要读取从分配指针alloc_ptr指向的项开始的m项,分配给要重命名的m条指令。由于不是每条指令都有目的寄存器的,而且每拍重命名的指令数目未必总是能达到最大的m条,所以并不总是每拍都分配出去m个物理寄存器,需要根据实际分配出去的物理寄存器个数更新分配指针alloc_ptr,如果没有物理寄存器被分配出去,那么分配指针alloc_ptr保持不变。下一拍,寄存器重命名流水站又使用更新后的分配指针alloc_ptr读取物理寄存器空闲列表preg_freelist获取空闲物理寄存器。
为了匹配越来越宽的发射宽度,现代主流高性能微处理器的寄存器重命名宽度都在4以上,乱序执行资源也要相应增加,物理寄存器个数达到了200个左右。在寄存器重命名流水站,读取物理寄存器空闲列表后,根据被重命名指令的目的操作数情况进行分配,之后还要根据同时重命名的指令之间的写后读相关情况进行旁路,这样才算完成了寄存器重命名。寄存器重命名宽度的增加以及物理寄存器个数的增加,导致寄存器重命名流水站的时序变长,很难实现高主频。因此现有技术将寄存器重命名流水站进行了重新划分,获取空闲物理寄存器的工作提前一拍进行。提前读取相当于用当拍的分配指针alloc_ptr得到下一拍寄存器重命名需要的空闲物理寄存器,如果当拍一个物理寄存器都没有分配出去,那么从分配指针alloc_ptr开始的m项的内容就是下一拍重命名需要的空闲物理寄存器,但是如果当拍分配出去了m个物理寄存器,那么从(alloc_ptr+m)开始的m项的内容才是下一拍重命名需要的空闲物理寄存器。由于当拍分配出去的物理寄存器个数可能是0~m之间的任意值,需要按照最坏的可能进行设计,因此需要读取从分配指针alloc_ptr指向的项开始的2*m项。这种方法虽然有助于优化时序,但是硬件开销较大。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,面向乱序超标量微处理器提供一种时序好、硬件开销小的空闲物理寄存器获取方法和装置。
为了解决上述技术问题,本发明采用的技术方案为:
一种空闲物理寄存器的获取方法,实施步骤包括:
1)初始化用于记录所有可以被用来进行重命名的物理寄存器的物理寄存器空闲列表preg_freelist,所述物理寄存器空闲列表preg_freelist具有分配指针alloc_ptr和回收指针dealloc_ptr,初始时所述物理寄存器空闲列表preg_freelist的第n项记录的空闲物理寄存器的编号为n,其中0≤n<N,回收指针dealloc_ptr指向第0项,分配指针alloc_ptr指向第m项,m为寄存器重命名宽度,N为物理寄存器空闲列表preg_freelist的项数;
2)将用于保存寄存器重命名流水站要使用的空闲物理寄存器的编号的m个寄存器Reg0~Regm-1按照从0到m-1的顺序依次分配给被重命名的指令;
3)根据流水线的状态决定如何更新m个寄存器和分配指针alloc_ptr:根据当拍分配出去的物理寄存器个数更新m个寄存器和分配指针,供下一拍寄存器重命名时使用,如果发生了异常或分支误预测,读取从已经被恢复的分配指针alloc_ptr开始的物理寄存器空闲列表的m项用于更新m个寄存器,然后将分配指针alloc_ptr前进m项,使得虽然提前一拍读取物理寄存器空闲列表,但是每拍需要读取的项数仍然保持m项。
优选地,步骤3)的详细实施步骤包括:
3.1)判断是否发生了流水线的清除,如果是则跳转执行步骤3.2);否则跳转执行步骤3.3);
3.2)首先将分配指针alloc_ptr回退到导致流水线被清除的指令被重命名之前的状态,然后下一拍读取从分配指针alloc_ptr开始的m项,分别用读出的内容更新m个寄存器Reg0~Regm-1并将分配指针alloc_ptr前进m项,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,其中N为物理寄存器空闲列表preg_freelist的项数,结束并退出;
3.3)获取重命名流水站分配出去的物理寄存器数量p,如果物理寄存器数量p的值为0,则将m个寄存器Reg0~Regm-1的内容和分配指针alloc_ptr都保持不变,结束并退出;否则,分别使用Regp+i的内容更新第i个寄存器Regi,其中0≤i≤(m-p-1);并使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器;最终将分配指针alloc_ptr前进p项,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,其中N为物理寄存器空闲列表preg_freelist的项数。
优选地,步骤3.3)中使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器具体是指分别使用(alloc_ptr+j)指向的项的内容更新Regm-p+j,其中0≤j<p,p表示重命名流水站分配出去的物理寄存器数量。
此外,本发明还提供一种空闲物理寄存器的获取装置,包括存储器和乱序超标量微处理器,所述乱序超标量微处理器被编程或配置以执行所述空闲物理寄存器的获取方法的步骤,或所述存储器上存储有被编程或配置以执行所述空闲物理寄存器的获取方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有被编程或配置以执行所述空闲物理寄存器的获取方法的计算机程序。
此外,本发明还提供一种空闲物理寄存器的获取装置,包括:
空闲物理寄存器读取模块,由m个N选1的多路选择器SN0,SN1,……SNm-1组成,且分别使用alloc_ptr、alloc_ptr+1,……alloc_ptr+m-1作为选择信号,从物理寄存器空闲列表的N项中选择1项,从而将从分配指针alloc_ptr开始的m项的内容读取出来,对应读出的m个数据分别记为Valloc_ptr,Valloc_ptr+1,……Valloc_ptr+m-1,m为寄存器重命名宽度;
寄存器及更新模块,包括m个寄存器Regi~Regm-1及其输入数据生成逻辑,输入数据生成逻辑由m个m+1选1的共选择信号多路选择器SMP10,SMP11,……SMP1m-1组成,任意第i个多路选择器SMP1i的m+1个输入数据为寄存器Regi的值、寄存器Regi+1的值、……、寄存器Regm-1的值、数据Valloc_ptr、数据Valloc_ptr+1、……、数据Valloc_ptr+i;所述选择信号为当拍分配出去的物理寄存器个数dealloc_num和流水线清除信号flush,选择数据时首先看流水线清除信号flush的值,如果流水线清除信号flush为1,任意第i个多路选择器SMP1i选择Valloc_ptr+i,否则如果流水线清除信号flush为0,那么根据当拍分配出去的物理寄存器个数dealloc_num进行选择,如果当拍分配出去的物理寄存器个数dealloc_num为0,任意第i个多路选择器SMP1i选择寄存器Regi,如果当拍分配出去的物理寄存器个数dealloc_num为1,任意第i个多路选择器SMP1i选择寄存器Regi+1,依此类推,如果当拍分配出去的物理寄存器个数dealloc_num为m,任意第i个多路选择器SMP1i选择数据Valloc_ptr+i,数据生成后,在时钟上升沿将其打入相应的寄存器;
分配指针alloc_ptr的更新模块,用于更新分配指针alloc_ptr的值,包括用于保存分配指针alloc_ptr的值的寄存器Regalloc_ptr、一个m+1选1的多路选择器SMP1和分配指针alloc_ptr的自增逻辑;所述自增逻辑包含+1模块、……、+m-1模块和+m模块,用于生成alloc_ptr+1,……,alloc_ptr+m-1和alloc_ptr+m;所述多路选择器SMP1的m+1个输入数据为alloc_ptr,alloc_ptr+1,……alloc_ptr+m,选择信号同样为当拍分配出去的物理寄存器个数dealloc_num和流水线清除信号flush,选择数据时首先看流水线清除信号flush的值,如果流水线清除信号flush为1,选择alloc_ptr+m,否则如果flush为0,那么根据当拍分配出去的物理寄存器个数dealloc_num进行选择,如果当拍分配出去的物理寄存器个数dealloc_num为0,选择alloc_ptr,如果当拍分配出去的物理寄存器个数dealloc_num为1,选择alloc_ptr+1,依此类推,如果当拍分配出去的物理寄存器个数dealloc_num为m,选择alloc_ptr+m,其中alloc_ptr为寄存器Regalloc_ptr中存储的分配指针,m为寄存器重命名宽度;数据生成后,在时钟上升沿将其打入寄存器Regalloc_ptr。
本发明空闲物理寄存器的获取方法具有下述优点:
1、本发明能优化寄存器重命名流水站的时序。本发明在寄存器重命名流水站的前一拍就把空闲物理寄存器准备好,使得要使用空闲物理寄存器的寄存器重命名当拍的时序路径上不包含空闲物理寄存器的读取逻辑,优化了寄存器重命名流水站的时序。
2、本发明能降低空闲物理寄存器获取逻辑的硬件开销。本发明虽然在寄存器重命名流水站的前一拍获取空闲物理寄存器,但是使用分配指针alloc_ptr读取物理寄存器空闲列表时,仍然只需要读取m项,和现有技术的读取2*m项相比,降低了硬件开销。
本发明空闲物理寄存器的获取装置为与前所述空闲物理寄存器的获取方法相对应的结构部件,因此具有与前述空闲物理寄存器的获取方法相同的技术效果,在此不再赘述。
附图说明
图1为现有技术的通过寄存器重命名消除名相关的示意图。
图2为本发明实施例方法的基本流程示意图。
图3为应用本发明实施例的物理寄存器空闲列表的初始状态。
图4为本发明实施例的详细实施流程示意图。
图5为应用本发明实施例装置的结构示意图。
具体实施方式
如图2所示,本实施例空闲物理寄存器的获取方法的实施步骤包括:
1)初始化用于记录所有可以被用来进行重命名的物理寄存器的物理寄存器空闲列表preg_freelist,如图3所示,物理寄存器空闲列表preg_freelist具有分配指针alloc_ptr和回收指针dealloc_ptr,初始时物理寄存器空闲列表preg_freelist的第n项记录的空闲物理寄存器的编号为n,其中0≤n<N,回收指针dealloc_ptr指向第0项,分配指针alloc_ptr指向第m项,m为寄存器重命名宽度(即每拍被重命名的指令的最大数目),N为物理寄存器空闲列表preg_freelist的项数;
2)将用于保存寄存器重命名流水站要使用的空闲物理寄存器的编号的m个寄存器Reg0~Regm-1按照从0到m-1的顺序依次分配给被重命名的指令;本实施例中,实现m个寄存器,分别叫做Reg0、Reg1、……Regm-1,用来保存寄存器重命名流水站要使用的空闲物理寄存器的编号,按照从0到m-1的顺序依次分配给被重命名的指令。初始时,Reg0的值为0,Reg1的值为1,……Regm-1的值为m-1;
3)根据流水线的状态决定如何更新m个寄存器和分配指针alloc_ptr:根据当拍分配出去的物理寄存器个数更新m个寄存器和分配指针,供下一拍寄存器重命名时使用,如果发生了异常或分支误预测,读取从已经被恢复的分配指针alloc_ptr开始的物理寄存器空闲列表的m项用于更新m个寄存器,然后将分配指针alloc_ptr前进m项,使得虽然提前一拍读取物理寄存器空闲列表,但是每拍需要读取的项数仍然保持m项。
本实施例步骤3)用于实现根据流水线的状态决定如何更新m个寄存器和分配指针alloc_ptr。如果因为异常或者分支误预测需要清除流水线,那么首先将分配指针alloc_ptr回退到导致流水线被清除的指令被重命名之前的状态(这个行为与现有技术相同,不再赘述),然后下一拍读取从分配指针alloc_ptr开始的m项,用读出的内容更新m个寄存器并将分配指针alloc_ptr前进m项。因为发生流水线清除后,正确地址的指令达到寄存器重命名站之前要经历取指和译码,当前的高性能微处理器的取指和译码加起来都要多于3拍,所以有充足的时间完成m个寄存器和分配指针alloc_ptr的更新;如果没有发生流水线的清除,指令要被重命名,那么根据寄存器重命名站分配出去的物理寄存器个数决定如何更新m个寄存器和分配指针alloc_ptr。如果没有物理寄存器被分配出去,那么m个寄存器的内容和分配指针alloc_ptr都保持不变。如果有物理寄存器被分配出去,假设分配出去了p(0<p≤m)个,那么使用Regp+i的内容更新Regi,其中,0≤i≤(m-p-1),使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器,具体为使用(alloc_ptr+j)指向的项的内容更新Regm-p+j,其中,0≤j<p,然后将分配指针alloc_ptr前进p项。
如图4所示,步骤3)的详细实施步骤包括:
3.1)判断是否发生了流水线的清除,如果是则跳转执行步骤3.2);否则跳转执行步骤3.3);
3.2)首先将分配指针alloc_ptr回退到导致流水线被清除的指令被重命名之前的状态,然后下一拍读取从分配指针alloc_ptr开始的m项,分别用读出的内容更新m个寄存器Reg0~Regm-1并将分配指针alloc_ptr前进m项,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,其中N为物理寄存器空闲列表preg_freelist的项数,结束并退出;
3.3)获取重命名流水站分配出去的物理寄存器数量p,如果物理寄存器数量p的值为0,则将m个寄存器Reg0~Regm-1的内容和分配指针alloc_ptr都保持不变,结束并退出;否则,分别使用Regp+i的内容更新第i个寄存器Regi,其中0≤i≤(m-p-1);并使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器;最终将分配指针alloc_ptr前进p项,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,其中N为物理寄存器空闲列表preg_freelist的项数。
本实施例中,步骤3.2)的详细步骤包括:
3.2.1)将分配指针alloc_ptr回退到导致流水线被清除的指令被重命名之前的状态;3.2.2)读取从分配指针alloc_ptr开始的m项,用读出的内容更新m个寄存器并将分配指针alloc_ptr前进m项,具体为从alloc_ptr指向的项读出的内容写入Reg0,从alloc_ptr+1指向的项读出的内容写入Reg1,依此类推,从alloc_ptr+m-1指向的项读出的内容写入Regm-1;3.2.3)将分配指针alloc_ptr前进m项。如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,比如如果要前进到项为N,那么折回到队列头的第0项。之后重新回到步骤3);
本实施例中,步骤3.3)中使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器具体是指分别使用(alloc_ptr+j)指向的项的内容更新Regm-p+j,其中0≤j<p,p表示重命名流水站分配出去的物理寄存器数量。本实施例中,步骤3.3)中将分配指针alloc_ptr前进p项时,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,N为物理寄存器空闲列表preg_freelist的项数。
此外,本实施例还提供一种空闲物理寄存器的获取装置,包括存储器和乱序超标量微处理器,乱序超标量微处理器被编程或配置以执行本实施例前述空闲物理寄存器的获取方法的步骤,或者存储器上存储有被编程或配置以执行本实施例前述空闲物理寄存器的获取方法的计算机程序。
此外,本实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有被编程或配置以执行本实施例前述空闲物理寄存器的获取方法的计算机程序。
如图5所示,本实施例还提供一种空闲物理寄存器的获取装置,包括:
空闲物理寄存器读取模块1,由m个N选1的多路选择器SN0,SN1,……SNm-1组成,且分别使用alloc_ptr、alloc_ptr+1,……alloc_ptr+m-1作为选择信号,从物理寄存器空闲列表的N项中选择1项,从而将从分配指针alloc_ptr开始的m项的内容读取出来,对应读出的m个数据分别记为Valloc_ptr,Valloc_ptr+1,……Valloc_ptr+m-1,m为寄存器重命名宽度;
寄存器及更新模块2,包括m个寄存器Regi~Regm-1及其输入数据生成逻辑,输入数据生成逻辑由m个m+1选1的共选择信号多路选择器SMP10,SMP11,……SMP1m-1组成,任意第i个多路选择器SMP1i的m+1个输入数据为寄存器Regi的值、寄存器Regi+1的值、……、寄存器Regm-1的值、数据Valloc_ptr、数据Valloc_ptr+1、……、数据Valloc_ptr+i;选择信号为当拍分配出去的物理寄存器个数dealloc_num和流水线清除信号flush,选择数据时首先看流水线清除信号flush的值,如果流水线清除信号flush为1,任意第i个多路选择器SMP1i选择Valloc_ptr+i,否则如果流水线清除信号flush为0,那么根据当拍分配出去的物理寄存器个数dealloc_num进行选择,如果当拍分配出去的物理寄存器个数dealloc_num为0,任意第i个多路选择器SMP1i选择寄存器Regi,如果当拍分配出去的物理寄存器个数dealloc_num为1,任意第i个多路选择器SMP1i选择寄存器Regi+1,依此类推,如果当拍分配出去的物理寄存器个数dealloc_num为m,任意第i个多路选择器SMP1i选择数据Valloc_ptr+i,数据生成后,在时钟上升沿将其打入相应的寄存器;
分配指针alloc_ptr的更新模块3,用于更新分配指针alloc_ptr的值,包括用于保存分配指针alloc_ptr的值的寄存器Regalloc_ptr、一个m+1选1的多路选择器SMP1和分配指针alloc_ptr的自增逻辑;自增逻辑包含+1模块、……、+m-1模块和+m模块,用于生成alloc_ptr+1,……,alloc_ptr+m-1和alloc_ptr+m;多路选择器SMP1的m+1个输入数据为alloc_ptr,alloc_ptr+1,……alloc_ptr+m,选择信号同样为当拍分配出去的物理寄存器个数dealloc_num和流水线清除信号flush,选择数据时首先看流水线清除信号flush的值,如果流水线清除信号flush为1,选择alloc_ptr+m,否则如果flush为0,那么根据当拍分配出去的物理寄存器个数dealloc_num进行选择,如果当拍分配出去的物理寄存器个数dealloc_num为0,选择alloc_ptr,如果当拍分配出去的物理寄存器个数dealloc_num为1,选择alloc_ptr+1,依此类推,如果当拍分配出去的物理寄存器个数dealloc_num为m,选择alloc_ptr+m,其中alloc_ptr为寄存器Regalloc_ptr中存储的分配指针,m为寄存器重命名宽度;数据生成后,在时钟上升沿将其打入寄存器Regalloc_ptr。
综上所述,本实施例空闲物理寄存器的获取方法及装置通过设置和寄存器重命名宽度匹配的寄存器(假设为m个),保存寄存器重命名流水站要使用的空闲物理寄存器的编号,并在初始时将物理寄存器空闲列表的分配指针alloc_ptr指向第m项,之后根据当拍分配出去的物理寄存器个数更新m个寄存器和分配指针alloc_ptr,供下一拍寄存器重命名时使用。如果发生了异常或分支误预测,读取从已经被恢复的分配指针alloc_ptr开始的物理寄存器空闲列表的m项用于更新m个寄存器,然后将分配指针alloc_ptr前进m项,使得虽然提前一拍读取物理寄存器空闲列表,但是每拍需要读取的项数仍然保持m项,在优化时序同时降低了硬件开销。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种空闲物理寄存器的获取方法,其特征在于,实施步骤包括:
1)初始化用于记录所有可以被用来进行重命名的物理寄存器的物理寄存器空闲列表preg_freelist,所述物理寄存器空闲列表preg_freelist具有分配指针alloc_ptr和回收指针dealloc_ptr,初始时所述物理寄存器空闲列表preg_freelist的第n项记录的空闲物理寄存器的编号为n,其中0≤n<N,回收指针dealloc_ptr指向第0项,分配指针alloc_ptr指向第m项,m为寄存器重命名宽度,N为物理寄存器空闲列表preg_freelist的项数;
2)将用于保存寄存器重命名流水站要使用的空闲物理寄存器的编号的m个寄存器Reg0~Regm-1按照从0到m-1的顺序依次分配给被重命名的指令;
3)根据流水线的状态决定如何更新m个寄存器和分配指针alloc_ptr:根据当拍分配出去的物理寄存器个数更新m个寄存器和分配指针,供下一拍寄存器重命名时使用,如果发生了异常或分支误预测,读取从已经被恢复的分配指针alloc_ptr开始的物理寄存器空闲列表的m项用于更新m个寄存器,然后将分配指针alloc_ptr前进m项,使得虽然提前一拍读取物理寄存器空闲列表,但是每拍需要读取的项数仍然保持m项。
2.根据权利要求1所述的空闲物理寄存器的获取方法,其特征在于,步骤3)的详细实施步骤包括:
3.1)判断是否发生了流水线的清除,如果是则跳转执行步骤3.2);否则跳转执行步骤3.3);
3.2)首先将分配指针alloc_ptr回退到导致流水线被清除的指令被重命名之前的状态,然后下一拍读取从分配指针alloc_ptr开始的m项,分别用读出的内容更新m个寄存器Reg0~Regm-1并将分配指针alloc_ptr前进m项,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,其中N为物理寄存器空闲列表preg_freelist的项数;结束并退出;
3.3)获取重命名流水站分配出去的物理寄存器数量p,如果物理寄存器数量p的值为0,则将m个寄存器Reg0~Regm-1的内容和分配指针alloc_ptr都保持不变,结束并退出;否则,分别使用Regp+i的内容更新第i个寄存器Regi,其中0≤i≤(m-p-1);并使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器;最终将分配指针alloc_ptr前进p项,如果要前进到的项数超过了N-1,对其进行N的取模,使其折回到队列头,其中N为物理寄存器空闲列表preg_freelist的项数。
3.根据权利要求2所述的空闲物理寄存器的获取方法,其特征在于,步骤3.3)中使用从分配指针alloc_ptr开始的p项的内容更新其余的p个寄存器具体是指分别使用(alloc_ptr+j)指向的项的内容更新Regm-p+j,其中0≤j<p,p表示重命名流水站分配出去的物理寄存器数量。
4.一种空闲物理寄存器的获取装置,包括存储器和乱序超标量微处理器,其特征在于,所述乱序超标量微处理器被编程或配置以执行权利要求1~3中任意一项所述空闲物理寄存器的获取方法的步骤,或者所述存储器上存储有被编程或配置以执行权利要求1~3中任意一项所述空闲物理寄存器的获取方法的计算机程序。
5.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有被编程或配置以执行权利要求1~3中任意一项所述空闲物理寄存器的获取方法的计算机程序。
6.一种空闲物理寄存器的获取装置,其特征在于,包括:
空闲物理寄存器读取模块(1),由m个N选1的多路选择器SN0,SN1,……SNm-1组成,且分别使用alloc_ptr、alloc_ptr+1,……alloc_ptr+m-1作为选择信号,从物理寄存器空闲列表的N项中选择1项,从而将从分配指针alloc_ptr开始的m项的内容读取出来,对应读出的m个数据分别记为Valloc_ptr,Valloc_ptr+1,……Valloc_ptr+m-1,m为寄存器重命名宽度;
寄存器及更新模块(2),包括m个寄存器Regi~Regm-1及其输入数据生成逻辑,输入数据生成逻辑由m个m+1选1的共选择信号多路选择器SMP10,SMP11,……SMP1m-1组成,任意第i个多路选择器SMP1i的m+1个输入数据为寄存器Regi的值、寄存器Regi+1的值、……、寄存器Regm-1的值、数据Valloc_ptr、数据Valloc_ptr+1、……、数据Valloc_ptr+i;所述选择信号为当拍分配出去的物理寄存器个数dealloc_num和流水线清除信号flush,选择数据时首先看流水线清除信号flush的值,如果流水线清除信号flush为1,任意第i个多路选择器SMP1i选择Valloc_ptr+i,否则如果流水线清除信号flush为0,那么根据当拍分配出去的物理寄存器个数dealloc_num进行选择,如果当拍分配出去的物理寄存器个数dealloc_num为0,任意第i个多路选择器SMP1i选择寄存器Regi,如果当拍分配出去的物理寄存器个数dealloc_num为1,任意第i个多路选择器SMP1i选择寄存器Regi+1,依此类推,如果当拍分配出去的物理寄存器个数dealloc_num为m,任意第i个多路选择器SMP1i选择数据Valloc_ptr+i,数据生成后,在时钟上升沿将其打入相应的寄存器;
分配指针alloc_ptr的更新模块(3),用于更新分配指针alloc_ptr的值,包括用于保存分配指针alloc_ptr的值的寄存器Regalloc_ptr、一个m+1选1的多路选择器SMP1和分配指针alloc_ptr的自增逻辑;所述自增逻辑包含+1模块、……、+m-1模块和+m模块,用于生成alloc_ptr+1,……,alloc_ptr+m-1和alloc_ptr+m;所述多路选择器SMP1的m+1个输入数据为alloc_ptr,alloc_ptr+1,……alloc_ptr+m,选择信号同样为当拍分配出去的物理寄存器个数dealloc_num和流水线清除信号flush,选择数据时首先看流水线清除信号flush的值,如果流水线清除信号flush为1,选择alloc_ptr+m,否则如果flush为0,那么根据当拍分配出去的物理寄存器个数dealloc_num进行选择,如果当拍分配出去的物理寄存器个数dealloc_num为0,选择alloc_ptr,如果当拍分配出去的物理寄存器个数dealloc_num为1,选择alloc_ptr+1,依此类推,如果当拍分配出去的物理寄存器个数dealloc_num为m,选择alloc_ptr+m,其中alloc_ptr为寄存器Regalloc_ptr中存储的分配指针,m为寄存器重命名宽度;数据生成后,在时钟上升沿将其打入寄存器Regalloc_ptr。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910849594.6A CN110647361B (zh) | 2019-09-09 | 2019-09-09 | 一种空闲物理寄存器的获取方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910849594.6A CN110647361B (zh) | 2019-09-09 | 2019-09-09 | 一种空闲物理寄存器的获取方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110647361A CN110647361A (zh) | 2020-01-03 |
CN110647361B true CN110647361B (zh) | 2021-08-27 |
Family
ID=68991701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910849594.6A Active CN110647361B (zh) | 2019-09-09 | 2019-09-09 | 一种空闲物理寄存器的获取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110647361B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113703841B (zh) * | 2021-09-10 | 2023-09-26 | 中国人民解放军国防科技大学 | 一种寄存器数据读取的优化方法、装置及介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6308260B1 (en) * | 1998-09-17 | 2001-10-23 | International Business Machines Corporation | Mechanism for self-initiated instruction issuing and method therefor |
CN101042687A (zh) * | 2007-04-24 | 2007-09-26 | 上海华龙信息技术开发中心 | 一种基于新的寄存器文件结构的实现方法 |
CN101122851A (zh) * | 2007-09-12 | 2008-02-13 | 华为技术有限公司 | 一种数据处理方法及处理器 |
CN101566942A (zh) * | 2009-06-03 | 2009-10-28 | 上海高性能集成电路设计中心 | 一种超标量微处理器中控制乱序发射的飞行记分牌装置 |
CN107688544A (zh) * | 2016-12-23 | 2018-02-13 | 北京国睿中数科技股份有限公司 | 一种对寄存器别名表恢复方法 |
CN108845830A (zh) * | 2018-07-03 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种一对数装载指令的执行方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6128722A (en) * | 1998-02-13 | 2000-10-03 | International Business Machines Corporation | Data processing system having an apparatus for exception tracking during out-of-order operation and method therefor |
US20050114632A1 (en) * | 2003-11-21 | 2005-05-26 | Intel Corporation | Method and apparatus for data speculation in an out-of-order processor |
CN100524208C (zh) * | 2006-10-26 | 2009-08-05 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN102566976B (zh) * | 2010-12-27 | 2014-10-15 | 北京国睿中数科技股份有限公司 | 管理重命名寄存器的寄存器重命名系统和方法 |
US10078515B2 (en) * | 2011-10-03 | 2018-09-18 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
US20140095845A1 (en) * | 2012-09-28 | 2014-04-03 | Vinodh Gopal | Apparatus and method for efficiently executing boolean functions |
CN108845829B (zh) * | 2018-07-03 | 2021-06-25 | 中国人民解放军国防科技大学 | 一种系统寄存器访问指令的执行方法 |
-
2019
- 2019-09-09 CN CN201910849594.6A patent/CN110647361B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6308260B1 (en) * | 1998-09-17 | 2001-10-23 | International Business Machines Corporation | Mechanism for self-initiated instruction issuing and method therefor |
CN101042687A (zh) * | 2007-04-24 | 2007-09-26 | 上海华龙信息技术开发中心 | 一种基于新的寄存器文件结构的实现方法 |
CN101122851A (zh) * | 2007-09-12 | 2008-02-13 | 华为技术有限公司 | 一种数据处理方法及处理器 |
CN101566942A (zh) * | 2009-06-03 | 2009-10-28 | 上海高性能集成电路设计中心 | 一种超标量微处理器中控制乱序发射的飞行记分牌装置 |
CN107688544A (zh) * | 2016-12-23 | 2018-02-13 | 北京国睿中数科技股份有限公司 | 一种对寄存器别名表恢复方法 |
CN108845830A (zh) * | 2018-07-03 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种一对数装载指令的执行方法 |
Non-Patent Citations (3)
Title |
---|
Facing pipeline false dependencies using VRB table;Ahmad M. Shafiee et al.;《2010 The 2nd International Conference on Computer and Automation Engineering 》;20100419;全文 * |
X处理器寄存器重命名机制的设计;李文哲 等;《第十八届计算机工程与工艺年会暨第四届微处理器技术论坛论文集》;20140930;全文 * |
乱序超标量处理器核的性能分析与优化;孙彩霞 等;《国防科技大学学报》;20161031;第38卷(第5期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110647361A (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5546597A (en) | Ready selection of data dependent instructions using multi-cycle cams in a processor performing out-of-order instruction execution | |
US7571304B2 (en) | Generation of multiple checkpoints in a processor that supports speculative execution | |
US8627044B2 (en) | Issuing instructions with unresolved data dependencies | |
US5790822A (en) | Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor | |
CN110597556B (zh) | 一种寄存器映射表检查点资源的管理方法、系统及介质 | |
US8245018B2 (en) | Processor register recovery after flush operation | |
JP3602840B2 (ja) | 命令の投機的実行制御装置およびその方法 | |
US8074060B2 (en) | Out-of-order execution microprocessor that selectively initiates instruction retirement early | |
US8639886B2 (en) | Store-to-load forwarding mechanism for processor runahead mode operation | |
US7155574B2 (en) | Look ahead LRU array update scheme to minimize clobber in sequentially accessed memory | |
US7660971B2 (en) | Method and system for dependency tracking and flush recovery for an out-of-order microprocessor | |
JP5209933B2 (ja) | データ処理装置 | |
JP2002522841A (ja) | 異なる待ち時間を伴う命令のスケジューリング | |
KR20100032441A (ko) | 조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템 | |
JP2000029699A (ja) | プロセサア―キテクチャ | |
US20080168260A1 (en) | Symbolic Execution of Instructions on In-Order Processors | |
US5708837A (en) | Method and apparatus for register renaming in a computer system using a separate arithmetic available queue | |
US7293160B2 (en) | Mechanism for eliminating the restart penalty when reissuing deferred instructions | |
US6345356B1 (en) | Method and apparatus for software-based dispatch stall mechanism for scoreboarded IOPs | |
US20090240914A1 (en) | Recycling long multi-operand instructions | |
CN110647361B (zh) | 一种空闲物理寄存器的获取方法和装置 | |
KR100523706B1 (ko) | 단일 사이클 파이프라인 스톨을 발생하기 위한 파이프라인 프로세서 시스템 및 방법 | |
US6587941B1 (en) | Processor with improved history file mechanism for restoring processor state after an exception | |
US6898696B1 (en) | Method and system for efficiently restoring a processor's execution state following an interrupt caused by an interruptible instruction | |
US6829699B2 (en) | Rename finish conflict detection and recovery |
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 |