??? 摘 要: 簡要介紹了CPU通用寄存器" title="通用寄存器">通用寄存器及窗口技術" title="窗口技術">窗口技術的產生和發展背景,提出了以CALL和RETURN為代表的指令存在的問題,并給出了解決方法,討論了大寄存器集及窗口技術的缺點和一些相關應用。
??? 關鍵詞: 寄存器? RISC? MIPS? 重疊寄存器窗口技術? CPU
?
??? CPU的通用寄存器是數據存儲體系的最內層。寄存器操作避免了內存地址計算,其訪問時間遠小于Cache和主存。RISC MPU都具有較CISC大的寄存器集(Register file),而且都是LOAD/STORE體系結構,即所有運算的操作數都只針對寄存器中的數據施行,僅用LOAD/STORE類指令訪問內存。從RISC CPU高速處理時間(單周期執行指令)的角度來看,這些主存訪問是非常昂貴的開銷。為了減少LOAD/STORE操作,使CPU與內存間的通訊量最小,不同的RISC體系結構采用了不同的寄存器集設計。從RISC早期開創性研究開始,就存在著兩種不同的風格。
??? (1)Berkeley風格:在美國加州大學伯克利分校RISC I(1981)和RISC II(1983)項目中,CPU采用100個以上的寄存器,組成相互重疊的多寄存器窗口,用這種硬件結構實現寄存器的高效率使用。SUN SPARC是這種風格體系結構的典型范例。
??? (2)IBM/Stanford風格:在IBM 801(1975~1982)和斯坦福大學MIPS(1981~l983)項目中,體系結構設計人員(包括編譯軟件專家)采用非常高級、復雜的優化編譯算法實現對寄存器的最佳分配。目前在這類設計中,以MIPS的優化編譯軟件及其配套的RISC R3000 CPU芯片最為典型,功能最強,發展最成熟。MIPS是高效精簡指令集計算機(RISC)體系結構中最優雅的一種,即使是MIPS的競爭對手也這樣認為。這可以從MIPS對于后來研制的新型體系結構,如DEC的Alpha和HP的Precision產生的強烈影響看出來。雖然自身的優雅設計并不能保證在充滿競爭的市場上長盛不衰,但是MIPS微處理器卻經常能在處理器的每個技術發展階段保持速度最快的同時保持設計的簡潔。
??? 表1列出了不同RISC體系結構的寄存器集的寄存器個數,包括通用寄存器個數及浮點寄存器個數。
?????????????????????????
1 寄存器窗口技術
??? RISC的指令系統比較簡單,CISC中的一條復雜指令,在RISC中通常要用一段子程序" title="子程序">子程序來實現。因此,RISC程序中的CALL和RETURN的子程序指令要比CISC程序中多。為了使CALL和RETURN操作盡量少地訪問存儲器,美國加洲大學伯克利分校的F.Baskett提出重疊寄存器窗口(Overlapping Register Window)技術,并且首先在RISC I上應用。重疊寄存器窗口的基本思想基于在處理機中設置一個數量比較大的寄存器堆,并把它劃分成多個窗口。在RISC II中,寄存器的數量增加到138個。目前,重疊寄存器窗口技術已經成為RISC的一種基本技術。
??? RISC技術的主要設計技巧為:短周期時間;單周期執行指令;LOAD/STORE結構;簡單固定格式的指令系統;不用微碼技術;大寄存器堆;哈佛(Harvard)總線結構;高效的流水線操作;延遲轉移;硬連線控制;重疊寄存器窗口技術;優化編譯程序" title="編譯程序">編譯程序;增強存儲管理功能;面向高級語言。
2 存在的問題
??? 指令執行過程中,某些指令占據與其自身在程序中所占比例不相稱的大量訪存信息量。這一點,在CALL和RETURN指令上表現最為明顯。
??? 在執行CALL指令時,必須把硬件現場(主要包括程序計數器和處理機狀態字)和程序本身的軟件現場(主要指在子程序中要使用的通用寄存器等)保存到主存儲器中。另外,還要把執行子程序所需要的參數從主程序傳送過去。在執行RETURN指令時,要做相反的工作,最后把運算結果傳送回主程序。因此,執行CALL和RETURN指令時,訪問存儲器的信息量非常大。據統計,在PASCAL語言和C語言中分別有15%和12%的CALL和RETURN指令,而它們訪問存儲器的信息量卻占整個訪存信息量的44%和45%。
3 問題解決
??? 重疊寄存器窗口的基本思想:在處理機中設置一個數量比較大的寄存器堆,并把它劃分成很多個窗口。每個過程使用其中相鄰的三個窗口和一個公共窗口,而在這些窗口中有一個窗口是與前一個過程共用,還有一個窗口是與下一個過程共用的。與前一過程共用的窗口可以用來存放前一過程傳送給本過程的參數,同時也存放本過程傳送給前一過程的計算結果。同樣,與下一過程共用窗口可以用來存放本過程傳送給下一過程的參數和存放下一過程傳送給本過程的計算結果。圖1表現了重疊寄存器窗口的基本思想。
??????????????????????????
??? 圖2是RISC II中采用的重疊寄存器窗口,共有138個寄存器,分成17個窗口。其中,有一個由10個寄存器組成的窗口是全局窗口,能被所有過程訪問;另外有8個窗口,每個窗口各10個寄存器,分別作為8個過程的局部寄存器;還有8個窗口,每個窗口各有6個寄存器,是相鄰兩個過程公用的,稱為重疊寄存器窗口。每個過程均可以訪問32個寄存器,其中,有10個是所有過程公用的全局寄存器,有10個是只供本過程使用的局部寄存器,有6個是與上一過程公用的寄存器,還有6個是與下一過程公用的寄存器。
?????????????????????????????????? ???????????
??? 只要調用的深度不超過規定的層數(如8層),重疊寄存器窗口技術可以減少大量的訪存操作。當調用層數超過規定層數時,稱為寄存器溢出,這時,可以在主存中開辟一個堆棧,把超過規定層數的寄存器中的內容壓入堆棧中。
??? 在SUN公司的SPARC處理機以及后來的Super SPARC和Utra SPARC處理機中,還把最后一個過程的公用寄存器與第一個過程的公用寄存器重疊起來,形成一個循環圈。在調用層數很多時,可以循環使用。
??? F.Baskett等人使用Quick sort和Puzzle兩個程序對寄存器窗口技術的有效性進行了測試。Quick sort程序的特點是過程調用的次數在整個程序中所占的比例比較大,但調用的深度不大;而Puzzle程序正好相反。RISC II與VAX-11兩種機器的比較結果如表2所示。RISC II的訪存次數主要是寄存器窗口溢出引起的,而VAX-11訪存次數是為了保持和恢復通用寄存器中內容而引起的。從表2可以看出,RISC II寄存器溢出的次數很少,只占千分之一左右,影響也不大。由于采用了寄存器窗口技術,由程序調用引起的訪問存儲器次數只占程序總訪存次數的1%左右。
??????????????????????
4 開銷比較
??? 表3是RISC II處理機與幾種CISC處理機的每次過程調用的開銷比較。從表3可以看出,在執行時間、執行指令條數、訪問存儲器次數等方面,采用重疊寄存器窗口技術都十分有效。
????????????????????????
5 大寄存器集及窗口技術的缺點
??? 大寄存器集及窗口技術在有效支持高級語言過程調用結構的同時,也不可避免地出現了一些缺點:
??? (1)窗口策略只是在比較理想的情況下,即嵌套深度在滿足一定限制的時候才非常有效。
??? (2)對關聯轉換(Context Switch)時需將CPU寄存器存入內存的系統來說,大寄存器集的Save/Restore 需較長的時間才能完成,這直接影響多任務轉換和中斷響應時系統的響應速度, 而這對多用戶系統和實時控制是非常關鍵的。
??? (3)對于采用流水線的結構處理器來說,指令譯碼是非常關鍵的一個功能段。RSIC MPU獲得高處理速度的一個重要原因就是其極簡單的指令格式、指令集和尋址方式帶來了極快的指令譯碼時間。但采用大寄存器及窗口結構后就需要在指令譯碼通路中增加電路進行寄存器地址的譯碼,如選擇當前窗口及窗口移動。特別是窗口指針需要計算,更增加了寄存器地址的譯碼時間,而且寄存器集越大,寄存器地址譯碼硬件也越復雜,對每一個寄存器的訪問時間也越長,由此在指令流水線譯碼段內引起的時間延遲對系統整體性能的影響也越大(如目前采用寄存器窗口的體系結構都很難實現快速LOAD/STORE指令,需要兩個或更多的周期)。若像SPARC那樣窗口大小固定,則所需譯碼和加法器電路還較簡單,由此引起的附加延遲也較小,系統性能所受影響也不大(但另一方面窗口較大和窗口個數較少,使窗口上溢" title="上溢">上溢次數和每次上溢后所需保存寄存器的數目都增加了)。
??? 若像AMD29000那樣采用可變大小的寄存器窗口, 則對于把窗口上溢次數和上溢后需要保存寄存器的個數減至最少非常有利,但卻必須在指令譯碼通路中采用更復雜的電路,這最終可能導致指令譯碼時間成為制約處理器芯片采用更高時鐘頻率的瓶頸。
??? (4)大寄存器集及窗口結構需占用較大的CPU芯片面積,限制在片上實現其他關鍵硬件。
6 當前寄存器窗口技術的一些應用
??? 高效的函數調用:大多數RSIC處理器的函數調用需要卸出和重新裝入寄存器,開銷很大。IA-64增加了一個通用寄存器窗來支持高效的函數調用。這個128項的通用寄存器窗口被分為一個32項的全程存儲器和一個96項的堆棧存儲器。IA-64允許編譯程序在被調用的函數過程入口設置一條ALLOC指令,創立一個最多包含96項的新寄存器堆棧;在返回時,恢復調用程序的寄存器堆棧幀。對編譯程序來說,似乎有長度無限的物理寄存器堆棧,從而降低了函數調用的開支、提高了效率;如果在調用和返回時,沒有足夠的寄存器可供使用(堆棧溢出),則處理器將被阻塞,等待卸出和裝入寄存器,直到有足夠的寄存器為止。
參考文獻
[1] 白中英,楊旭東.計算機系統結構(第2版).北京:科學出版社,2004.
[2] 鄭緯民,湯志忠.計算機組成原理.北京:清華大學出版社,2004.
[3] 張晨曦.計算機體系結構.北京:高等教育出版社,2003.
[4] Dominic Sweetman.MIPS處理器設計透視See MIPS Run.北京:北京航空航天大學出版社,2005.