基于動(dòng)態(tài)重命名的矢量寄存器堆的寄存器重新配置的制作方法
【專利摘要】本發(fā)明提供了一種利用具有多個(gè)字段的重命名表來(lái)重新配置寄存器堆的方法和相應(yīng)的設(shè)備,所述多個(gè)字段表示關(guān)于具有由窄至寬的相關(guān)性的指令的源寄存器的碎片化信息。
【專利說(shuō)明】基于動(dòng)態(tài)重命名的矢量寄存器堆的寄存器重新配置
【技術(shù)領(lǐng)域】
[0001]與本發(fā)明構(gòu)思的示例性實(shí)施例一致的方法和設(shè)備涉及判斷寄存器堆的碎片化以及通過(guò)修復(fù)處理器中的碎片化來(lái)重新配置寄存器堆。
【背景技術(shù)】
[0002]舉例而言,如圖1A所示,對(duì)ARMv7處理器(ARMv7為英國(guó)劍橋ARM公司的注冊(cè)商標(biāo))的Aarch32布局中的向量寄存器堆(VRF)的體系結(jié)構(gòu)寄存器的布局進(jìn)行配置,使其在源寄存器與目標(biāo)寄存器當(dāng)中引入了潛在的“由窄至寬”的相關(guān)性。這種由窄至寬的相關(guān)性表現(xiàn)出這樣一種情況:其中,讀取大尺寸的值會(huì)導(dǎo)致讀取多個(gè)較小尺寸的寄存器。例如,如果一個(gè)四倍長(zhǎng)字的發(fā)生器為多個(gè)單字或者多個(gè)雙字,則讀取此四倍長(zhǎng)字會(huì)導(dǎo)致讀取多個(gè)單倍寄存器或者多個(gè)雙倍寄存器。類似地,讀取一個(gè)雙字會(huì)導(dǎo)致讀取兩個(gè)單倍寄存器。
[0003]如圖1A所示,在32位寄存器布局(ARMv7處理器的Aarch32布局)中,一個(gè)四倍寄存器(例如,Q15)映射到兩個(gè)雙倍寄存器(例如,D31與D32),而一個(gè)雙倍寄存器(例如,D15)映射到兩個(gè)單倍寄存器(例如,S31與S30)。如圖1B所示,在64位寄存器布局(ARMv8處理器的Aarch64布局)中,每個(gè)入口(Q0,Ql, Q2,Q3…)無(wú)論尺寸都映射到單倍寄存器。
[0004]在上述示例中,具有一個(gè)四倍源寄存器的指令會(huì)需要最多四個(gè)單倍源寄存器或者單倍源寄存器和雙倍源寄存器的組合。因此,如果指令中有多個(gè)四倍源寄存器,則所需要的源寄存器的真實(shí)數(shù)量會(huì)非常大,因此不能忽略在指令處理中的功率與時(shí)間消耗。
[0005]處理由窄至寬的相關(guān)性在范圍與功率方面的代價(jià)會(huì)很高,并且也會(huì)成為性能的瓶頸。另外,當(dāng)讀取大尺寸的值(例如,四倍長(zhǎng)字值)需要讀取多個(gè)較小尺寸的寄存器時(shí),該大尺寸源被碎片化,處理器中的范圍與功率消耗更加惡化。舉例而言,碎片化會(huì)產(chǎn)生是因?yàn)?作為體系結(jié)構(gòu)指定的)產(chǎn)生指令只寫(xiě)入整個(gè)體系結(jié)構(gòu)寄存器的一部分,并且微體系結(jié)構(gòu)指定這些指令以將其結(jié)果寫(xiě)入唯一的物理寄存器中。因此,一個(gè)體系結(jié)構(gòu)寄存器的值會(huì)分散到多個(gè)物理寄存器,因此“碎片化”表現(xiàn)出這樣一種情況:其中,體系結(jié)構(gòu)源寄存器的內(nèi)容分散到多個(gè)物理寄存器。
【發(fā)明內(nèi)容】
[0006]為了解決寄存器由窄至寬的相關(guān)性與碎片化的現(xiàn)有技術(shù)問(wèn)題,一個(gè)或更多的示例性實(shí)施例提供了用于基于寄存器重命名表來(lái)重新配置寄存器堆的方法與設(shè)備。
[0007]根據(jù)示例性實(shí)施例的一個(gè)方面,其提供了一種重新配置寄存器堆的方法,所述方法包括:提供包含多個(gè)字段的重命名表;以及在所述重命名表的字段中記錄關(guān)于指令的源寄存器的碎片化信息,所述碎片化信息包含關(guān)于所述源寄存器的至少一個(gè)發(fā)生器的信息。
[0008]所述源寄存器是所述指令的體系結(jié)構(gòu)源寄存器,并且所述方法還可以包括:通過(guò)所述碎片化信息來(lái)判斷所述體系結(jié)構(gòu)源寄存器是否是碎片化的,其中,當(dāng)所述體系結(jié)構(gòu)源寄存器的內(nèi)容被分散到多個(gè)物理寄存器時(shí),判斷所述體系結(jié)構(gòu)源寄存器是碎片化的。
[0009]所述碎片化信息可以源自體系結(jié)構(gòu)源標(biāo)簽的第一信息和所述體系結(jié)構(gòu)源標(biāo)簽的第二信息,所述體系結(jié)構(gòu)源標(biāo)簽的第一信息表示所述體系結(jié)構(gòu)源寄存器的類型,所述體系結(jié)構(gòu)源標(biāo)簽的第二信息表示所述體系結(jié)構(gòu)源寄存器是否是碎片化的。
[0010]所述方法還可以包括:如果判斷所述體系結(jié)構(gòu)源寄存器是碎片化的,則生成至少一個(gè)修復(fù)微操作;以及注入所述修復(fù)微操作,以通過(guò)在所述寄存器堆中讀取兩個(gè)或更多發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述兩個(gè)或更多發(fā)生器的每一個(gè)寄存器的尺寸。
[0011]所述方法還可以包括:重命名所述修復(fù)微操作。
[0012]所述方法還可以包括:基于所述第一信息和所述第二信息來(lái)判斷所述至少一個(gè)修復(fù)微操作的數(shù)量。
[0013]所述第一信息表示所述體系結(jié)構(gòu)源寄存器的類型是單倍、雙倍或四倍中的一種;所述第二信息表示所述至少一個(gè)發(fā)生器是單倍、雙倍或四倍。
[0014]所述方法還可以包括:如果判斷還未被重命名或者未被調(diào)度執(zhí)行的微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則使所述微操作停止。
[0015]根據(jù)另一個(gè)示例性實(shí)施例的一個(gè)方面,提供了一種指令處理設(shè)備,其包括:提供重命名表的重命名器,其中,所述重命名器在所述重命名表中記錄關(guān)于指令的源寄存器的碎片化信息,并且其中,所述碎片化信息包含關(guān)于所述源寄存器的至少一個(gè)發(fā)生器的信息。
[0016]所述源寄存器是所述指令的體系結(jié)構(gòu)源寄存器,并且所述設(shè)備還可以包括碎片化判斷器,所述碎片化判斷器配置為通過(guò)所述碎片化信息來(lái)判斷所述體系結(jié)構(gòu)源寄存器是否是碎片化的,其中,當(dāng)所述體系結(jié)構(gòu)源寄存器的內(nèi)容被分散到多個(gè)物理寄存器時(shí),判斷所述體系結(jié)構(gòu)源寄存器是碎片化的。
[0017]所述碎片化信息可以源自體系結(jié)構(gòu)源標(biāo)簽的第一信息和所述體系結(jié)構(gòu)源標(biāo)簽的第二信息,所述體系結(jié)構(gòu)源標(biāo)簽的第一信息表示所述體系結(jié)構(gòu)源寄存器的類型,所述體系結(jié)構(gòu)源標(biāo)簽的第二信息表示所述體系結(jié)構(gòu)源寄存器是否是碎片化的。
[0018]所述設(shè)備還可以包括修復(fù)狀態(tài)機(jī),所述修復(fù)狀態(tài)機(jī)配置為:如果判斷所述體系結(jié)構(gòu)源寄存器是碎片化的,則生成至少一個(gè)修復(fù)微操作;以及注入所述修復(fù)微操作,以便通過(guò)在所述寄存器堆中讀取兩個(gè)或更多發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述兩個(gè)或更多發(fā)生器的每一個(gè)寄存器的尺寸。
[0019]所述重命名器可以重命名所述修復(fù)微操作。
[0020]所述修復(fù)狀態(tài)機(jī)可以基于所述第一信息和所述第二信息來(lái)判斷所述至少一個(gè)修復(fù)微操作的數(shù)量。
[0021]所述第一信息表示所述體系結(jié)構(gòu)源寄存器的類型是單倍、雙倍或四倍中的一種;所述第二信息表示所述至少一個(gè)發(fā)生器是單倍、雙倍或四倍。
[0022]如果判斷還未被重命名或者未被調(diào)度執(zhí)行的微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則所述修復(fù)狀態(tài)機(jī)可以使所述微操作停止。
【專利附圖】
【附圖說(shuō)明】
[0023]通過(guò)以下結(jié)合附圖對(duì)示例性實(shí)施例的說(shuō)明,上述和/或其他方面將會(huì)變得清楚和更加易于理解,其中:
[0024]圖1A示出了 32位寄存器布局(ARMv7處理器的Aarch32布局);
[0025]圖1B示出了 64位寄存器布局(ARMv8處理器的Aarch64布局);
[0026]圖2示出了說(shuō)明根據(jù)一個(gè)示例性實(shí)施例的處理器10的一部分的框圖;
[0027]圖3A根據(jù)一個(gè)示例性實(shí)施例示出了 ARMv7處理器的Aarch32布局中的重命名表的入口 ;
[0028]圖3B根據(jù)一個(gè)示例性實(shí)施例示出了重命名表的已更新字段;
[0029]圖3C根據(jù)一個(gè)示例性實(shí)施例示出了在重命名表中的四倍目標(biāo)寄存器所需的字段;
[0030]圖3D根據(jù)一個(gè)不例性實(shí)施例不出了 ARMv7處理器的Aarch32布局的重命名表中的所有重命名表入口和字段信息的尺寸。
[0031]圖4A至圖4E根據(jù)一個(gè)示例性實(shí)施例示出了判斷碎片化并觸發(fā)碎片化的修復(fù)的序列。
[0032]圖5A至圖根據(jù)一個(gè)示例性實(shí)施例示出了修復(fù)在圖4A至圖4E所示的序列中判斷的碎片化的序列。
[0033]圖6根據(jù)一個(gè)示例性實(shí)施例示出了判斷寄存器碎片化并生成修復(fù)微操作的序列;以及
[0034]圖7根據(jù)一個(gè)示例性實(shí)施例示出了在指令流水線圖中的修復(fù)過(guò)程流程。
【具體實(shí)施方式】
[0035]參考附圖將對(duì)本發(fā)明的示例性實(shí)施例進(jìn)行詳細(xì)描述,以便于本領(lǐng)域普通技術(shù)人員實(shí)現(xiàn)。然而,可以以多種不同形式來(lái)具體實(shí)現(xiàn)本發(fā)明,而不是限定于在此所闡述的示例性實(shí)施例。為了清楚起見(jiàn)將省略對(duì)眾所周知的部件的描述,并且相同的附圖標(biāo)記將始終用于指示相同或相似的元件。
[0036]可以使用各種方法來(lái)解決如圖1所示的由于由窄至寬(NTW)的相關(guān)性在體系結(jié)構(gòu)布局中所導(dǎo)致的碎片化源寄存器。舉例而言,可以將碎片化的初始體系結(jié)構(gòu)源寄存器拆分成多個(gè)物理源寄存器,或者可以利用讀-修改-寫(xiě)方法來(lái)執(zhí)行寄存器合并。此兩種方法均有缺點(diǎn):由于源拆分方法會(huì)導(dǎo)致源的數(shù)量增加,從而導(dǎo)致存儲(chǔ)更多的源標(biāo)簽和潛在的更多寄存器堆讀取端口與重命名表讀取端口 ;而讀-修改-寫(xiě)方法則會(huì)降低性能并增加功耗。
[0037]圖2是示出了根據(jù)一個(gè)示例性實(shí)施例的處理器10的一部分的框圖。處理器10包括解碼器100、重命名器200和調(diào)度器300,以處理從存儲(chǔ)器或緩存(未示出)提取的指令。重命名器200包括重命名表210、碎片化判斷器220和修復(fù)狀態(tài)機(jī)230。圖2所示體系結(jié)構(gòu)可應(yīng)用于多種類型的處理器或者包括多核處理器的數(shù)據(jù)處理單元。
[0038]在圖2中,解碼器100將從存儲(chǔ)器(未示出)提取的指令解碼成較低等級(jí)的微操作(miciO-ops,或指令)。因此,指令流被映射到微操作流上。所解碼的微操作字段可以包括:操作碼,其指定要執(zhí)行的行為(如加、乘、加載、存儲(chǔ)等);源操作數(shù),其指明了保持?jǐn)?shù)據(jù)的體系結(jié)構(gòu)寄存器地址;以及目標(biāo)操作數(shù),其指明了接收數(shù)據(jù)的體系結(jié)構(gòu)寄存器地址。將解碼的微操作通過(guò)重命名接口 150發(fā)送至重命名器200。在重命名器200中,微操作的體系結(jié)構(gòu)寄存器在被發(fā)送以便在調(diào)度器300處調(diào)度執(zhí)行之前進(jìn)行重命名與相關(guān)性檢查。重命名器200利用重命名表210將體系結(jié)構(gòu)寄存器重命名為寄存器堆中的物理寄存器,重命名表210中記錄了關(guān)于微操作的寄存器的信息。根據(jù)本實(shí)施例,重命名表210被描述為包括在重命名器200中。但是,重命名表可以存儲(chǔ)在處理器10的其他部分中。執(zhí)行寄存器重命名是為了避免微操作的無(wú)序執(zhí)行中的先讀后寫(xiě)(write-after-read)與先寫(xiě)后寫(xiě)(write-after-write)的數(shù)據(jù)沖突。在程序員的處理器的體系結(jié)構(gòu)的觀點(diǎn)中,體系結(jié)構(gòu)寄存器是在指令中指定的寄存器。
[0039]在重命名器200中,提供碎片化判斷器220以通過(guò)分析從解碼器100接收的源的類型信息和來(lái)自重命名表210的碎片化信息來(lái)判斷微操作的體系結(jié)構(gòu)源寄存器是否是碎片化的,以及是否需要修復(fù)。對(duì)于具有較大尺寸源值的微操作,如果微操作的發(fā)生器為較小尺寸的寄存器(例如,單倍寄存器),則認(rèn)為該較大源值在物理寄存器堆中是碎片化的。例如,如果四倍值的發(fā)生器為單倍源或雙倍源,使得內(nèi)容被分散到多個(gè)物理寄存器,那么該源值在物理寄存器堆中是碎片化的。當(dāng)對(duì)于給定的體系結(jié)構(gòu)源寄存器判斷在寄存器堆中存在碎片化時(shí),修復(fù)狀態(tài)機(jī)230使用修復(fù)微操作來(lái)修復(fù)由碎片化判斷器220判斷的碎片化。稍后將描述碎片化判斷器220與修復(fù)狀態(tài)機(jī)230的詳細(xì)操作。
[0040]圖3A根據(jù)一個(gè)示例性實(shí)施例示出了關(guān)于如圖1A所示的ARMv7處理器的Aarch32布局中的寄存器Q0、DO、DU SO、S1、S2與S3的重命名表入口。在此描述的重命名表可以與圖2所示的處理器10的重命名器200中使用的重命名表210相同,因此,此后該重命名表被看作與重命名表210相同。將參考圖3B至圖3D詳細(xì)描述該重命名表。重命名器200對(duì)從解碼器100解碼出的微操作的每個(gè)目標(biāo)寄存器進(jìn)行重命名,并不管目標(biāo)寄存器的尺寸為物理寄存器堆(PRF)中的每個(gè)目標(biāo)寄存器分配新的入口。在圖3A中,PRF入口為128位寬并且重命名表分配4個(gè)單倍寄存器入口字段(S0入口 #至S3入口 #),每個(gè)入口字段的尺寸為32位。寄存器入口的結(jié)果在PRF入口中總是右對(duì)齊的。這種重命名表入口結(jié)構(gòu)干凈地運(yùn)作在ARMv8處理器的Aarch64布局中,并且在重命名表中存儲(chǔ)一些附加信息位的情況下同樣運(yùn)作在ARMv7處理器的Aarch32布局中。ARMv7處理器的Aarch32布局與ARMv8處理器的Aarch64布局僅僅是示例性的,該重命名表入口結(jié)構(gòu)可以應(yīng)用到其他相似布局的體系結(jié)構(gòu)中。附加信息位存儲(chǔ)為三種“有效信息字段”和三種“通道信息字段”。這些信息字段(比如有效信字段)存儲(chǔ)了最后一次的寫(xiě)入是單字(32位)、雙字(64位)還是四倍字(128位)。通道信息字段存儲(chǔ)通道讀取信息,即,當(dāng)從寄存器讀出數(shù)據(jù)時(shí)數(shù)據(jù)需要如何對(duì)齊。記錄在重命名表中的信息(比如有效信息字段內(nèi)的信息)被稱作“碎片化”信息,其表明寄存器堆中是否存在碎片化,如稍后將描述的那樣。
[0041]圖3B根據(jù)一個(gè)示例性實(shí)施例示出了當(dāng)寄存器SO至S3被重命名時(shí),重命名表中的哪些字段會(huì)被更新。當(dāng)一個(gè)或多個(gè)單倍寄存器SO至S3被映射到一個(gè)或多個(gè)物理寄存器堆入口編號(hào)(PRF入口 #)時(shí),更新相應(yīng)的(多個(gè))信息字段。
[0042]圖3C根據(jù)一個(gè)示例性實(shí)施例示出了四倍目標(biāo)寄存器在重命名表中所需的字段。并非所有重命名表中的入口都需要存儲(chǔ)所有信息字段。如圖1A所示,對(duì)于ARMv7處理器的Aarch32布局,四倍寄存器QO至Q15映射至雙倍寄存器上。但是,僅對(duì)于其中一半的寄存器(即QO至Q7),每個(gè)雙倍寄存器進(jìn)一步映射至兩個(gè)單倍寄存器中。因此根據(jù)本實(shí)施例,為了映射使用ARMv7處理器的Aarch32布局的重命名表,單倍寄存器只需映射至DO至D15/Q0至Q7,雙倍寄存器只需映射至QO至Q15,而Q16至Q31并不存在。
[0043]圖3D根據(jù)一個(gè)不例性實(shí)施例不出了 ARMv7處理器的Aarch32布局中的重命名表的所有重命名表入口與字段信息的尺寸。在圖3D中,編號(hào)O的表入口(入口 O)對(duì)應(yīng)于圖3A至圖3C中所示的表入口。單倍寄存器、雙倍寄存器或四倍寄存器中的每一個(gè)被映射至對(duì)應(yīng)于與圖3B中的PRF入口 #相對(duì)應(yīng)的物理寄存器標(biāo)簽(Rtag)。對(duì)于與編號(hào)O和7之間的重命名表入口(入口 O至7)相對(duì)應(yīng)的寄存器,一個(gè)四倍寄存器映射至兩個(gè)雙倍寄存器,并且這兩個(gè)雙倍寄存器中的每一個(gè)映射到兩個(gè)單倍寄存器。每個(gè)有效信息的尺寸為一位。一個(gè)單通道信息(比如SI)的尺寸為一位,而雙通道信息(比如S2和S3)在其中含有兩位的信息。對(duì)于與編號(hào)8和15之間的重命名表入口(入口 8至15)相對(duì)應(yīng)的寄存器,一個(gè)四倍寄存器映射至兩個(gè)雙倍寄存器。在這些重命名表入口中的每一個(gè)入口內(nèi),兩個(gè)雙倍寄存器中只有一個(gè)雙倍寄存器具有一位通道信息(比如Dl)。對(duì)于與編號(hào)16和31之間的重命名表入口(入口 16至31)相對(duì)應(yīng)的寄存器,不存在碎片化信息位。
[0044]圖4A至圖4E根據(jù)一個(gè)示例性實(shí)施例示出了在圖2的處理器10內(nèi)的體系結(jié)構(gòu)源寄存器中判斷碎片化并觸發(fā)該體系結(jié)構(gòu)源寄存器碎片化的修復(fù)的序列。如圖4A所示,當(dāng)用于對(duì)映射至Rtag32的單倍寄存器SO進(jìn)行寫(xiě)入的第一微操作(μ 0Ρ0)被重命名時(shí),重命名器200記錄Rtag32的信息并更新重命名表的入口 O中的不同信息字段。隨后,如圖4B所示,當(dāng)用于對(duì)映射至Rtag33的單倍寄存器SI進(jìn)行寫(xiě)入的第二微操作(μ 0Ρ1)被輸入時(shí),重命名器200記錄Rtag33的信息并同樣更新重命名表的相同入口 O中的信息字段。類似地,如圖4C至圖4D所示,當(dāng)用于對(duì)分別映射至Rtag34和Rtag35的單倍寄存器S2和S3進(jìn)行寫(xiě)入的第三微操作(μ 0Ρ2)和第四微操作(μ 0Ρ3)被輸入時(shí),重命名器200記錄這些信息并更新重命名表的相同入口 O中的信息字段。如圖4Ε所示,在重命名器200記錄了關(guān)于寄存器S2與S3的信息之后,當(dāng)從解碼器接收用于讀取四倍源寄存器QO的第五微操作(μ 0Ρ4)時(shí),由于Q0、Dl與DO位均為無(wú)效(即四倍源數(shù)據(jù)存在于多個(gè)PRF入口),所以碎片化判斷器220判斷此寄存器是碎片化的。
[0045]當(dāng)從解碼器到重命名器200的第五微操作(μ 0Ρ4)被接收時(shí),一旦碎片化判斷器220判斷在體系結(jié)構(gòu)源寄存器中有碎片化,則在重命名器200處不接收微操作(μ 0Ρ4)并且解碼器100到重命名接口 150被停止。與此同時(shí),啟動(dòng)修復(fù)狀態(tài)機(jī)230以利用一個(gè)或多個(gè)修復(fù)微操作來(lái)修復(fù)體系結(jié)構(gòu)源寄存器碎片化。
[0046]圖5Α至圖根據(jù)一個(gè)示例性實(shí)施例示出了修復(fù)在圖4A至圖4E所示的序列中判斷的碎片化的序列。在圖5A至圖內(nèi),微操作μ OPU μ 0Ρ2和μ 0Ρ3均是用于合并碎片化的體系結(jié)構(gòu)源寄存器的修復(fù)微操作。如圖5Α所示,第一修復(fù)μ OPl讀取兩個(gè)單倍寄存器SO (Rtag32)與SI (Rtag33),將結(jié)果寫(xiě)入具有PRF入口 36 (Rtag36)的雙倍寄存器,并且將DO有效信息更新為I。以此方法,來(lái)自兩個(gè)不同PRF入口的碎片化的兩個(gè)單倍寄存器被合并至相同的入口。如圖5B所示,第二修復(fù)μ 0P2讀取S2與S3,將結(jié)果寫(xiě)入具有PRF入口37 (Rtag37)的雙倍寄存器,并且將Dl有效信息更新為I。如圖5C所示,第三修復(fù)μ 0P3讀取兩個(gè)雙倍寄存器DO與D1,將結(jié)果寫(xiě)入具有PRF入口 38 (Rtag38)的四倍寄存器,并且將QO有效信息更新為I。此時(shí),對(duì)于一個(gè)體系結(jié)構(gòu)源寄存器的修復(fù)完成。此過(guò)程將一直重復(fù)直至碎片化微操作的所有體系結(jié)構(gòu)源寄存器的修復(fù)完成。一旦針對(duì)碎片化微操作的修復(fù)完成,修復(fù)狀態(tài)機(jī)230則移除解碼器停止。觸發(fā)了修復(fù)的原始微操作(圖4中的μΟΡ4)現(xiàn)在可被允許成功地通過(guò)重命名器200,如圖所示。
[0047]在以上圖5A至圖所示的修復(fù)過(guò)程中,修復(fù)微操作使用常規(guī)的微操作在重命名器200中使用的重命名表上的相同的讀取端口,因此,這些修復(fù)微操作無(wú)需額外的讀取端□。
[0048]圖6根據(jù)一個(gè)示例性實(shí)施例示出了在圖2的碎片化判斷器220與修復(fù)狀態(tài)機(jī)230處執(zhí)行的判斷體系結(jié)構(gòu)源寄存器碎片化以及生成修復(fù)微操作的序列。
[0049]在一個(gè)周期內(nèi)從重命名表讀取針對(duì)所有微操作的重命名寄存器標(biāo)簽(Rtags )都之后,碎片化判斷器220判斷微操作是否需要修復(fù)以處理寄存器合并。具體而言,如圖6所示,當(dāng)微操作進(jìn)入重命名器200時(shí),碎片化判斷器220從重命名表210接收碎片化信息(S10),并且還從解碼器100接收關(guān)于微操作中的體系結(jié)構(gòu)源寄存器的類型(比如單倍、雙倍或四倍)的信息(S20)。碎片化信息包括關(guān)于存儲(chǔ)在重命名表中的源寄存器(Q0、Dl和/或D0)的有效信息?;诮邮盏男畔?,碎片化判斷器220判斷體系結(jié)構(gòu)源寄存器是否是碎片化的,即,體系結(jié)構(gòu)源寄存器是否需要修復(fù)(S30)。如果微操作的體系結(jié)構(gòu)源寄存器被標(biāo)記為存在于多個(gè)PRF入口,則碎片化判斷器201判斷該微操作的體系結(jié)構(gòu)源寄存器是碎片化的,并且需要修復(fù)(S40)。
[0050]一旦判斷體系結(jié)構(gòu)源寄存器是碎片化的,則體系結(jié)構(gòu)源寄存器的微操作需要修復(fù)(S40),碎片化判斷器220針對(duì)該碎片化微操作以及所有更新的微操作停止重命名器接口150 (S50)。然而,允許同一周期中更舊的微操作通過(guò)重命名并進(jìn)入分派。此處,更新的微操作是指程序順序中更新的微操作,而更舊的微操作是指程序順序中更舊的微操作。
[0051]在操作S40處判斷微操作需要修復(fù)之后,修復(fù)狀態(tài)機(jī)230從重命名表接收碎片化信息,即源有效信息(S60),從解碼器100接收關(guān)于微操作中源寄存器的類型(單倍、雙倍或四倍)的信息(S80)并且從解碼器100接收源寄存器的體系結(jié)構(gòu)標(biāo)簽(S70)。采用以上信息,修復(fù)狀態(tài)機(jī)230判斷每個(gè)碎片化微操作所需的修復(fù)微操作的數(shù)量,并且生成所需數(shù)量的修復(fù)微操作以修復(fù)源寄存器的碎片化(S90)。如之前解釋的那樣,通過(guò)將具有不同物理寄存器堆入口編號(hào)的較小尺寸的寄存器合并,并且將各寄存器的數(shù)據(jù)寫(xiě)入具有另一個(gè)寄存器堆入口編號(hào)的任意較大尺寸的寄存器來(lái)執(zhí)行修復(fù)。例如,如果源寄存器是由兩個(gè)雙倍寄存器產(chǎn)生的四倍寄存器,則可以合并這兩個(gè)雙倍寄存器并且可以將結(jié)果寫(xiě)入四倍寄存器。對(duì)于由兩個(gè)單倍寄存器產(chǎn)生的雙倍寄存器,可以合并這兩個(gè)單倍寄存器并且可以將結(jié)果寫(xiě)入雙倍寄存器。當(dāng)微操作產(chǎn)生時(shí),修復(fù)狀態(tài)機(jī)230將這些修復(fù)微操作分派至重命名表以修復(fù)碎片化(S100)。一旦完成了碎片化微操作的修復(fù),則移除解碼器停止以允許解碼器重新執(zhí)行原始的“碎片化”微操作,該“碎片化”微操作不再碎片化并已經(jīng)被修復(fù)。現(xiàn)在已修復(fù)的微操作成功地穿過(guò)重命名器并分派。重復(fù)地判斷并產(chǎn)生所需數(shù)量的修復(fù)微操作,直至所有的修復(fù)微操作已被產(chǎn)生并被重命名(S110)。這些修復(fù)微操作通過(guò)常規(guī)的寄存器重命名過(guò)程。當(dāng)完成了碎片化微操作的修復(fù)時(shí),移除解碼器停止(S120)。所描述的重復(fù)修復(fù)機(jī)制僅僅是可以如何執(zhí)行修復(fù)方案的示例性實(shí)施例,還可以采用其他機(jī)制。
[0052]根據(jù)本實(shí)施例的修復(fù)微操作為輔助指令,以讀取較小尺寸的寄存器并寫(xiě)入較大尺寸的寄存器。例如,修復(fù)微操作讀取兩個(gè)單倍寄存器并寫(xiě)入雙倍寄存器,或讀取兩個(gè)雙倍寄存器并寫(xiě)入四倍寄存器。
[0053]所需的修復(fù)微操作的數(shù)量取決于以下兩方面:源寄存器為四倍或?yàn)殡p倍;以及源數(shù)據(jù)的發(fā)生器為四倍、雙倍或是單倍。例如,在圖3B所示重命名表中,若源寄存器為四倍Q0,并且兩個(gè)發(fā)生器雙倍Dl與DO均有效,則需要單個(gè)修復(fù)微操作以讀取Dl與DO并寫(xiě)入至四倍寄存器。如果Dl與DO源寄存器中任何一個(gè)為無(wú)效,則需要兩個(gè)修復(fù)微操作。S卩,需要第一個(gè)修復(fù)微操作以讀取兩個(gè)發(fā)生器SO與SI并且寫(xiě)入到雙倍寄存器,并且需要第二個(gè)微操作以讀取新形成的雙倍寄存器與已存在的有效的雙倍寄存器,并寫(xiě)入到最終的四倍寄存器。如果Dl與DO均為無(wú)效,則需要三個(gè)修復(fù)微操作。即,第一個(gè)微操作讀取較低的兩個(gè)單倍寄存器并寫(xiě)入雙倍寄存器,第二個(gè)微操作讀取較高的兩個(gè)單倍寄存器并寫(xiě)入另一個(gè)雙倍寄存器,最后的微操作讀取這兩個(gè)雙倍寄存器并寫(xiě)入最終的四倍寄存器。如果源寄存器為雙倍寄存器,則需要單個(gè)修復(fù)微操作來(lái)讀取兩個(gè)單倍寄存器并寫(xiě)入到雙倍寄存器。修復(fù)狀態(tài)機(jī)230注入所需數(shù)量的修復(fù)微操作以執(zhí)行修復(fù)。
[0054]圖7根據(jù)一個(gè)示例性實(shí)施例示出了在指令流水線圖中的修復(fù)過(guò)程流程。如圖7所示,稱作μ ΟΡΟ、μ OPl、μ 0Ρ2和μ 0Ρ3的四個(gè)微操作進(jìn)入重命名器200,其中μ OPO在周期中是最舊的,μ 0Ρ3在周期中是最新的。在重命名表中記錄了關(guān)于每個(gè)微操作的源寄存器的碎片化信息。通過(guò)比較此重命名表與微操作的源類型,碎片化判斷器220判斷碎片化修復(fù)的必要性。當(dāng)μ OPO進(jìn)入重命名器200時(shí),如果碎片化判斷器220判斷在源寄存器內(nèi)沒(méi)有觸發(fā)修復(fù)的碎片化,則μ OPO被分派以重命名。第二個(gè)微操作μ OPI被判斷為需要修復(fù)。此后停止解碼器并啟動(dòng)修復(fù)過(guò)程。
[0055]修復(fù)狀態(tài)機(jī)230判斷碎片化微操作所需的修復(fù)微操作的數(shù)量,并注入所需數(shù)量的修復(fù)微操作。在圖7的示例中,用于修復(fù)μ OPl的修復(fù)微操作所需的數(shù)量是三個(gè)。注入的修復(fù)微操作(命名為FxOPla、FxOPlb和FxOPlc)有助于合并較小尺寸的寄存器并寫(xiě)入較大尺寸的寄存器。當(dāng)產(chǎn)生用于μ OPl的修復(fù)微操作時(shí),分派修復(fù)微操作FxOPla、FxOPlb和FxOPlc并且移除解碼器100中的停止。
[0056]在完成μ OPl的修復(fù)之后,移除解碼器停止,解碼器100重新執(zhí)行μ OPl、μ 0Ρ2與μ0Ρ3,并且μ OPl被成功地重命名。第三個(gè)微操作μ 0Ρ2被判斷為需要進(jìn)行修復(fù),并且解碼器100再次停止。類似地,修復(fù)狀態(tài)機(jī)230注入修復(fù)μ 0Ρ2所需數(shù)量的修復(fù)微操作,并且開(kāi)始另一個(gè)修復(fù)過(guò)程。第四個(gè)微操作μ 0Ρ3同樣以類似的過(guò)程進(jìn)行修復(fù)。如圖7所示,修復(fù)過(guò)程為流水線過(guò)程。
[0057]微操作中的每個(gè)源寄存器有可能都將需要此修復(fù)方案。如果微操作中有三個(gè)源,則修復(fù)此微操作中的碎片化最多會(huì)需要九個(gè)修復(fù)微操作。根據(jù)一個(gè)示例性實(shí)施例,在該九個(gè)修復(fù)微操作中,在每個(gè)周期可以重命名/分派四個(gè)修復(fù)微操作。后續(xù)微操作的重命名被停止直到插入這些修復(fù)微操作。如果在同一周期內(nèi)的多個(gè)微操作需要修復(fù),則通過(guò)微操作的相對(duì)年齡來(lái)判斷修復(fù)各微操作的順序。
[0058]上述示例性實(shí)施例公開(kāi)的重命名與修復(fù)方案消除了這樣一種需求,S卩,對(duì)于寄存器合并所需的所有裂化的源需要同時(shí)在調(diào)度器中存儲(chǔ)多個(gè)物理源標(biāo)簽。此外,此方案還消除了另一種需求,即,在重命名器與物理寄存器堆中需要額外的讀取端口以處理寄存器合并。此外,上述示例性實(shí)施例使用一個(gè)范圍與功率效率的狀態(tài)機(jī)來(lái)檢測(cè)與處理用于寄存器合并的修復(fù)微操作。此外,上述示例性實(shí)施例不影響不具有由窄至寬的相關(guān)性的指令,因此在性能方面更加有效率。
[0059]上述實(shí)施例僅僅是示例性的,且并不旨在限定本發(fā)明構(gòu)思的范圍。例如,用于物理寄存器的128位示例性尺寸也可以是不同的尺寸,如256位、64位或32位。單倍寄存器可以是具有較小尺寸的任何位數(shù),如4位、16位或64位,相應(yīng)地,雙倍寄存器可以是具有恰好較大尺寸的任何位數(shù),如8位、32位或128位,四倍寄存器可以是具有恰好更大尺寸的位數(shù),如16位、64位或256位。此外,在示例性實(shí)施例中描述的每周期的微操作的數(shù)量可以是任何數(shù)值。此外,重命名表210、碎片化判斷器220與修復(fù)狀態(tài)機(jī)230在結(jié)構(gòu)方面不一定必須包含在重命名器200內(nèi),相反,它們可以實(shí)現(xiàn)為圖2中的處理器10的分離的組件。
[0060]示例性實(shí)施例的指教沒(méi)有被限定,其同樣可以應(yīng)用于存在NTW相關(guān)性的所有類型的體系結(jié)構(gòu)寄存器。這些以及其他變化、修改、添加和改進(jìn)均落入本發(fā)明構(gòu)思的范圍之內(nèi)。因此,本發(fā)明構(gòu)思的范圍不是由示例性實(shí)施例的詳細(xì)描述來(lái)限定的,而是由權(quán)利要求來(lái)限定,所述范圍內(nèi)的所有差異將被解釋為包括在本發(fā)明構(gòu)思中。
【權(quán)利要求】
1.一種重新配置寄存器堆的方法,所述方法包括步驟: 提供重命名表;以及 在所述重命名表中記錄關(guān)于指令的源寄存器的碎片化信息,所述碎片化信息包含關(guān)于所述源寄存器的至少一個(gè)發(fā)生器的信息。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述源寄存器是所述指令的體系結(jié)構(gòu)源寄存器,所述方法還包括步驟: 通過(guò)所述碎片化信息來(lái)判斷所述體系結(jié)構(gòu)源寄存器是否是碎片化的, 其中,當(dāng)所述體系結(jié)構(gòu)源寄存器的內(nèi)容被分散到多個(gè)物理寄存器時(shí),判斷所述體系結(jié)構(gòu)源寄存器是碎片化的。
3.根據(jù)權(quán)利要求2所述的方法,其中,所述碎片化信息源自體系結(jié)構(gòu)源標(biāo)簽的第一信息和所述體系結(jié)構(gòu)源標(biāo)簽的第二信息,所述體系結(jié)構(gòu)源標(biāo)簽的第一信息表示所述體系結(jié)構(gòu)源寄存器的類型,所述體系結(jié)構(gòu)源標(biāo)簽的第二信息表示所述體系結(jié)構(gòu)源寄存器是否是碎片化的。
4.根據(jù)權(quán)利要求3所述的方法,其中,所述第一信息表示所述體系結(jié)構(gòu)源寄存器的類型是單倍、雙倍或四倍中的一種,并且 其中,所述第二信息表示所述至少一個(gè)發(fā)生器是單倍、雙倍或四倍。
5.根據(jù)權(quán)利要求3所述的方法,還包括步驟: 如果判斷所述體系結(jié)構(gòu)源寄存器是碎片化的,則生成至少一個(gè)修復(fù)微操作;以及 注入所述修復(fù)微操作,以通過(guò)在所述寄存器堆中讀取兩個(gè)或更多發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述兩個(gè)或更多發(fā)生器的每一個(gè)寄存器的尺寸。
6.根據(jù)權(quán)利要求5所述的方法,還包括步驟:重命名所述修復(fù)微操作。
7.根據(jù)權(quán)利要求5所述的方法,還包括步驟:基于所述第一信息和所述第二信息來(lái)判斷所述至少一個(gè)修復(fù)微操作的數(shù)量。
8.根據(jù)權(quán)利要求2所述的方法,還包括步驟:如果判斷還未被重命名并且未被調(diào)度執(zhí)行的微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則使所述微操作停止。
9.根據(jù)權(quán)利要求8所述的方法,還包括步驟:如果判斷所述微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則通過(guò)在所述寄存器堆中讀取兩個(gè)或更多發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述兩個(gè)或更多發(fā)生器的每一個(gè)寄存器的尺寸。
10.根據(jù)權(quán)利要求3所述的方法,還包括步驟:如果判斷還未被重命名并且未被調(diào)度執(zhí)行的微操作的源寄存器是碎片化的,則使所述微操作停止。
11.根據(jù)權(quán)利要求10所述的方法,還包括步驟:如果判斷所述微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則通過(guò)在所述寄存器堆中讀取所述至少一個(gè)發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述至少一個(gè)發(fā)生器的每一個(gè)寄存器的尺寸。
12.一種指令處理設(shè)備,包括: 提供重命名表的重命名器, 其中,所述重命名器在所述重命名表中記錄關(guān)于指令的源寄存器的碎片化信息,并且其中,所述碎片化信息包含關(guān)于所述源寄存器的至少一個(gè)發(fā)生器的信息。
13.根據(jù)權(quán)利要求12所述的設(shè)備,其中,所述源寄存器是所述指令的體系結(jié)構(gòu)源寄存器,并且所述設(shè)備還包括: 碎片化判斷器,所述碎片化判斷器配置為通過(guò)所述碎片化信息來(lái)判斷所述體系結(jié)構(gòu)源寄存器是否是碎片化的, 其中,當(dāng)所述體系結(jié)構(gòu)源寄存器的內(nèi)容被分散到多個(gè)物理寄存器時(shí),判斷所述體系結(jié)構(gòu)源寄存器是碎片化的。
14.根據(jù)權(quán)利要求13所述的設(shè)備,所述碎片化信息源自體系結(jié)構(gòu)源標(biāo)簽的第一信息和所述體系結(jié)構(gòu)源標(biāo)簽的第二信息,所述體系結(jié)構(gòu)源標(biāo)簽的第一信息表示所述體系結(jié)構(gòu)源寄存器的類型,所述體系結(jié)構(gòu)源標(biāo)簽的第二信息表示所述體系結(jié)構(gòu)源寄存器是否是碎片化的。
15.根據(jù)權(quán)利要求14所述的設(shè)備,其中,所述第一信息表示所述體系結(jié)構(gòu)源寄存器的類型是單倍、雙倍或四倍中的一種,并且 其中,所述第二信息表示所述至少一個(gè)發(fā)生器是單倍、雙倍或四倍。
16.根據(jù)權(quán)利要求14所述的設(shè)備,還包括修復(fù)狀態(tài)機(jī),所述修復(fù)狀態(tài)機(jī)配置為: 如果判斷所述體系結(jié)構(gòu)源寄存器是碎片化的,則生成至少一個(gè)修復(fù)微操作;以及 注入所述修復(fù)微操作 ,以通過(guò)在所述寄存器堆中讀取兩個(gè)或更多發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述兩個(gè)或更多發(fā)生器的每一個(gè)寄存器的尺寸。
17.根據(jù)權(quán)利要求16所述的設(shè)備,其中,所述重命名器重命名所述修復(fù)微操作。
18.根據(jù)權(quán)利要求16所述的設(shè)備,其中,所述修復(fù)狀態(tài)機(jī)基于所述第一信息和所述第二信息來(lái)判斷所述至少一個(gè)修復(fù)微操作的數(shù)量。
19.根據(jù)權(quán)利要求13所述的設(shè)備,還包括修復(fù)狀態(tài)機(jī),如果判斷還未被重命名并且未被調(diào)度執(zhí)行的微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則所述修復(fù)狀態(tài)機(jī)使所述微操作停止。
20.根據(jù)權(quán)利要求19所述的設(shè)備,其中,如果判斷所述微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則所述修復(fù)狀態(tài)機(jī)通過(guò)在所述寄存器堆中讀取兩個(gè)或更多發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述兩個(gè)或更多發(fā)生器的每一個(gè)寄存器的尺寸。
21.根據(jù)權(quán)利要求14所述的設(shè)備,還包括修復(fù)狀態(tài)機(jī),如果判斷還未被重命名并且未被調(diào)度執(zhí)行的微操作的源寄存器是碎片化的,則所述修復(fù)狀態(tài)機(jī)使所述微操作停止。
22.根據(jù)權(quán)利要求21所述設(shè)備,其中,如果判斷所述微操作的體系結(jié)構(gòu)源寄存器是碎片化的,則所述修復(fù)狀態(tài)機(jī)通過(guò)在所述寄存器堆中讀取所述至少一個(gè)發(fā)生器的兩個(gè)或更多寄存器并將讀取結(jié)果寫(xiě)入一個(gè)寄存器來(lái)修復(fù)碎片化,所述一個(gè)寄存器的尺寸大于所述至少一個(gè)發(fā)生器的每一個(gè)寄存器的尺寸。
【文檔編號(hào)】G06F9/30GK104049947SQ201410097579
【公開(kāi)日】2014年9月17日 申請(qǐng)日期:2014年3月14日 優(yōu)先權(quán)日:2013年3月15日
【發(fā)明者】布萊德利·杰尼·伯杰斯, 阿什拉夫·阿赫麥德, 拉維·伊因加爾 申請(qǐng)人:三星電子株式會(huì)社