New! View global litigation for patent families

CN101169710A - 对状态寄存器进行重命名的方法和使用该方法的处理器 - Google Patents

对状态寄存器进行重命名的方法和使用该方法的处理器 Download PDF

Info

Publication number
CN101169710A
CN101169710A CN 200610150338 CN200610150338A CN101169710A CN 101169710 A CN101169710 A CN 101169710A CN 200610150338 CN200610150338 CN 200610150338 CN 200610150338 A CN200610150338 A CN 200610150338A CN 101169710 A CN101169710 A CN 101169710A
Authority
CN
Grant status
Application
Patent type
Prior art keywords
method
renaming
state
register
processor
Prior art date
Application number
CN 200610150338
Other languages
English (en)
Other versions
CN100524208C (zh )
Inventor
叶笑春
张军超
段振中
范东睿
Original Assignee
中国科学院计算技术研究所
Priority date (The priority date 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 date listed.)
Filing date
Publication date

Links

Abstract

根据本发明,提出了一种在具有超标量流水线结构的处理器中对状态寄存器进行重命名的方法,其中所述状态寄存器是由从标志寄存器的所有标志位中选择的多个标志位组成的寄存器,所述方法包括以下步骤:在对指令译码后的微码到达所述处理器的寄存器重命名模块时,确定所述微码是否要读状态寄存器;如果确定所述微码要读状态寄存器,则为所述状态寄存器分配最近映射到的物理寄存器;否则,则不为所述状态寄存器分配物理寄存器;确定所述微码是否要写状态寄存器;如果确定所述微码要写状态寄存器,则为所述状态寄存器分配新的状态为空的物理寄存器;否则,则不为所述状态寄存器分配物理寄存器。

Description

对状态寄存器进行重命名的方法和使用该方法的处理器 技术领域

本发明涉及微处理器体系结构,具体来说,涉及到一种在具有超 标量流水线结构的处理器中对状态寄存器进行重命名的方法和使用该 方法的处理器,能够通过对寄存器进行重命名的方式消除指令执行中 出现的数据假相关,以提高流水线结构处理器的执行效率,且能够很 方便地实现标志寄存器的重命名机制,以减少因读写标志位带来的流 水线停顿。

背景技术

在现代微处理器设计中,指令的吞吐率,即每秒所能执行的指令 数是很重要的一个指标,而单位时间指令数的方法有多种途径,最直 接的技术就是增加处理器运行的频率,然而,频率的增加会导致到处 理器功耗以及发热量的迅速上升,并因此已经受到严重的制约。

因而,现代处理器更多的是关注于通过增加单个时钟周期内执行 的指令数来提高指令吞吐率,即通过流水线以及超标量的结果来实现。 流水线技术把一条指令的执行划分成若干个阶段,每一阶段在流水线 中的一级进行处理,且需要占用一个时钟周期,这样同一时刻可以有 多条指令位于流水线的不同阶段执行,从而提高处理器执行效率。而 在超标量技术中, 一个时钟周期将发射不止一条的指令(如同时发射 两条或四条指令),这样也能提高处理器的效率。

在现代的处理器中大量的是同时使用了流水线和超标量这两种 技术以获得更高的性能,然而,在实际中,指令和指令之间可能存在 着某种数据的依赖关系,比如一条指令执行所需要读取的源操作数可 能就是上一条指令要写的那个值,如它们对应的是同一个寄存器,这 样,第二条指令就必须等到前面指令执行完并写回结果到寄存器后才

能继续执行。因而,需要有一种方法来有效的检测出这些相关性并很 好的进行处理,通常,可以采取寄存器重命名的方式来解决这种问题。 所谓的寄存器重命名就是将逻辑寄存器映射到物理寄存器,处理

器的指令集一般包括数量有限的可用逻辑寄存器(如x86结构处理器中 包括8个定点通用寄存器),且数目小于处理器中实际可用的物理寄存 器数目。处理器通过对逻辑寄存器的重命名可以有效消除WAR(读后写) 以及WAW (写后写)这样的假相关,以允许利用同一个逻辑寄存器的独 立指令能同时发出,来防止相关性造成的延迟。

除了主要用于存储算术运算结果的通用寄存器之外,兼容x86架 构的处理器还包括一个称之为Eflags的标志寄存器,其中存储着有关 cpu的一些信息,包括一些状态标志、系统标志以及控制标志位。某些 指令执行之后会修改其中的部分位,而另一些指令的执行也可能需要 读取其中的某个或某些标志位,这样实际上标志寄存器也会导致不同 的指令之间出现隐含的依赖关系,事实上,在x86指令集中,算术、逻 辑运算指令等都是经常修改标志位的,而程序中往往大量存在的是这 样的指令,因而十分有必要对标志位进行适当的重命名以降低其所引 起的延迟。

发明内容

为了克服上述缺陷提出了本发明,本发明的目的是提出一种在具 有超标量流水线结构的处理器中对状态寄存器进行重命名的方法和使 用该方法的处理器,能够通过对寄存器进行重命名的方式消除指令执 行中出现的数据假相关,以提高流水线结构处理器的执行效率,且能 够很方便地实现标志寄存器的重命名机制,以减少标志位带来的流水 线停顿。

为了实现上述目的,根据本发明,提出了一种在具有超标量流水 线结构的处理器中对状态寄存器进行重命名的方法,其中所述状态寄 存器是由从标志寄存器的所有标志位中选择的多个标志位组成的寄存

器,所述方法包括以下步骤:在对指令译码后的微码到达所述处理器 的寄存器重命名模块时,确定所述微码是否要读状态寄存器;如果确

定所述微码要读状态寄存器,则为所述状态寄存器分配最近映射到的 物理寄存器;否则,则不为所述状态寄存器分配物理寄存器;确定所 述微码是否要写状态寄存器:如果确定所述微码要写状态寄存器,则 为所述状态寄存器分配新的状态为空的物理寄存器;否则,则不为所 述拔态寄存器分配物理寄存器。

优选地,所述多个标志位为会频繁受到指令修改的多个状态标志位。

优选地,所述多个状态标志位包括进位标志位、奇偶标志位、调 整标志位、零标志位、符号标志位、以及溢出标志位。

优选地,所述最近映射到的物理寄存器根据用于维护所述状态寄 存器和物理寄存器的动态映射关系的重命名表来确定。

优选地,所述重命名表包括表示状态的域和表示改写物理寄存器 的指令所在的基本块的域。

优选地,所述重命名表还包括有效域,用于确定最近映射到的物 理寄存器。

优选地,所述多个状态标志位中的一部分状态位会受到屏蔽以防 止对这一部分状态位的修改。

优选地,所述最近映射到的物理寄存器根据状态指针寄存器的值 来确定。

优选地,在对状态寄存器进行重命名操作之后,所述微码进入发 射队列并在所分配的物理寄存器准备就绪之后能够参与调度并被发射 出去。

根据本发明,还提出了一种包括实现了上述的方法的寄存器重命 名模块的、具有超标量流水线结构的处理器。

本发明所涉及的微处理器是采用流水线、多发射的体系结构,为 了减少多指令并发执行中由于读写标志位导致的隐含依赖关系,提出 了一种方法和装置,包括检测当前指令是否需要读取标志寄存器中的 状态位,以及需要读取哪些位,还检测当前指令是否需要改写状态标 志位以及改写的是哪些位,利用寄存器重命名表为需要读取和改写状 态标志位的操作快速高效地分配相应的物理重命名寄存器,以减少读

写状态位造成的依赖关系所带来的流水线停顿,针对标志寄存器的特

点,本发明对部分最常读取和修改的6个状态标志位单独提取出来作为 一个逻辑寄存器进行重命名,既实现简单又很好的减少了大部分由标 志位引入的相关。本发明详细给出了对这部分标志位的重命名方案, 能在不增加过多硬件代价的前提下很好的降低由于读写标志位所引起 的流水线阻塞。

附图说明

通过参考以下结合附图对所采用的优选实施例的详细描述,本发

明的上述目的、优点和特征将变得显而易见,其中-

图l给出了一个超标量、流水线处理器的内部结构框图; 图2给出了本发明的一个具体实施例所用的更详细的微处理器结

构框图;

图3是本发明所描述的标志寄存器的一个示例; 图4是一个状态寄存器的实例图;

图5所示的是寄存器重命名模块中状态寄存器重命名表的结构

图;

图6A表示的是从译码模块出来后微码所携带的部分标记信息; 图6B表示的是微码经过寄存器重命名之后所携带的部分标记信

息;

图7给出了译码模块生成微码相关信息的流程图;以及 图8给出了本发明的一个实施例中,重命名模块进行物理寄存器 分配的一个流程图。

具体实施方式

这里所描述的涉及对标志寄存器进行重命名的装置和方法。以用 于解决因隐含的读写标志寄存器所引起的流水线停顿问题,在下面的 描述中,给出了一些相关的具体细节,以提供对本发明更好的理解。

图l给出了一个实现该重命名机制的处理器的部分结构图,如图 所示,结构中主要包括以下一些模块-

取指模块100,根据给出的pc值取出下一条要执行的指令,送到 流水线中执行;

译码模块101,对取指模块送入的宏指令进行译码生成一条或多 条处理器内部表示的微码格式,该宏指令是对应处理器兼容的指令集 格式的,如x86架构处理器对应的CICS格式指令,或者诸如PowerPC、 Alpha等RISC架构的指令格式,而内部微码格式则一般都是类RISC的格 式的;

寄存器重命名模块102,该模块含有寄存器重命名表,在具体的 实现中,可对应于不同类型的寄存器分别维护一张重命名表,如对定 点寄存器、浮点寄存器以及本发明中重点讨论到的状态寄存器各维护 一份重命名表,记录着各类逻辑寄存器到物理寄存器的动态映射关系。

发射队列模块103,该模块负责从进入到发射队列的微操作中选 出当前可以发射的若干个,并送到功能部件去执行。

图2给出了一个更为详细的实现图,该发射队列共包含定点和浮 点2个发射队列,从功能部件205可以看出,总共含有5个独立的功能部 件,其中FALU1和FALU2为浮点运算部件,执行浮点运算操作,ALU1和 ALU2为定点运算部件,执行定点运算操作,MEM为访存部件,执行访存 地址的运算。这里面,定点操作以及访存操作进入到定点发射队列进 行调度,浮点相关操作则进入到浮点发射队列进行调度。发射队列模 块要做的是为每个可用的功能部件,从两个发射队列中选出已经准备 好的操作发射到相应功能部件中去执行,注意, 一次只能向一个功能 部件发射一条指令。比如这里有两个浮点运算部件,那么每次可以分 别为FALU1和FALU2各选出一条准备好的指令发射出去执行。那么,如 何判断一个操作是否准备好呢?看的是它的所有源寄存器中的数据是 否已经准备好,即所需要读取的操作数已经写回寄存器堆了。当然, 如果对应某个功能部件,发射队列中有多条准备好的指令,那么则要 从中选择一条等待时间最长的发射出去。对于已经发射出去的操作, 其相应表项在发射队列中将被删除,以便让新的微码进来。

寄存器堆模块也包含三个部分:定点寄存器堆、浮点寄存器堆以 及状态寄存器堆,他们主要是用来提供所需的源操作数值,微码从发 射队列发射出去之后,需要从寄存器堆读取相应源操作数的值,然后 进入各自功能部件执行。

功能部件205共包括五个独立的运算部件,分别用来完成定点、 浮点和访存操作的运算,在本发明所阐述的实现中,该定点运算部件 ALU1和ALU2可以设计成完全相同的实现,也可以有所不同,如将一些 较快完成的操作放在ALU1中执行,而一些需要比较多个时钟周期的操 作放到ALU2中去执行,同时还有某些操作既可以在ALU1中又可以在 ALU2中完成。同样,浮点运算部件FALU1和FALU2也可以设计成完全一 样,或者完成的操作有所不同。访存部件MEM用来完成访存操作地址的 计算,对于像x86这样的复杂指令集来讲,寻址方式可能有很多种而且 会有相当复杂的,访存部件MEM可以完成其有效地址或者完整线性地址 的计算,图中访存部件只画出一个,当然如果实现需要,也可以包含 两个甚至更多个独立的访存地址运算部件。

指令在该结构中的流程为:取指模块根据给出的pc地址取出对应 的指令,该宏指令经过译码模块101之后被翻译成类RISC的处理器内部 微操作(uop),操作均只在寄存器之间进行,需要访存的运算需要先 用一条访存指令将操作数从内存导入到寄存器再进行运算。从译码模 块出来的uop进入到寄存器重命名模块102,该模块用来将uop中的逻辑 寄存器映射到实际的物理寄存器号,并消除WAR,WAW这样的假相关现 象,然后经过重命名后的uop进入到发射队列103等待调度,如果其所 有的操作数均己准备好且被选中,并且功能部件105不忙的话,则将其 发射到对应的功能部件进行执行,执行完后,结果从结果总线110写回 到寄存器堆104以更新结果寄存器的值,同时,还需要将写回的寄存器 号等信息送到R0B模块106中,当u叩从ROB中提交的时候还需要用这些 信息来更新寄存器重命名表中的相应表项状态。这一过程在后面的描 述中会做更进一步的详细说明。

图3给出了一个标志寄存器Eflags的结构图,Eflags共有32位, 其中bitl, 3, 5, 15,以及22到31都是保留位,未使用,其余的位包 含一组状态标志、 一组控制标志以及一组系统标志。当执行8086代码 时只用到低的16比特,而在执行保护模式代码时,会用到整个的32位。

Eflags寄存器中6比特的状态标志位是本发明关注的重点,也是 本发明进行重命名的对象,在这里也给出一些简要的说明,这6个状态 标志位包括有:

CF:进位标志,在算术运算时如果结果的最高有效位产生进位或 者借位,则将该位置位,否则清零。该标志指示着无符号整数算术运 算溢出的条件。

PF:奇偶标志,当运算结果最低字节中"1"的个数为偶数时该

标志位置位,否则清零。

AF:调整标志,也称辅助进位标志,在用BCD码进行算术运算时, 如果运算结果的第3位产生进位或者借位,则将该标志位置位,否则清零。

ZF:零标志,运算结果为0时置位该标志,否则清零。

SF:符号标志,该标志为等于带符号整数运算结果的最高有效位,

为0表示整数,l表示负数。

OF:溢出标志,如果整形数结果大于目标操作数所能表示的最大

整数,或者小于目标操作数所能表示的最小负数,则将该标志置位, 否则清零。该标志位指示着带符号整形数的算术运算的溢出条件。

另外的几个标志位中,控制标志位为DF,系统标志位有TF、 IF、 IOPL、 NT、 RF、 VM、 AC、 VIF、 VIP、 ID。关于它们的具体含义可以参 见处理器厂商发布的相关编程手册,这里不做详细解释。

为了消除上面标志位导致的指令依赖关系,有必要对标志位进行 重命名,方法之一是对单个位进行重命名,即分别将CF、 PF、 AF、 ZF、 SF、 0F、 DF等看成是单个的寄存器然后分别进行重命名,但是经常出 现某条指令需要修改或读取的是多于一位的标志位,如大部分算术指 令需要改写全部的6位状态位,而有些条件跳转指令也需要读取多达3 位的标志位,这样分别重命名的话会导致控制逻辑十分复杂,而且对 应每个标志位都需要l个检测逻辑来检测当前微码中的标志位与前面 的各个微码是否存在依赖情况,这种实现将大大影响整个处理器系统 执行的性能。

另一种处理方法是对整个32位的Eflags进行整体重命名,即只要

指令修改某一位或几位标志位,就看成是修改整个标志寄存器,后续 的需要读取某一位或几位标志位的指令必须等到前面这条写标志位的 指令写回之后才能继续执行,然而,如果前面的指令修改的CF,而后续

指令要读取的是DF,则很明显他们本来其实是不存在相关的,但是在

整体重命名后出现了相关性,导致后续指令被延迟执行,,直到前面的

指令已经将标志位写回之后,后续需要读DF的指令才能取出相应的标 志位继续执行。由此可见这种方法虽然控制十分简单,但实现效率并 不高,并会因此而引出大量的新的相关。

通过分析指令的执行特性,可以发现,在所有的这些标志位中, 6个状态标志位是最频繁被指令修改的(如算术运算指令ADD,SUB,逻 辑运算指令AND, 0R, XOR等),而且指令的执行修改的一般也都是这几个 状态标志位,极少改写到控制和系统标志位,并且指令对状态位的修 改一般都是全部改写6个状态位,这就使得可以考虑只对这6个状态位 进行整体的重命名。另外指令读取状态标志位的次数也同样比读取其 它标志位的情况更多(如Jcc, SETcc, CMOVcc等指令),因而在本发明 的实施例中,将Eflags寄存器划分成两个部分:6个状态标志位,以及 其余的控制和系统标志位。第二部分的控制标志位和系统标志位较少 被指令改写和读取到,对流水线延迟的影响不如6个状态标志位,所以 本发明将其拆开处理,且只对第一部分进行重命名,而不是对整个的 32bit的Eflags寄存器整体重命名。这样既能使得控制逻辑比较简单, 又能很大限度的处理到指令执行中遇到的大多数由标志位引起的相关

情况°

由于因标志位引起的相关与读写通用寄存器导致的相关十分类 似,因此在硬件结构上均采用相似的方法来处理。在寄存器堆模块中,

本发明的实现添加了实现6比特状态寄存器的硬件结构,这里将6比特 标志位组成的状态寄存器称为AFG,把宏指令中隐含的对状态标志位的 读写转化为显示的对AFG的读写。需要说明的是,在本文中如无特殊说 明,所有提到的"状态寄存器"均指的是6bit的状态位组成的状态寄 存器AFG,而用"标志寄存器"来统称通常所说的32bit的完整Eflags 寄存器。

图4给出了一个状态寄存器的描述图,该寄存器包含了6个状态位 的信息,任何对状态位的读写都将被看成是对该状态寄存器的读写操 作。

图5所示的是寄存器重命名模块中状态寄存器的重命名表结构的

一个具体实施例,整个表共有若干项,,每个物理状态寄存器在表中对

应一项,比如当处理器中有16个标志位物理寄存器时,该表就有16个

表项,表中需要包含到以下两个域:表示状态的域301和表示改写该物

理状态寄存器的指令所在基本块的域302。而状态位可以根据处理器的 具体实现情况划分为若干个状态,比如在一个实施例中,可以选用2bit

的状态位包含以下3个状态:

EMPTY:表示这个物理寄存器空闲。

MAPPED:表示该物理寄存器已经被分配出去,但结果尚未写回。

WRITEBACK:结果己经写回,但写该结果的指令尚未从重排序缓 冲器ROB (reorder buffer)中提交,该状态还可以被取消。

C0應IT:提交状态,表示写该物理寄存器的指令已经从ROB中提 交,且已改写真正的结构寄存器(architecture register)。

这样的实现中状态位只需要2比特表示,当然,也可以实现成其 它的状态表示方式,对应的状态位的位数也可能相应不同。

基本块号302指明了改写该寄存器的指令所在的基本块号,用于

在分支猜错的时候判断是否需要取消该物理寄存器的重命名状态。对 于现代的超标量流水线结构的处理器,大量应用到乱序执行以及分支 猜测技术,对于分支指令,如果其分支目标的判断依赖于前一条指令 生成的结果数据,由于结果往往要到比较靠后的流水级里才能生成, 所以导致后续指令需要等待若干个时钟周期,直到前面分支所依赖的 数据已经确定之后才能知道下一条要取的指令的地址,这时再从目标 地址中取出正确的指令,这将导致流水线中出现停顿,为了降低这种 停顿开销,现有处理器均对分支指令的目标地址进行预测,取指部件 从预测的目标地址去取得新的指令继续执行而不等待前面结果的写 回,如果分支预测是正确的,则很明显,处理器可以顺着当前的路径 继续执行,不需要额外的开销,从而节省了停顿等待的时间,当然,

如果预测错误,则需要从分支指令处将后续的所有指令取消掉,因为 它们本来是不应该被执行的,同时错误分支的后续指令所改写的其它 机器状态都应予以恢复。在寄存器重命名表中,也需要配套的机制来 实现这一目的,当分支猜错时,需要将重命名表的状态也恢复到与分 支时的一致,通过检测重命名表中各项对应的基本块号是否位于分支 猜错指令所在基本块号之后,该基本块号可用来决定是否需要恢复重 命名表的状态。

图5中虚框的有效域valid是不一定需要这样实现的,本发明在下 面将会具体介绍,而对于定点寄存器和浮点寄存器的重命名表的构造, 由于一般定点和浮点的逻辑寄存器都含有多个,而不像这里的状态寄 存器就只仅仅是 一 个,如x86系列中定点逻辑寄存器包含 EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP,而浮点逻辑寄存器也有8个,分 别被表示为ST0/ST1/ST2/ST3/ST4/ST5/ST6/ST7,因而对于定点、浮点 寄存器的重命名表所需要的信息将会比状态寄存器更多,需要在同一 张表中分别保存着对应多个不同的逻辑寄存器到物理寄存器的映射关 系,但总得来说,定点和浮点寄存器重命名表的构造和状态寄存器是 类似的,他们不是本发明讨论的重点,所以本发明中暂不做详细说明。

图6 A说明了当指令经过译码模块生成微码后能够确定的一些信 息,译码模块需要确定指令是否需要读取状态标志位以及是否需要改 写状态标志位,判断之后生成相应的信息往后传递,这样每条微码除 了操作码(opcode)等信息外还会包括是否需要读标志位,以及是否需 要写标志位的信息,比如,本发明中分别用读状态寄存器标记和写状 态寄存器标记来表示。读状态寄存器标记指明了该微码是否需要读取 状态状态寄存器AFG,写状态寄存器标记表明该微码是否需要改写AFG, 读状态寄存器标记和写状态寄存器标记均为l的话则表明这条微码的 执行既需要读取AFG,又会改写AFG。正如本发明中前面已讲到的,对 与状态位的读写都是以整个的状态寄存器为单位来统一进行的,也就 是说,如果译码模块根据微码判断出该微码需要读取6比特状态位中的 某位或多位,则表示其需要读取状态寄存器AFG,并将读状态寄存器标 记置l,如果该微码会改写6比特状态位中的某位或多位时,则表示其 需要修改状态寄存器AFG,并将写状态寄存器标记置l。另外,对于某 些微码,可能有时候需要改写AFG,但是有些时候可能保留某些状态位 不修改,当存在这种情况时,可以给微码附带上一个掩码标记,这个 掩码指示出这次微码操作之后是否需要对修改标志位的操作进行屏 fe对于6位的AFG这样的情况,这个掩码可以用6位来表示,每位表示 对应的一个状态位,置位表示不屏蔽对该位的修改,清零时表示被屏 蔽对该位的修改,因而保留其原始值不变,功能部件105在执行该微码 操作时将根据该掩码标记信息是否置上来生成相应的标志位结果写回 到状态寄存器中。

微码带着这些信息后进入寄存器重命名模块102 (参见图l)。 这里有一个地方需要注意的是,由于本发明中实现对6比特的状 态标志位寄存器AFG整体重命名,这样6个状态位实现为一个单独的寄 存器,因此对AFG的读写都是按6比特为单位的,而不只对部分位读或 写。本发明中前面提到,指令对状态位的修改一般都是6比特全部改写, 但这并不是绝对的,仍然还是存在只对部分位进行修改的指令,例如 分析指令可以看出,诸如指令RCL/RCR这样的只修改OF和CF位,而并不 修改PF,AF, ZF, SF这其余的四个状态位,对于这种情况,本发明给出的 解决方法是:当某条微码语义本身只需要改写某一位或几位状态位, 而不是整个的6位状态位时,就需要将AFG的原始值读入,然后在功能 部件中将不会改变的状态位和新生成的状态位进行拼接形成新的6比 特状态位写回AFG。因而当译码器译出的某条微码不是修改全部的6个 状态位时,除了要将写状态寄存器标记置l外,还会将读状态寄存器标 记置l。

图7给出了一个实现上述做法的流程图,具体为如果微码操作本 身需要读取状态位信息,则读状态寄存器的标记一定被置上,如果微 码本身不需要读取状态位,但是要改写的状态位不是整个6位,而只是 其中的一部分,则同样需要置上读状态寄存器的标记,以将不需要修 改的状态位的原始值读入,再和新产生的其他状态位值进行拼接后写 回,如果这两种情况都不成立,则不需要读状态寄存器。对于写状态 寄存器,则要简单一些,只要微码操作本身需要改写状态位的话,则

写状态寄存器的标记就需要被置上。

上述做法实现起来比较简单,并且由于改写部分位的指令毕竟只

是少数几个,大量的指令或者不改写状态位,或者改写的是整个6比特, 因而这样的实现并不会引入过多额外的相关。另外,这种实现实际上 还能够大大减少不必要的流水线停顿,先看如下一个例.子。假设某条 微码uop-x仅需要改写ZF标志位,在微码u叩l之后有某条微码uop-y需 要读取全部6个标志位的值,现考虑当u叩-x已经在功能部件执行完毕 之后但由于还没有到ROB的队列头而还不能提交时的处理情况。在现有 公开资料的一种实现方法中,需要检测后续微码读取的标志位是否是 前面最近一条写标志位微码所写的位的子集,如果是则后续微码所需 要的标志位可从前面微码通过旁路的方式得到,而不需要等到前面的 微码提交之后,否则像该示例中给出的情况,微码uop-y所需读取的标 志位是前面微码uop-x所写标志位的超集,则微码uop-x需要停止执行, 直到前面微码提交之后已更新结构寄存器(architecture register), 再从结构寄存器中读出所需要的值继续执行。而采用本发明给出的实 现方法时,由于uop-x在功能部件中执行完毕后己经生成了完整的6比 特AFG值并会马上写到寄存器堆中,那么后续的u叩-y此时就已经无需 等待,可以从发射队列中送出,然后到寄存器堆中读出6比特标志位值 继续执行,而不用等到微码u叩-x提交之后。

微码经过寄存器重命名之后,对于要读取状态标志位的情况,将 被分配到一个要被读取的物理状态寄存器,当要写入状态标志位时, 也将被分配到一个被写入的物理状态寄存器。

图6B显示了微码经过寄存器重命名模块之后被确定的一些标记。

包括被分配的要读取的源状态寄存器号,微码等待标记以及要改写的 目的状态寄存器号等,等待标记表明当前源操作数是否准备好了,如 果准备好了则等待标记清0,否则置l 。除此之外,微码中还包含其它

实现微码操作所需的各种信息,这里就不再详细给出。 图8给出了一个实现状态寄存器重命名机制的流程图。 在微码到达寄存器重命名模块102 (图l)时,对于读状态寄存器

标记为l的微码,它需要读取AFG,就为其分配一个最近被改写的物理

寄存器(802),但是要如何才能得到最近映射到的物理寄存器是哪一 个呢?

方法之一是可以在图3中的重命名表中增加一项valid域,如图中 虚框中项所示,该域表明逻辑状态寄存器AFG最近映射到的是哪一个物 理寄存器,即表明在微码进入到重命名模块时,它所读的应该是哪一 个物理寄存器内的值。因为对应x86架构中只有一个程序员可见的逻辑 状态寄存器,所以在该重命名表中,只可能有一项的valid是为l的, 表明逻辑状态寄存器AFG所最近映射的物理寄存器。

另一种实现方法中,也可以不用在每个表项中都增加一个域,而 是单独使用一个寄存器指针来保存需要读取的寄存器是哪一个,本发 明中称为状态指针寄存器,该指针寄存器能实现和valid位相同的作 用,即相对于到达寄存器重命名模块的当前微码来说,逻辑状态寄存 器映射到的是哪个物理寄存器。这个寄存器的大小可以根据具体的物 理寄存器数目来定,它需要能表示出最近被改写的是哪个物理状态寄 存器。采用这样的实现方法就不需要在重命名表中逐项査找其valid

域是否为1来判断了。该寄存器在开机或重启时需要适当初始化以使其 能正常工作。

当找到最近映射的物理寄存器后,记下其寄存器号到微码中相应 的域,并査看其状态,如果当前状态表明数据已经写回,并且可用, 即所需读取的状态寄存器是准备好的,否则,表明产生该数据的指令 尚未写回,数据还未准备好,这时需要等到前面指令产生的相应标志 位数据写回后,才能被发射队列调度发射。

为需要读取状态位的微码分配好了物理寄存器后,到达804,在 这里需要判断当前读取的物理寄存器是否已经准备好了,如果准备好, 则等待标记置0,否则置1 (805/806)。置上该等待标记表明在发射队列 还不能马上对其进行调度并发射出去,需要等待源操作数就绪之后才 有可能发射。

对于读状态寄存器标记为O的微码,由于它不需要读取任何的状 态位,应该将表示源状态寄存器号的标记置为不需要读取AFG的状态, 并直接设置微码源状态寄存器状态为准备就绪,将等待标记清零,以

避免出现错误的流水线阻塞(803)。

当微码的写状态寄存器标记置为l时,表明它执行后需要改写 AFG,这时就需要在重命名模块为其重新分配一个新的状态为空的物理 寄存器,并相应修改该表项的状态,表明已经被分配出去了,然后将 要改写的目标状态-寄存器号置为刚分配的物理寄存器号,以消除 WAR,WAW这样的假相关,这和熟知的通用寄存器的重命名做法是相似 的,在此就不再多做解释了。

当微码不需要改写状态位时,就相应地将目标状态寄存器号置为 空(80S),表示不修改任何的状态寄存器。

微码根据是否需要读写状态位的情况,设置好相应标记之后就进 入发射队列中去等待调度执行了。

当微码从寄存器重命名模块出来进入相应的发射队列103之后,

将携带一些新的信息,比如微码需要读取的状态寄存器号,需要写的 状态寄存器号,以及当前要读的状态寄存器是否已经准备好,即寄存 器中的数据是否可用。如果要读取的状态寄存器尚未准备就绪,则微 码需要在发射队列中等待,直到前面的微码将对应的标志位写回到状 态寄存器后才能发射出去,正如前面所讲到的,微码所需读取的寄存

器都准备好只是发射的必要条件之一,除此之外,微码能否发射出去, 还有其它相关因素,如还需看功能部件是否空闲,并且如果当前对应 某个功能部件有多条准备就绪的微码时,仍需根据指定的规则从中进 行选择。微码发射到功能部件中执行后的结果送到结果总线110上,结 果总线上的内容有多个模块需要用到,比如ROB、状态寄存器堆、寄存 器重命名模块以及发射队列模块等。这些模块接收结果总线上的数据 后进行相应的处理:

1 ROB:通常,微码在功能部件中的执行是乱序的,为了保持精 确中断,就需要让微码顺序的提交,ROB就是实现这一功能的,因为进 入ROB的微码都是保持原始顺序的,可以从对头开始逐个检测能够提交 的微码以保证提交的有序性。为了判断指令可否提交,ROB需要从结果 总线110得到指令是否己经执行完毕的信息。

2状态寄存器堆:寄存器堆接受结果总线上的相关写回数据信息

来更新相应物理寄存器的值,以保证从发射队列发出的微码能从寄存 器堆中读到正确的值。

3寄存器重命名模块:寄存器重命名模块接收该信息用于更新相 应物理寄存器项的状态,如前面所述,当微码需要改写状态寄存器时, 就在该模块为其分配了一个新的物理寄存器号,并修改了相应重命名 表的项的状态,如果该微码已经在功能部件中执行完,并送到结果总 线上了 ,则要更新重命名表中写回的状态寄存器号所对应的项的状态, 以指示数据正被写回寄存器,接下来可以被后续微码使用了。

4发射队列模块:由于进入发射队列103的微码可能需要读取的 状态寄存器还没有准备好,此时等待标记被置上了,它将在发射队列 中进行等待,所以也可以让其侦听结果总线,如果发现结果总线上出 现了状态寄存器号与某条微码要读的源寄存器号相同的写回结果时, 则表明数据在下一个时钟周期是可用的了,此时,发射队列中的该微 码操作数可以看成是准备好了,发射队列可以考虑调度该微码到功能 部件中去执行了。

如上所述,功能模块的计算结果需要通过结果总线iio发送到以

上的各个模块,参见图l中所示。

最后,当微码在功能部件中执行完,并可以从ROB中提交时,还 需要更新寄存器重命名模块102中的重命名表(参见图5),具体做法是, R0B将提交的微码所改写的物理状态寄存器号等信息从提交总线111送 给寄存器重命名模块102,寄存器重命名模块102接收到该信息后需要

对寄存器重命名表中相应表项进行更新,主要是对于提交微码所改写 的物理寄存器号对应的状态由TOITEBACK改为CO固IT,同时,以前所提

交的对应同一逻辑寄存器的物理寄存器状态重新置为空,以允许其被 重新分配出去。

根据本发明,指令在执行过程中,除了需要读取和修改通用寄存 器之外,也往往暗含要读取或着修改标志寄存器中的某些标志位,如 典型的X86指令集就包含这种情况。和通用寄存器导致的数据依赖类 似,读写标记寄存器也可能导致指令之间出现隐含的依赖关系,为了 降低标志寄存器引起的指令依赖关系,也有必要对标志寄存器进行重

命名,本发明给出了一种对标志寄存器中使用频率较高的部分单独拿 出来进行整体重命名的方法,这样实现起来比整个标志寄存器整体重 命名要更为灵活,减少了不必要的相关,同时又比对每个位进行单独 重命名的硬件代价要小,且保证了较好的性能,因而,该方法是方便 而又合理的,基于该方法,可以很方便地实现标志寄存器的重命名机 制,以减少因读写标志位带来的流水线停顿。

尽管以上已经结合本发明的优选实施例示出了本发明,但是本领 域的技术人员将会理解,在不脱离本发明的精神和范围的情况下,可 以对本发明进行各种修改、替换和改变。因此,本发明不应由上述实 施例来限定,而应由所附权利要求及其等价物来限定。

Claims (10)

1、一种在具有超标量流水线结构的处理器中对状态寄存器进行重命名的方法,其中所述状态寄存器是由从标志寄存器的所有标志位中选择的多个标志位组成的寄存器,所述方法包括以下步骤: 在对指令译码后的微码到达所述处理器的寄存器重命名模块时,确定所述微码是否要读状态寄存器; 如果确定所述微码要读状态寄存器,则为所述状态寄存器分配最近映射到的物理寄存器;否则,则不为所述状态寄存器分配物理寄存器; 确定所述微码是否要写状态寄存器; 如果确定所述微码要写状态寄存器,则为所述状态寄存器分配新的状态为空的物理寄存器;否则,则不为所述状态寄存器分配物理寄存器。
2、 根据权利要求l所述的方法,其特征在于所述多个标志位为会 频繁受到指令修改的多个状态标志位。
3、 根据权利要求2所述的方法,其特征在于所述多个状态标志位 包括进位标志位、奇偶标志位、调整标志位、零标志位、符号标志位、 以及溢出标志位。
4、 根据权利要求l所述的方法,其特征在于所述最近映射到的物 理寄存器根据用于维护所述状态寄存器和物理寄存器的动态映射关系 的重命名表来确定。
5、 根据权利要求l所述的方法,其特征在于所述重命名表包括表 示状态的域和表示改写物理寄存器的指令所在的基本块的域。
6、 根据权利要求5所述的方法,其特征在于所述重命名表还包括 有效域,用于确定最近映射到的物理寄存器。
7、 根据权利要求2所述的方法,其特征在于所述多个状态标志位中的一部分状态位会受到屏蔽以防止对这一部分状态位的修改。
8、 根据权利要求l所述的方法,其特征在于所述最近映射到的物 理寄存器根据状态指针寄存器的值来确定。
9、 根据权利要求l所述的方法,其特征在于在对状态寄存器进行 重命名操作之后,所述微码进入发射队列并在所分配的物理寄存器准 备就绪之后能够参与调度并被发射出去。
10、 一种包括实现了权利要求l所述的方法的寄存器重命名模块 的、具有超标量流水线结构的处理器。
CN 200610150338 2006-10-26 2006-10-26 对状态寄存器进行重命名的方法和使用该方法的处理器 CN100524208C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200610150338 CN100524208C (zh) 2006-10-26 2006-10-26 对状态寄存器进行重命名的方法和使用该方法的处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200610150338 CN100524208C (zh) 2006-10-26 2006-10-26 对状态寄存器进行重命名的方法和使用该方法的处理器

Publications (2)

Publication Number Publication Date
CN101169710A true true CN101169710A (zh) 2008-04-30
CN100524208C CN100524208C (zh) 2009-08-05

Family

ID=39390350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200610150338 CN100524208C (zh) 2006-10-26 2006-10-26 对状态寄存器进行重命名的方法和使用该方法的处理器

Country Status (1)

Country Link
CN (1) CN100524208C (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102508635A (zh) * 2011-10-19 2012-06-20 中国科学院声学研究所 一种处理器装置及其循环处理方法
US8583901B2 (en) 2009-02-04 2013-11-12 Stmicroelectronics (Beijing) R&D Co. Ltd. Register renaming system using multi-bank physical register mapping table and method thereof
WO2015165017A1 (zh) * 2014-04-28 2015-11-05 华为技术有限公司 一种数据处理装置及方法
CN105359089A (zh) * 2013-07-12 2016-02-24 高通股份有限公司 用于在微处理器中进行选择性重命名的方法和设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784589A (en) 1993-10-18 1998-07-21 Cyrix Corporation Distributed free register tracking for register renaming using an availability tracking register associated with each stage of an execution pipeline
CN1264087C (zh) 1999-09-08 2006-07-12 关一 寄存器再命名方法
JP3817436B2 (ja) 2000-09-28 2006-09-06 株式会社東芝 プロセッサおよびリネーミング装置

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8583901B2 (en) 2009-02-04 2013-11-12 Stmicroelectronics (Beijing) R&D Co. Ltd. Register renaming system using multi-bank physical register mapping table and method thereof
CN101794214B (zh) 2009-02-04 2013-11-20 世意法(北京)半导体研发有限责任公司 使用多块物理寄存器映射表的寄存器重命名系统及其方法
US9436472B2 (en) 2009-02-04 2016-09-06 France Brevets Register renaming system using multi-bank physical register mapping table and method thereof
CN102508635A (zh) * 2011-10-19 2012-06-20 中国科学院声学研究所 一种处理器装置及其循环处理方法
CN102508635B (zh) 2011-10-19 2014-10-08 中国科学院声学研究所 一种处理器装置及其循环处理方法
CN105359089A (zh) * 2013-07-12 2016-02-24 高通股份有限公司 用于在微处理器中进行选择性重命名的方法和设备
CN105359089B (zh) * 2013-07-12 2017-12-26 高通股份有限公司 用于在微处理器中进行选择性重命名的方法和设备
WO2015165017A1 (zh) * 2014-04-28 2015-11-05 华为技术有限公司 一种数据处理装置及方法
CN105308557A (zh) * 2014-04-28 2016-02-03 华为技术有限公司 一种数据处理装置及方法

Also Published As

Publication number Publication date Type
CN100524208C (zh) 2009-08-05 grant

Similar Documents

Publication Publication Date Title
Moudgill et al. Register renaming and dynamic speculation: an alternative approach
US6553480B1 (en) System and method for managing the execution of instruction groups having multiple executable instructions
US5752014A (en) Automatic selection of branch prediction methodology for subsequent branch instruction based on outcome of previous branch prediction
US5553256A (en) Apparatus for pipeline streamlining where resources are immediate or certainly retired
US5956495A (en) Method and system for processing branch instructions during emulation in a data processing system
US5884057A (en) Temporal re-alignment of a floating point pipeline to an integer pipeline for emulation of a load-operate architecture on a load/store processor
US5870575A (en) Indirect unconditional branches in data processing system emulation mode
US6185676B1 (en) Method and apparatus for performing early branch prediction in a microprocessor
US6393555B1 (en) Rapid execution of FCMOV following FCOMI by storing comparison result in temporary register in floating point unit
US5898853A (en) Apparatus for enforcing true dependencies in an out-of-order processor
US5867725A (en) Concurrent multitasking in a uniprocessor
US5838988A (en) Computer product for precise architectural update in an out-of-order processor
US5611063A (en) Method for executing speculative load instructions in high-performance processors
US6721874B1 (en) Method and system for dynamically shared completion table supporting multiple threads in a processing system
US5727176A (en) Data processor with circuitry for handling pointers associated with a register exchange operation
US5761476A (en) Non-clocked early read for back-to-back scheduling of instructions
US5958047A (en) Method for precise architectural update in an out-of-order processor
US6141747A (en) System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US5613132A (en) Integer and floating point register alias table within processor device
US5887161A (en) Issuing instructions in a processor supporting out-of-order execution
US6185671B1 (en) Checking data type of operands specified by an instruction using attributes in a tagged array architecture
US6085312A (en) Method and apparatus for handling imprecise exceptions
US5889982A (en) Method and apparatus for generating event handler vectors based on both operating mode and event type
US5603047A (en) Superscalar microprocessor architecture
US6009512A (en) Mechanism for forwarding operands based on predicated instructions

Legal Events

Date Code Title Description
C06 Publication
C10 Request of examination as to substance
C14 Granted