孫彩霞,隋兵才,王 蕾,王永文,黃立波,李文哲,王俊輝
(國防科技大學 計算機學院, 湖南 長沙 410073)
?
亂序超標量處理器核的性能分析與優化*
孫彩霞,隋兵才,王 蕾,王永文,黃立波,李文哲,王俊輝
(國防科技大學 計算機學院, 湖南 長沙 410073)
隨著處理器微體系結構日益復雜,性能分析在處理器研制過程中的作用越來越重要。常用的性能分析方法是建立性能模型,該方法主要用于研制初期的設計空間探索,如果用于微體系結構級的分析和優化,速度和精度都會成為限制因素。因此,提出一種基于計數器的性能分析方法,該方法以項目組已經完成的一款處理器核的硬件實現代碼為基礎,在處理器核外部添加一個專用性能監測單元,收集微體系結構分析和優化需要的各種事件,并通過結果分析器對統計的事件進行分析,得到微體系結構實現的性能受限因素。采用此方法,在現場可編程門陣列原型系統上對SPEC CPU2000測試程序運行時的性能受限因素進行分析,并根據分析結果采取相應的優化措施,優化后的處理器核性能得到了明顯提升。
性能分析;計數器;處理器核;微體系結構
為了追求更高的處理器性能,多發射、分支預測、寄存器重命名、亂序執行、前瞻執行等技術被廣泛采用,使得處理器微體系結構變得日益復雜,僅僅依靠直覺或經驗設計處理器變得幾乎不可能。性能分析成為處理器研制過程中必不可少的一個環節。
性能分析可以分為硅前和硅后兩個階段。硅前分析主要進行處理器設計空間探索,確定滿足期望目標的處理器實現,常用手段是使用性能模擬器。主流處理器生產廠商雖然沒有過多披露他們在性能分析方面的實現細節,但是從公開的資料中能夠了解到他們對性能分析的重視以及為此所做的努力。IBM公司開發了一整套用于PowerPC處理器微體系結構探索的環境和工具(Micro-architecture Environment Toolset,MET)[1],2004年Singhal等[2]介紹了Pentium4處理器性能分析過程中使用的蹤跡驅動的性能模型,中科院計算機所在龍芯系列處理器研制過程中開發了Sim-Godson性能模擬器[3]。不僅在工業界,還在學術界發布了很多好用的開源性能模擬器,如SimpleScalar[4],GEMS[5],M5[6],Gem5[7]等。性能模擬器的抽象層次通常較高,但精度有限。此外為了加快模擬速度,模擬時通常會采用一些加速技術,比如采樣[8],這些技術會帶來精度上的損失。硅后分析主要根據芯片實際表現來驗證和優化硅前分析方法或進行編譯器的優化[9-10],常用手段是使用硬件性能計數器?,F代處理器幾乎都在硬件上實現了性能監測單元[11-12],以對一些事件進行統計,并通過性能計數器呈現出來。Intel VTune性能分析器就是利用這些計數器進行應用的性能優化。但是受限于硬件實現代價,處理器通常只設置少量性能計數器,所統計的事件也非常有限,不足以指導微體系結構級的性能分析與優化。
本文提出在硅前利用性能計數器分析處理器核在運行應用程序時的性能受限因素,指導處理器核微體系結構的優化。該方法以項目組已經研制完成的一款處理器核(簡稱XMC)的硬件實現代碼為基礎,在處理器核外部添加一個專用性能監測單元,收集微體系結構分析需要的各種事件,并通過結果分析器對統計的事件進行分析,得到微體系結構實現的性能受限因素,以指導下一代處理器核的設計。采用此方法,我們在FPGA原型系統上對SPEC CPU2000測試程序運行時的性能受限因素進行了分析,并根據分析結果采取了相應的優化措施,優化后的處理器核性能得到了明顯提升。
圖1給出了XMC處理器核的微體系結構。每個周期,取指單元(Instruction Fetch Unit, IFU)取出128位、4條指令存入指令隊列(instruction queue);每個周期最多譯碼4條指令,譯碼后的指令進入譯碼隊列(decode queue);根據寄存器映射表(rename table),每個周期最多對4條指令進行重命名,重命名后的指令進入分派隊列(dispatch queue)。如果沒有足夠的重命名寄存器,重命名過程會發生阻塞;每個周期最多分派4條指令,分派后的指令根據其類型進入相應的發射隊列,同時也會進入重定序緩沖(ReOrder Buffer,ROB);指令發射是亂序進行的,只要發射隊列中指令的操作數準備就緒并且功能單元空閑,指令就可以發射到功能單元執行;指令提交順序進行,提交時會把重命名寄存器文件(Rename Register File, RRF)中的結果寫回到體系結構寄存器文件(Architectural Register File, ARF)。

圖1 XMC處理器核微體系結構Fig.1 Micro-architecture of XMC
XMC使用全局歷史緩沖(Global History Buffer,GHB)預測分支方向,GHB中每一項都是一個2位飽和計數器,用于指明分支跳轉方向;過程返回指令由返回棧緩沖(Return Stack Buffer,RSB)提供跳轉地址,其他分支指令由分支目標緩沖(Branch Target Buffer,BTB)提供跳轉地址。
XMC在進行寄存器重命名時,整數寄存器和浮點寄存器共享同一個重命名寄存器文件。重命名寄存器文件共有64項,每項64位。
發射隊列采用分布式結構,即每種功能部件擁有獨立的發射隊列。XMC處理器核中共有3種發射隊列:整數發射隊列(int issueQ),浮點發射隊列(FP issueQ)和訪存發射隊列(LS issueQ)。每種發射隊列負責向相應的功能部件提供指令,其中分支指令在整數部件執行。
受限于硬件實現代價,處理器通常只實現少量硬件性能計數器,所統計的事件也非常有限。為了利用性能計數器提供的信息進行微體系結構層面的性能分析和優化,需要進一步統計微體系結構實現有關的參數。
圖2給出了基于計數器的性能分析方法的示意圖。XMC的性能監測單元實現了多個性能計數器,可以分時統計多個事件,通過統計事件可以計算出每拍完成的指令數(Instructions Per Cycle,IPC)、分支預測失誤率、核內各級Cache失效率和TLB失效率等,但是這些事件還不足以分析微體系結構的性能受限因素。為此,在XMC處理器核外實現了一個專用性能監測單元,進行微體系結構優化需要的任何事件(處理器核內部硬件信號)都可以送到該單元進行統計。數據收集單元收集性能監測單元統計的各類事件,數據收集可以在整個性能統計過程結束后進行,也可以按照一定時間間隔定期進行。收集到的數據送給結果分析器進行分析,尋找處理器核運行應用程序時的性能受限因素。

圖2 使用計數器的性能分析方法示意圖Fig.2 Performance analysis method using counters
專用性能監測單元和數據收集單元都用可綜合代碼進行實現,同XMC的寄存器傳輸級(Register Transfer Level,RTL)代碼構成了硬件實現部分,可運行在NC-Verilog/VCS模擬器上,也可運行在硬件仿真器或現場可編程門陣列(Field-Programmable Gate Array,FPGA)原型系統上。本文面向SPEC CPU2000測試程序進行分析,考慮到模擬速度,選擇FPGA原型系統進行模擬并收集數據[13],收集的數據通過通用異步收發器(Universal Asynchronous Receiver Transmitter,UART)串口輸出送給性能分析器。
在一個應用程序運行結束后,性能監測單元中計數器的值表示這個應用程序執行期間計數器統計的事件發生的次數。如果要繼續統計另一個應用程序運行時相應事件發生的次數,那么計數器首先應該被清0。為了能夠通過軟件對專用性能監測單元中的性能計數器進行清0操作,借用了XMC處理器核的性能監測單元中第0號性能計數器的有關控制信號,如圖3所示。對性能監測單元中第0號性能計數器的清0操作可以同時將專用性能監測單元中的所有性能計數器清0。

圖3 專用性能計數器的控制Fig.3 Controls for specialized performance counters
XMC的機器寬度為4,理想的IPC可以達到4。但是在FPGA原型系統上得到的SPEC CPU2000測試程序的IPC平均只有1.23。為了獲得微體系結構實現上的性能受限因素,從重命名和分派兩處作為切入點進行分析。圖4給出了SPEC CPU2000測試程序平均每拍重命名的指令數(renaming IPC)和平均每拍分派的指令數(dispatching IPC)。

圖4 SPEC CPU2000平均每拍重命名和分派的指令數Fig.4 Renaming IPC and dispatching IPC of SPEC CPU2000
重命名寬度和分派寬度都是4,但是實際上平均每拍重命名和分派的指令數分別為1.38和1.35,最大時也沒有超過2,是什么導致指令的重命名和分派不能進行呢?
首先分析重命名阻塞原因。為此,統計了如下事件:譯碼隊列無指令,重命名寄存器缺乏和分派隊列無空閑項。圖5給出了SPEC CPU2000測試程序重命名阻塞的原因分布。

圖5 重命名阻塞的原因分布Fig.5 Reasons for renaming stalls
可以看出,對于浮點測試程序(圖5中左邊8個程序),重命名寄存器缺乏和分派隊列沒有空閑項是主要原因,譯碼隊列無指令占的比例很??;而對于整數測試程序(圖5中右邊8個程序),重命名阻塞原因則有所不同,重命名寄存器相對并不是受限因素,而譯碼隊列沒有指令占的比例較大,分派隊列沒有空閑項同樣也是主要原因之一。
譯碼隊列沒有指令是因為流水線前端指令供應不足。為此,統計了對取指有影響的一級指令Cache失效率、分支比例(可預測分支指令在所有指令中所占的比例)以及分支誤預測率,如圖6、圖7、圖8所示。

圖6 一級指令Cache失效率Fig.6 L1 ICache miss rate

圖7 分支比例Fig.7 Proportion of predictable branches to all instructions

圖8 分支誤預測率Fig.8 Branch misprediction rate
可以看出,相對于浮點測試程序,整數測試程序在這三個指標上都相對較大,尤其是分支比例和分支誤預測率方面,整數測試程序要高出很多。改善分支預測結構(比如提高分支預測準確率,降低分支預測延遲)對整數測試程序性能的提高會更有幫助。一級指令Cache失效率非常低,最大時也不到1%,優化空間不大。
分派隊列沒有空閑項接收重命名的指令是因為分派發生了阻塞。從第一章描述可知,分派隊列沒有指令、發射隊列沒有空閑項、ROB沒有空閑項都會導致分派阻塞。為此,對這些事件進行了統計。圖9給出了分派阻塞的原因分布。

圖9 分派阻塞的原因分布Fig.9 Reasons for dispatching stalls
分派隊列沒有指令是因為重命名阻塞導致的,前面已經分析了原因。當有指令可以分派時,ROB沒有空閑項對個別程序比較明顯,比如vortex,但總的來說并不突出,而發射隊列沒有空閑項成了主要原因。在XMC處理核的設計中,發射隊列采用的是分布式結構,這樣可以降低設計的復雜度,但是從利用率的角度考慮并不好。
通過以上分析,發現SPEC CPU2000測試程序在XMC處理器核上運行時的性能受限因素如下:
1)對于浮點測試程序,重命名寄存器個數不足導致重命名阻塞嚴重;
2)優化分支預測結構對整數測試程序的性能提升更有幫助;
3)無論整數還是浮點測試程序,發射隊列項數不足導致分派阻塞嚴重。
依據上述分析結果,從以下幾個方面優化XMC處理器核的微體系結構。
分支預測結構方面,使用更加先進的分支預測算法來提高預測精度。當前比較流行并被廣泛采用的預測算法有Tournament[11, 14]和TAGE[15-16],本文選擇了TAGE預測算法進行分支方向預測。首先在軟件模擬器上對TAGE算法和XMC處理器核之前采用的分支預測算法進行了比較,TAGE算法確實具有更高的預測精度,提高了近2%。TAGE算法的RTL實現工作正在進行中。
針對重命名寄存器個數不足問題,修改RTL代碼,并通過參數化使得重命名寄存器的個數可以在64,96和128之間進行選擇,以從性能和實現代價方面綜合評價。
圖10給出了128個重命名寄存器下,SPEC CPU2000測試程序相對于64個重命名寄存器時的性能提升百分比。

圖10 128個重命名寄存器和64個重命名寄存器的性能比較Fig.10 Performance with 128 rename registers compared to that with 64 rename registers
如同第3節分析的一樣,重命名寄存器個數不足導致浮點測試程序的重命名阻塞嚴重,增加重命名寄存器有效提高了浮點測試程序的性能,平均達到了5.32%,最高達到了13.21%。對于整數測試程序,性能提升并不顯著,平均只有0.72%。
此外,對96和128個重命名寄存器下SPEC CPU2000的性能進行了對比,圖11給出了96個重命名寄存器下,SPEC CPU2000測試程序相對于128個重命名寄存器時的性能降低百分比。對于整數測試程序,影響非常小,平均降低了0.09%。對于浮點測試程序,重命名寄存器個數從128減少到96,平均性能不但沒有降低,反而增加了0.33%,這主要是由于apsi程序的性能不降反增導致的*重命名寄存器個數增加是有可能導致性能不增反降。這是因為,不該執行的指令(異常或分支誤預測被清除的指令)可能因為重命名寄存器個數的增加而有機會進入流水線,增加了清除代價。。如果去除apsi的結果,浮點測試程序的性能平均降低了1.02%,降低最多的程序是wupwise,達到了3.39%。

圖11 96個重命名寄存器和128個重命名寄存器的性能比較Fig.11 Performance with 96 rename registers compared to that with 128 rename registers
96個重命名寄存器相比128個重命名寄存器,性能雖然會有所下降,但是實現代價也會相對變小。對XMC處理器核進行了綜合,相對于64個重命名寄存器,96個重命名寄存器時的XMC處理器核的面積增加了4.70%,128個重命名寄存器時的XMC處理器核的面積增加了7.84%??梢姡瑢崿F96個重命名寄存器時,XMC處理器核的性能代價比較高。
最后,針對發射隊列項數不足問題,分別增加了整數發射隊列和浮點發射隊列的項數,但是發現單純增加發射隊列項數并不能帶來明顯的性能提升。這暴露了目前基于計數器分析微體系結構級性能受限因素方法的不足,即提取的事件相對比較獨立,未充分將處理器核內各流水線級的事件有效關聯起來,還有待進一步完善。
處理器微體系結構日益復雜,性能分析成為處理器研制過程中的重要環節。本文提出了一種基于計數器的性能分析方法,該方法在已有的處理器核硬件實現代碼外部添加一個專用的性能監測單元,用于收集微體系結構分析需要的各種事件,并把統計的事件送給結果分析器進行分析,獲得微體系結構實現的性能受限因素。
以處理器核XMC為基礎,面向SPEC CPU2000測試程序,基于FPGA原型系統仿真平臺,以流水線中重命名和分派兩處作為切入點,采用基于計數器的性能分析方法尋找重命名阻塞和分派阻塞的原因,可以發現:
1)對于浮點測試程序,重命名寄存器個數不足導致重命名阻塞嚴重;
2)優化分支預測結構對整數測試程序的性能提升更有幫助;
3)無論整數還是浮點測試程序,發射隊列項數不足導致分派阻塞嚴重。
根據以上發現,采取了相應的優化措施。當把重命名寄存器個數從64個增加到128個時,浮點測試程序的性能平均提高了5.32%,最高達到了13.21%。但是增加發射隊列項數并沒有帶來預期的性能改善,這暴露了目前的方法還存在不足,需要進一步完善。
References)
[1] Moudgill M, Wellman J D, Moreno J H. Environment for PowerPC micro-architecture exploration[J]. IEEE Micro, 1999, 19(3): 15-25.
[2] Singhal R, Venkatraman K S, Cohn E R, et al. Performance analysis and validation of the Intel Pentium 4 processor on 90nm technology[J]. Intel Technology Journal, 2004, 8(1): 39.[3] 張福新, 章隆兵, 胡偉武. 基于SimpleScalar的龍芯CPU模擬器Sim-Godson[J]. 計算機學報, 2007, 30(1): 68-73.
ZHANG Fuxin, ZHANG Longbing, HU Weiwu. Sim-Godson: a godson processor simulator based on SimpleScalar[J]. Chinese Journal of Computers, 2007, 30(1): 68-73.(in Chinese)
[4] Austin T, Larson E, Ernst D.SimpleScalar: an infrastructure for computer system modeling[J]. Computer, 2002, 35(2): 59-67.
[5] Martin M M K, Sorin D J, Beckmann B M, et al. Multifacet′s general execution-driven multiprocessor simulator (GEMS) toolset[J]. ACM SIGARCH Computer Architecture News, 2005, 33(4): 92-99.
[6] Binkert N L, Dreslinski R G, Hsu L R, et al. The M5 simulator: modeling networked systems[J]. IEEE Micro, 2006, 26(4): 52-60.
[7] Binkert N L,Beckmann B,Black G, et al. The GEM5 simulator[J]. ACM SIGARCH Computer Architecture News, 2011, 39(2): 1-7.
[8] Wunderlich R E, Wenisch T F, Falsafi B, et al. SMARTS: accelerating micro-architecture simulation via rigorous statistical sampling[J]. Computer Architecture NEWS, 2003, 31(2): 84-95.
[9] 朱艷玲, 朱怡安, 王云嵐. 基于硬件性能計數器的編譯器性能測試與分析[J]. 微電子學與計算機, 2008, 25(3): 192-196.
ZHU Yanling, ZHU Yian, WANG Yunlan. Compiler performance test and analysis based on hardware performance counters[J]. Microelectronics & Computer, 2008, 25(3): 192-196.(in Chinese)
[10] 車永剛, 王正華, 李曉梅. 一個基于硬件計數器的程序性能測試與分析工具[J]. 計算機科學, 2004, 31(1): 170-174.
CHE Yonggang, WANG Zhenghua, LI Xiaomei. A hardware counter based tool for application′s performance measurement and analysis[J]. Computer Science, 2004, 31(1): 170-174.(in Chinese)
[11] Kalla R, Sinharoy B, Starke W J, et al.Power7: IBM's next-generation server processor[J]. IEEE Micro, 2010, 30(2): 7-15.
[12] Sprunt B. Pentium 4 performance-monitoring features[J]. IEEE Micro, 2002, 22(4): 72-82.
[13] Huang L B, Wang Y W, Dou Q, et al. Fast FPGA system for micro-architecture optimization on synthesizable modern processor design[C]//Proceedings of 25th International Conference on Field-programmable Logic and Applications (FPL), 2015.
[14] Evers M, Chang P Y, Patt Y N. Using hybrid branch predictors to improve branch prediction accuracy in the presence of context switches[C]//Proceedings of the 23rd Annual International Symposium on Computer Architecture, 1996.
[15] Seznec A. A new case for the tage branch predictor[C]//Proceedings of the 44th Annual IEEE/ACM International Symposium on Micro-architecture, 2011.
[16] Seznec A. TAGE-SC-L branch predictors[C]//Proceedings of the 4th Championship Branch Prediction, 2014.
Counters based performance analysis and optimization of an out-of-order superscalar processor core
SUN Caixia, SUI Bingcai, WANG Lei, WANG Yongwen, HUANG Libo, LI Wenzhe, WANG Junhui
(College of Computer, National University of Defense Technology, Changsha 410073, China)
With the ever-increasing design complexity in the processor micro-architecture, performance analysis becomes more and more important in the research and design of processors. Performance models are used widely in the performance analysis, which are more suitable for the design space exploration in the early stage. When used in micro-architecture optimizations, the accuracy and the speed of performance models are the limiting factors. Therefore, a performance analysis method based on counters was proposed. In this method, the RTL register transfer level code of a processor core was used as a baseline, and a specialized performance monitor unit was added to collect the events needed by the micro-architecture analysis and optimization. Then the collected events were sent to a result analyzer, where the factors affecting the performance were obtained. By a dopting the method, we analyzed what affects the performance in running SPEC CPU2000 benchmarks on FPGA(field-programmable gate array) prototyping, and optimized the micro-architecture of processor core according to the analysis results. The performance of the optimized processor core is improved obviously.
performance analysis; counters; processor core; micro-architecture
10.11887/j.cn.201605003
http://journal.nudt.edu.cn
2015-11-25
國家自然科學基金資助項目(61103011,61170045,61402501)
孫彩霞(1979—),女,黑龍江綏化人,副研究員,博士,碩士生導師,E-mail:cxsun@nudt.edu.cn
TP302.1
A
1001-2486(2016)05-014-06