侯澤君,張多利,賈鼎成,盧方全,施 瑩
(合肥工業(yè)大學 電子科學與應用物理學院,安徽 合肥 230009)
?
OpenSPARC T1處理器Cache的優(yōu)化研究
侯澤君,張多利,賈鼎成,盧方全,施瑩
(合肥工業(yè)大學 電子科學與應用物理學院,安徽 合肥230009)
摘要:文章以OpenSPARC T1處理器為例,分析了片上多線程結構(chip multi-threading,CMT)處理器由于Cache抖動引發(fā)的緩存沖突等問題,通過引入空間鎖環(huán)機制,減少程序中循環(huán)體被替換出Cache的概率,降低Cache沖突,從而提高多線程處理器性能。結果表明,使用空間鎖環(huán)機制有效降低了緩存延遲和Cache的失效率。
關鍵詞:OpenSPARC T1處理器;Cache抖動;空間鎖環(huán)
近年來,UltraSPARC系列處理器已成為處理器新的發(fā)展方向。片上多線程結構(chip multi-threading,CMT)處理器指具有支持多個硬件線程能力的一種處理器結構,且其處理器的內核能夠維護各線程獨立的處理狀態(tài)并迅速切換線程,從而避免了把時間浪費在等待線程的響應上。實際上CMT是一種將單芯片多處理結構(chip multi-processing,CMP)和同步多線程結構(simultaneous multi-theading,SMT)相結合的新興技術,即用SMT處理器置換CMP中的各個單線程處理器內核,使得多線程處理器構造對稱多處理結構(symmetric multi-processing,SMP)方式運作的線程級并行(thread-level parallslism,TLP)系統(tǒng)[1]。顯然CMT具有功耗低、控制邏輯單元簡單、擴展性能好且易于實現(xiàn)等優(yōu)點,除此之外還具有片內高帶寬通訊等特點。
在CMT處理器中,Cache作為重要的單元模塊,組成結構分為存儲體、地址轉換設備和替換設備3個部分[2]。存儲體用來保存內存數據的映射,地址轉換設備用目錄表實現(xiàn)Cache地址和內存地址的相互轉換,替換設備在Cache空間不足時根據預置的算法規(guī)則來替換數據塊,為即將到來的數據塊騰出空間,并且修改地址轉換設備中對應的目錄表。TLP系統(tǒng)中多核處理器的并行線程運行,會導致各線程之間的競爭和核心對共享資源Cache的競爭[3]。
本文采用的OpenSPARC T1處理器是UltraSPARC系列的開源版,其8個處理器核心所支持的大量線程將會導致Cache競爭愈發(fā)激烈。本文分析結果表明,片內高速Cache的優(yōu)化機制對處理器的整體性能提升有著不可替代的作用。
1OpenSPARC T1處理器簡介
基于64位SPARC V9體系架構的OpenSPARC T1處理器是Sun公司的第一款單芯片多線程處理器。該處理器主要應用于高數據吞吐領域,例如個人用戶或商業(yè)數據庫方面等。
OpenSPARC T1處理器包含有8個SPARC V9 處理器核。每個核在硬件上支持4個線程,并含有一級指令緩存(L1-I-Cache)、一級數據緩存(L1-D-Cache)、1個全相聯(lián)指令和數據快表(translation lookaside buffer,TLB)。每個在SPARC核中的L1-Cache,都采用了4路組相聯(lián)結構,其中L1-I-Cache和L1-D-Cache的容量分別為16 kB 和8 kB,塊大小為32 B。通過高速交叉開關(cpu-cache cross bar,CCX),8個核與片上L2-Cache及其他功能單元相連,其中L2-Cache采用12路組相聯(lián)結構,以共享結構相互聯(lián)系。
4個片內的動態(tài)隨機存取存儲器(dynamic random access memory,DRAM)直接和雙倍數據速率異步DRAM (DDR2 SDRAM)進行相互連接。此外,片內還有1個J-Bus控制器可以提供OpenSPARC T1處理器與I/O子系統(tǒng)之間相互連接。
2Cache抖動現(xiàn)象
對于多線程的OpenSPARC T1處理器,尤其是應用于延時要求嚴苛的情況下,如果其他線程與主線程頻繁地競爭Cache,將導致系統(tǒng)總體的性能下降,使得延時大幅增加,最終無法完成實時任務。Cache抖動指多個線程不停重復地訪問共享Cache資源,從而會造成處理器性能大幅降低。Cache抖動如圖1所示。
在多線程共享的L1-I-Cache中,第K塊被線程T1的指令I1占用,當線程T2需要將指令I2調入該塊時,即使L1-I-Cache此時仍有未被占用的空閑塊,也會將第K塊中線程T1的指令作廢并換出;而當線程T1又需要指令I1時,就必須用指令I1替換掉指令I2,將其重新調入第K塊;然后線程T2又會重復上一操作,這就產生了Cache抖動問題。特別是當這種情況發(fā)生在線程的循環(huán)處時,其危害更明顯。在最差的情況下,單獨運行1個線程的性能都要高于2個線程同時運行的性能,線程并行越多,危害則越大[4]。
圖1 Cache的抖動
程序設計中有一條“二八”法則[5],即20%的程序會占用80%的執(zhí)行時間。該法則在數字信號處理中尤其顯著,由于數字信號處理(digital signal processing,DSP)應用程序的核心通常都是循環(huán)體,很多情況下10%的核心循環(huán)程序就可能占用了80%以上的執(zhí)行時間,同時運行多個程序將導致嚴重的Cache抖動現(xiàn)象,這使得一個線程的執(zhí)行時間大大延長。如果Cache抖動發(fā)生在實時系統(tǒng)中,可能會因為無法滿足實時性要求而導致嚴重的后果。因此在OpenSPARC T1等CMT處理器中,應該盡量保證高優(yōu)先級線程的循環(huán)體得到優(yōu)先執(zhí)行。
另外,與單線程處理器相比,CMT處理器資源消耗多、控制復雜。因此,在CMT處理器中優(yōu)化線程,在增加很少硬件的情況下,以低硬件成本換取高性能,盡可能地保證高優(yōu)先級線程得到優(yōu)先執(zhí)行[6]。
3處理器的一級Cache優(yōu)化
針對Cache抖動現(xiàn)象,本文提出了一種L1-Cache的優(yōu)化思路,即循環(huán)競爭的空間鎖(簡稱“空間鎖環(huán)”)。在增加很少硬件資源的條件下,最大程度地減少循環(huán)體替換的方法。通過在OpenSPARC T1 處理器的SPARC核中設置幾個寄存器,組成空間鎖環(huán),使之能夠鎖定L1-Cache中的某幾塊不被替換,但仍然可以被讀和寫。當線程運行循環(huán)代碼時,會競爭空間鎖環(huán),競爭到空間鎖環(huán)后將這段循環(huán)代碼鎖定在Cache中,從而避免了將該線程循環(huán)代碼替換出Cache,有效減少了Cache沖突。以OpenSPARC T1處理器的I-Cache為例,空間鎖環(huán)的2種狀態(tài)如圖2所示。
圖2中,空間鎖環(huán)由2個索引寄存器Ind-B、Ind-E和1個1位的鎖定寄存器Lock組成。若Cache的容量為L,則索引寄存器Ind-B和Ind-E的容量W為:
W=lb L
(1)
為了實現(xiàn)空間鎖環(huán),傳統(tǒng)的做法是再設置3個寄存器來控制循環(huán)代碼的開始、結束和鎖定狀態(tài),但同時增加了額外的硬件開銷。
圖2 空間鎖環(huán)的鎖定狀態(tài)和非鎖定狀態(tài)
本文采用軟硬件結合的優(yōu)化思路,在編譯器中添加loopb、loope、loopf 3條指令,用來實現(xiàn)3個寄存器的功能。使用編譯器進行編譯時,若檢測出線程中的循環(huán)代碼,則在其初始位置插入loopb、結束位置插入loope、出口位置插入loopf即可。
空間鎖環(huán)在工作時,工作流程可劃分為競爭、鎖定、循環(huán)3個階段,具體如圖3所示。
(1)競爭。線程T1在運行時,若檢測到loopb指令,表示將有一段循環(huán)代碼開始運行,線程T1將與其他線程競爭空間鎖環(huán)。競爭成功則進入鎖定階段,競爭失敗則被掛起,待空間鎖環(huán)空出后重新參與競爭。
(2)鎖定。若線程T1競爭到空間鎖環(huán),則根據指令寄存器PC的索引值立即修改索引寄存器Ind-B,同時將鎖定寄存器Lock置為1,標志空間鎖環(huán)開始鎖定。在繼續(xù)運行過程中,索引寄存器Ind-E隨著指令寄存器PC的變化而修正,不斷鎖定“自由”的Cache空間,直到檢測出loope指令。此時,線程T1的循環(huán)代碼就被鎖定在由寄存器Ind-B和寄存器Ind-E標識出的空間鎖環(huán)中,其他線程的指令將不能替換空間鎖環(huán)中的Cache塊。
(3)循環(huán)。線程T1的循環(huán)代碼在空間鎖環(huán)中不斷循環(huán),直到檢測出loopf指令,表示循環(huán)已結束,鎖定寄存器Lock被置為0,線程T1離開空間鎖環(huán),其他等待中的線程可以繼續(xù)參與空間鎖環(huán)的競爭。
圖3 空間鎖環(huán)工作流程
從空間鎖環(huán)的工作機制可以看出,空間鎖環(huán)通過增加硬件代價較小的3個鎖存器,成功地對Cache抖動進行了優(yōu)化。本文以OpenSPARC T1處理器的L1-I-Cache為例,對空間鎖環(huán)的收益進行分析。
假設OpenSPARC T1處理器有2個線程同時運行,L1-I-Cache每個塊內有NC條指令,最多可接受K條指令,當發(fā)生缺失時,L1-I-Cache需要TM個時鐘周期從L2-Cache中調入數據,線程T1中的循環(huán)代碼指令數為NT1,程序的循環(huán)次數為C,線程T1的循環(huán)代碼運行時,線程T2順序執(zhí)行。
根據以上條件,L1-I-Cache每發(fā)生1次替換操作,延遲為:
(2)
循環(huán)代碼在L1-I-Cache中所占行數為:
(3)
假設線程T1、T2執(zhí)行速度相同,則使用空間鎖環(huán)優(yōu)化前發(fā)生替換的次數為:
(4)
若Dloop為線程T1的整個循環(huán)代碼部分從L2-Cache調入L1-I-Cache的延時,則使用空間鎖環(huán)后,延時減少了Dall,具體公式為:
(5)
4實際優(yōu)化結果
為了驗證空間鎖環(huán)的實際效果,現(xiàn)利用OpenSPARC T1處理器對T1線程及T2線程的表現(xiàn)進行評析。
在OpenSPARC T1中,L1-Cache分為L1-I-Cache和L1-D-Cache,可尋址的空間為4 GB,L1-I-Cache的大小為 16 kB,塊大小為32 B,寬度為 256位寬(32字節(jié)),共 512個塊[7]。
因為L1-I-Cache的容量為512行,根據(1)式,索引寄存器Ind-B和Ind-E的容量都是9位。當L1-I-Cache發(fā)生缺失時,一個塊的替換操作延時是22個時鐘周期。取L1-I-Cache每個塊內有8條指令,線程T1執(zhí)行一段循環(huán)長度為256條的指令,連續(xù)執(zhí)行100次;同時線程T2按順序執(zhí)行,在發(fā)生競爭時啟用空間鎖環(huán),按優(yōu)先級的順序,而對于同一優(yōu)先級的線程,則按先入先出(first input first output,FIFO)策略。根據(5)式,可得空間鎖環(huán)節(jié)省的延時為4 400。
5結束語
在OpenSPARC T1處理器中由于多線程并行競爭Cache等資源引發(fā)Cache抖動,使得每個線程的延時上升,效率降低,導致不能滿足即時性要求。如果Cache抖動現(xiàn)象過于嚴重,多線程處理器的性能甚至不如單核單線程處理器表現(xiàn)良好。本文采用空間鎖環(huán)降低Cache的沖突,可以盡量避免線程中的循環(huán)體被替換出Cache。分析結果表明,啟用空間鎖環(huán)不僅使得Cache沖突減小,Cache的失效率降低,而且主線程的性能也得到了較大程度的提升。采用軟硬技術相結合的空間鎖環(huán),僅增加了幾個寄存器和移位器,大大減少了優(yōu)化花銷,對高性能多核處理器設計中的Cache設計具有一定的借鑒意義。
[參考文獻]
[1]方娟,張紅波.多核處理器預取策略的研究[J].微電子學與計算機,2010,27(8):74-76.
[2]黃鵬.CMT:處理器吞吐量倍增的秘訣[J].程序員,2006(5):122-124.
[3]王晶,張盛兵,張萌,等.CMT結構資源共享問題及爭用緩解機制研究 [J].微電子學與計算機,2007,24(6):1-4.
[4]賀榮華.一種超長指令字同時多線程處理器的設計與分析[D].長沙:國防科學技術大學,2005.
[5]馬鵬勇.CMT處理器高速緩存的優(yōu)化技術[D].長沙: 國防科學技術大學,2007.
[6]唐軼軒.面向多線程應用的Cache優(yōu)化策略及并行模擬研究[D].合肥:中國科學技術大學,2012.
[7]胡小龍,楊蕊.OpenSPARCT1處理器Cache機制研究及優(yōu)化[J].微計算機信息,2009,25(1/2):267-268,271.
(責任編輯閆杏麗)
Optimization of the Cache in OpenSPARC T1 processor
HOU Ze-jun,ZHANG Duo-li,JIA Ding-cheng,LU Fang-quan,SHI Ying
(School of Electronic Science and Applied Physics,Hefei University of Technology,Hefei 230009,China)
Abstract:Taking OpenSPARC T1 processor as an example,the Cache conflicts caused by the Cache thrashing in the chip multi-threading(CMT)processors are discussed. On this basis,the circular locking mechanism of space is introduced to reduce the probability of being replaced from the Cache and avoid Cache conflicts in the loop body,so as to improve the performance of multi-threading processor. The result shows that the cache latency and the failure rate of the Cache are reduced by using the circular locking mechanism.
Key words:OpenSPARC T1 processor;Cache thrashing;circular locking mechanism of space
收稿日期:2015-03-10;修回日期:2015-04-13
基金項目:國家自然科學基金資助項目(61106020);合肥工業(yè)大學大學生創(chuàng)新性實驗計劃資助項目(201510359038)
作者簡介:侯澤君(1988-),男,陜西寶雞人,合肥工業(yè)大學助教; 張多利(1976-),男,黑龍江齊齊哈爾人,博士,合肥工業(yè)大學研究員,碩士生導師.
doi:10.3969/j.issn.1003-5060.2016.06.014
中圖分類號:TP302.7
文獻標識碼:A
文章編號:1003-5060(2016)06-0786-04