基于动态重命名的矢量寄存器堆的寄存器重新配置的制作方法

文档序号:6540734阅读:171来源:国知局
基于动态重命名的矢量寄存器堆的寄存器重新配置的制作方法
【专利摘要】本发明提供了一种利用具有多个字段的重命名表来重新配置寄存器堆的方法和相应的设备,所述多个字段表示关于具有由窄至宽的相关性的指令的源寄存器的碎片化信息。
【专利说明】基于动态重命名的矢量寄存器堆的寄存器重新配置

【技术领域】
[0001]与本发明构思的示例性实施例一致的方法和设备涉及判断寄存器堆的碎片化以及通过修复处理器中的碎片化来重新配置寄存器堆。

【背景技术】
[0002]举例而言,如图1A所示,对ARMv7处理器(ARMv7为英国剑桥ARM公司的注册商标)的Aarch32布局中的向量寄存器堆(VRF)的体系结构寄存器的布局进行配置,使其在源寄存器与目标寄存器当中引入了潜在的“由窄至宽”的相关性。这种由窄至宽的相关性表现出这样一种情况:其中,读取大尺寸的值会导致读取多个较小尺寸的寄存器。例如,如果一个四倍长字的发生器为多个单字或者多个双字,则读取此四倍长字会导致读取多个单倍寄存器或者多个双倍寄存器。类似地,读取一个双字会导致读取两个单倍寄存器。
[0003]如图1A所示,在32位寄存器布局(ARMv7处理器的Aarch32布局)中,一个四倍寄存器(例如,Q15)映射到两个双倍寄存器(例如,D31与D32),而一个双倍寄存器(例如,D15)映射到两个单倍寄存器(例如,S31与S30)。如图1B所示,在64位寄存器布局(ARMv8处理器的Aarch64布局)中,每个入口(Q0,Ql, Q2,Q3…)无论尺寸都映射到单倍寄存器。
[0004]在上述示例中,具有一个四倍源寄存器的指令会需要最多四个单倍源寄存器或者单倍源寄存器和双倍源寄存器的组合。因此,如果指令中有多个四倍源寄存器,则所需要的源寄存器的真实数量会非常大,因此不能忽略在指令处理中的功率与时间消耗。
[0005]处理由窄至宽的相关性在范围与功率方面的代价会很高,并且也会成为性能的瓶颈。另外,当读取大尺寸的值(例如,四倍长字值)需要读取多个较小尺寸的寄存器时,该大尺寸源被碎片化,处理器中的范围与功率消耗更加恶化。举例而言,碎片化会产生是因为(作为体系结构指定的)产生指令只写入整个体系结构寄存器的一部分,并且微体系结构指定这些指令以将其结果写入唯一的物理寄存器中。因此,一个体系结构寄存器的值会分散到多个物理寄存器,因此“碎片化”表现出这样一种情况:其中,体系结构源寄存器的内容分散到多个物理寄存器。


【发明内容】

[0006]为了解决寄存器由窄至宽的相关性与碎片化的现有技术问题,一个或更多的示例性实施例提供了用于基于寄存器重命名表来重新配置寄存器堆的方法与设备。
[0007]根据示例性实施例的一个方面,其提供了一种重新配置寄存器堆的方法,所述方法包括:提供包含多个字段的重命名表;以及在所述重命名表的字段中记录关于指令的源寄存器的碎片化信息,所述碎片化信息包含关于所述源寄存器的至少一个发生器的信息。
[0008]所述源寄存器是所述指令的体系结构源寄存器,并且所述方法还可以包括:通过所述碎片化信息来判断所述体系结构源寄存器是否是碎片化的,其中,当所述体系结构源寄存器的内容被分散到多个物理寄存器时,判断所述体系结构源寄存器是碎片化的。
[0009]所述碎片化信息可以源自体系结构源标签的第一信息和所述体系结构源标签的第二信息,所述体系结构源标签的第一信息表示所述体系结构源寄存器的类型,所述体系结构源标签的第二信息表示所述体系结构源寄存器是否是碎片化的。
[0010]所述方法还可以包括:如果判断所述体系结构源寄存器是碎片化的,则生成至少一个修复微操作;以及注入所述修复微操作,以通过在所述寄存器堆中读取两个或更多发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述两个或更多发生器的每一个寄存器的尺寸。
[0011]所述方法还可以包括:重命名所述修复微操作。
[0012]所述方法还可以包括:基于所述第一信息和所述第二信息来判断所述至少一个修复微操作的数量。
[0013]所述第一信息表示所述体系结构源寄存器的类型是单倍、双倍或四倍中的一种;所述第二信息表示所述至少一个发生器是单倍、双倍或四倍。
[0014]所述方法还可以包括:如果判断还未被重命名或者未被调度执行的微操作的体系结构源寄存器是碎片化的,则使所述微操作停止。
[0015]根据另一个示例性实施例的一个方面,提供了一种指令处理设备,其包括:提供重命名表的重命名器,其中,所述重命名器在所述重命名表中记录关于指令的源寄存器的碎片化信息,并且其中,所述碎片化信息包含关于所述源寄存器的至少一个发生器的信息。
[0016]所述源寄存器是所述指令的体系结构源寄存器,并且所述设备还可以包括碎片化判断器,所述碎片化判断器配置为通过所述碎片化信息来判断所述体系结构源寄存器是否是碎片化的,其中,当所述体系结构源寄存器的内容被分散到多个物理寄存器时,判断所述体系结构源寄存器是碎片化的。
[0017]所述碎片化信息可以源自体系结构源标签的第一信息和所述体系结构源标签的第二信息,所述体系结构源标签的第一信息表示所述体系结构源寄存器的类型,所述体系结构源标签的第二信息表示所述体系结构源寄存器是否是碎片化的。
[0018]所述设备还可以包括修复状态机,所述修复状态机配置为:如果判断所述体系结构源寄存器是碎片化的,则生成至少一个修复微操作;以及注入所述修复微操作,以便通过在所述寄存器堆中读取两个或更多发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述两个或更多发生器的每一个寄存器的尺寸。
[0019]所述重命名器可以重命名所述修复微操作。
[0020]所述修复状态机可以基于所述第一信息和所述第二信息来判断所述至少一个修复微操作的数量。
[0021]所述第一信息表示所述体系结构源寄存器的类型是单倍、双倍或四倍中的一种;所述第二信息表示所述至少一个发生器是单倍、双倍或四倍。
[0022]如果判断还未被重命名或者未被调度执行的微操作的体系结构源寄存器是碎片化的,则所述修复状态机可以使所述微操作停止。

【专利附图】

【附图说明】
[0023]通过以下结合附图对示例性实施例的说明,上述和/或其他方面将会变得清楚和更加易于理解,其中:
[0024]图1A示出了 32位寄存器布局(ARMv7处理器的Aarch32布局);
[0025]图1B示出了 64位寄存器布局(ARMv8处理器的Aarch64布局);
[0026]图2示出了说明根据一个示例性实施例的处理器10的一部分的框图;
[0027]图3A根据一个示例性实施例示出了 ARMv7处理器的Aarch32布局中的重命名表的入口 ;
[0028]图3B根据一个示例性实施例示出了重命名表的已更新字段;
[0029]图3C根据一个示例性实施例示出了在重命名表中的四倍目标寄存器所需的字段;
[0030]图3D根据一个不例性实施例不出了 ARMv7处理器的Aarch32布局的重命名表中的所有重命名表入口和字段信息的尺寸。
[0031]图4A至图4E根据一个示例性实施例示出了判断碎片化并触发碎片化的修复的序列。
[0032]图5A至图根据一个示例性实施例示出了修复在图4A至图4E所示的序列中判断的碎片化的序列。
[0033]图6根据一个示例性实施例示出了判断寄存器碎片化并生成修复微操作的序列;以及
[0034]图7根据一个示例性实施例示出了在指令流水线图中的修复过程流程。

【具体实施方式】
[0035]参考附图将对本发明的示例性实施例进行详细描述,以便于本领域普通技术人员实现。然而,可以以多种不同形式来具体实现本发明,而不是限定于在此所阐述的示例性实施例。为了清楚起见将省略对众所周知的部件的描述,并且相同的附图标记将始终用于指示相同或相似的元件。
[0036]可以使用各种方法来解决如图1所示的由于由窄至宽(NTW)的相关性在体系结构布局中所导致的碎片化源寄存器。举例而言,可以将碎片化的初始体系结构源寄存器拆分成多个物理源寄存器,或者可以利用读-修改-写方法来执行寄存器合并。此两种方法均有缺点:由于源拆分方法会导致源的数量增加,从而导致存储更多的源标签和潜在的更多寄存器堆读取端口与重命名表读取端口 ;而读-修改-写方法则会降低性能并增加功耗。
[0037]图2是示出了根据一个示例性实施例的处理器10的一部分的框图。处理器10包括解码器100、重命名器200和调度器300,以处理从存储器或缓存(未示出)提取的指令。重命名器200包括重命名表210、碎片化判断器220和修复状态机230。图2所示体系结构可应用于多种类型的处理器或者包括多核处理器的数据处理单元。
[0038]在图2中,解码器100将从存储器(未示出)提取的指令解码成较低等级的微操作(miciO-ops,或指令)。因此,指令流被映射到微操作流上。所解码的微操作字段可以包括:操作码,其指定要执行的行为(如加、乘、加载、存储等);源操作数,其指明了保持数据的体系结构寄存器地址;以及目标操作数,其指明了接收数据的体系结构寄存器地址。将解码的微操作通过重命名接口 150发送至重命名器200。在重命名器200中,微操作的体系结构寄存器在被发送以便在调度器300处调度执行之前进行重命名与相关性检查。重命名器200利用重命名表210将体系结构寄存器重命名为寄存器堆中的物理寄存器,重命名表210中记录了关于微操作的寄存器的信息。根据本实施例,重命名表210被描述为包括在重命名器200中。但是,重命名表可以存储在处理器10的其他部分中。执行寄存器重命名是为了避免微操作的无序执行中的先读后写(write-after-read)与先写后写(write-after-write)的数据冲突。在程序员的处理器的体系结构的观点中,体系结构寄存器是在指令中指定的寄存器。
[0039]在重命名器200中,提供碎片化判断器220以通过分析从解码器100接收的源的类型信息和来自重命名表210的碎片化信息来判断微操作的体系结构源寄存器是否是碎片化的,以及是否需要修复。对于具有较大尺寸源值的微操作,如果微操作的发生器为较小尺寸的寄存器(例如,单倍寄存器),则认为该较大源值在物理寄存器堆中是碎片化的。例如,如果四倍值的发生器为单倍源或双倍源,使得内容被分散到多个物理寄存器,那么该源值在物理寄存器堆中是碎片化的。当对于给定的体系结构源寄存器判断在寄存器堆中存在碎片化时,修复状态机230使用修复微操作来修复由碎片化判断器220判断的碎片化。稍后将描述碎片化判断器220与修复状态机230的详细操作。
[0040]图3A根据一个示例性实施例示出了关于如图1A所示的ARMv7处理器的Aarch32布局中的寄存器Q0、DO、DU SO、S1、S2与S3的重命名表入口。在此描述的重命名表可以与图2所示的处理器10的重命名器200中使用的重命名表210相同,因此,此后该重命名表被看作与重命名表210相同。将参考图3B至图3D详细描述该重命名表。重命名器200对从解码器100解码出的微操作的每个目标寄存器进行重命名,并不管目标寄存器的尺寸为物理寄存器堆(PRF)中的每个目标寄存器分配新的入口。在图3A中,PRF入口为128位宽并且重命名表分配4个单倍寄存器入口字段(S0入口 #至S3入口 #),每个入口字段的尺寸为32位。寄存器入口的结果在PRF入口中总是右对齐的。这种重命名表入口结构干净地运作在ARMv8处理器的Aarch64布局中,并且在重命名表中存储一些附加信息位的情况下同样运作在ARMv7处理器的Aarch32布局中。ARMv7处理器的Aarch32布局与ARMv8处理器的Aarch64布局仅仅是示例性的,该重命名表入口结构可以应用到其他相似布局的体系结构中。附加信息位存储为三种“有效信息字段”和三种“通道信息字段”。这些信息字段(比如有效信字段)存储了最后一次的写入是单字(32位)、双字(64位)还是四倍字(128位)。通道信息字段存储通道读取信息,即,当从寄存器读出数据时数据需要如何对齐。记录在重命名表中的信息(比如有效信息字段内的信息)被称作“碎片化”信息,其表明寄存器堆中是否存在碎片化,如稍后将描述的那样。
[0041]图3B根据一个示例性实施例示出了当寄存器SO至S3被重命名时,重命名表中的哪些字段会被更新。当一个或多个单倍寄存器SO至S3被映射到一个或多个物理寄存器堆入口编号(PRF入口 #)时,更新相应的(多个)信息字段。
[0042]图3C根据一个示例性实施例示出了四倍目标寄存器在重命名表中所需的字段。并非所有重命名表中的入口都需要存储所有信息字段。如图1A所示,对于ARMv7处理器的Aarch32布局,四倍寄存器QO至Q15映射至双倍寄存器上。但是,仅对于其中一半的寄存器(即QO至Q7),每个双倍寄存器进一步映射至两个单倍寄存器中。因此根据本实施例,为了映射使用ARMv7处理器的Aarch32布局的重命名表,单倍寄存器只需映射至DO至D15/Q0至Q7,双倍寄存器只需映射至QO至Q15,而Q16至Q31并不存在。
[0043]图3D根据一个不例性实施例不出了 ARMv7处理器的Aarch32布局中的重命名表的所有重命名表入口与字段信息的尺寸。在图3D中,编号O的表入口(入口 O)对应于图3A至图3C中所示的表入口。单倍寄存器、双倍寄存器或四倍寄存器中的每一个被映射至对应于与图3B中的PRF入口 #相对应的物理寄存器标签(Rtag)。对于与编号O和7之间的重命名表入口(入口 O至7)相对应的寄存器,一个四倍寄存器映射至两个双倍寄存器,并且这两个双倍寄存器中的每一个映射到两个单倍寄存器。每个有效信息的尺寸为一位。一个单通道信息(比如SI)的尺寸为一位,而双通道信息(比如S2和S3)在其中含有两位的信息。对于与编号8和15之间的重命名表入口(入口 8至15)相对应的寄存器,一个四倍寄存器映射至两个双倍寄存器。在这些重命名表入口中的每一个入口内,两个双倍寄存器中只有一个双倍寄存器具有一位通道信息(比如Dl)。对于与编号16和31之间的重命名表入口(入口 16至31)相对应的寄存器,不存在碎片化信息位。
[0044]图4A至图4E根据一个示例性实施例示出了在图2的处理器10内的体系结构源寄存器中判断碎片化并触发该体系结构源寄存器碎片化的修复的序列。如图4A所示,当用于对映射至Rtag32的单倍寄存器SO进行写入的第一微操作(μ 0Ρ0)被重命名时,重命名器200记录Rtag32的信息并更新重命名表的入口 O中的不同信息字段。随后,如图4B所示,当用于对映射至Rtag33的单倍寄存器SI进行写入的第二微操作(μ 0Ρ1)被输入时,重命名器200记录Rtag33的信息并同样更新重命名表的相同入口 O中的信息字段。类似地,如图4C至图4D所示,当用于对分别映射至Rtag34和Rtag35的单倍寄存器S2和S3进行写入的第三微操作(μ 0Ρ2)和第四微操作(μ 0Ρ3)被输入时,重命名器200记录这些信息并更新重命名表的相同入口 O中的信息字段。如图4Ε所示,在重命名器200记录了关于寄存器S2与S3的信息之后,当从解码器接收用于读取四倍源寄存器QO的第五微操作(μ 0Ρ4)时,由于Q0、Dl与DO位均为无效(即四倍源数据存在于多个PRF入口),所以碎片化判断器220判断此寄存器是碎片化的。
[0045]当从解码器到重命名器200的第五微操作(μ 0Ρ4)被接收时,一旦碎片化判断器220判断在体系结构源寄存器中有碎片化,则在重命名器200处不接收微操作(μ 0Ρ4)并且解码器100到重命名接口 150被停止。与此同时,启动修复状态机230以利用一个或多个修复微操作来修复体系结构源寄存器碎片化。
[0046]图5Α至图根据一个示例性实施例示出了修复在图4A至图4E所示的序列中判断的碎片化的序列。在图5A至图内,微操作μ OPU μ 0Ρ2和μ 0Ρ3均是用于合并碎片化的体系结构源寄存器的修复微操作。如图5Α所示,第一修复μ OPl读取两个单倍寄存器SO (Rtag32)与SI (Rtag33),将结果写入具有PRF入口 36 (Rtag36)的双倍寄存器,并且将DO有效信息更新为I。以此方法,来自两个不同PRF入口的碎片化的两个单倍寄存器被合并至相同的入口。如图5B所示,第二修复μ 0P2读取S2与S3,将结果写入具有PRF入口37 (Rtag37)的双倍寄存器,并且将Dl有效信息更新为I。如图5C所示,第三修复μ 0P3读取两个双倍寄存器DO与D1,将结果写入具有PRF入口 38 (Rtag38)的四倍寄存器,并且将QO有效信息更新为I。此时,对于一个体系结构源寄存器的修复完成。此过程将一直重复直至碎片化微操作的所有体系结构源寄存器的修复完成。一旦针对碎片化微操作的修复完成,修复状态机230则移除解码器停止。触发了修复的原始微操作(图4中的μΟΡ4)现在可被允许成功地通过重命名器200,如图所示。
[0047]在以上图5A至图所示的修复过程中,修复微操作使用常规的微操作在重命名器200中使用的重命名表上的相同的读取端口,因此,这些修复微操作无需额外的读取端□。
[0048]图6根据一个示例性实施例示出了在图2的碎片化判断器220与修复状态机230处执行的判断体系结构源寄存器碎片化以及生成修复微操作的序列。
[0049]在一个周期内从重命名表读取针对所有微操作的重命名寄存器标签(Rtags )都之后,碎片化判断器220判断微操作是否需要修复以处理寄存器合并。具体而言,如图6所示,当微操作进入重命名器200时,碎片化判断器220从重命名表210接收碎片化信息(S10),并且还从解码器100接收关于微操作中的体系结构源寄存器的类型(比如单倍、双倍或四倍)的信息(S20)。碎片化信息包括关于存储在重命名表中的源寄存器(Q0、Dl和/或D0)的有效信息。基于接收的信息,碎片化判断器220判断体系结构源寄存器是否是碎片化的,即,体系结构源寄存器是否需要修复(S30)。如果微操作的体系结构源寄存器被标记为存在于多个PRF入口,则碎片化判断器201判断该微操作的体系结构源寄存器是碎片化的,并且需要修复(S40)。
[0050]一旦判断体系结构源寄存器是碎片化的,则体系结构源寄存器的微操作需要修复(S40),碎片化判断器220针对该碎片化微操作以及所有更新的微操作停止重命名器接口150 (S50)。然而,允许同一周期中更旧的微操作通过重命名并进入分派。此处,更新的微操作是指程序顺序中更新的微操作,而更旧的微操作是指程序顺序中更旧的微操作。
[0051]在操作S40处判断微操作需要修复之后,修复状态机230从重命名表接收碎片化信息,即源有效信息(S60),从解码器100接收关于微操作中源寄存器的类型(单倍、双倍或四倍)的信息(S80)并且从解码器100接收源寄存器的体系结构标签(S70)。采用以上信息,修复状态机230判断每个碎片化微操作所需的修复微操作的数量,并且生成所需数量的修复微操作以修复源寄存器的碎片化(S90)。如之前解释的那样,通过将具有不同物理寄存器堆入口编号的较小尺寸的寄存器合并,并且将各寄存器的数据写入具有另一个寄存器堆入口编号的任意较大尺寸的寄存器来执行修复。例如,如果源寄存器是由两个双倍寄存器产生的四倍寄存器,则可以合并这两个双倍寄存器并且可以将结果写入四倍寄存器。对于由两个单倍寄存器产生的双倍寄存器,可以合并这两个单倍寄存器并且可以将结果写入双倍寄存器。当微操作产生时,修复状态机230将这些修复微操作分派至重命名表以修复碎片化(S100)。一旦完成了碎片化微操作的修复,则移除解码器停止以允许解码器重新执行原始的“碎片化”微操作,该“碎片化”微操作不再碎片化并已经被修复。现在已修复的微操作成功地穿过重命名器并分派。重复地判断并产生所需数量的修复微操作,直至所有的修复微操作已被产生并被重命名(S110)。这些修复微操作通过常规的寄存器重命名过程。当完成了碎片化微操作的修复时,移除解码器停止(S120)。所描述的重复修复机制仅仅是可以如何执行修复方案的示例性实施例,还可以采用其他机制。
[0052]根据本实施例的修复微操作为辅助指令,以读取较小尺寸的寄存器并写入较大尺寸的寄存器。例如,修复微操作读取两个单倍寄存器并写入双倍寄存器,或读取两个双倍寄存器并写入四倍寄存器。
[0053]所需的修复微操作的数量取决于以下两方面:源寄存器为四倍或为双倍;以及源数据的发生器为四倍、双倍或是单倍。例如,在图3B所示重命名表中,若源寄存器为四倍Q0,并且两个发生器双倍Dl与DO均有效,则需要单个修复微操作以读取Dl与DO并写入至四倍寄存器。如果Dl与DO源寄存器中任何一个为无效,则需要两个修复微操作。S卩,需要第一个修复微操作以读取两个发生器SO与SI并且写入到双倍寄存器,并且需要第二个微操作以读取新形成的双倍寄存器与已存在的有效的双倍寄存器,并写入到最终的四倍寄存器。如果Dl与DO均为无效,则需要三个修复微操作。即,第一个微操作读取较低的两个单倍寄存器并写入双倍寄存器,第二个微操作读取较高的两个单倍寄存器并写入另一个双倍寄存器,最后的微操作读取这两个双倍寄存器并写入最终的四倍寄存器。如果源寄存器为双倍寄存器,则需要单个修复微操作来读取两个单倍寄存器并写入到双倍寄存器。修复状态机230注入所需数量的修复微操作以执行修复。
[0054]图7根据一个示例性实施例示出了在指令流水线图中的修复过程流程。如图7所示,称作μ ΟΡΟ、μ OPl、μ 0Ρ2和μ 0Ρ3的四个微操作进入重命名器200,其中μ OPO在周期中是最旧的,μ 0Ρ3在周期中是最新的。在重命名表中记录了关于每个微操作的源寄存器的碎片化信息。通过比较此重命名表与微操作的源类型,碎片化判断器220判断碎片化修复的必要性。当μ OPO进入重命名器200时,如果碎片化判断器220判断在源寄存器内没有触发修复的碎片化,则μ OPO被分派以重命名。第二个微操作μ OPI被判断为需要修复。此后停止解码器并启动修复过程。
[0055]修复状态机230判断碎片化微操作所需的修复微操作的数量,并注入所需数量的修复微操作。在图7的示例中,用于修复μ OPl的修复微操作所需的数量是三个。注入的修复微操作(命名为FxOPla、FxOPlb和FxOPlc)有助于合并较小尺寸的寄存器并写入较大尺寸的寄存器。当产生用于μ OPl的修复微操作时,分派修复微操作FxOPla、FxOPlb和FxOPlc并且移除解码器100中的停止。
[0056]在完成μ OPl的修复之后,移除解码器停止,解码器100重新执行μ OPl、μ 0Ρ2与μ0Ρ3,并且μ OPl被成功地重命名。第三个微操作μ 0Ρ2被判断为需要进行修复,并且解码器100再次停止。类似地,修复状态机230注入修复μ 0Ρ2所需数量的修复微操作,并且开始另一个修复过程。第四个微操作μ 0Ρ3同样以类似的过程进行修复。如图7所示,修复过程为流水线过程。
[0057]微操作中的每个源寄存器有可能都将需要此修复方案。如果微操作中有三个源,则修复此微操作中的碎片化最多会需要九个修复微操作。根据一个示例性实施例,在该九个修复微操作中,在每个周期可以重命名/分派四个修复微操作。后续微操作的重命名被停止直到插入这些修复微操作。如果在同一周期内的多个微操作需要修复,则通过微操作的相对年龄来判断修复各微操作的顺序。
[0058]上述示例性实施例公开的重命名与修复方案消除了这样一种需求,S卩,对于寄存器合并所需的所有裂化的源需要同时在调度器中存储多个物理源标签。此外,此方案还消除了另一种需求,即,在重命名器与物理寄存器堆中需要额外的读取端口以处理寄存器合并。此外,上述示例性实施例使用一个范围与功率效率的状态机来检测与处理用于寄存器合并的修复微操作。此外,上述示例性实施例不影响不具有由窄至宽的相关性的指令,因此在性能方面更加有效率。
[0059]上述实施例仅仅是示例性的,且并不旨在限定本发明构思的范围。例如,用于物理寄存器的128位示例性尺寸也可以是不同的尺寸,如256位、64位或32位。单倍寄存器可以是具有较小尺寸的任何位数,如4位、16位或64位,相应地,双倍寄存器可以是具有恰好较大尺寸的任何位数,如8位、32位或128位,四倍寄存器可以是具有恰好更大尺寸的位数,如16位、64位或256位。此外,在示例性实施例中描述的每周期的微操作的数量可以是任何数值。此外,重命名表210、碎片化判断器220与修复状态机230在结构方面不一定必须包含在重命名器200内,相反,它们可以实现为图2中的处理器10的分离的组件。
[0060]示例性实施例的指教没有被限定,其同样可以应用于存在NTW相关性的所有类型的体系结构寄存器。这些以及其他变化、修改、添加和改进均落入本发明构思的范围之内。因此,本发明构思的范围不是由示例性实施例的详细描述来限定的,而是由权利要求来限定,所述范围内的所有差异将被解释为包括在本发明构思中。
【权利要求】
1.一种重新配置寄存器堆的方法,所述方法包括步骤: 提供重命名表;以及 在所述重命名表中记录关于指令的源寄存器的碎片化信息,所述碎片化信息包含关于所述源寄存器的至少一个发生器的信息。
2.根据权利要求1所述的方法,其中,所述源寄存器是所述指令的体系结构源寄存器,所述方法还包括步骤: 通过所述碎片化信息来判断所述体系结构源寄存器是否是碎片化的, 其中,当所述体系结构源寄存器的内容被分散到多个物理寄存器时,判断所述体系结构源寄存器是碎片化的。
3.根据权利要求2所述的方法,其中,所述碎片化信息源自体系结构源标签的第一信息和所述体系结构源标签的第二信息,所述体系结构源标签的第一信息表示所述体系结构源寄存器的类型,所述体系结构源标签的第二信息表示所述体系结构源寄存器是否是碎片化的。
4.根据权利要求3所述的方法,其中,所述第一信息表示所述体系结构源寄存器的类型是单倍、双倍或四倍中的一种,并且 其中,所述第二信息表示所述至少一个发生器是单倍、双倍或四倍。
5.根据权利要求3所述的方法,还包括步骤: 如果判断所述体系结构源寄存器是碎片化的,则生成至少一个修复微操作;以及 注入所述修复微操作,以通过在所述寄存器堆中读取两个或更多发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述两个或更多发生器的每一个寄存器的尺寸。
6.根据权利要求5所述的方法,还包括步骤:重命名所述修复微操作。
7.根据权利要求5所述的方法,还包括步骤:基于所述第一信息和所述第二信息来判断所述至少一个修复微操作的数量。
8.根据权利要求2所述的方法,还包括步骤:如果判断还未被重命名并且未被调度执行的微操作的体系结构源寄存器是碎片化的,则使所述微操作停止。
9.根据权利要求8所述的方法,还包括步骤:如果判断所述微操作的体系结构源寄存器是碎片化的,则通过在所述寄存器堆中读取两个或更多发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述两个或更多发生器的每一个寄存器的尺寸。
10.根据权利要求3所述的方法,还包括步骤:如果判断还未被重命名并且未被调度执行的微操作的源寄存器是碎片化的,则使所述微操作停止。
11.根据权利要求10所述的方法,还包括步骤:如果判断所述微操作的体系结构源寄存器是碎片化的,则通过在所述寄存器堆中读取所述至少一个发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述至少一个发生器的每一个寄存器的尺寸。
12.一种指令处理设备,包括: 提供重命名表的重命名器, 其中,所述重命名器在所述重命名表中记录关于指令的源寄存器的碎片化信息,并且其中,所述碎片化信息包含关于所述源寄存器的至少一个发生器的信息。
13.根据权利要求12所述的设备,其中,所述源寄存器是所述指令的体系结构源寄存器,并且所述设备还包括: 碎片化判断器,所述碎片化判断器配置为通过所述碎片化信息来判断所述体系结构源寄存器是否是碎片化的, 其中,当所述体系结构源寄存器的内容被分散到多个物理寄存器时,判断所述体系结构源寄存器是碎片化的。
14.根据权利要求13所述的设备,所述碎片化信息源自体系结构源标签的第一信息和所述体系结构源标签的第二信息,所述体系结构源标签的第一信息表示所述体系结构源寄存器的类型,所述体系结构源标签的第二信息表示所述体系结构源寄存器是否是碎片化的。
15.根据权利要求14所述的设备,其中,所述第一信息表示所述体系结构源寄存器的类型是单倍、双倍或四倍中的一种,并且 其中,所述第二信息表示所述至少一个发生器是单倍、双倍或四倍。
16.根据权利要求14所述的设备,还包括修复状态机,所述修复状态机配置为: 如果判断所述体系结构源寄存器是碎片化的,则生成至少一个修复微操作;以及 注入所述修复微操作 ,以通过在所述寄存器堆中读取两个或更多发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述两个或更多发生器的每一个寄存器的尺寸。
17.根据权利要求16所述的设备,其中,所述重命名器重命名所述修复微操作。
18.根据权利要求16所述的设备,其中,所述修复状态机基于所述第一信息和所述第二信息来判断所述至少一个修复微操作的数量。
19.根据权利要求13所述的设备,还包括修复状态机,如果判断还未被重命名并且未被调度执行的微操作的体系结构源寄存器是碎片化的,则所述修复状态机使所述微操作停止。
20.根据权利要求19所述的设备,其中,如果判断所述微操作的体系结构源寄存器是碎片化的,则所述修复状态机通过在所述寄存器堆中读取两个或更多发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述两个或更多发生器的每一个寄存器的尺寸。
21.根据权利要求14所述的设备,还包括修复状态机,如果判断还未被重命名并且未被调度执行的微操作的源寄存器是碎片化的,则所述修复状态机使所述微操作停止。
22.根据权利要求21所述设备,其中,如果判断所述微操作的体系结构源寄存器是碎片化的,则所述修复状态机通过在所述寄存器堆中读取所述至少一个发生器的两个或更多寄存器并将读取结果写入一个寄存器来修复碎片化,所述一个寄存器的尺寸大于所述至少一个发生器的每一个寄存器的尺寸。
【文档编号】G06F9/30GK104049947SQ201410097579
【公开日】2014年9月17日 申请日期:2014年3月14日 优先权日:2013年3月15日
【发明者】布莱德利·杰尼·伯杰斯, 阿什拉夫·阿赫麦德, 拉维·伊因加尔 申请人:三星电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1