(1.東北電力學院,吉林 132012; 2.并行與分布處理國家重點實驗室, 湖南 長沙 410073)
摘 要: Wisconsin Madison大學發布的SimpleScalar模擬器為處理器體系結構設計提供了多層次的支持。分析了整個模擬器的結構和工作流程,并通過測試分析得到了優化方法,該方法通過對模擬器編譯配置的改進,能夠縮短模擬時間50%左右,大大提高了工作效率。
關鍵詞: 模擬器; 性能優化; 程序配置
中圖法分類號: TP332文獻標識碼: A
文章編號: 1001 3695(2006)08 0197 02
Analysis and Optimization for Processor Architecture Simulator (SimpleScalar)
JIN Li zhong1, DOU Yong2
(1.Northeast China Institute of Electric Power Engineering,Jilin 132012,China; 2.National Laboratory for Parallel Distributed Processing,Changsha Hunan 410073, China)
Abstract: The SimpleScalar tool set, a collection of publicly available simulation tools published by University of Wisconsin Madison, is a great convenience for computer architecture designers. We analyze the structure and work flow of SimpleScalar. A new method is proposed for shortening the simulation time. During the tests of 6 benchmark programs, the new method decrease the simulation time to nearly 50% by reconfiguring the makefile of the simulator and some parameters.
Key words: Simulator; Performance Optimization; Program Configuration
處理器設計是一項非常耗費資金和時間的復雜工程,特別是在集成度越來越高的今天,面對數千萬乃至上億規模的晶體管,那種設計硬件原型—實現—進行評估—改進—再實現的模式早就被擯棄了;另一方面,數學形式的性能模型在Cache、亂序執行和前瞻等技術被廣泛采用的情況下并不能精確地反映實際情況。處理器設計人員都是通過模擬器進行性能的預先評估和正確性驗證,因此處理器體系結構模擬器對芯片設計非常重要。體系結構模擬器均采用軟件模擬指令運行的工作方式,雖然其靈活性高,但是效率低。大型測試程序往往需要運行十幾個小時甚至幾天的時間。因此如何提高模擬器的運行效率至關重要。對于正在開發的模擬器需要采取多種并行措施和檢查點保護等方法提高模擬器的執行速度和可靠性。但是如何提高已經使用的模擬器效率,其相關的研究工作不是很多[3,4]。
Wisconsin Madison大學發布的SimpleScalar模擬器是一個開放軟件[1],源代碼是公開的,具有良好的可移植性和可擴展性,能夠支持各種不同層次設計人員的需求,因而得到了廣泛的應用。現在普遍使用的是1997年1月份發布的SimpleScalar模擬器第二版。本文的主要目的就是分析SimpleScalar模擬器主程序和兩個模擬器Sim fast及Sim safe的結構,并對其Makefile中的編譯優化參數進行分析。研究Sim fast子模擬器use jump table參數的作用,并通過基準程序測試進行了性能比較,給出了優化的方法。
1 SimpleScalar模擬器簡介
針對不同層次設計人員的需求,SimpleScalar提供了五個不同功能的模擬器:SimFast,SimSafe,SimProfile,SimCache和SimOutOrder,極大地方便了研究人員的工作需要。同時,SimpleScalar采用了基于GCC的編譯器和相關的工具以產生適合自身運行的目標代碼。圖1表示的是SimpleScalar的框架。
其中f2c是ATT的編譯器,用于將Fortran程序轉換成適合GCC的中間代碼;而SimpleScalar所使用的庫是由GLIBC移植而來的。
2 SimpleScalar模擬器主程序和子模擬器結構、流程分析
2.1 模擬器主程序基本流程
SimpleScalar主程序的工作過程如圖2所示。
(1)模擬器執行的入口點是Main.c文件中定義的 Main( ) 主函數。 當模擬器開始執行時,首先執行模擬器初始化工作,它主要包括:① 顯示版本信息。②處理用戶對模擬器的配置選項。SimpleScalar模擬器提供了許多選項供用戶設置,如配置Cache的大小及結構、前瞻執行策略的選擇等,從而方便用戶得到關心的信息。③存儲器的初始化。SimpleScalar模擬器提供了2GB的虛存空間,用來存放被模擬程序的正文段和數據段等。執行初始化后,被模擬程序的目標代碼全部載入模擬器的內存中。④寄存器初始化。SimpleScalar提供了32個整數、32個單精度浮點/16個雙精度浮點寄存器,另有六個控制寄存器。⑤相應子模擬器的初始化。五個子模擬器的初始化復雜程度不一,實現的功能也不盡相同。
(2)執行模擬。運行時分別調用各個子模擬器的sim_main()函數:首先將被模擬程序的全部正文段譯碼,然后從程序的入口點處開始執行模擬。在下面詳細介紹Sim fast和Sim safe模擬器的實現。
(3)執行完畢后進行結束處理,并將模擬過程中依據用戶的選項配置記錄的執行信息,如執行時間、各種類型指令的分類統計、前瞻執行的命中/不命中情況等結果輸出。
2.2 Sim fast的基本流程
Sim fast是執行速度最快,最不關心模擬過程細節信息的子模擬器程序。它采用順序執行指令的方式,沒有指令并行;不支持Cache的使用,也不進行指令正確性檢查,由程序員保證每條指令的正確性;不支持模擬器本身內嵌的Dlite!調試器(類似于gdb調試器)。
為了模擬器的速度優化,在缺省情況下,Sim fast模擬器不進行時間統計,不對指令的有關信息(如指令總數及訪存指令數目)進行統計。當然,可以修改模擬器源程序,通過改變其設置,使模擬器更加符合設計人員的需求。
為保證模擬器的正常執行,能夠加快執行速度的jump_table參數被忽略。此參數僅在Sim fast子模擬器中才有,它用一數組存儲跳轉指令的目的地址以節省時間、提高速度。在文章的下一部分有jump_table參數作用的詳細討論。
Sim_main()程序是每個子模擬器運行的核心部分。Sim fast中Sim main()函數的主要工作是:①從模擬器的內存空間中取一條在前面主程序中存入的指令;②分析指令代碼;③執行指令,并在執行過程中,依據用戶的配置,將用戶關心的信息進行統計;④循環執行步驟①~步驟③,直到被模擬的程序執行結束;⑤跳轉返回到模擬器的主程序。
2.3 Sim safe的基本流程
Sim safe是Sim fast的孿生兄弟,實現基本與Sim fast一致,但它們又是相互獨立的。Sim main()函數流程與Sim fast中的Sim main()函數大體相同,主要的區別在于在執行指令時,Sim safe進行指令的齊整性(Alignment)檢查,對所有的訪存指令首先檢查是否合法,而且Sim safe增加了訪存指令的分析,并支持Dlite!調試器。
3 SimpleScalar模擬器配置參數的優化
為了保證模擬器在所有運行平臺上的正常執行,Simple Scalar 模擬器的缺省配置均比較保守,這樣的代價是運行速度很慢。表1給出了SPEC95基準程序的概要說明[2],它是測試所采用的SPEC95基準程序功能和測試輸入集的說明。
SimpleScalar模擬器的優化主要有兩部分:①Makefile中優化參數的設置,這些設置對所有的模擬器均有效;②在各個子模擬器的源程序中優化參數的修改,因此優化的效果僅作用于相應的子模擬器。
Makefile中優化參數缺省設置為OFLAGS= g Wall,即支持調試和對一些事件輸出警告信息;優化后的設置為OFLAGS= O3 Wall funroll loops m486,即允許為了優化而多花費一些編譯時間,支持循環展開,面向486而不是386的體系結構進行編譯優化。
在Sim fast中的USE_JUMP_TABLE參數缺省是忽略的,為了說明該參數的作用,我們對忽略和允許此參數時的運行時間都進行了測試。測試平臺為
CPU:AMD Duron 600;主板:Slotek SL 75KV SOCKRT A),支持DMA 66;
MEM:KingMax 133 128MB;硬盤:希捷 酷魚30GB 7200轉;
OS:RED HAT Linux 7.0。
由于Sim fast是順序執行的,為保證測試數據的可靠性和有效性,在單用戶、單任務的環境下進行測試,所以最終的模擬執行時間可以認為是被測程序實際所耗費的時間。圖3是測試所得數據的比較(時間單位是s)。
表中縮寫的意義是:
MY——在Makefile中采用優化編譯參數;
MN——在Makefile中采用缺省編譯參數;
JY——在Sim fast中使用USE_JUMP_TABLE參數;
JN——在Sim fast中忽略USE_JUMP_TABLE參數。
由圖3可以看出,當使用SimpleScalar的缺省配置時,全部基準程序耗費的時間均比其他情況多;在Makefile中使用優化方法后,取得的效果比僅改動子模擬器的優化參數時要好。雖然是對Sim fast子模擬器進行的測試,但Makefile中的優化參數對其余幾個子模擬器的速度提升也同樣起作用。當兩種優化策略都使用時,獲得的收益更加明顯,能夠縮短一半的測試時間。因此在操作系統支持下,應盡量使用優化設置,從而可以降低時間開銷,加快設計開發的進度。
4 小結
SimpleScalar模擬器為處理器設計人員提供了強大的支持,但是由于模擬執行,其運行速度較慢,導致設計、測試時間很長,效率不高。本文針對該模擬器的配置與優化方法進行了測試,通過對多個測試程序不同優化配置的分析比較,提出了模擬器配置的優化方法(MY JY),能夠提高模擬器執行速度近一倍,顯著提高了處理器的設計效率。
參考文獻:
[1]D C Burger,T M Austin. The SimpleScalar Tool Set(version 2.0)[R].Technical Report CS TR 97 1342,University of Wisconsin, Madison, 1997.
[2] A KleinOsowski, J Flynn, et al. Adapting the SPEC 2000 Benchmark Suite for Simulation based Computer Architecture Research[C].Proceedings of the International Conference on Computer Design,2000.
[3] T Lafage,A Seznec. Choosing Representative Slices of Program Execution for Microarchitecture Simulations:A Preliminary Application to the Data Stream[Z].Workload Characterization of Emerging Applications, Kluwer Academic Publishers,2000.
[4] M Oskin, F T Chong,M Farrens. HLS: Combining Statistical and Symbolic Simulation to Guide Microprocessor Designs[C].The 27th Annual International Symposium on Computer Architecture, 2000. 71-82.
作者簡介:金立忠(1967-),男,吉林人,環境與輕化工程系主任,講師,學士,研究方向為環境與輕化工程;竇勇(1966-),男,吉林人,實驗室主任,博導,博士,研究方向為計算機體系結構。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。