專利名稱:用于堆棧式寄存器堆的寄存器保存引擎的后備存儲(chǔ)緩沖器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體來(lái)說(shuō)涉及處理器領(lǐng)域,且更特定來(lái)說(shuō)涉及用于堆棧式寄存器堆架構(gòu)中 的寄存器保存引擎的后備存儲(chǔ)緩沖器。
背景技術(shù):
RISC處理器的特征是相對(duì)較小的指令集,其中每一指令執(zhí)行單個(gè)指令,例如, 算術(shù)、邏輯或載入/存儲(chǔ)操作。算術(shù)及邏輯指令從一個(gè)或一個(gè)以上通用寄存器(GPR) 獲得其操作數(shù)并將其結(jié)果寫入到所述通用寄存器。GPR是架構(gòu)式寄存器。也就是說(shuō), 其包括以指令集架構(gòu)明確識(shí)別且由指令直接尋址的離散存儲(chǔ)器位置。GPR在硬件中通常實(shí)施為高速、多端口寄存器陣列,每一寄存器均具有所述指令 集所界定的字寬(例如,32或64個(gè)位)。此物理寄存器陣列稱作物理寄存器堆。在直 接映射的寄存器實(shí)施方案中,所述物理寄存器堆中寄存器的數(shù)目與架構(gòu)式GPR的數(shù)目 精確地匹配,且每一邏輯GPR識(shí)別符均映射到一特定硬件寄存器。為獲得較高性能, 且為支持超標(biāo)量管線,許多調(diào)制解調(diào)器處理器將邏輯GPR識(shí)別符從物理寄存器堆中的 物理寄存器去耦。寄存器重命名、緩沖器重排序等等是所屬技術(shù)領(lǐng)域中已知的用于將 邏輯GPR識(shí)別符從物理寄存器去耦的技術(shù)。無(wú)論是直接映射還是重命名,跨越許多軟 件程序管理物理寄存器堆是一個(gè)設(shè)計(jì)挑戰(zhàn),且通常是一個(gè)性能瓶頸。多數(shù)現(xiàn)代軟件在本質(zhì)上都是模塊化的。也就是說(shuō), 一個(gè)程序可"調(diào)用"或?qū)⒖刂?轉(zhuǎn)移給另一程序(可不同地稱作函數(shù)、子例程、子模塊等等)。所調(diào)用的程序又可調(diào) 用另一程序,依此類推,從而導(dǎo)致程序嵌套,通常到一相當(dāng)大的深度。在處理器的執(zhí) 行期間,每一程序(也稱作上下文)均分配有某些處理器資源,其中包含若干GPR。 分配給程序的GPR數(shù)目可通過(guò)編譯器對(duì)所述程序中指令的分析來(lái)確定,且可介于從少 數(shù)GPR到整個(gè)架構(gòu)式集合的GPR的范圍內(nèi)。當(dāng)?shù)谝怀绦蛘{(diào)用第二程序(也稱作上下 文交換)時(shí),所述第一 (或調(diào)用)程序變?yōu)椴换顒?dòng),而所述第二 (或被調(diào)用)程序分 配有單獨(dú)的資源(其中包含其自身的GPR組)并開(kāi)始執(zhí)行。當(dāng)?shù)诙绦蛲瓿蓤?zhí)行時(shí), 將其資源解除分配、將資源重新分配給調(diào)用程序(如果必要)、且調(diào)用程序再繼續(xù)執(zhí)行。在某些現(xiàn)有技術(shù)處理器(例如英特爾(Intel) /~960)中,上下文交換或新程序促 使所述處理器將物理寄存器堆的全部?jī)?nèi)容存儲(chǔ)到存儲(chǔ)器,從而使所述新程序可獲得整 個(gè)物理寄存器堆。當(dāng)被調(diào)用程序完成執(zhí)行并將控制返回到其調(diào)用程序時(shí),先前保存的 寄存器值恢復(fù)到物理寄存器堆,且調(diào)用程序的執(zhí)行繼續(xù)。將物理寄存器堆內(nèi)容保存到"后備存儲(chǔ)器",例如系統(tǒng)存儲(chǔ)器(RAM)。當(dāng)所述后備存儲(chǔ)器包括芯片外RAM時(shí), 為減輕每一上下文交換的多個(gè)芯片外存儲(chǔ)器存取的性能影響, 一處理器可提供一個(gè)或 —個(gè)以上"影子"或"高速緩存"寄存器堆(其可包括實(shí)際寄存器或者可包括芯片上 高速緩沖存儲(chǔ)器)用以存儲(chǔ)物理寄存器堆的內(nèi)容。然而,即使在影子寄存器存儲(chǔ)裝置 的情形下,也必須一次性地存儲(chǔ)/檢索整個(gè)物理寄存器堆,從而施加性能沖擊。
一種由許多調(diào)制解調(diào)器處理器采用的消除一次性存儲(chǔ)及檢索整個(gè)物理寄存器堆 的需要的技術(shù)稱作堆棧式寄存器堆架構(gòu),在堆棧式寄存器堆架構(gòu)中,高級(jí)處理器控制 器將物理寄存器堆視為具有無(wú)限深度的邏輯堆棧。通過(guò)在程序被調(diào)用時(shí)向所述程序遞 增地分配寄存器并在必要時(shí)保存先前分配的寄存器的內(nèi)容來(lái)將此邏輯無(wú)限堆桟實(shí)施于 物理寄存器堆中。
圖1繪示代表性堆棧式寄存器堆架構(gòu)實(shí)施方案的功能性方塊圖。物理寄存器堆1 包括高速多端口物理寄存器陣列,所述陣列包含至少與指令集架構(gòu)中存在的GPR —樣 多的寄存器。例如,物理寄存器堆l可包括從底部的物理寄存器O (PRO)到頂部的物 理寄存器127 (PR127)范圍內(nèi)的128個(gè)寄存器。兩個(gè)邏輯指針實(shí)施堆棧管理堆棧頂 部指針及保存/恢復(fù)指針。
最初將這兩個(gè)指針設(shè)定為PR0。隨著程序被調(diào)用并向其分配寄存器,所述堆棧頂 部指針向上移動(dòng)。當(dāng)幾乎所有可獲得的物理寄存器均己被分配,且一新調(diào)用程序需要 的寄存器數(shù)目多于物理寄存器堆l中剩余的未經(jīng)分配的寄存器數(shù)目時(shí),所述堆棧頂部 指針將"繞回",且開(kāi)始從物理寄存器堆1的底部分配寄存器,從PRO開(kāi)始。然而, 在此發(fā)生之前,必須將物理寄存器堆1底部充足數(shù)目的寄存器的內(nèi)容保存到后備存儲(chǔ) 器3,例如系統(tǒng)存儲(chǔ)器(RAM)。
寄存器保存引擎2中斷處理器,并執(zhí)行必要的用于執(zhí)行寄存器讀取及存儲(chǔ)器存儲(chǔ) 操作的指令來(lái)將物理寄存器堆1底部的最近分配的寄存器的內(nèi)容保存到后備存儲(chǔ)器3。 寄存器保存引擎2使保存/恢復(fù)指針遞增,這可指示所述指針下方的寄存器可供用于分 配給新調(diào)用的程序。當(dāng)寄存器保存引擎2完成寄存器保存操作并放棄對(duì)處理器的控制 時(shí),所述處理器控制器向下一程序分配寄存器并使堆棧頂部指針遞增,從而在內(nèi)容已 保存到后備存儲(chǔ)器3的寄存器已被重新分配且由所調(diào)用程序利用時(shí)使所述指針繞回并 使其遞增以越過(guò)所述寄存器。
類似地,當(dāng)所調(diào)用程序完成執(zhí)行并將控制返回給調(diào)用程序時(shí),所述堆棧退棧,且 將分配給所調(diào)用程序的寄存器解除分配或使其可供用于分配給其它程序。如果不是所 有與調(diào)用程序相關(guān)聯(lián)的數(shù)據(jù)都仍在物理寄存器堆1中一也就是說(shuō),如果調(diào)用程序的寄 存器中的一個(gè)或一個(gè)以上已被重新分配一則寄存器保存引擎2再次中斷處理器、從后 備存儲(chǔ)器3中檢索多數(shù)最近所保存的寄存器的內(nèi)容、將數(shù)據(jù)恢復(fù)到物理寄存器堆1、 將所述寄存器分配給調(diào)用程序、并使保存/恢復(fù)指針遞增以指示所述寄存器已被分配且 含有有效數(shù)據(jù)。
堆棧式寄存器堆系統(tǒng)以較大的物理寄存器堆1、以相對(duì)狹窄的程序嵌套深度且/或以分配給每一程序的相對(duì)較少的寄存器來(lái)提供最佳性能。在這些條件下,堆棧頂部 指針僅穿越物理寄存器堆1向上及向下移動(dòng),視需要沒(méi)有延遲地將寄存器分配給程序 并將其解除分配。然而,隨著程序的數(shù)目增加,且/或一個(gè)或一個(gè)以上程序需要大量寄 存器,處理器遭受到寄存器保存引擎2做出的許多次中斷以保存來(lái)自物理寄存器堆1 中的寄存器的數(shù)據(jù)并將所述數(shù)據(jù)恢復(fù)到所述寄存器,以便可將寄存器重新分配給新的 程序。
一種增加堆棧式寄存器堆系統(tǒng)的性能的方式是僅增加物理寄存器堆1的大小。雖 然這樣的確提供較高性能,但物理寄存器堆l中的寄存器通常是高速多端口寄存器。 每一寄存器可包含(例如)三到五個(gè)讀取及寫入端口。此外,為獲得操作調(diào)度及寄存 器分配的靈活性,每一物理寄存器的讀取端口都必須路由到每一管線中的每一執(zhí)行管 道階段,且每一管線中的回寫管道階段都必須連接到物理寄存器堆中的每一寄存器的 寫入端口。因此,增加物理寄存器堆1的大小在門數(shù)及布線復(fù)雜度方面是昂貴的。在 任何既定的時(shí)間,僅有一個(gè)程序正在執(zhí)行,從而僅存取物理寄存器堆l中的寄存器的 一個(gè)小子集。因此,增加物理寄存器堆l的大小招致大量的面積及復(fù)雜度成本,以及 對(duì)昂貴硬件的較低應(yīng)用。
發(fā)明內(nèi)容
在一個(gè)或一個(gè)以上實(shí)施例中,后備存儲(chǔ)緩沖器插置在堆棧式寄存器堆架構(gòu)中的物 理寄存器堆與后備存儲(chǔ)器之間。所述后備存儲(chǔ)緩沖器允許將來(lái)自分配給不活動(dòng)程序的 寄存器的數(shù)據(jù)臨時(shí)存儲(chǔ)在芯片上,釋放物理寄存器堆中的寄存器以重新分配給新的程 序。當(dāng)程序完成并將控制返回給先前的不活動(dòng)程序時(shí),可從后備存儲(chǔ)緩沖器檢索與所 述不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù)(如果先前已保存),并將其恢復(fù)到物理寄存器堆中的寄存 器以及重新分配給所述不活動(dòng)程序的寄存器。當(dāng)后備存儲(chǔ)緩沖器己滿時(shí),僅需將數(shù)據(jù)
寫入到后備存儲(chǔ)器,從而招致需用于芯片外RAM存取的大量性能降級(jí)及功率消耗。
一個(gè)實(shí)施例涉及一種用于管理具有專用后備存儲(chǔ)緩沖器的堆棧式寄存器堆系統(tǒng) 的方法。將來(lái)自物理寄存器堆的一個(gè)或一個(gè)以上寄存器分配給第一程序,且將與所述 第一程序相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)在所分配的寄存器中。將與第一程序相關(guān)聯(lián)的數(shù)據(jù)選擇性 地保存到所述專用后備存儲(chǔ)緩沖器,且釋放分配給第一程序的一個(gè)或一個(gè)以上寄存器 用以分配給第二程序。在第一程序的繼續(xù)執(zhí)行之前,將與第一程序相關(guān)聯(lián)的數(shù)據(jù)從專 用后備存儲(chǔ)緩沖器恢復(fù)到一個(gè)或一個(gè)以上寄存器并將所述寄存器重新分配給第一程 序。
另一實(shí)施例涉及處理器。所述處理器包含一物理寄存器堆,所述物理寄存器堆包 括至少與處理器指令集架構(gòu)中界定的通用寄存器的數(shù)目一樣多的寄存器。所述寄存器 動(dòng)態(tài)地分配給軟件程序。所述處理器還包含一寄存器保存引擎,所述寄存器保存引擎 操作以選擇性地保存來(lái)自分配給不活動(dòng)程序的寄存器的數(shù)據(jù)并在所述程序變?yōu)榛顒?dòng)之前將數(shù)據(jù)恢復(fù)到所述寄存器。所述處理器進(jìn)一步包含一后備存儲(chǔ)緩沖器,所述后備存 儲(chǔ)緩沖器專用于寄存器保存引擎且操作以存儲(chǔ)從分配給不活動(dòng)程序的寄存器保存的數(shù) 據(jù)。
圖1是現(xiàn)有技術(shù)堆棧式寄存器堆的方塊圖。 圖2是處理器的功能性方塊圖。
圖3是其中包含后備存儲(chǔ)緩沖器的堆棧式寄存器堆的功能性方塊圖。 圖4是一種用于管理堆棧式寄存器堆架構(gòu)的方法的流程圖。
具體實(shí)施例方式
圖2繪示處理器10的功能性方塊圖。處理器10根據(jù)控制邏輯14來(lái)執(zhí)行指令執(zhí) 行管線12中的指令。管線12可以是具有多個(gè)并行管線(例如,12a及12b)的超標(biāo)量 設(shè)計(jì)。每一管線12a、 12b均包含組織成若干管道階段的各種寄存器或鎖存器16,及 一個(gè)或一個(gè)以上算術(shù)邏輯單元(ALU) 18。管線12a、 12b從指令高速緩存器(I-高速 緩存器或1$ ) 20提取指令,其中存儲(chǔ)器尋址及許可由指令側(cè)轉(zhuǎn)換后備緩沖器(ITLB) 22來(lái)管理。
從數(shù)據(jù)高速緩存器(D-高速緩存器或DS ) 24存取數(shù)據(jù),其中存儲(chǔ)器尋址及許可 由主轉(zhuǎn)換旁視緩沖器(TLB) 26管理。在各種實(shí)施例中,ITLB 22可包括部分TLB 26 的副本?;蛘?,ITLB 22與TLB 26可集成在一起。類似地,在處理器10的各種實(shí)施 例中,可將I-高速緩存器20和D-高速緩存器24集成或聯(lián)合在一起。在存儲(chǔ)器介面34 的控制下,I-高速緩存器20及/或D-高速緩存器24中的失誤導(dǎo)致對(duì)主(芯片外)存儲(chǔ) 器36的存取。
管道階段寄存器或鎖存器16及ALU 18可從物理寄存器堆28中的寄存器讀取操 作數(shù)并/或?qū)⒔Y(jié)果寫入到所述寄存器。物理寄存器堆28由含有后備存儲(chǔ)緩沖器32的寄 存器保存引擎30來(lái)管理。后備存儲(chǔ)緩沖器32經(jīng)由存儲(chǔ)器接口 34連接到主存儲(chǔ)器36。 下文將更詳細(xì)描述物理寄存器堆28、寄存器保存引擎30及后備存儲(chǔ)緩沖器32的操作。
處理器10可包含輸入/輸出(I/O)接口38,其控制對(duì)各種外圍裝置40、 42的存 取。所屬技術(shù)領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識(shí)到,可以對(duì)處理器10做出許多變化。例如,處理 器10可包含用于I及D高速緩存器中的一者或兩者的第二階層(L2)高速緩存器。 另外,可將所繪示的位于處理器10中的一個(gè)或一個(gè)以上功能塊從一特定實(shí)施例中省 去。
圖3繪示處理器10的堆棧式寄存器堆架構(gòu)的功能性方塊圖。邏輯無(wú)限寄存器堆 棧實(shí)施于物理寄存器堆28中,物理寄存器堆28包含至少與處理器的指令集架構(gòu)所界 定的GPR—樣多的物理寄存器。隨著將多個(gè)寄存器群組分配給新調(diào)用的程序,堆棧頂
7部指針遞增。將堆棧頂部指針下方(及保存/恢復(fù)指針上方)的寄存器分配給程序,并 釋放堆棧頂部指針上方(及保存/恢復(fù)指針下方)的寄存器用以分配給新程序。隨著程 序完成執(zhí)行并將控制返回給其調(diào)用程序,堆棧頂部指針遞增分配給已完成程序的寄存 器的數(shù)目。當(dāng)程序被調(diào)用并請(qǐng)求分配比物理寄存器堆28中剩余的未經(jīng)分配的寄存器的數(shù)目更多的寄存器時(shí),寄存器保存引擎30保存來(lái)自物理寄存器堆28的與不活動(dòng)程序相關(guān) 聯(lián)的數(shù)據(jù),也就是存儲(chǔ)在分配給不活動(dòng)程序的寄存器中的數(shù)據(jù)。寄存器保存引擎30 使保存/恢復(fù)指針遞增。這可指示保存/恢復(fù)指針下方(及堆棧頂部指針上方)的物理寄 存器可供用于分配給新的程序。在激活不活動(dòng)程序之前,寄存器保存引擎30檢驗(yàn)物理寄存器堆28以確保已分配 給不活動(dòng)程序的所有寄存器均保持分配給所述不活動(dòng)程序,且因此含有與所述不活動(dòng) 程序相關(guān)聯(lián)的數(shù)據(jù)。如果已重新分配一個(gè)或一個(gè)以上先前分配給不活動(dòng)程序的寄存器, 則寄存器保存引擎30將所保存的數(shù)據(jù)恢復(fù)到物理寄存器堆28中可獲得的寄存器。一 旦恢復(fù)所述數(shù)據(jù),寄存器保存引擎30即使保存/恢復(fù)指針遞增所恢復(fù)寄存器的數(shù)目, 這可指示保存/恢復(fù)指針上方(及堆棧頂部指針下方)的寄存器分配給一程序。然后可 激活不活動(dòng)程序,其中先前分配給所述不活動(dòng)程序的所有寄存器均含有與去激活所述 程序時(shí)其含有的數(shù)據(jù)相同的數(shù)據(jù)。所屬技術(shù)領(lǐng)域中的技術(shù)人員應(yīng)注意,在此論述中, 為方便起見(jiàn)使用術(shù)語(yǔ)在指針"上方"及"下方",參照?qǐng)D3。實(shí)際上,堆棧頂部指針及 保存/恢復(fù)中的一者或兩者可"繞回",且其相關(guān)位置顛倒。為避免與將物理寄存器的內(nèi)容直接保存及恢復(fù)到后備存儲(chǔ)器36 (例如,芯片外 RAM)的現(xiàn)有技術(shù)實(shí)踐相關(guān)聯(lián)的延遲及功率消耗,在一個(gè)或一個(gè)以上實(shí)施例中,寄存 器保存引擎30包含后備存儲(chǔ)緩沖器32。后備存儲(chǔ)緩沖器32臨時(shí)存儲(chǔ)從物理寄存器堆 28中的寄存器保存及恢復(fù)到所述寄存器的數(shù)據(jù)。寄存器保存引擎30僅需存取后備存 儲(chǔ)器36以在后備存儲(chǔ)緩沖器32已滿或趨近其容量時(shí)保存來(lái)自后備存儲(chǔ)緩沖器32的數(shù) 據(jù)。如果加上后備存儲(chǔ)緩沖器32的存儲(chǔ)容量,物理寄存器堆28的大小大于或等于平 均堆棧深度,則對(duì)后備存儲(chǔ)器36的芯片外存取顯著減小。為獲得更高的性能,在一個(gè)實(shí)施例中,后備存儲(chǔ)緩沖器32構(gòu)建為存儲(chǔ)位置陣列 (例如,寄存器、鎖存器或SRAM陣列),所述存儲(chǔ)位置具有比物理寄存器堆28中的 寄存器較大的位寬度。特別地,后備存儲(chǔ)緩沖器32中的條目可具有是物理寄存器堆 28寬度的整數(shù)倍的位寬度。此允許將來(lái)自兩個(gè)或兩個(gè)以上物理寄存器的數(shù)據(jù)并排存儲(chǔ) 在單個(gè)后備存儲(chǔ)緩沖器32條目中。在一個(gè)實(shí)施例中,所述位寬度的整數(shù)倍等于物理寄存器堆28中的讀取端口的數(shù) 目。例如,如果物理寄存器堆28包含三個(gè)讀取端口,則后備存儲(chǔ)緩沖器32配置為存 儲(chǔ)單元陣列,每一存儲(chǔ)單元均具有是物理寄存器堆28中寄存器的位寬度三倍的位寬 度,如圖3所繪示。在此配置中,寄存器保存引擎30可從三個(gè)物理寄存器同時(shí)讀取數(shù) 據(jù)(也就是,在單個(gè)循環(huán)中)且可在單個(gè)寫入循環(huán)中將來(lái)自所有三個(gè)寄存器的數(shù)據(jù)寫入到單個(gè)后備存儲(chǔ)緩沖器32。當(dāng)將寄存器從不活動(dòng)程序解除分配時(shí),這將使保存來(lái)自 物理寄存器堆28的數(shù)據(jù)的性能開(kāi)銷最小化。類似地,如果物理寄存器堆28另外地包 含三個(gè)寫入端口,則一旦將數(shù)據(jù)恢復(fù)到物理寄存器堆28,寄存器保存引擎30即可在 單個(gè)循環(huán)中從單個(gè)后備存儲(chǔ)緩沖器32條目中讀取將要恢復(fù)到三個(gè)物理寄存器的數(shù)據(jù)。 可在單個(gè)循環(huán)中將這些數(shù)據(jù)寫入到物理寄存器堆28中的三個(gè)寄存器。
后備存儲(chǔ)緩沖器32可實(shí)施于若干技術(shù)及操作配置中。例如,后備存儲(chǔ)緩沖器32 可包括簡(jiǎn)易的單端口高速寄存器或鎖存器陣列?;蛘?,后備存儲(chǔ)緩沖器32可實(shí)施為 SRAM陣列,所述陣列配置為nxm陣列,其中n是每一后備存儲(chǔ)緩沖器32條目的位 寬度,且m是這些條目的數(shù)目。無(wú)論其硬件配置如何,可以各種操作配置實(shí)施后備存 儲(chǔ)緩沖器32,例如堆棧、FIFO、由與數(shù)據(jù)相關(guān)聯(lián)的程序的上下文ID加索引的高速緩 沖存儲(chǔ)器。
然而,不論其物理或操作配置如何,后備存儲(chǔ)緩沖器32專用于寄存器保存引擎 30。也就是說(shuō),后備存儲(chǔ)緩沖器32中的存儲(chǔ)器存儲(chǔ)位置不是指令集架構(gòu)的一部分,且 可不由指令來(lái)尋址。另外,當(dāng)分配有所述寄存器的程序變?yōu)椴换顒?dòng)時(shí),后備存儲(chǔ)緩沖 器32僅存儲(chǔ)物理寄存器堆28中的寄存器中所含有的數(shù)據(jù)。也就是說(shuō),后備存儲(chǔ)緩沖 器32均與暫存寄存器、高速緩沖存儲(chǔ)器或任何其它處理器存儲(chǔ)器或存儲(chǔ)位置分離,無(wú) 論是芯片上還是芯片外。本文中所使用術(shù)語(yǔ)"專用"后備存儲(chǔ)緩沖器指示后備存儲(chǔ)緩 沖器32與處理器10其余部分的此物理及功能隔離。
在一個(gè)實(shí)施例中,后備存儲(chǔ)緩沖器32以操作方式配置為堆棧。寄存器保存引擎 30從物理寄存器堆28讀取數(shù)據(jù)并將所述數(shù)據(jù)推到所述堆棧頂部上。相反地,寄存器 保存引擎30使堆棧退棧以檢索將要恢復(fù)到物理寄存器堆28的數(shù)據(jù)。隨著后備存儲(chǔ)緩 沖器32填滿或(在某些實(shí)施例中)趨近容量,寄存器保存引擎30從堆棧底部讀取數(shù) 據(jù)并將所述數(shù)據(jù)存儲(chǔ)到后備存儲(chǔ)器36,后備存儲(chǔ)器36可包括Ll或L2高速緩存器或 主系統(tǒng)存儲(chǔ)器(例如,RAM),如圖2所繪示。當(dāng)寄存器保存引擎30將充足的數(shù)據(jù)從 后備存儲(chǔ)緩沖器32恢復(fù)到物理寄存器堆28、釋放掉后備存儲(chǔ)緩沖器32中的容量時(shí), 寄存器保存引擎30從后備存儲(chǔ)器36讀取先前所保存的數(shù)據(jù),將所述數(shù)據(jù)寫入到后備 存儲(chǔ)緩沖器32中的堆棧的底部。注意,將后備存儲(chǔ)緩沖器32操作為堆棧與后備存儲(chǔ) 緩沖器32條目的位寬度無(wú)關(guān)。
在其中將后備存儲(chǔ)緩沖器32操作為堆棧的一個(gè)實(shí)施例中,為獲得最佳性能,將 后備存儲(chǔ)緩沖器32配置為類似于上文針對(duì)物理寄存器堆28描述的寄存器的雙端口寄 存器陣列,其中堆棧的頂部及底部由指針維持。例如,這將允許寄存器保存引擎30 在將數(shù)據(jù)從后備存儲(chǔ)緩沖器32堆棧的底部保存到后備存儲(chǔ)器36的同時(shí)將從物理寄存 器堆28保存的數(shù)據(jù)推到后備存儲(chǔ)緩沖器32堆棧的頂部上。類似地,可在數(shù)據(jù)從堆棧 頂部退棧以恢復(fù)到物理寄存器堆28的同時(shí)將數(shù)據(jù)從后備存儲(chǔ)器36恢復(fù)到后備存儲(chǔ)緩 沖器32的底部。
在替代實(shí)施例中,為減小電路復(fù)雜度及硅面積,后備存儲(chǔ)緩沖器32堆棧由單端口寄存器構(gòu)建而成,其中寄存器保存引擎30調(diào)度約在從寄存器堆28保存數(shù)據(jù)及將數(shù) 據(jù)恢復(fù)到寄存器堆28的操作時(shí)寫入到后備存儲(chǔ)器并從后備存儲(chǔ)器讀取。圖4中的流程圖中繪示了一種根據(jù)一個(gè)實(shí)施例操作堆棧式寄存器堆架構(gòu)的方法。 最初,可包括寄存器保存引擎(RSE) 30的堆棧式寄存器控制器接收分配物理寄存器 堆(PRF) 28中一個(gè)或一個(gè)以上寄存器的請(qǐng)求以供程序?qū)iT用來(lái)寫入及讀取數(shù)據(jù),例 如算術(shù)或邏輯指令的操作數(shù)或其結(jié)果(方塊40)。 RSE 30確定PRF 28中是否剩余有 充足的未經(jīng)分配的寄存器(方塊42)。最初,PRF28中剩余有充足的所述未經(jīng)分配的 寄存器,且將所要求數(shù)目的PRF28寄存器分配給新程序(方塊50)。此過(guò)程可隨著每 一程序調(diào)用連續(xù)的程序而重復(fù)數(shù)次(方塊40)。在某一時(shí)刻調(diào)用程序并請(qǐng)求寄存器分配(方塊40),但PRF28中剩余的未經(jīng)分配 的寄存器不足以滿足所述請(qǐng)求(方塊42)。然后,RSE 30確定必須釋放掉PRF 28中 的多少寄存器來(lái)滿足所述請(qǐng)求,并確定后備存儲(chǔ)緩沖器(BSB) 32中是否可獲得伴隨 的自由空間量(方塊44)。如果可獲得,則通過(guò)將分配給一個(gè)或一個(gè)以上當(dāng)前不活動(dòng) 程序的至少充足數(shù)目的寄存器的內(nèi)容保存到BSB 32來(lái)將所述寄存器解除分配(方塊 48)。然后,RSE30可將這些已解除分配的寄存器連同PRF28中現(xiàn)有的已解除分配的 寄存器分配給請(qǐng)求中的新程序(方塊50),所述新程序可繼續(xù)進(jìn)行執(zhí)行并將數(shù)據(jù)存儲(chǔ) 在其所分配的PRF28寄存器中。如果已調(diào)用了充足的新程序,且/或如果所述新程序需要大量分配寄存器,則BSB 32可填滿或趨近其容量,在此情形下, 一旦新程序做出請(qǐng)求(方塊40),如果PRF28 中存在的寄存器不充足(方塊42)且BSB中存在的自由空間不充足(方塊44),則 RSE 30將較舊的條目從BSB 32保存到后備存儲(chǔ)器(BS) 36,例如芯片外RAM (方 塊46)。然后,可將數(shù)據(jù)從PRF 28保存到BSB 32 (方塊48),且將被釋放的PRF 28 寄存器分配給新程序(方塊50)。此過(guò)程可隨著新程序的調(diào)用而重復(fù)(方塊40)。在某一時(shí)刻,活動(dòng)的程序?qū)⒔K止并將控制返回到其將需要重新激活的調(diào)用程序 (方塊52),而不是調(diào)用新的程序(方塊40)。 RSE 30將檢驗(yàn)以確定是否所有最初分 配給不活動(dòng)程序的寄存器在PRF28中仍保持分配給所述不活動(dòng)程序(方塊54)。如果 是,則在所述程序調(diào)用另一程序并變?yōu)椴换顒?dòng)之前,由所述程序?qū)懭氲乃袛?shù)據(jù)均保 持在PRF54中且所述程序可重新激活并再繼續(xù)執(zhí)行(方塊62)。如果RSE 30保存來(lái)自最初分配給不活動(dòng)程序的一個(gè)或一個(gè)以上寄存器的數(shù)據(jù)并 將所述寄存器分配給另一程序,則RSE 30檢驗(yàn)以了解所述數(shù)據(jù)是否存儲(chǔ)在BSB 32中。 如果是,則RSE 30至少讀取來(lái)自BSB 32的與不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù),并將其寫入到 PRF28中的寄存器,從而將所述寄存器分配給所述不活動(dòng)程序(方塊60)。然后重新 激活所述不活動(dòng)程序(方塊62)。如果己經(jīng)從PRF28中保存了與不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù)(方塊54),且沒(méi)有將所 述數(shù)據(jù)存儲(chǔ)在BSB32中(方塊56),則已將所述數(shù)據(jù)從BSB 32保存到BS 36。在此 情形下,RSE 30至少讀取來(lái)自BS 36的與不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù)并將其寫入到BSB32 (方塊58)。然后,RSE30將所述數(shù)據(jù)從BSB32恢復(fù)到PRF28,從而在重新激活 所述程序(方塊62)之前將正在接收的寄存器分配給不活動(dòng)程序(方塊60)。然后, 重新激活的程序可調(diào)用另一程序(方塊40),或可獨(dú)自完成執(zhí)行并將控制返回給先前 調(diào)用程序(方塊52)。
根據(jù)本發(fā)明教示,所屬技術(shù)領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識(shí)到對(duì)上述程序的許多明顯的變 化及最優(yōu)化。例如,當(dāng)數(shù)據(jù)已全部保存到BS36且需用于重新激活程序時(shí),RSE30可 繞過(guò)BSB32并將數(shù)據(jù)從BS36直接寫入到PRF28中的寄存器。另外,尤其在本文中 所描述的實(shí)施例(其中每一 BSB 32條目的寬度均為PRF28寄存器的寬度乘以PRF28 讀取端口數(shù)目)中,數(shù)據(jù)將不會(huì)沿程序邊界從PRF28(或BSB32)存儲(chǔ)或恢復(fù)到PRF 28(或BSB 32)。也就是說(shuō),并非所有與不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù)均可同時(shí)地從PRF 28 保存。類似地,當(dāng)將與一個(gè)不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù)恢復(fù)到PRF28時(shí),RSE30可另 外地恢復(fù)與另一程序相關(guān)聯(lián)的數(shù)據(jù)(其中與另一程序相關(guān)聯(lián)的另外的數(shù)據(jù)保持存儲(chǔ)在 BSB 32或BS 36中)。
通過(guò)提供專用局部高速存儲(chǔ)裝置,后備存儲(chǔ)緩沖器32允許寄存器保存引擎30保 存及恢復(fù)來(lái)自物理寄存器堆28的數(shù)據(jù),而不會(huì)招致與將所保存數(shù)據(jù)寫入到芯片外后備 存儲(chǔ)器相關(guān)聯(lián)的大量降級(jí)及功率消耗。后備存儲(chǔ)緩沖器32是增大物理寄存器堆28的 大小的經(jīng)濟(jì)的替代方案,因?yàn)楹髠浯鎯?chǔ)緩沖器32無(wú)需為多端口且無(wú)需連接到一個(gè)或一 個(gè)以上執(zhí)行管線中的管道級(jí)。
事實(shí)上,后備存儲(chǔ)緩沖器32的存在允許物理寄存器堆28僅包含所界定的與指令 集架構(gòu)中的GPR相同數(shù)目的寄存器。也就是說(shuō),由于一程序在理論上可分配有所有界 定的GPR,所述指令集架構(gòu)中GPR的數(shù)目對(duì)物理寄存器堆28的大小做出了下限。本 發(fā)明的后備存儲(chǔ)緩沖器32允許所述相同數(shù)目充當(dāng)對(duì)物理寄存器堆28的大小做出的上 限以包含硅面積及布線復(fù)雜度,且同時(shí)獲得高性能及避免或最小化到后備存儲(chǔ)器38 的芯片外存取時(shí)的低功率消耗。
雖然在本文中已參照本發(fā)明的特定特征、方面及實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但 顯而易見(jiàn)的是,在本發(fā)明的廣泛范圍內(nèi)可實(shí)現(xiàn)許多變化、修改及其他實(shí)施例,且因此 所有的變化、修改及實(shí)施例均視為在本發(fā)明范圍內(nèi)。因此,應(yīng)在所有方面將本發(fā)明實(shí) 施例視為說(shuō)明性而非限定性,且包含在隨附權(quán)利要求書(shū)的含義及等效范圍內(nèi)的所有改 變均涵蓋在隨附權(quán)利要求范圍內(nèi)。
1權(quán)利要求
1、一種管理具有專用后備存儲(chǔ)緩沖器的堆棧式寄存器堆系統(tǒng)的方法,所述方法包括將來(lái)自物理寄存器堆的一個(gè)或一個(gè)以上寄存器分配給第一程序,且將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)在所述分配的寄存器中;將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)選擇性地保存到所述專用后備存儲(chǔ)緩沖器,并釋放分配給所述第一程序的一個(gè)或一個(gè)以上寄存器以供分配給第二程序;及在繼續(xù)執(zhí)行所述第一程序之前,將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)從所述專用后備存儲(chǔ)緩沖器恢復(fù)到一個(gè)或一個(gè)以上寄存器并將所述寄存器重新分配給所述第一程序。
2、 如權(quán)利要求1所述的方法,其進(jìn)一步包括將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù) 從所述專用后備存儲(chǔ)緩沖器保存到后備存儲(chǔ)器,且隨后在將所述與所述第一程序相關(guān) 聯(lián)的數(shù)據(jù)恢復(fù)到一個(gè)或一個(gè)以上寄存器之前從所述后備存儲(chǔ)器中檢索所述與所述第一 程序相關(guān)聯(lián)的數(shù)據(jù)。
3、 如權(quán)利要求1所述的方法,其中所述后備存儲(chǔ)緩沖器中每一可尋址存儲(chǔ)位置 的位寬度均為所述寄存器的位寬度的整數(shù)倍,且其中將存儲(chǔ)在多個(gè)寄存器中的與所述 第一程序相關(guān)聯(lián)的數(shù)據(jù)保存到所述后備存儲(chǔ)緩沖器中的單個(gè)可尋址存儲(chǔ)位置。
4、 如權(quán)利要求3所述的方法,其中所述整數(shù)倍是所述物理寄存器堆的讀取端口 的數(shù)目。
5、 如權(quán)利要求4所述的方法,其中同時(shí)從所述物理寄存器堆讀取所述整數(shù)倍數(shù) 目的寄存器并在單個(gè)寫入操作中將其寫入到所述后備存儲(chǔ)緩沖器。
6、 如權(quán)利要求2所述的方法,其中將所述后備存儲(chǔ)緩沖器實(shí)施為堆棧,其中當(dāng)將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)從所述寄存器保存到所述后備存儲(chǔ)緩沖器時(shí),將所述 數(shù)據(jù)推到所述后備存儲(chǔ)緩沖器的頂部上,且其中當(dāng)所述后備存儲(chǔ)緩沖器己滿時(shí),將與 所述第一程序相關(guān)聯(lián)的數(shù)據(jù)從所述后備存儲(chǔ)緩沖器的底部保存到所述后備存儲(chǔ)器。
7、 如權(quán)利要求2所述的方法,其中將所述后備存儲(chǔ)緩沖器實(shí)施為專用于所述堆 棧式寄存器堆的芯片上RAM。
8、 如權(quán)利要求1所述的方法,其中將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)選擇性地保 存到所述專用后備存儲(chǔ)緩沖器包括僅當(dāng)所述物理寄存器堆中剩余不足以分配給所述 第二程序的未經(jīng)分配的寄存器時(shí),才將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)保存到所述專用 后備存儲(chǔ)緩沖器。
9、 如權(quán)利要求1所述的方法,其中將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)選擇性地保存到所述專用后備存儲(chǔ)緩沖器包括僅將與所述第一程序相關(guān)聯(lián)的數(shù)據(jù)保存到所述專用后備存儲(chǔ)緩沖器。
10、 一種處理器,其包括物理寄存器堆,其包括至少與所述處理器指令集架構(gòu)中所界定的通用寄存器的數(shù) 目一樣多的寄存器,所述寄存器被動(dòng)態(tài)地分配給軟件程序;寄存器保存引擎,其操作以選擇性地保存來(lái)自分配給不活動(dòng)程序的寄存器的數(shù)據(jù)并在所述程序變?yōu)榛顒?dòng)之前將數(shù)據(jù)恢復(fù)到所述寄存器;及后備存儲(chǔ)緩沖器,其專用于所述寄存器保存引擎且操作以存儲(chǔ)來(lái)自所述分配給不 活動(dòng)程序的寄存器的所述已保存數(shù)據(jù)。
11、 如權(quán)利要求10所述的處理器,其中所述后備存儲(chǔ)緩沖器中的可尋址條目所 具有的位寬度是所述物理寄存器堆中寄存器的位寬度的整數(shù)倍。
12、 如權(quán)利要求11所述的處理器,其中所述物理寄存器堆是多端口的,且其中 所述整數(shù)倍是所述物理寄存器堆的讀取端口的數(shù)目。
13、 如權(quán)利要求12所述的處理器,其中所述寄存器保存引擎操作以從所述物理 寄存器堆同時(shí)讀取所述整數(shù)倍數(shù)目的寄存器,并在單個(gè)寫入操作中將數(shù)據(jù)從所述整數(shù) 倍數(shù)目的寄存器寫入到所述后備存儲(chǔ)緩沖器。
14、 如權(quán)利要求10所述的處理器,其進(jìn)一步包括后備存儲(chǔ)器,所述后備存儲(chǔ)器 操作以在所述后備存儲(chǔ)緩沖器已滿時(shí)存儲(chǔ)來(lái)自所述分配給不活動(dòng)程序的寄存器的已保 存數(shù)據(jù)。
15、 如權(quán)利要求14所述的處理器,其中所述后備存儲(chǔ)緩沖器實(shí)施為堆棧,所述 堆棧操作以存儲(chǔ)來(lái)自一個(gè)或一個(gè)以上寄存器的被推到所述堆棧的頂部上的數(shù)據(jù)并將從 所述堆棧的頂部退棧的數(shù)據(jù)恢復(fù)到一個(gè)或一個(gè)以上物理寄存器。
16、 如權(quán)利要求15所述的處理器,其中所述后備存儲(chǔ)緩沖器進(jìn)一步操作以在所 述后備存儲(chǔ)緩沖器趨近容量時(shí)將數(shù)據(jù)從所述堆棧底部存儲(chǔ)到所述后備存儲(chǔ)器,且操作 以在所述后備存儲(chǔ)緩沖器通過(guò)將數(shù)據(jù)恢復(fù)到所述物理寄存器堆中的寄存器來(lái)獲得容量 時(shí)將數(shù)據(jù)從所述后備存儲(chǔ)器檢索到所述堆棧的底部。
17、 如權(quán)利要求14所述的處理器,其中所述后備存儲(chǔ)緩沖器實(shí)施為專用于所述 寄存器保存引擎的芯片上RAM。
18、 如權(quán)利要求14所述的處理器,其中所述后備存儲(chǔ)器是高速緩沖存儲(chǔ)器。
19、 如權(quán)利要求14所述的處理器,其中所述后備存儲(chǔ)器是芯片外RAM。
全文摘要
一種后備存儲(chǔ)緩沖器插置在堆棧式寄存器堆架構(gòu)中的物理寄存器堆與后備存儲(chǔ)器之間。寄存器保存引擎臨時(shí)存儲(chǔ)來(lái)自所述物理寄存器堆中分配給芯片上不活動(dòng)程序的寄存器的數(shù)據(jù),從而釋放將要重新分配給新程序的寄存器。當(dāng)程序完成并將控制返回給先前不活動(dòng)的程序時(shí),所述寄存器存儲(chǔ)引擎將與所述不活動(dòng)程序相關(guān)聯(lián)的數(shù)據(jù)從所述后備存儲(chǔ)緩沖器檢索到所述物理寄存器堆中的寄存器,且所述寄存器被重新分配給所述不活動(dòng)程序。僅當(dāng)所述后備存儲(chǔ)緩沖器已滿且必須從所述物理寄存器堆保存更多的數(shù)據(jù)時(shí),所述寄存器保存引擎才將數(shù)據(jù)從所述后備存儲(chǔ)緩沖器保存到所述后備存儲(chǔ)器,從而招致芯片外RAM存取所需的顯著性能降級(jí)及功率消耗。
文檔編號(hào)G06F9/30GK101331448SQ200680047000
公開(kāi)日2008年12月24日 申請(qǐng)日期2006年10月20日 優(yōu)先權(quán)日2005年10月20日
發(fā)明者博胡斯拉夫·雷赫利克 申請(qǐng)人:高通股份有限公司