擴展處理器寄存器堆容量的方法
2023-06-01 00:54:46
擴展處理器寄存器堆容量的方法
【專利摘要】本發明公開一種擴展處理器寄存器堆容量的方法,主要為了解決寄存器容量受限的問題。所述方法包括:判斷指令為條件執行還是非條件執行,若指令為條件執行且條件是AL,則選擇擴展的寄存器堆S1;若指令為非條件指令,則選擇擴展的寄存器堆S0;若指令為條件指令,但條件不是AL,則選擇擴展的寄存器堆S0。本發明針對支持條件執行的指令集,不需要對原指令集做任何的修改,對原處理器的應用程式能夠完全兼容。
【專利說明】擴展處理器寄存器堆容量的方法
【技術領域】
[0001]本發明涉及一種擴展處理器寄存器堆容量的方法。
【背景技術】
[0002]傳統的計算機層次存儲系統採取寄存器和高速緩存橋接於ALU和存儲器之間,成功地解決了存儲器的訪問速度與處理器的計算速度不匹配的問題。其中,寄存器可以和ALU之間進行快速的通訊,為ALU提供操作數並保存計算結果。
[0003]現在的處理器體系結構設計中多採用流水線技術,以典型的5級流水線RISC處理器的設計為例,在取指階段,根據程序計數器的值從指令存儲器中讀取指令,並存入指令寄存器中,同時計算下一條指令的地址;在解碼階段,對指令進行解碼,並從寄存器堆讀取源操作數,如果是跳轉指令,則在這一階段將跳轉的地址寫入程序計數器;在指令執行階段,對上一階段獲取的操作數進行運算,根據指令的類型,可實現不同的功能,如果是load/store指令,則在這一階段計算存儲器存取的地址;訪問存儲器階段,主要針對load/store指令完成對存儲器的訪問;寫回階段,將ALU的計算結果或者是訪存的結果寫回寄存器堆。
[0004]在不同的設計中,處理器完成的工作大致相同,只是因上敘述過程的細化程度不同,帶來流水線的深度的不同。總體而言,處理器在指令解碼和寫回兩個階段訪問了寄存器堆,每周期訪問寄存器的數量又因指令所需操作數的不同而不同。
[0005]隨著對處理器的性能要求越來越高,僅僅依靠流水線技術已經無法滿足要求。提高處理器性能最根本的辦法是提高指令級並行,也就是使處理器在同一周期處理儘量多的指令。現在的技術可以將指令級並行提高到8甚至更高,而每條指令也可能訪問多個寄存器。這樣的處理器需要更多的寄存器為其提供足夠操作數進行運算。
[0006]寄存器的數量受到指令集的限制。如今比較常見的RISC指令集有16位,32位和64位,當指令編碼中有N位作為寄存器索引時,最多可以訪問2的η次方個寄存器。在這些寄存器中,除去程序計數器,棧指針寄存器,連結寄存器等不能任意修改的寄存器,程式設計師可以使用的寄存器數量更加有限。
[0007]目前,提高指令並行度的手段主要是超標量和超長指令字。超標量的方法通過犧牲硬體複雜度的方式一定程度上緩解了對大量寄存器的需求,而超長指令字方法,由於是依賴編譯器靜態進行指令調度,其所需要寄存器的數量也是靜態可見的,這種方法對寄存器的需求量更大。常見的超長指令字架構的處理器多擁有獨立設計的指令集,並在設計中提供足夠的寄存器堆容量。而在已有指令集的基礎上擴展寄存器堆容量的常見方法也都需要對指令集進行一定的修改,增加寄存器堆配置指令等相關指令。
【發明內容】
[0008]針對上述問題,本發明提供一種在不改變指令集的前提下,利用指令集條件執行擴展處理器寄存器堆容量的方法。
[0009]為達到上述目的,本發明擴展處理器寄存器堆容量的方法,應用於支持條件執行的指令集,所述方法至少包括:
[0010]基於指令集中的指令是否為條件執行以及執行的條件,選擇相應的擴展寄存器堆,
[0011]當指令是條件執行且條件為AL時,選擇擴展寄存器堆SI ;
[0012]當指令是非條件執行或除AL以外其他條件執行時,選擇擴展寄存器堆S0。
[0013]進一步地,所述方法還包括確定是否使用擴展寄存器S0、SI的步驟。
[0014]本發明擴展處理器寄存器堆容量的方法,從一個全新的角度解決寄存器容量受限的問題,提出了一種在不改變指令集的前提下,利用指令集條件執行擴展處理器寄存器堆容量的方法。優點是不需要對原指令集做任何的修改,對原處理器的應用程式能夠完全兼容。
【專利附圖】
【附圖說明】
[0015]圖1是本發明條件執行中,以AL為執行條件的指令編碼;
[0016]圖2是本發明非條件執行的指令編碼;
[0017]圖3為本發明擴展後的寄存器組織結構。
【具體實施方式】
[0018]下面結合說明書附圖對本發明做進一步的描述。
[0019]本發明所述的方法針對支持條件執行的指令集(例如ARM指令集或者與ARM指令集有相似編碼特性的指令集),指令可以條件執行,也可以非條件執行。在條件執行中,條件AL (always)表示永遠執行,這與非條件執行的結果是相同的,但是這兩種指令的指令編碼卻並不相同。
[0020]利用這一特點,將條件執行的AL條件作為寄存器堆的選擇信息,當指令是非條件執行或除AL以外其他的條件執行時,選擇寄存器堆SO ;當指令是條件執行並且條件是AL時,選擇擴展的寄存器堆SI,同時,該寄存器堆不再支持其他的條件執行。這樣,在不改變指令功能的前提下,擴展了寄存器堆容量。
[0021]需要時,通過Load/Store指令在兩個寄存器堆之間進行數據交換。
[0022]用戶在使用時,通過預先選擇設定工作模式為使用擴展寄存器或不使用擴展寄存器。
[0023]使用擴展寄存器的情況下,所述的擴展處理器寄存器堆容量的方法,至少包括:
[0024]基於指令集中的指令是否為條件執行以及執行的條件,選擇相應的擴展寄存器堆,
[0025]當指令是條件執行且條件為AL時,選擇擴展寄存器堆SI ;
[0026]當指令是非條件執行或除AL以外其他條件執行時,選擇擴展寄存器堆S0。也即當指令為非條件指令,則選擇擴展的寄存器堆SO ;若指令為條件指令,但條件不是AL,則選擇擴展的寄存器堆S0。
[0027]以某32位指令集為例,該指令集的大部分指令都支持條件執行,指令編碼的前4位是指令的條件執行位。0X0000?0X1110分別表示15種執行條件,其中,0X1110表示條件AL,如圖1所示。在此條件下,指令永遠會被執行,這與非條件執行的結果是一致的。而非條件執行的指令編碼前4位為0X1111,如圖2所示。
[0028]該指令集的指令編碼中有4位作為寄存器的索引信息,則寄存器堆一共包含16個寄存器。如圖3所示,其中有部分寄存器在子程序調用過程中,由主程序負責保存,用於在調用和被調用程序之間傳遞參數。有部分寄存器用作特殊功能寄存器,比如程序計數器,棧指針寄存器,連結寄存器等,這些寄存器是程式設計師不能任意修改的。其他的寄存器可以由程式設計師任意使用,在子程序調用過程中,由被調用程序負責保存,擴展的寄存器堆SO和擴展的寄存器堆SI與這一部分相對應。
[0029]利用條件執行的AL作為寄存器堆的選擇信息。即當指令編碼的前4位為0X1110時,選擇寄存器堆Si,否則,選擇寄存器堆so。也就是說,原本是非條件執行的指令,我們可以通過簡單地加上AL條件,就可以使用擴展的寄存器堆SI,這不會對指令的功能產生任何的影響。下面是一段彙編程序的示例,在使用擴展寄存器堆的模式下,當指令的末尾加上條件AL時,使用擴展的寄存器堆SI,其餘的指令則使用擴展的寄存器堆S0。這樣,在功能單元充足的條件下,可以再同一個周期內執行更多的指令,從而提高程序的指令效率。
[0030].L8:
[0031]Idr r4 [r0#-4]
[0032]Idr r9 [r3 rl]
[0033]ldral j4[r0#-4] //使用寄存器堆 SI
[0034]ldral j9[r3 rl] //使用寄存器堆 SI
[0035]mu I r7 r8 r4
[0036]mu I r6 r5 r9
[0037]add r2 r2 si
[0038]mulal j4 j5 j4 //使用寄存器堆 SI
[0039]mulal jlO j8 j9 //使用寄存器堆 SI
[0040]cmp r2 32
[0041]Idr rll [r3#-4]
[0042]rsb r6 r6 r7
[0043]ble.L8
[0044]以上,僅為本發明的較佳實施例,但本發明的保護範圍並不局限於此,任何熟悉本【技術領域】的技術人員在本發明揭露的技術範圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護範圍之內。因此,本發明的保護範圍應該以權利要求所界定的保護範圍為準。
【權利要求】
1.一種擴展處理器寄存器堆容量的方法,應用於支持條件執行的指令集,其特徵在於,所述方法至少包括: 基於指令集中的指令是否為條件執行以及執行的條件,選擇相應的擴展寄存器堆, 當指令是條件執行且條件為AL時,選擇擴展寄存器堆SI ; 當指令是非條件執行或除AL以外其他條件執行時,選擇擴展寄存器堆SO。
2.根據權利要求1所述的擴展處理器寄存器堆容量的方法,其特徵在於:所述方法還包括確定是否使用擴展寄存器SO、SI的步驟。
【文檔編號】G06F12/08GK104461939SQ201410785020
【公開日】2015年3月25日 申請日期:2014年12月16日 優先權日:2014年12月16日
【發明者】侯毓敏, 何虎 申請人:清華大學