專利名稱:數(shù)據(jù)處理裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器等數(shù)據(jù)處理裝置,尤其涉及可進(jìn)行高效的流水
線(pipeline)控制的技術(shù)。
背景技術(shù):
以往,在處理器等數(shù)據(jù)處理裝置中,充分利用由工藝微細(xì)化的進(jìn) 展帶來的可利用的晶體管數(shù)量的持續(xù)增加,實現(xiàn)了由電路的大規(guī)?;?帶來的高性能化。處理器體系結(jié)構(gòu)中,以單指令流為前提的馮諾依曼 型是主流,根據(jù)大規(guī)模的指令發(fā)出遷輯從單指令流中提取最大限的并 行性來進(jìn)行處理,這是高性能化中不可欠缺的。
例如,現(xiàn)在作為高端處理器的方式,在一般的亂序(Out of Order) 方式中,將單指令流保持在大容量緩存中,檢查數(shù)據(jù)依賴關(guān)系,從輸 入數(shù)據(jù)齊備的指令開始執(zhí)行,在執(zhí)行后再按照本來的指令流的順序更 新處理器狀態(tài)。此時,為了消除因寄存器操作數(shù)的反向依賴、輸出依 賴引起的指令發(fā)出限制,準(zhǔn)備大容量寄存器文件,進(jìn)行寄存器重命名。 結(jié)果,后續(xù)指令可能比原來更早使用先行執(zhí)行的結(jié)果,有助于提高性 能,但無法在處理器狀態(tài)更新之前為亂序。這是由于無法進(jìn)行在暫時 停止程序后進(jìn)行恢復(fù)這樣的處理器的基本處理。因此,先行執(zhí)行的結(jié) 果存儲在大容量的重排序緩存中,按原來的順序?qū)懟氐郊拇嫫魑募?中。如此單指令流的亂序執(zhí)行是需要大容量緩存和復(fù)雜控制的低效率 方式。例如在非專利文獻(xiàn)l中,如第25頁的圖2所示,準(zhǔn)備20條目 (entry)的整數(shù)發(fā)出隊列(Integer issue queue ) 、 15條目的浮點發(fā)出 隊列(Floating-point issue queue )、 80條2組的整數(shù)寄存器文件(Integer register file ) 、 72條的浮點寄存器文4牛(Floating-point register file ), 可進(jìn)行大規(guī)模的亂序發(fā)出。作為對亂序方式進(jìn)行記載的其他文獻(xiàn),可列舉出專利文獻(xiàn)l、 2。 而在邏輯規(guī)模相對較小的有序(in order)方式中,不僅是指令發(fā) 出邏輯,處理器整體也是同步工作的,這是基本的,因此,需要在某 指令執(zhí)行停滯時,與是否有依賴關(guān)系無關(guān)地使后續(xù)指令的處理停止。 因此,從處理器各部收集執(zhí)行可能性的信息,判斷作為處理器整體的 執(zhí)行可能性,將該判斷結(jié)果傳送到處理器各部,來保證處理器整體同 步進(jìn)行工作。
作為對有序方式進(jìn)行記載的文獻(xiàn)的例子,可舉出專利文獻(xiàn)3。
非專利文獻(xiàn) 1 : R.E.Kessler , " THE ALPHA 21264 MICROPROCESSOR, ,, IEEE Micro , vol.19 , no.2 , pp.24-36 , MARCH-APRIL 1999
專利文獻(xiàn)1:日本特開2004- 303026號公報
專利文獻(xiàn)2:日本特開平11 - 353177號公報
專利文獻(xiàn)3:日本特開2007 - 164354號公才艮
發(fā)明內(nèi)容
近年來,隨著工藝微細(xì)化的進(jìn)展,作為電路延遲的主要原因,布 線延遲比門延遲更是主要原因,為了邏輯電路高速化,需要設(shè)計考慮 了布線延遲的方式。因此,即使在處理器等數(shù)據(jù)處理裝置中,也需要 構(gòu)筑最適于這樣的微細(xì)工藝的流水線結(jié)構(gòu)。所謂考慮了布線延遲的方 式,具體而言是指提高處理的局部性、并可減少信息、數(shù)據(jù)傳送量的 方式。
另外,隨著工藝微細(xì)化的進(jìn)展而逐漸減小的功耗,也伴隨微細(xì)化 的漏電流呈指數(shù)函數(shù)增大而變得不會被減少。因此,即使因微細(xì)化而 能夠使用的晶體管增加,隨著該晶體管的增加,功耗也會增加,因此, 當(dāng)如以往那樣通過電路的大規(guī)?;瘉硖岣咝阅軙r,則會由于超出性能 提高的功耗增大而使功率效率降低。另外,即使對至此順利發(fā)展的芯 片的功率限制放寬,在服務(wù)器系統(tǒng)中也最多為IOOW、在固定式組裝 系統(tǒng)中也最多為數(shù)w、在面向移動設(shè)備的組裝系統(tǒng)中也最多數(shù)百mW。在這樣的功率限制下發(fā)揮最高性能的是功率效率最高的芯片。 因此,需要比以往更高效率的方式。
然而,在上述的大規(guī)模亂序方式中,需要大規(guī)模的硬件,因此無 法提高處理的局部性,也無法提高功率效率。另外,在有序方式中, 由于也需要處理器整體同步工作,因此也難以提高處理的局部性,不 能稱之為是考慮了布線延遲的方式。其中,亂序方式在指令執(zhí)行中不 需要有序方式那樣的整體同步,具有處理的局部性。
本發(fā)明的目的在于,用有序方式那樣的較小規(guī)模的硬件來實現(xiàn)如 亂序方式那樣不需要整體同步的方式,提高處理的局部性,并提高功 率效率。
本發(fā)明的上述及其他目的和新特征,將通過本說明書的記載和附
圖而得以明確。
簡要說明本申請公開的發(fā)明中的代表性技術(shù)方案如下。
即, 一種數(shù)據(jù)處理裝置,包括能夠分別進(jìn)行用于指令執(zhí)行的預(yù)定
處理的多個執(zhí)行資源(EXU、 LSU),能夠通過上述多個執(zhí)行資源進(jìn)
按照該指令的流程順序用有序方式進(jìn)行處理,對于在互不相同的執(zhí)行 資源中處理的指令,與該指令的流程順序無關(guān)地用亂序方式進(jìn)行處 理。通過進(jìn)行這樣的處理,使執(zhí)行資源內(nèi)的局部處理簡單化,能夠用 小規(guī)模的硬件加以實現(xiàn),不需要跨執(zhí)行資源的大范圍處理的同步,提 高的處理的局部性和功率效率。
簡要說明本申請公開的發(fā)明中的代表性技術(shù)方案所得到的效果 如下。
即,能夠用有序方式那樣的較小規(guī)模的硬件來實現(xiàn)如亂序方式那 樣不需要整體同步的方式,提高處理的局部性,并提高功耗效率。
圖1是作為本發(fā)明的數(shù)據(jù)處理裝置的一例的處理器的結(jié)構(gòu)例框圖。圖2是亂序方式的處理器的流水線構(gòu)造的說明圖。 圖3是用亂序方式的處理器執(zhí)行程序時的循環(huán)部的工作說明圖。 圖4是用亂序方式的處理器執(zhí)行程序時的循環(huán)部的工作說明圖。 圖5是在圖4中將載入延遲(latency )從3延長到9時的循環(huán)部
的工作-說明圖。
圖6是上述程序的結(jié)構(gòu)例說明圖。
圖7是圖1所示的處理器中的流水線的結(jié)構(gòu)例說明圖。
圖8是圖1所示的處理器的全局指令隊列GIQ和寫信息隊列WIQ
的結(jié)構(gòu)例框圖。
圖9是運算指令用屏蔽信號EXMSK的生成邏輯的說明圖。
圖10是運算指令用屏蔽信號EXMSK的生成邏輯的電路圖。
圖11是寫信息隊列WIQ中的運算指令局部(local)選擇信號
EXLS的生成邏輯的電路圖。
圖12是用上述處理器執(zhí)行上述程序時的循環(huán)部的流水線工作的
說明圖。
圖13是用上述處理器執(zhí)行上述程序時的循環(huán)部的流水線工作的 說明圖。
圖14是在圖13中將載入延遲從3延長到9時的循環(huán)部的工作說明圖。
圖15是用分支流水線執(zhí)行圖14中由運算流水線執(zhí)行的第3減量 (decrement)測試指令時的循環(huán)部的工作i兌明圖。
圖16是引起反向依賴和輸出依賴的流水線工作的說明圖。
圖17是圖1所示的處理器的全局指令隊列GIQ和讀寫信息隊列 RWIQ的另一結(jié)構(gòu)例框圖。
圖18是使用圖17的電路結(jié)構(gòu)時的引起反向依賴和輸出依賴的流 水線工作的說明圖。
具體實施例方式
1. ^表性實施方式首先,說明本申請公開的發(fā)明的代表性實施方式的概要。在對代 表性實施方式的概要說明中,加括號參照的附圖標(biāo)記只不過是例示出 在標(biāo)注了該附圖標(biāo)記的構(gòu)成要素的概念中所包含的部分。
(1 )本發(fā)明的代表性實施方式的數(shù)據(jù)處理裝置10,包括可進(jìn)行 用于執(zhí)行各個指令的預(yù)定處理的多個執(zhí)行資源(EXU、 LSU),可通 過上述多個執(zhí)行資源進(jìn)行流水線處理。并且,上述執(zhí)行資源對于由相 同的執(zhí)行資源處理的指令,按照該指令的流程順序以有序方式進(jìn)行處 理,對于由互不相同的執(zhí)行資源處理的指令,與該指令的流程順序無 關(guān)地以亂序方式進(jìn)行處理。通過這樣的處理,使執(zhí)行資源內(nèi)的局部處 理簡單化,可用小規(guī)模的硬件加以實現(xiàn),不需要跨執(zhí)行資源的大范圍
處理的同步,^v而^是高處理的局部性和功率效率。
(2) 上述數(shù)據(jù)處理裝置包括可取得(fetch)指令的指令取得單 元(IFU)。此時,上述指令取得單元包括可基于按各執(zhí)行資源而不 同的作用域的先行指令的寄存器寫入信息來檢查作為與先行指令的 冒險要因的流程依賴的信息隊列(WIQ、 RWIQ)。由此,作為亂序 執(zhí)行的結(jié)果,各執(zhí)行資源的進(jìn)展不同,即使在按各執(zhí)行資源而先行指 令不同的狀況下,也可沖全查流程依賴。
(3) 上述信息隊列進(jìn)行控制,以使后續(xù)指令的寄存器寫入不超 越先行指令的寄存器讀出。具體而言,在后續(xù)指令的寄存器寫入之前, 檢查先行指令的寄存器讀出序號,若檢測出反向依賴關(guān)系,則使后續(xù) 指令的寄存器寫入延遲,使先行指令的寄存器讀出先執(zhí)行。由此,可 保持處于反依向賴關(guān)系的指令的執(zhí)行結(jié)果的匹配性。
(4) 可以按上述多個執(zhí)行資源中的各執(zhí)行資源而配置局部寄存 器。由此,能夠確保寄存器讀出的局部性。
器寫入。由此,不需要反向依賴檢查,并且可減少功耗。
(6 )上述執(zhí)行資源包括可基于上述指令進(jìn)行運算執(zhí)行的運算執(zhí) 行單元、和可進(jìn)行數(shù)據(jù)的載入和存儲的載入存儲單元。此時,可以在 上述局部寄存器中設(shè)置運算指令用的局部寄存器文件和載入存儲指令用的局部寄存器文件。為了確保寄存器讀出的局部性,上述局部寄 存器文件配置于上述運算執(zhí)行單元內(nèi),上述局部寄存器文件配置在上 述載入存儲單元內(nèi)。
(7) 通過控制以使后續(xù)指令的寄存器寫入不超越先行指令的寄
存器寫入,由此可保持處于反向依賴關(guān)系的指令的執(zhí)行結(jié)果的匹配性。
(8) 通過在先行指令的寄存器寫入被向同一寄存器的后續(xù)指令 的寄存器寫入超越時,抑制先行指令的寄存器寫入,可保持處于反向
依賴關(guān)系的指令的執(zhí)行結(jié)果的匹配性。
2.實施方式的"i兌明
接著,進(jìn)一步詳細(xì)說明實施方式。 《本實施方式的比較例》
在此,首先基于圖1、圖2和圖6說明作為實施方式比較例的以 往處理器的結(jié)構(gòu)、工作等。
圖6例示出用于說明處理器工作例的第l程序。
如圖6 (A)中用C語言記述的那樣,第1程序是對具有N個元 素的兩個數(shù)組a[i]和b[i]進(jìn)行加法運算,并保存在數(shù)組c[i]中的程序。 對用匯編語言記述該第l程序的情況進(jìn)行說明。在匯編程序中,^支:沒 具有算后增量(postincrement)式的載入和存儲指令的體系結(jié)構(gòu)。
如圖6( B )所示,首先作為初始設(shè)定,通過4條直接轉(zhuǎn)移指令"mov #_a, r0" 、 "mov #—b, rl" 、 "mov #—c, r2"和"mov #N, r3,,,分別將3個數(shù)組的首地址—a、 _b、 _c和數(shù)組的元素數(shù)N保存到 寄存器r0、 rl、 r2和r3中。接著,在循環(huán)部中,通過算后增量載入 指令"mov @r0 + , r4"和"mov @rl + , r5" , /人r0和rl所指 的數(shù)組a和b的地址載入數(shù)組元素至r4和r5,同時對r0和rl增量而 使其指向下一數(shù)組元素。接著,通過減量(decrement)測試指令"dt r3",對保存在r3中的元素數(shù)N進(jìn)行減量,測試其結(jié)果是否是0,若 是0則設(shè)置標(biāo)志,若不是0則清除標(biāo)志。其后,通過加法運算指令"add r4, r5",對載入到r4和r5中的數(shù)組元素進(jìn)行加法運算,并保存到r5中。然后,通過算后增量存儲指令"mov r5, @r2 + ",將數(shù)組 元素的加法運算結(jié)果的r5的值存儲到數(shù)組c的元素地址。最后,通過 條件分支指令"bf —L00"檢查標(biāo)志,若被清除,則剩余元素數(shù)N還 不是0,因此分支到標(biāo)簽J^00所指的循環(huán)的起始。
圖2概略例示出亂序方式的處理器的流水線結(jié)構(gòu)。
該流水線結(jié)構(gòu)由所有指令共用的指令高速緩存訪問IC1和IC2、 全局指令緩存GIB、運算和載入存儲指令用的寄存器重命名REN和 指令發(fā)出ISS、運算指令用的局部指令緩存EXIB、寄存器讀RR、運 算EX、載入存儲指令用的局部指令緩存LSIB、寄存器讀RR、載入 存儲地址計算LSA、數(shù)據(jù)高速緩存訪問DC1、以及載入指令用的數(shù)據(jù) 高速緩存訪問第2級DC2、存儲指令用的存儲緩存地址及數(shù)據(jù)寫入 SBA和SBD、分支指令用的分支BR、與寄存器回寫(writeback)的 某指令共用的物理寄存器回寫WB、以及基于向邏輯寄存器的寫回的 指令返回(Return) RET的各級構(gòu)成?;谒愫笤隽康牡刂芳拇嫫鞲?新結(jié)果在與地址計算LSA接著的數(shù)據(jù)高速緩存訪問DC1級被回寫到 物理寄存器。指令取得為每次4條指令,指令發(fā)出可以對于載入存儲、 運算、分支的各種類的每種類而在1個周期發(fā)出1條指令。
圖3例示出用圖2例示的亂序方式處理器執(zhí)行第l程序時的循環(huán) 部的流水線工作。
首先,在起始的載入指令"mov @rO+, r4,,的執(zhí)行中,通過指 令高速緩存訪問IC1和IC2、全局指令緩存GIB、寄存器重命名REN、 指令發(fā)出ISS、局部指令緩存LSIB、寄存器讀RR、地址計算LSA、 數(shù)據(jù)高速緩存訪問DC1和DC2、物理寄存器回寫WB、以及指令返 回RET的各級處理來執(zhí)行指令。在第2載入指令"mov @rl + , r5,, 的執(zhí)行中,與先行的載入指令發(fā)生資源竟?fàn)帲虼嗽诩拇嫫髦孛?REN后發(fā)生1個周期的氣泡級(bubble stage) , ^旦其他是與起始載入 指令同樣地進(jìn)行處理的。在第3減量測試指令"dt r3"的執(zhí)行中, 到指令發(fā)出ISS之前進(jìn)行與第1載入指令同樣的處理,其后,進(jìn)行了 局部指令緩存EXIB、寄存器讀RR、運算EX以及物理寄存器回寫WB的各級處理后,為了恢復(fù)與先行指令的順序關(guān)系,隔著4個周期 的氣泡級而執(zhí)行指令返回RET級的處理。在第4加法運算指令"add r4, r5,,的執(zhí)行中,對于先行的兩條載入指令存在流程依賴,因此, 在寄存器重命名REN后發(fā)生4個周期的氣泡級,然后通過指令發(fā)出 ISS、局部指令緩存EXIB、寄存器讀RR、運算EX、物理寄存器回寫 WB以及指令返回RET的各級處理來執(zhí)行指令。在第5算后增量存儲 指令"movr5, @r2 + "的執(zhí)行中,指令取得是每次4條指令,因此, 通過對如下處理執(zhí)行指令,即該處理為對起始4條指令延遲1個周期 的指令高速緩存訪問IC1和IC2、全局指令緩存GIB、以及寄存器重 命名REN之后,與先行的載入指令發(fā)生資源竟?fàn)?,因此發(fā)生1個周 期的流水線氣泡,其后,指令發(fā)出ISS、局部指令緩存LSIB、寄存器 讀RR、地址計算LSA、數(shù)據(jù)高速緩存訪問DC1、存儲緩存地址及數(shù) 據(jù)寫入SBA和SBD、以及指令返回RET的各級處理。當(dāng)寄存器r5 在寄存器讀RR級要進(jìn)行讀取時,會因流程依賴而等待,但若在存儲 緩存數(shù)據(jù)寫入SBD級接收時,則不會等待。在循環(huán)最后的條件分支 指令"bf_L00"的執(zhí)行中,通過緊接全局指令緩存GIB級之后的分 支BR級來處理指令。由于可用1次循環(huán)6條指令的小循環(huán)將所有指 令保持在全局指令隊列GIQ中,因此,通過反復(fù)執(zhí)行保持于全局指令 隊列GIQ中的1個循環(huán)的指令來實現(xiàn)分支處理。結(jié)果,在緊接BR級 之后,執(zhí)行作為分支前指令的循環(huán)起始指令"mov @r0+, r4"的 全局指令隊列GIQ級。
以上這樣工作的結(jié)果,從執(zhí)行各指令時的寄存器重命名REN級 到返回RET級的循環(huán)次數(shù)是9~ 11周期。其間,對每一寄存器寫分 配不同的物理寄存器,每3個周期開始循環(huán)的處理,因此,在第4循 環(huán)的中途釋放第1循環(huán)的物理寄存器。另外,邏輯寄存器R5進(jìn)行基 于第2載入指令和第4加法運算指令的回寫,因此,在l次循環(huán)內(nèi)對 寄存器R5分配2個物理寄存器。結(jié)果,對6條邏輯寄存器進(jìn)行映射 所需的物理寄存器數(shù)是每1次循環(huán)7條,在第1 4循環(huán)中,需要不 同的物理寄存器,合計為28條物理寄存器。圖4例示出用亂序方式的處理器執(zhí)行第1程序時的循環(huán)部的工 作。在圖2例示的流水線工作的指令發(fā)出ISS級或分支BR級中,使 之代表各指令的執(zhí)行周期。在載入指令中,地址計算LSA、數(shù)據(jù)高速 緩存訪問DC1和DC2這3級視為延遲,在分支指令中,分支BR、 全局指令緩存GIB和寄存器重命名REN級這3級視為延遲,因此, 載入指令和分支指令的延遲是3。首先,在第l周期執(zhí)行起始的載入 指令"mov@r0+, r4"、第3減量測試指令"dt r3"、和循環(huán)最后 的條件分支指令"bf—L00"。在第2周期執(zhí)行第2載入指令"mov @rl + , r5",在第3周期執(zhí)行第5算后增量存儲指令"mov r5, @r2 + "。并且,在第4周期開始第2循環(huán)的處理,成為與第l周期同樣 的工作。進(jìn)一步在第5周期執(zhí)行第1循環(huán)的第4加法運算指令"add r4, r5"和第2循環(huán)的第2載入指令"mov @rl + , r5",第6周期 成為與第3周期同樣的工作。其后,反復(fù)每1次循環(huán)3周期的工作。 圖5例示出將載入延遲從圖4的3延長到9時的循環(huán)部的工作。 在處理大規(guī)模數(shù)據(jù)時不收容在高速的小容量存儲器中,因此假定較長 的延遲是現(xiàn)實的。隨著載入延遲的增加,第4加法運算指令"addr4, r5,,的執(zhí)行開始比圖4延遲了 6周期。結(jié)果,從寄存器重命名REN 級到返回RET級的周期數(shù)比圖3時長6周期,成為15~17周期,在 第6循環(huán)的途中釋放物理寄存器。因此,對6條邏輯寄存器進(jìn)行映射 所需的物理寄存器數(shù)增加了 2循環(huán)的量、即14條,成為共計42條。 如上所述,在以往的亂序方式中,雖然依賴于程序、執(zhí)行延遲,但需 要邏輯寄存器的4 7倍左右的物理寄存器。 《實施方式》
圖1概略例示出作為本發(fā)明的數(shù)據(jù)處理裝置一例的處理器的框結(jié)構(gòu)。
圖1所示的處理器10未特別限制,但包括指令高速緩存IC、指 令取得單元IFU、數(shù)據(jù)高速緩存DC、載入存儲單元LSU、指令執(zhí)行 單元EXU和總線接口單元BIU。在指令高速緩存IC附近配置有指令 取得單元IFU,其中包括最初接受所取得的指令的全局指令隊列GIQ 、分支處理控制部BRC、保持由鎖存在全局指令隊列GIQ中的指令生 成的寄存器寫信息并管理到寄存器寫完成為止的寫信息隊列WIQ。另 外,在數(shù)據(jù)高速緩存DC附近配置有載入存儲單元LSU,其中包括保 持載入存儲指令的載入存儲指令隊列LSIQ、載入存儲指令用的局部 寄存器文件LSRF、載入存儲指令用的地址加法運算器LSAG、保持 存儲指令的地址和數(shù)據(jù)的存儲緩存SB。指令執(zhí)行單元EXU包括保持 運算指令的執(zhí)行指令隊列EXIQ、運算指令用的局部寄存器文件 EXRF、運算指令用的運算器ALU。并且,總線接口單元BIU起到處 理器IO與外部總線的接口的作用。
圖7概略例示上述處理器10的流水線結(jié)構(gòu)。
首先,具有所有指令共用的指令高速緩存訪問IC1和IC2、以及 全局指令緩存GIB級,運算指令用的有局部指令緩存EXIB、局部寄 存器讀EXRR、以及運算EX。另外,載入存儲指令用的有局部指令 緩存LSIB、局部寄存器讀LSRR、地址計算LSA、數(shù)據(jù)高速緩存訪問 DC1的各級,載入指令用的有數(shù)據(jù)高速緩存訪問第2級DC2,存儲指 令用的有存儲高速緩存地址和數(shù)據(jù)寫入SBA和SBD的各級。分支指 令用的有分支BR的各級,寄存器回寫的某指令包括共用的寄存器回 寫WB級。
在指令高速緩存訪問IC1和IC2級中,指令取得單元IFU從指令 高速緩存IC每次取得4條指令,將其保存在全局指令緩存GIB級的 全局指令隊列GIQ中。在全局指令緩存GIB級中,根據(jù)保存的指令 生成寄存器寫信息,在下一周期保存于寫信息隊列WIQ。另外,載入 存儲、運算以及分支的各種類的指令被每次提取1條指令,在局部指 令緩存LSIB和EXIB、以及分支BR級被分別保存于載入存儲單元 LSU的指令隊列LSIQ、指令執(zhí)行單元EXU的指令隊列EXIQ以及指 令取得單元IFU的分支控制部BRC。并且,在分支BR級中,接受到 分支指令時,馬上開始分支處理。
在運算指令用流水線中,指令執(zhí)行單元EXU在局部指令緩存
EXIB級,在1個周期中,每次將最大1條指令的運算指令接收到指令隊列EXIQ中,每次最大1條指令地進(jìn)行譯碼,并且通過指令取得 單元IFU檢查寫信息隊列WIQ,來檢測譯碼中的指令有無對先行指 令的寄存器依賴。在接著的局部寄存器讀EXRR級中,若不存在寄存 器依賴則進(jìn)行寄存器讀,若存在依賴則暫停(stall)該級而使之產(chǎn)生 流水線氣泡(pipeline bubble )。其后,在運算EX級使用運算器ALU 進(jìn)行運算,并在寄存器回寫WB級中,在寄存器中進(jìn)行存儲。
在載入存儲指令用的流水線中,在載入指令緩存LSIB級,載入 存儲單元LSU在1個周期中將每次最大1條指令的載入存儲指令接 收到指令隊列LSIQ中,每次最大1條指令地進(jìn)行譯碼,并且通過指 令取得單元IFU檢查寫信息隊列WIQ,來檢測譯碼中的指令有無對 先行指令的寄存器依賴。在接著的局部寄存器讀LSRR級中,若不存 在寄存器依賴則進(jìn)行寄存器讀,若存在依賴則暫停(stall)該級而使 之產(chǎn)生流水線氣泡。然后,在地址計算LSA級使用地址加法運算器 LSAG進(jìn)行地址計算。并且,若是載入指令,則在數(shù)據(jù)高速緩存訪問 DCl和DC2級從數(shù)據(jù)高速緩存DC載入數(shù)據(jù),并在寄存器回寫WB 級保存于寄存器。若是存儲指令,則在數(shù)據(jù)高速緩存訪問DCl級進(jìn) 行訪問的例外檢查和數(shù)據(jù)高速緩存DC的命中/非命中判斷,在存儲緩 存地址、數(shù)據(jù)寫入SBA和SBD的各級,分別將存儲地址和存儲數(shù)據(jù) 寫入存儲緩存。
圖8例示出上述處理器10中的全局指令隊列GIQ和寫信息隊列 WIQ的結(jié)構(gòu)。
如圖8所示,全局指令隊列GIQ由16指令的指令隊列入口( entry) GIQ0 15、指定寫入位置的全局指令隊列指針GIQP、運算、載入存 儲以及隨著分支的各種類指令的進(jìn)展而增進(jìn)的、指定讀出位置的運算 指令指針EXP、載入存儲指令指針LSP、分支指令指針BRP、以及對 這些指針進(jìn)行譯碼的指令隊列指針譯碼部IQP-DEC構(gòu)成。
而寫信息隊列WIQ由寫信息譯碼器WID0~3、 16指令的寫入信 息入口 WI0 15、指定新的寫入信息設(shè)置位置的寫信息隊列指針 WIQP、指定處于局部指令緩存級EXIB和LSIB中的運算指令和載入存儲指令的位置的載入存儲指令局部指針LSLP和運算指令局部指針 EXLP、指向載入接下來可利用的載入數(shù)據(jù)的指令的載入數(shù)據(jù)寫指針 LDWP、以及對這些指針進(jìn)行譯碼的寫信息隊列指針譯碼部WIP-DEC 構(gòu)成。
全局指令隊列GIQ按照由全局指令隊列指針GIQP的譯碼生成的 全局指令隊列選擇信號GIQS,將從指令高速緩存IC取得的4條指令 ICO0 3鎖存到指令隊列條目GIQ0 3、GIQ4 7、GIQ8 11或GIQ12 15 中,在鎖存之后的周期,將鎖存的4條指令輸出至寫信息隊列WIQ 的寫信息譯碼部WID0 3。同時接收表示取得的4條指令I(lǐng)CO0~3的 有效性的指令高速緩存輸出有效信號ICOV,對該信號進(jìn)行斷言 (assert)后鎖存于全局指令隊列GIQ中。另外,按照由運算指令指 針EXP、載入存儲指令指針LSP和分支指令指針BRP這三個指針的 譯碼而生成的運算指令選擇信號EXS、載入存儲指令選擇信號LSS 和分支指令選擇信號BRS,每次提取1條各種類的指令,作為運算指 令EX-INST、載入存儲指令LS-INST和分支指令BR-INST進(jìn)行輸出。
在寫信息隊列WIQ中,首先,寫信息_澤碼部WID0 3接收鎖存 于全局指令隊列GIQ中的4條指令,生成這些指令的寄存器寫信息。 然后,接收到的指令的有效信號IV被斷言后,按照由寫信息隊列指 針WIQP的譯碼而生成的寫信息隊列選擇信號WIQS,將所生成的寄 存器寫信息鎖存于WI0 3、 WI4~7、 WI8~11、或WI12-15中。寫信 息隊列指針WIQP指向鎖存于寫信息隊列WIQ中的指令中最早的指 令,當(dāng)從該最早的指令開始,4條指令的寄存器寫信息成為不需要而 被刪除時,則能夠在寫信息隊列WIQ中產(chǎn)生空閑,可進(jìn)行新的4條 指令的寫信息的鎖存。并且,重新鎖存了寫信息后,則使寫信息隊列 指針WIQP前進(jìn),以指接下來的4條目。
而運算指令局部指針EXLP和載入存儲指令局部指針LSLP指定 從此開始執(zhí)行的指令,從上述最早的指令到這些指針指定的指令之前 的指令為止,是在從此開始執(zhí)行的指令之前執(zhí)行的指令,成為流程依 賴的檢查對象指令。因此,寫信息隊列指針譯碼部WIP-DEC生成用于從寫信息隊列指針WIQP、運算指令和載入存儲指令的局部指針 EXLP和LSLP中選擇全部流程依賴的檢查對象范圍的條目的運算指 令和載入存儲指令用屏蔽信號EXMSK和LSMSK。
圖9例示出運算指令用屏蔽信號EXMSK的生成邏輯。
輸入信號中,寫信息隊列指針WIQP為2位、運算指令局部指針 EXLP為4位,總計6位,輸出的16條指令的寫入信息條目WI0-15 所對應(yīng)的運算指令用屏蔽信號EXMSK為16位。為了容易譯碼,指 針以2位單位按00、 01、 11、 IO的順序周期性更新??吹?位中的1 位就知道是否是相鄰序號,因此是適于范圍信號生成的編碼。由于寫 信息隊列指針WIQP是每隔4個而前進(jìn),因此OO、 01、 11、 10時指 向條目0、 4、 8、 12。另外,運算指令局部指針EXLP僅指向運算指 令,跳過其他指令而前進(jìn)。
右端是64那樣對輸出信號值標(biāo)注的序號。為了容易查表,僅在 運算指令用屏蔽信號EXMSK為"1"時進(jìn)行記載,在為"0"時為空 欄。在#1中,兩個指針都為"0" —致,因此表示出不存在先行的指 令,運算指令用屏蔽信號EXMSK全是"0"。寫信息隊列指針WIQP 保持"0"不變,運算指令局部指針EXLP如弁2 15那樣前進(jìn)時,先行 指令增加,與此相應(yīng)地,運算指令用屏蔽信號EXMSK被斷言。同樣, 在#20中,兩個指針都為4一致,因此不存在先行的指令,自此開始, 寫信息隊列指針WIQP保持4不變,運算指令局部指針EXLP如 #21 31、 16 19那樣在途中繞回(wraparound)前進(jìn)時,先行指令增 加,與此相應(yīng)地,運算指令用屏蔽信號EXMSK纟皮斷言。在#32以后 也是同樣的。并且,由寫信息隊列指針WIQP和載入存儲指令局部指 針LSLP生成載入存儲指令用屏蔽信號LSMSK的邏輯也是相同的。
如上所述,運算指令用屏蔽信號EXMSK生成邏輯乍看似復(fù)雜, 但邏輯電路例如如圖10所示那樣,在2輸入NAND換算中為50門 的小規(guī)模邏輯即可。EXMSK之上的橫線表示邏輯反相。為了比較, 圖11例示出由運算指令局部指針EXLP生成運算指令局部選擇信號 EXLS的4位譯碼邏輯。在2輸入NAND換算中為28門。4位譯碼部在控制部中被用于任意處,但上述屏蔽信號生成邏輯僅是2處,尤 其是無障礙的邏輯規(guī)模。
根據(jù)由如上述那樣生成的運算指令用屏蔽信號EXMSK,從圖8 所示的寫信息隊列WIQ的16條目取出在運算指令局部指針EXLP所 指的運算指令之前執(zhí)行的指令的寫信息,并取邏輯和,作為運算指令
用寫信息EX-WI進(jìn)行輸出。同樣,根據(jù)載入存儲指令用屏蔽信號 LSMSK,從寫信息隊列WIQ的16條目取出在載入存儲指令局部指針 LSLP所指的載入存儲指令之前執(zhí)行的指令的寫信息,并取邏輯和, 作為載入存儲指令用寫信息LS-WI進(jìn)行輸出。
同時,在全局指令緩存GIB級,用鎖存部81、 82對從全局指令 隊列GIQ輸出的運算指令EX-INST和載入存儲指令LS-INST進(jìn)行鎖 存,使之與局部指令緩存LSIB和EXIB級同步,輸入到運算指令和 載入存儲指令的寄存器讀信息譯碼部EX-RID和LS-RID并進(jìn)行譯碼, 生成運算指令和載入存儲指令的寄存器讀信息EXIB-RI和LSIB-RI。 然后,取寫信息EX-WI、 LS-WI和讀信息EXIB-RI、 LSIB-RI的每個 寄存器序號的邏輯積的關(guān)于所有寄存器序號的邏輯和,分別作為運算 指令和載入存儲指令的發(fā)出暫停EX-STL和LS-STL。發(fā)出暫停 EX-STL和LS-STL經(jīng)鎖存部83、 84而被輸出。
上述發(fā)出暫停被取反時,發(fā)出指令。在本實施方式中,運算指令 的運算和載入存儲指令的地址計算在1周期內(nèi)完成,因此,發(fā)出運算
指令和載入存儲指令時,其結(jié)果從下一周期發(fā)出的指令開始可以使 用。因此,若發(fā)出指令則寫信息隊列WIQ內(nèi)的對應(yīng)的寄存器寫信息 被清除。因此,將運算指令和載入存儲指令的發(fā)出暫停EX-STL和 LS-STL取反后的信號分別作為運算指令和載入存儲指令的寄存器寫 信息清除信號EX-WICLR和LS-WICLR。而載入指令的延遲是3,因 此通常等待2周期后,所對應(yīng)的寄存器寫信息被清除。但是,有時由 于高速緩存錯誤等,為了使載入數(shù)據(jù)成為可使用狀態(tài)而需要超過3周 期的周期數(shù)。因此,實際上輸入與要載入數(shù)據(jù)成為可使用狀態(tài)相符的 載入數(shù)據(jù)寄存器寫信息清除信號LD-WICLR來清除對應(yīng)的寄存器寫信息。
例如,也存在如圖6所示的程序的算后增量載入指令"mov @r0+, r4,,那樣更新兩個寄存器的指令。此時,將地址寄存器r0和 載入數(shù)據(jù)寄存器r4雙方的寫信息保存于1條指令的條目中。并且, 雙方的寄存器成為可使用狀態(tài)的定時分別是發(fā)出指令后的1個周期和 3個周期,是不同的。因此,基于載入存儲指令對載入指令的寄存器 寫信息清除信號LS-WICLR進(jìn)行的r0的寄存器寫信息清除是按寄存 器序號選擇性進(jìn)行的,保留載入數(shù)據(jù)寄存器r4的寄存器寫信息。而 在基于載入數(shù)據(jù)寄存器寫信息清除信號LD-WICLR進(jìn)行的r4的寄存 器寫信息清除時,其他寄存器寫信息已經(jīng)被清除,因此不需要按寄存 器序號選擇性進(jìn)行,而將載入指令用的條目的寄存器寫信息全部清 除。
圖12例示出圖6所示的程序的上述處理器IO進(jìn)行的流水線工作。
省略指令高速緩存訪問ici和IC2,從全局指令緩存GIB級開始 記述。首先,在起始的載入指令"mov @r0+, r4"的執(zhí)行中,通過 全局指令緩存GIB、局部指令緩存LSIB、局部寄存器讀LSRR、地址 計算LSA、數(shù)據(jù)高速緩存訪問DC1和DC2以及寄存器回寫WB的各 級處理來執(zhí)行指令。
在第2載入指令"mov @rl + , r5"的執(zhí)行中,由于與先行的載 入指令發(fā)生資源竟?fàn)?,因此在全局指令緩存GIB級中保持2周期后, 與起始載入指令同樣地進(jìn)行處理。
在第3減量測試指令"dt r3"的執(zhí)行中,通過全局指令緩存GIB、 局部指令緩存EXIB、局部寄存器讀EXRR、運算EX和寄存器回寫 WB的各級處理來執(zhí)行指令。
在第4加法運算指令"add r4, r5"的執(zhí)行中,由于與先行的減 量測試指令發(fā)生資源竟?fàn)?,因此在全局指令緩存GIB級中保持2周期 后,進(jìn)入全局指令緩存EXIB級,由于相對于先行的兩個載入指令存 在流程依賴,因此在局部指令緩存EXIB級中暫停3周期后,通過局 部寄存器讀EXRR、運算EX、以及寄存器回寫WB的各級處理來執(zhí)行指令。
在第5算后增量存儲指令"mov r5, @r2+"中,由于指令取得 是每次4條指令,因此比先行指令延遲1周期而進(jìn)入全局指令緩存 GIB級,由于與先行的載入指令發(fā)生資源竟?fàn)?,因此在全局指令緩?GIB級中保持2周期后,通過局部指令緩存LSIB、局部寄存器讀 LSRR、地址計算LSA、數(shù)據(jù)高速緩存訪問DC1以及存儲高速緩存地 址和數(shù)據(jù)寫入SBA和SBD的各級處理來執(zhí)行指令。
在循環(huán)最后的條件分支指令"bf_L00"的執(zhí)行中,通過全局指令 緩存GIB和分支BR的各級處理來執(zhí)行指令。分支處理與上述的亂序 方式處理器相同,通過反復(fù)執(zhí)行保持于全局指令隊列GIQ中的1次循 環(huán)的指令來實現(xiàn)。結(jié)果,在緊接BR級之后,執(zhí)行作為分支前指令的 循環(huán)起始指令"mov @r0+, r4"的全局指令隊列GIQ級。
第2循環(huán)也基本上以第1循環(huán)的3周期延遲而被執(zhí)行。其中,在 第3減量測試指令"dtr3"和第4加法運算指令"addr4, r5"的執(zhí)行 中,由于與第l循環(huán)的第4加法運算指令"add r4, r5"發(fā)生資源竟 爭,因此在全局指令緩存GIB級中被保持為2周期余量。結(jié)果,第3 減量測試指令"dtr3"在延遲反映其的2周期余量后被執(zhí)行,第4加 法運算指令"add r4, r5"的因流程依賴引起的暫停減少2周期而多 余的周期被抵消,與其他指令同樣地以第1循環(huán)的3周期延遲而被執(zhí) 行。第3循環(huán)以后與第2循環(huán)同樣地被執(zhí)行。
接著,說明各指令發(fā)出時的流程依賴檢查的工作。 圖12例示出各周期中的寫信息隊列WIQ的狀態(tài)。 在本工作例中,使用從r0到r5的6條寄存器,因此,對這些6 條寄存器進(jìn)行記載。與圖9相同,僅在值為"1"時進(jìn)行記載,在值 為"0"時為空欄。圖中,細(xì)雙線表示寫信息隊列指針WIQP所指的 條目,粗線表示運算指令局部指針EXLP所指條目之前的條目,細(xì)線 和粗線的雙線表示載入存儲指令局部指針LSLP所指條目之前的條 目。因此,從細(xì)雙線到粗線是運算指令的流程依賴檢查對象條目,從 細(xì)雙線到細(xì)線和粗線的雙線是載入存儲指令的流程依賴檢查對象條目。細(xì)雙線位于下方時,范圍在條目15繞回到條目0。
運算指令和載入存儲指令用寫信息EX-WI和LS-WI的狀態(tài)也與 圖9相同,僅在值為"1"時進(jìn)行記載,在值為"0"時為空欄。并且, 運算指令和載入存儲指令用讀信息EXIB-RI和LSIB-RI,在由于表示 應(yīng)進(jìn)行流程依賴檢查的寄存器而被斷言之處標(biāo)注了陰影線。因此,在 標(biāo)注了陰影線的欄中有"1"時,則發(fā)生流程依賴,需要流水線暫停, 因此,對運算指令和載入存儲指令的發(fā)出暫停EX-STL和LS-STL進(jìn) 行斷言。
首先,在全局指令緩存GIB級將起始4條指令鎖存于全局指令隊 列GIQ中,傳送至寫信息隊列WIQ中。同時,起始指令作為圖8的 LS-INST而被送往局部指令緩存LSIB級,第3指令作為EX-INST而 -陂送往局部指令緩存EXIB級。此時,寫信息隊列WIQ為空,寫信 息隊列指針WIQP、運算指令局部指針EXLP、載入存儲指令局部指 針LSLP都指向起始條目WIO。
在下一周期中,將起始4條指令的寄存器寫信息鎖存于寫信息隊 列WIQ的起始4條目WI0 WI3中,寫信息隊列指針WIQP指向條目 WI4,運算指令局部指針EXLP指向條目WI2,載入存儲指令局部指 針LSLP接著指向起始條目WIO。結(jié)果,如圖12所示那樣,在rO、 rl、 r4、 r5,運算指令用寫信息EX-WI被斷言,載入存儲指令用寫信息 LS-WI未被斷言。而且,r0和r3分別斷言,運算指令和載入存儲指 令用讀信息EXIB-RI和LSIB-RI在寄存器序號上不重復(fù),因此,運算 指令和載入存儲指令的發(fā)出暫停EX-STL和LS-STL被斷言。
在下一周期中,清除通過執(zhí)行第l指令和第3指令成為可利用狀 態(tài)的條目WIO的r0和條目WI2的r3的寄存器寫信息。另外,第5 算后增量存儲指令"movr5, @r2+"的寫信息被重新鎖存于條目WI4 中。第6條件分支指令"bf_L100"中沒有寄存器寫。另外,第7、 ? 指令是循環(huán)外指令,在不作為檢查對象的狀態(tài)下由分支取消,無論寫 什么都對工作沒有影響,因此,為了便于說明,對應(yīng)的條目WI6、 7 標(biāo)為空欄。并且,寫信息隊列指針WIQP指向條目WI8,運算指令局部指針EXLP指向條目WI3,載入存儲指令局部指針LSLP指向條目 WIl。結(jié)果,如圖所示,在rl、 r4、 r5中運算指令用寫信息EX-WI 被斷言,在r4中載入存儲指令用寫信息LS-WI被斷言。進(jìn)一步,運 算指令用讀信息EXIB-RI的r4和r5被斷言,載入存儲指令用讀信息 LSIB-RI的rl被斷言,運算指令用寫信息EX-WI和運算指令用讀信 息EXIB-RI有重疊,因此,運算指令發(fā)出暫停EX-STL被斷言。并且, 根據(jù)該信號,局部指令緩存EXIB級被暫停。
在下一周期中,清除通過執(zhí)行第2指令而成為可利用狀態(tài)的條目 WI1的rl的寄存器寫信息。另外,寫信息隊列指針WIQP接著指向 條目WI8,運算指令局部指針EXLP也接著指向條目WI3,載入存儲 指令局部指針LSLP指向條目WI4。結(jié)果,如圖12所示,在r4、 r5 中運算指令用寫信息EX-WI和載入存儲指令用寫信息LS-WI都被斷 言。進(jìn)而,運算指令用讀信息EXIB-RI的r4和r5被斷言,載入存儲 指令用讀信息LSIB-RI的r2被斷言,運算指令用寫信息EX-WI和運 算指令用讀信息EXIB-RI有重疊,因此,運算指令發(fā)出暫停EX-STL 被斷言。并且,根據(jù)該信號,局部指令緩存EXIB級被暫停。
在下一周期中,清除通過執(zhí)行第5指令而成為可利用狀態(tài)的條目 WI4的r2的寄存器寫信息。另外,第2循環(huán)的起始4條指令的寄存 器寫信息被鎖存于寫信息隊列WIQ的4條目WI8 WI11中,寫信息 隊列指針WIQP指向條目WI12,運算指令局部指針EXLP接著指向 條目WI3,載入存儲指令局部指針LSLP指向條目WI8。結(jié)果,如圖 12所示,在r5中運算指令用寫信息EX-WI和載入存儲指令用寫信息 LS-WI都被斷言。進(jìn)而,運算指令用讀信息EXIB-RI的r4和r5被斷 言,載入存儲指令用讀信息LSIB-RI的r0被斷言,運算指令用寫信 息EX-WI和運算指令用讀信息EXIB-RI有重疊,因此,運算指令發(fā) 出暫停EX-STL被斷言。然后,根據(jù)該信號,局部指令緩存EXIB級 被暫停。
在下一周期中,清除通過執(zhí)行第2循環(huán)的第l指令而成為可利用 狀態(tài)的條目WI8的r0的寄存器寫信息。另外,第5算后增量存儲指令"movr5, @r2+"的寫信息被重新鎖存于條目WI12中。并且,寫 信息隊列指針WIQP指向條目WIO,運算指令局部指針EXLP接著指 向條目WI3,載入存儲指令局部指針LSLP指向條目WI9。結(jié)果如圖 所示,運算指令用寫信息EX-WI全部被清除,在r4和r5中載入存儲 指令用寫信息LS-WI被斷言。進(jìn)而,運算指令用讀信息EXIB-RI的 r4和r5被斷言,載入存儲指令用讀信息LSIB-RI的rl被斷言,在寄 存器序號上沒有重疊,因此,運算指令和載入存儲指令的發(fā)出暫停 EX-STL和LS-STL未^皮斷言。
在下一周期中,清除通過執(zhí)行第2循環(huán)的第2指令來成為可利用 狀態(tài)的條目WI9的rl的寄存器寫信息。另夕卜,寫信息隊列指針WIQP 接著指向條目WIO,運算指令局部指針EXLP指向條目WI10,載入 存儲指令局部指針LSLP指向條目WI12。結(jié)果如圖12所示,在r4 和r5中,運算指令用寫信息EX-WI和載入存儲指令用寫信息LS-WI。 進(jìn)而,運算指令用讀信息EXIB-RI的r3被斷言,載入存儲指令用讀 信息LSIB-RI的r2被斷言,在寄存器序號上沒有重疊,因此,運算 指令和載入存儲指令的發(fā)出暫停EX-STL和LS-STL未被斷言。
在接下來的3周期中,分別進(jìn)行與3周期之前同樣的工作。不同 之處在于寫信息隊列WIQ的內(nèi)容錯開8條目。雖然未圖示,但其后 分別進(jìn)行與6周期之前同樣的處理。如上所述,由寫信息隊列WIQ 管理流程依賴,適當(dāng)?shù)剡M(jìn)行指令發(fā)出。
圖13例示出用本發(fā)明實施方式的處理器執(zhí)行第1程序時的循環(huán) 部的工作。
在此,在圖12例示的流水線工作的局部指令緩存級LSIB和 EXIB、或分支BR級中,使之代表各指令的執(zhí)行周期。在載入指令中, 地址計算LSA、數(shù)據(jù)高速緩存訪問DC1和DC2這三級視為延遲,在 分支指令中,分支BR、全局指令緩存GIB級視為延遲,因此,載入 指令和分支指令的延遲分別是3和2。首先,在第l周期執(zhí)行起始的 載入指令"mov@r0+, r4"和第3減量測試指令"dtr3"。在第2周 期執(zhí)行第2載入指令"mov @rl + , r5"和循環(huán)最后的條件分支指令"bf_L100",在第3周期執(zhí)行第5算后增量存儲指令"movr5, @r2+"。 然后,在第4周期開始第2循環(huán)的處理,執(zhí)行起始的載入指令"mov @r0+, r4"。在第l循環(huán)中,執(zhí)行的第3減量測試指令"dtr3"由于 未超越先行的第1循環(huán)的第4加法運算指令"add r4, r5,,而被未執(zhí) 行。進(jìn)一步,在第5周期中,除了與第2周期同樣的工作之外,還執(zhí) 行第l循環(huán)的第4加法運算指令"add r4, r5",在第6周期中,除 了與第3周期同樣的工作之外,還執(zhí)行第3減量測試指令"dtr3"。 其后,反復(fù)1次循環(huán)3周期的工作。
圖14例示出將載入延遲從圖14的3延長到9時的循環(huán)部的工作。 隨著載入延遲的增加,第4加法運算指令"addr4, r5"的執(zhí)行比 圖4延遲6周期。隨之第2循環(huán)的第3減量測試指令"dtr3"的執(zhí)行 也延遲6周期。在本發(fā)明的方式中,若執(zhí)行資源不同,則可用亂序方 式進(jìn)行處理,因此,運算流水線的執(zhí)行延遲不會波及其他而維持1次 循環(huán)3周期的工作,因載入延遲增加而導(dǎo)致性能降低是比較少的。但 是,這樣的工作需要高度的分支預(yù)測。尤其是在預(yù)測的命中/非命中不 確定時執(zhí)行條件分支指令,因此會發(fā)生分支預(yù)測的嵌套(nest),控 制變得復(fù)雜。
圖15表示在由分支流水線執(zhí)行圖14中在運算流水線中執(zhí)行的第 3減量測試指令"dtt3"的情況。
若如圖15所示那樣執(zhí)行,則第4加法運算指令"addr4, r5"的 執(zhí)行延遲不會波及,分支條件確定提前,不需要分支預(yù)測的嵌套。但 是,在圖8所示的電路中,不處理分支流水線上的寄存器讀寫,因此 需要增加電路。但是,在分支指令中還存在寄存器間接分支,由此優(yōu) 選也處理寄存器讀寫。寄存器間接分支用于從分支源起的移動 (displacement)指定分支達(dá)不到的長距離分支,因此認(rèn)為出現(xiàn)頻率較 低的程序也較多,用分支流水線處理寄存器讀寫而導(dǎo)致的成本增加, 未見得會提高性能。
在本實施方式中,在同一執(zhí)行資源內(nèi)進(jìn)行有序執(zhí)行,因此不會引 起反向依賴和輸出依賴的問題。但是,在不同資源之間若不適當(dāng)處理,則會引起問題。
圖16例示出本實施方式中引起反向依賴和輸出依賴的流水線工作。
起始的載入指令"mov@rl, rl"從寄存器rl所指的存儲器位置 將數(shù)據(jù)載入寄存器rl。第2載入指令"mov@rl, r2,,從寄存器rl所 指的存儲器位置將數(shù)據(jù)載入寄存器r2。第3存儲指令"movr2, @r0" 將寄存器r2的值存儲到寄存器r0所指存儲器位置。第4直接轉(zhuǎn)移指 令"mov#2, r2"將2寫入寄存器r2。第5直接轉(zhuǎn)移指令"mov#l, r0"將1寫入寄存器r0。第6加法運算指令"add r0, r2,,將寄存器 r0的值加到寄存器r2中。然后,最終的存儲指令與第3指令相同。
載入存儲指令在存儲器流水線執(zhí)行、立即傳送和加法運算指令在 運算流水線執(zhí)行時,最初的3條指令和最后的指令在存儲器流水線執(zhí) 行,從第4條開始的3條指令在運算流水線執(zhí)行。此時,第2載入指 令和第4、 6指令處于輸出依賴的關(guān)系,第3存儲指令和第4、 5條直 接轉(zhuǎn)移指令處于反向依賴的關(guān)系。并且,在存儲器流水線和運算流水
線中,有序執(zhí)行指令,因此,只要利用各執(zhí)行結(jié)果更新各局部寄存器 文件EXRF和LSRF,就會使輸出依賴和反向依賴不顯著。但是,要 在另 一 方流水線參照 一 方流水線的執(zhí)行結(jié)果,則需要在流水線之間傳 送執(zhí)行結(jié)果,有可能使輸出依賴和反向依賴顯著。圖16所示的例子 中,使用在運算流水線執(zhí)行的第5、 6條指令的執(zhí)行結(jié)果而在存儲器 流水線執(zhí)行最后的指令。因此,需要將第5、 6條指令的執(zhí)行結(jié)果從 運算流水線傳送到存儲器流水線。由于最后的指令在LSIB級生成讀 寄存器信息LSIB-RI,因此判斷出在該級中需要r0和r2的傳送。并 且,在判斷出的時刻,在最后的指令之前執(zhí)行的存儲器流水線指令的 LSRR級完成,反向依賴消除,即使將執(zhí)行結(jié)果從運算流水線傳送到 存儲器流水線,也沒有障礙。具體而言,判斷出第5、 6條指令分別 在第4、 5周期的回寫級WB回寫到局部寄存器文件EXRF中之后, 需要在第6周期的最后指令的LSIB級的起始傳送回寫的值,因此, 分別在第6、 7周期的復(fù)制級CPY傳送rO和r2。由于第3存儲指令所使用的r2的值在LSRR級不存在,因此不使 之讀出,但其后,不會從局部寄存器文件LSRF讀出,在存儲緩存數(shù) 據(jù)級SBD之前,生成值的時刻通過前送(forwarding)來取入。因此, 即使在第3存儲指令在LSRR級不讀出r2的情況下,只要將從運算 流水線傳送到存儲器流水線的值寫入到存儲器流水線的局部寄存器 文件LSRF的r2即可。結(jié)果,在存儲器流水線的局部寄存器文件LSRF 中,在基于第2條指令向r2寫入之前,進(jìn)行基于第6條指令的向r2 的寫入,輸出依賴顯著。因此,在第2載入指令中,不進(jìn)行向r2的 寄存器寫,僅進(jìn)行向第3存儲指令的數(shù)據(jù)前送。
上述的復(fù)制中,在局部寄存器文件EXRF和LSRF中增加專用的 讀寫端口或?qū)⑴c通常的讀寫共享現(xiàn)有的端口即可。對于控制成在共享 端口而使訪問發(fā)生竟?fàn)帟r使一方等待來逐次進(jìn)行訪問,只要是設(shè)計處 理器等數(shù)據(jù)處理裝置的通常的技術(shù)人員即可實現(xiàn)。另外,暫時不使用 執(zhí)行結(jié)果的情況非常少,因此若在向局部寄存器文件的回寫之后還在 緩存中保留值時,則即使不增加端口,也能進(jìn)行復(fù)制的情況較多。在 圖16所示的例子中,在回寫級WB之后設(shè)置1級緩存復(fù)制級 BUF/CPY,不需要用于傳送的寄存器讀端口。
在通常的流水線控制中,面向回寫級WB ,流過回寫信息 EXRR-WI、 EX-WI、和WB-WI。并且,在后續(xù)指令4吏用值的情況下, 在存在多個向同一序號的寄存器的回寫信息時,只要使用最新的值即 可。與此相對,在本發(fā)明的流水線控制中,增加了緩存復(fù)制級BUF/CPY 的回寫信息BFU/CPY-WI。而且,若流水線不同,未必是逐次執(zhí)行, 因此,對指令標(biāo)注序號來比較程序順序,識別選擇在按程序順序先于 讀出指令執(zhí)行的指令中最新的指令生成的值。在圖16中,直接使用 在寫信息隊列WIQ中標(biāo)注的序號。r2的值由指令序號為3和5的兩 條指令更新,由指令序號為6的存儲指令參照。因此,傳送并使用指 令序號為5的加法運算指令的結(jié)果。
如果程序順序相反,存儲指令為5號、加法運算指令為6號,則 傳送的值成為指令序號3號的直接轉(zhuǎn)移指令的結(jié)果。此時,只要再準(zhǔn)備l級緩存級,值保留在緩存中,則可實現(xiàn)來自緩存的傳送。
寫信息隊列WIQ具有16條目,識別需要4位,但若限制從緩存 傳送值的指令與參照值的指令的距離,則也可減少位數(shù)。而且,在程 序上在同一流水線執(zhí)行的指令連續(xù)的情況下,對于這些指令可使用相 同的識別序號,因此,即使是相同的位數(shù),也能放寬指令距離的限制。 例如,在圖16所示的例子中,由于集中到第1、 2、 3和第4、 5、 6 和第7這三組,因此,這7條指令的識別信息用2位就足夠。
若經(jīng)過緩存復(fù)制級BUF/CPY,則失去回寫信息,因此,會失去僅 在一方的局部寄存器文件具有最新值這樣的信息。因此,對各寄存器 定義寄存器狀態(tài)。在圖16中對各寄存器保持2位的信息REGI[n](n: 0-15),記錄全部最新、存儲器流水線的局部寄存器文件LSRF最新、 以及運算流水線的局部寄存器文件EXRF最新這三種狀態(tài)。在圖16 中示出r0、 rl和r2的信息??諜?、LS和EX分別表示全部最新、存 儲器流水線的局部寄存器文件LSRF最新、以及運算流水線的局部寄 存器文件EXRF最新這三種狀態(tài)。
處理反向依賴和輸出依賴關(guān)系的另 一 方法是進(jìn)行控制以使后續(xù) 指令的寄存器寫入不超越先行指令的寄存器讀出和寄存器寫入。圖17 表示的例子是擴(kuò)大圖8的寫信息隊列WIQ作為也保持讀信息的讀寫 信息隊列RWIQ,不僅能檢測流程依賴,還可檢測反向依賴和輸出依 賴。
讀寫信息隊列RWIQ由讀寫信息譯碼部RWID0 3、 16條指令的 讀寫信息條目RWI0 15、指定新的讀寫信息設(shè)置位置的讀寫信息隊列 指針RWIQP、指定處于局部指令緩存級EXIB和LSIB的運算指令和 載入存儲指令的位置的載入存儲指令局部指針LSLP、運算指令局部 指針EXLP、指向載入接下來可利用的載入數(shù)據(jù)的指令的載入數(shù)據(jù)寫 指針LDWP、以及對這些指針進(jìn)行譯碼的讀寫信息隊列指針譯碼部 RWIP-DEC構(gòu)成。
在讀寫信息隊列RWIQ中,首先,讀寫信息譯碼部RWID0 3接 收鎖存于局部指令隊列GIQ中的4條指令,生成這些指令的寄存器寫信息。然后,當(dāng)接收到的指令的有效信號IV被斷言后,按照通過讀
寫信息隊列指針RWIQP的譯碼而生成的讀寫信息隊列選擇信號 RWIQS,將生成的寄存器讀寫信息鎖存到RWI0 3、 RWI4 7、 RWI8 11、或RWI12~15。讀寫信息隊列指針RWIQP指向在鎖存于 讀寫信息隊列RWIQ中的指令中最早的指令,當(dāng)該最早的指令起4條 指令的寄存器讀寫信息成為不需要的而被刪除時,則在讀寫信息隊列 RWIQ中產(chǎn)生空閑,可進(jìn)行新的4條指令的讀寫信息的鎖存。然后, 若重新鎖存了讀寫信息,則使讀寫信息隊列指針RWIQP前進(jìn),以指 向下4條。
而運算指令局部指針EXLP和載入存儲指令局部指針LSLP指定 以后要執(zhí)行的指令,從上述最早的指令到這些指針指定的指令之前的 指令,是要在以后執(zhí)行的指令之前先執(zhí)行的指令,成為流程依賴、反 向依賴和輸出依賴的檢查對象指令。因此,讀寫信息隊列指針譯碼部 RWIP-DEC生成用于從讀寫信息隊列指針RWIQP、運算指令和載入 存儲指令的局部指針EXLP和LSLP中選擇全部流程依賴、反向依賴 和輸出依賴的檢查對象范圍的條目的運算指令和載入存儲指令用屏 蔽信號EXMSK和LSMSK。
并且,根據(jù)運算指令用屏蔽信號EXMSK,從讀寫信息隊列RWIQ 的16條中取出在運算指令局部指針EXLP所指的運算指令前先執(zhí)行 的指令的讀寫信息,并取邏輯和,作為運算指令用讀寫信息EX-WI 和EX-RI進(jìn)行輸出。同樣,根據(jù)載入存儲指令用屏蔽信號LSMSK, 從讀寫信息隊列RWIQ的16條中取出在載入存儲指令局部指針LSLP 所指的載入存儲指令之前先執(zhí)行的指令的讀寫信息,并取邏輯和,作 為載入存儲指令用讀寫信息LS-WI和LS-RI進(jìn)行輸出。
同時,在全局指令緩存GIB級,用鎖存部81、 82鎖存從全局指 令隊列GIQ輸出的運算指令EX-INST和載入存儲指令LS-INST,使 其與局部指令緩存LSIB和EXIB級同步,輸入到運算指令和載入存 儲指令的寄存器讀寫信息譯碼部EX-RWID和LS-RWID并進(jìn)行譯碼, 生成運算指令和載入存儲指令的寄存器讀寫信息EXIB-RI、EXIB-WI、LSIB-RI、LSIB-WI。然后,取寫信息EX-WI、LS-WI和讀信息EXIB-RI、 LSIB-RI的每個寄存器序號的邏輯積的、關(guān)于所有寄存器序號的邏輯 和,分別檢測運算指令和載入存儲指令的流程依賴。同樣,取讀信息 EX-RI、 LS-RI和寫信息EXIB-WI、 LSIB-WI的每個寄存器序號的邏 輯積的、關(guān)于所有寄存器序號的邏輯和,分別檢測運算指令和載入存 儲指令的反向依賴。然后,取寫信息EX-WI、 LS-WI和寫信息 EXIB-WI、 LSIB-WI的每個寄存器序號的邏輯積的、關(guān)于所有寄存器 序號的邏輯和,分別檢測運算指令和載入存儲指令的輸出依賴。然后, 取這三種依賴信息的邏輯和,作為發(fā)出暫停EX-STL和LS-STL。
與圖8所示的寫信息隊列WIQ相同,這些發(fā)出暫停被取反時,發(fā) 出指令。在本實施方式中,使運算指令的運算和載入存儲指令的地址 計算在l周期中完成,因此,當(dāng)發(fā)出運算指令和載入存儲指令時,其 結(jié)果從下一周期發(fā)出的指令開始成為可以使用狀態(tài)。而且,當(dāng)發(fā)出指 令時不需要反向依賴檢查,因此也不需要寄存器讀信息。因此,若發(fā) 出指令則清除讀寫信息隊列RWIQ內(nèi)的對應(yīng)的寄存器讀寫信息。因 此,將對運算指令和載入存儲指令的發(fā)出暫停EX-STL和LS-STL取 反后的信號分別作為運算指令和載入存儲指令的寄存器讀寫信息清 除信號EX-RWICLR和LS-RWICLR。而載入指令的延遲是3,因此 通常等待2周期后將所對應(yīng)的寄存器寫信息清除。但是,有時由于高 速緩存錯誤等,也需要超過3周期的周期數(shù),以使載入數(shù)據(jù)成為可使 用狀態(tài)。因此,實際上輸入與載入數(shù)據(jù)成為可使用狀態(tài)相符的載入數(shù) 據(jù)寄存器寫信息清除信號LD-WICLR來清除對應(yīng)的寄存器寫信息。
圖18例示出由具有讀寫信息隊列RWIQ (參照圖17)的處理器 10進(jìn)行的與圖16所示程序相同的程序的流水線工作。
寄存器讀寫信息在各條目中,讀寫分別為16個寄存器的16位, 共計32位,^旦在例示的程序中, <又<吏用r0、 rl和r3三條,因此對于 三條讀寫信息6位,表示各周期的值。條目也示出16條中從0到8 和15這10條。與圖12所示情況相同,讀寫信息隊列RWIQ的值僅 在為"1"時進(jìn)行記載,空欄表示"0"。另外,來自讀寫信息隊列RWIQ的輸出LS-WI、 LS-RI、 EX-WI和EX-RI的值也是僅在為"1" 時進(jìn)行記載,空欄表示"0"。并且,在運算指令和載入存儲指令的 寄存器讀寫信息EXIB-RI、 EXIB-WI、 LSIB-RI和LSIB-WI的值為"1"
時標(biāo)注陰影線,為"0"時是空欄。因此,若存在流程依賴和反向依
賴,則"r和陰影線位置重疊。
在第2、 3周期,發(fā)生rl的LS-WI與LSIB-WI的重疊,表示第1 指令和第2指令為流程依賴。結(jié)果,第2指令的發(fā)出暫停2周期。另 外,從第2周期到第5周期,發(fā)生r2的EX-RI與EXIB-WI的重疊, 表示第3指令和第4指令為反向依賴。結(jié)果,第4指令的發(fā)出暫停5 周期。對于輸出依賴,欄內(nèi)顯示不一致,因此不重疊,但r2的EX-RI 與EXIB-WI在從第2周期到第5周期同時為1,表示第2指令與第4 指令為輸出依賴。即,第4指令不僅因為上述反向依賴,還由于輸出 依賴而暫停。進(jìn)一步,在第6、 7周期發(fā)生r0的LS-WI和LSIB-RI 的重疊,表示第5指令和第7指令為流程依賴。結(jié)果,第7指令的發(fā) 出暫停2周期。
如此,雖然增加了依賴關(guān)系檢查機(jī)構(gòu)的電路規(guī)模,且執(zhí)行周期也 較上述方式增加,但可進(jìn)行統(tǒng)一的依賴關(guān)系檢查,不需要管理最新寄 存器值存在于哪里。
與此相對,在上述方式中,具有電路規(guī)模小、性能強的優(yōu)點。能 夠以局部寄存器寫為基本,將向其他流水線的寄存器寫抑制為必要的 最小限度,因此也適于低功耗化。
以上具體說明了由本發(fā)明人完成的發(fā)明,但本發(fā)明不限于此,不 言而喻,在不脫離其要旨的范圍內(nèi)可進(jìn)行各種變更。
例如,在上述例子中,進(jìn)行控制以使后續(xù)指令的寄存器寫入不超 越先行指令的寄存器寫入,但在先行指令的寄存器寫入被向同一寄存 器的后續(xù)指令的寄存器寫入超越時,也可以進(jìn)行控制來抑制先行指令 的寄存器寫入。采用這樣的控制,則可阻止寄存器的保持信息的破壞, 因此能夠保持處于輸出依賴關(guān)系的指令的執(zhí)行結(jié)果的匹配性。
在以上說明中,主要就背景技術(shù)的利用領(lǐng)域的處理器對由本發(fā)明人完成的發(fā)明進(jìn)行了說明,但本發(fā)明不限于此,也能夠適用于進(jìn)行數(shù) 據(jù)處理的數(shù)據(jù)處理裝置。
本發(fā)明能將至少包括多個執(zhí)行資源作為適用條件。
權(quán)利要求
1. 一種數(shù)據(jù)處理裝置,包括能夠分別進(jìn)行用于指令執(zhí)行的預(yù)定處理的多個執(zhí)行資源,能夠通過上述多個執(zhí)行資源進(jìn)行流水線處理,其特征在于對于在相同的執(zhí)行資源中處理的指令,上述執(zhí)行資源按照該指令的流程順序用有序方式進(jìn)行處理;對于在互不相同的執(zhí)行資源中處理的指令,上述執(zhí)行資源與該指令的流程順序無關(guān)而用亂序方式處理。
2. 根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理裝置,其特征在于 上述數(shù)據(jù)處理裝置包括能夠取得指令的指令取得單元, 上述指令讀取單元包括全局指令隊列,能夠鎖存所取得的指令;以及信息隊列,能夠管理根據(jù)鎖存于上述全局指令隊列中的指令而生 成的寄存器寫信息,并基于按各執(zhí)行資源而不同的范圍的先行指令的 寄存器寫信息來檢查作為與先行指令的冒險要因的流程依賴。
3. 根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理裝置,其特征在于上述信息隊列被控制為,使后續(xù)指令的寄存器寫入不超越先行指 令的寄存器讀出。
4. 根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理裝置,其特征在于按上述多個執(zhí)行資源中的每個執(zhí)行資源而配置局部寄存器。
5. 根據(jù)權(quán)利要求4所述的數(shù)據(jù)處理裝置,其特征在于器寫入。
6. 根據(jù)權(quán)利要求4所述的數(shù)據(jù)處理裝置,其特征在于 上述執(zhí)行資源包括能夠基于上述指令進(jìn)行運算執(zhí)行的運算執(zhí)行單元;和能夠進(jìn)行數(shù)據(jù)的載入和存儲的載入存儲單元,上述局部寄存器包括運算指令用局部寄存器文件和載入存儲指令用局部寄存器文件,上述局部寄存器文件配置在上述運算執(zhí)行單元內(nèi),上述局部寄存器文件被配置在上述載入存儲單元內(nèi),由此能夠確保寄存器讀出的局部性。
7. 根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理裝置,其特征在于上述信息隊列被控制為使后續(xù)指令的寄存器寫入不超越先行指 令的寄存器寫入。
8. 根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理裝置,其特征在于 上述信息隊列在對同一寄存器的后續(xù)指令的寄存器寫入超越先行指令的寄存器寫入時,抑制先行指令的寄存器寫入。
全文摘要
本發(fā)明提供一種數(shù)據(jù)處理裝置,用有序方式那樣的較小規(guī)模的硬件,實現(xiàn)亂序方式那樣的不需要整體同步的方式,提高處理的局部性并提高功率效率。數(shù)據(jù)處理裝置(10)包括能夠分別進(jìn)行用于指令執(zhí)行的預(yù)定處理的多個執(zhí)行資源(EXU、LSU),能夠通過上述多個執(zhí)行資源進(jìn)行流水線處理。并且,上述執(zhí)行資源對于在相同的執(zhí)行資源中處理的指令,按照該指令的流程順序用有序方式進(jìn)行處理,對于在互不相同的執(zhí)行資源中處理的指令,與該指令的流程順序無關(guān)地用亂序方式進(jìn)行處理。由此,使執(zhí)行資源內(nèi)的局部處理簡單化,能夠用小規(guī)模的硬件加以實現(xiàn),不需要跨執(zhí)行資源的大范圍處理的同步,能夠提高處理的局部性和功率效率。
文檔編號G06F9/38GK101414252SQ20081016999
公開日2009年4月22日 申請日期2008年10月16日 優(yōu)先權(quán)日2007年10月19日
發(fā)明者荒川文男 申請人:株式會社瑞薩科技