王芳良,張偉功+,于立新,周海洋,莊 偉
(1.首都師范大學 信息工程學院,北京100048;2.北京微電子技術研究所,北京100076;3.北京市高可靠嵌入式系統技術工程研究中心,北京100048)
對嵌入式系統性能進行準確的量化分析,提供準確的性能指標,對充分發揮嵌入式處理器性能,了解嵌入式系統關鍵部件對系統性能的影響程度,提高嵌入式系統性能有著重要意義?;鶞食绦蚍ㄒ蛑苯印⒑唵?、低費用等優點被廣泛地用于評估系統性能中,但一直以來對基準集的開發研究要遠落后于對處理器設計的研究,尤其是面向工業控制、航空等領域的基準集更為落后。目前流行的基準集中SPEC CPU2006[1]和Linpack[2]主要用于通用處理器及大型處理器的定點浮點運算性能評估,但由于其對操作系統要求嚴格,很難應用于工業控制、航空領域無操作系統的嵌入式系統。Dhrystone[3]基準集被廣泛應用于嵌入式處理器整數運算性能的評估,但代碼量小,受編譯器優化、庫函數等因素的影響較大,測試結果已受到很大的質疑;MediaBench[4]基準集主要包含一些多媒體嵌入式應用程序,對嵌入式應用的覆蓋面有限;EEMBC[5,6]基準集對嵌入式系統應用的覆蓋很全面,但成本較高;MiBench[7]基準集覆蓋了多種常見的嵌入式應用,但對編譯器和系統庫要求較高,移植和使用比較復雜;CoreMark[5,8-10]基準集是用來衡量嵌入式系統中心處理單元性能的標準,在設置上彌補了Dhrystone的不足,支持無操作系統的移植。非常適合工業控制、航空領域無操作系統的嵌入式系統的性能評估。Intel、Samsung Exynos、ARM、Freescale、IBM 等多款嵌入式處理器都采用CoreMark值作為處理器性能指標[11],但是國內還沒有處理器廠商采用CoreMark基準集。本文將最新的應用于嵌入式處理器性能評估的CoreMark基準集移植到應用于工業控制的嵌入式系統中,通過改變嵌入式系統中的關鍵部件參數,來獲得關鍵部件的性能加速比以及系統的最佳性能。
EEMBC 組 織 的Shay Gla-On 于2009 年 提 出 了 一 套CoreMark基準集,并且試圖將其發展成為工業標準,從而代替陳舊的Dhrystone標準。CoreMark基準集是用來衡量嵌入式系統中心處理單元性能的標準。代碼使用C 語言寫成,移植性比較強,適合大部分的微控制器和微處理器。CoreMark基準集主要來自常用的一些算法,包含:列表操作 (尋找并排序),數學矩陣操作 (普通矩陣運算)和狀態機 (用來確定輸入流中是否包含有效數字),最后還包括CRC (循環冗余校驗)[12]。
CoreMark基準集與Dhrystone相比有以下優勢:①降低編譯器對嵌入式系統性能的影響。通過對數據初始化、數據必須在運行時間內定義以及庫函數調用不計入運行時間等規則來減少編譯器對嵌入式系統性能的影響。②增加測試代碼覆蓋率與可預測性。CoreMark基準集沒有采用簡單的代碼合成,而是由現實應用中的一些算法有機結合在一起。增加了測試代碼的覆蓋率和可預測性。③設定標準的運行條件和發布規則。CoreMark 基準集對如何運行CoreMark基準集以及如何輸出測試結果做出了詳細規定。必須輸出編譯器的型號、處理器型號、頻率、Cache大小、有無操作系統,以及代碼和數據的存儲位置。這樣測試結果才具有可比性。因此我們選擇CoreMark基準集作為評測該嵌入式系統性能的基準集。
嵌入式系統性能評測環境通常包括用于嵌入式系統評測的測試主機和將要被測評的嵌入式系統。測試主機通過串口與被測嵌入式系統進行數據的通信與交互。本文測試主機采用的是通用的PC,編譯器采用的是GCC3.2.3。
本文所用嵌入式系統采用的是一款Virtex5FPGA 開發板,將開源的基于SPARC V8體系結構的Leon2代碼綜合后燒寫到FPGA 中。其結構框架如圖1所示。

圖1 嵌入式系統的結構框架
本文所述嵌入式系統測試環境配置見表1。以確保其他人根據這些條件能夠得到相同的結果。這些條件包括硬件配置情況,也包括操作系統和編譯器的版本等。

表1 嵌入式系統測試環境配置
CoreMark基準集的移植分為有操作系統和無操作系統的移植。本文的移植是針對無操作系統情況下的移植過程。CoreMark基準集需要編譯的文件見表2。

表2 CoreMark需要編譯文件
根據本文所述的嵌入式處理器和嵌入式系統平臺對CoreMark需要編譯文件中的可修改部分進行設置。<core_portme.h>文件中主要是有關平臺的宏定義,包括是否支持FLOAT,TIME_H,STDIO.H,CLOCK,以及PRINTF等操作。根據自己的平臺對其進行配置。同時要設置所用編譯器的版本以及編譯類型標識。本文采用的是GCC_3.2.3,編譯類型是-O3,所以需要設置為#define COMPILER_ VERSION gcc _ 3.2.3, # define COMPILER_FLAGS-O3。編譯器和編譯類型是CoreMark結果中重要的指標之一,所以必須進行修改。CoreMark基準集為了解決不同編譯器的問題,對數據類型做了統一的定義,如果有不支持的數據類型可以在此進行修改,這樣在工程中的其它文件中就可以保持數據類型的一致性,減少數據類型的修改。同時還要對線程數進行定義,本文采用的是單線程的,所以要在此文件中設置為#define MULTITHREAD 1。這樣<core_portme.h>文件就修改完成。
<core_portme.c>文件中主要包含了CoreMark基準集執行次數、處理器主頻以及計算時間的函數。執行次數是通過seed4_volatile=ITERATIONS來進行修改的,次數可以任意修改,但是為了保證測試結果的正確性,要求必須使得運行時間在10-100秒之間,否則結果會報錯。處理器主頻通過一個簡單的宏定義即可。關于時間計算的函數需要根據被測嵌入式系統的特點進行修改,文件中原本有的測試方法一般不適合現有的方式。這里需要對所用嵌入式系統的定時器進行操作,所以要在<core_portme.c>文件中先引入嵌入式系統的硬件配置文件。本文所述嵌入式系統采用的是24位定時器,每個定時器具有3個寄存器:預分頻器、重載計數值寄存器和控制寄存器。預分頻器為一個10位的減一計數器,由系統時鐘定時,每個時鐘周期減一。當產生下溢時,由預分頻重載寄存器自動重新裝載,同時產生定時脈沖,定時器的值就減一。每當定時器下溢時,就產生一個中斷,通過設置定時器控制寄存器的加載位可以自動重載寄存器的值,同時定時器繼續運行。為了不使中斷的時間影響程序運行的整體時間,所以將定時器的重載值設置為最大,盡量避免中斷。然后將文件中時間計算函數做了以下修改。

<coremark.h>文件中主要是有關函數和變量的定義,在<core_portme.c>文件中函數里用到的變量的定義都需在<coremark.h>文件中進行定義。
把以上文件修改完畢后,需要建立一個<main.c>文件作為工程的頭文件,在這個文件中需要對所用嵌入式系統的相關寄存器進行初始化,然后再調用coremark_main()函數。這樣整個移植過程就完成了。
由于嵌入式系統應用環境的特殊性,尤其是用于工業控制和航空領域的嵌入式系統,嵌入式系統的關鍵部件需要根據環境的需求配置成不同的值,而目前大部分嵌入式系統的性能指標都是在各個部件配置成最佳情況時測試所得,不能正確反映出嵌入式系統在不同環境下的性能。本文對嵌入式系統中SRAM、SDRAM、DCache、ICache、Burst模式以及影響它們內部的可配置因素進行分析,采用對比策略,改變其中1個參數,保持其它參數不變情況下,進行性能測試。得出嵌入式系統在不同的配置環境下的性能,可以為在特殊應用環境下的嵌入式系統提供性能對比的參數。同時可以獲得某一參數的性能加速比,加速比是使用增強措施時完成整個任務的性能與不使用增強措施時完成整個任務的性能的比值[13,14]。加速比可以反映出該增強措施或關鍵部件對嵌入式系統整體性能提高的貢獻值大小,加速比越大,表明增強措施對性能提高的效果越明顯。借助性能加速比,可以量化的分析這一參數對整個嵌入式系統性能的影響程度。嵌入式系統設計者可以分析得出如何分配資源才能充分發揮處理器性能,提高嵌入式系統性能。為避免多個參數相互影響,在測試一個參數對嵌入式系統性能的影響時,關閉其它參數。
嵌入式系統中,當SRAM 選定后,影響SRAM 速度的可配置參數有讀等待周期和寫等待周期。研究SRAM 嵌入式系統性能影響時,為避免Burst模式、ICache和DCache對整體性能的影響,將Burst模式、ICache和DCache均關閉。同時把SRAM 的寫等待周期設置為0,改變SRAM 的讀等待周期,研究SRAM 的讀等待周期對系統整體性能的影響。讀等待周期分別為0和8個時鐘周期時嵌入式系統的性能 (CoreMark/MHz)見表3。SRAM 讀等待周期為0時的嵌入式系統性能明顯高于讀等待周期為8的性能,且加速比為2.5。在Burst模式、ICache和DCache均關閉的情況下,處理器每次讀取數據都需要從SRAM 中獲取,從處理器RTL級仿真中可以發現,SRAM 在0讀等待周期和0寫等待周期的情況下,處理器讀取一個數據需要5個時鐘周期。當讀等待周期為8時,處理器讀取一個數據需要13個時鐘周期,時間是原來的2.6倍。通過從RTL 級的時序分析也證明了CoreMark 基準集測試的正確性。SRAM 的寫等待周期同樣影響整個系統的性能。其測試方法同讀等待周期的測試方法相同,在此不再做詳細的論證。因此,由上述測試結果,可以看出SRAM 的讀寫等待周期對嵌入式系統性能的影響程度。而一般情況下,SRAM 的讀寫等待周期都會默認設置為最大。用戶在使用嵌入式系統時,為提高系統性能,要在時序允許的情況下,盡量把SRAM的讀寫等待周期設置為最小。

表3 SRAM、SDRAM 對嵌入式系統性能的影響
嵌入式系統中,當SDRAM 選定后,影響SDRAM 速度的主要有CAS 延遲、tRP、刷新間隔時間和刷新時間。同樣為避免其它因素的干擾,將Burst模式、ICache 和DCache全部關閉。本嵌入式系統中采用的SDRAM 的刷新間隔時間所允許的最大時鐘周期為4800,本次實驗分別采用1000 和4000。而刷新時間為固定值不能修改。從SDRAM 讀時序中可以分析得到CAS延遲和tRP 均置為0和均置為1時,SDRAM 讀取一個數據分別需要8個和10個時鐘周期,與刷新時間相比,CAS延遲和tRP 對系統性能的影響較小。為看到實驗效果,所以將CAS延遲和tRP同時置1 或0。根據分析設計兩套測試方案,分別評測CAS延遲、tRP和刷新間隔時間對嵌入式系統性能的影響。方案一:在刷新間隔時間設置為4000時,測試CAS延遲和tRP分別為0 和1 情況下嵌入式系統的性能。方案二:在CAS延遲和tRP 均為0 時,測試刷新間隔時間分別為1000和4000時嵌入式系統的性能。測試結果見表4。

表4 SDRAM 對嵌入式系統性能的影響
由表4的前3行數據,可以看出,在刷新間隔時間和刷新時間一定的情況下,CAS延遲和tRP 由全1變為全0時,嵌入式系統的性能有所提高,但是對嵌入式系統性能的影響不大,這與我們之前的預測是一致的。當CAS延遲和tRP一定的情況下,刷新間隔時間由1000變為4000時嵌入式系統性能得到了較大的提升。因為處理器從SDRAM 中讀取一個數據的時間是由SDRAM 讀時序的時間與定期刷新所花費的時間,當刷新間隔時間變大,處理器從SDRAM 中讀取的數據的速度就會提升。所以用戶在使用SDRAM 時,要根據SDRAM 的最大刷新間隔時間參數,將這個值盡量配置為最大,來提高嵌入式系統性能。同時在時序允許的情況下,可以將CAS延遲和tRP的值配置為0,適當的提高系統的性能。
在工程實踐中,常常面臨著選擇SRAM 還是SDRAM來存儲程序和數據。由表3 的SRAM (0 讀等待周期)和表4中SDRAM (CAS和tRP均為0)的嵌入式系統性能可知,在Burst 模 式、ICache 和DCache 都 關 閉 的 情 況 下,SRAM 的讀寫速度要明顯高于SDRAM 的速度,嵌入式系統的性能提高了1.8倍。這些數據可以幫助嵌入式系統設計者在特殊的應用環境中 (如不能打開Cache或Burst模式)做出合理的選擇。
Burst模式是針對讀寫存儲器太慢而設置,Burst模式可以一次性地讀出成組數據到內部寄存器或Cache,一次讀取數據的個數由Burst Length決定,常見有1,2,4和8。本文的嵌入式處理器采用的是Burst Length 為8 的取指Burst模式,對SRAM 和SDRAM 的取指操作都會起到作用。Burst模式打開后,處理器可以一次讀取連續的8個數據,大大減少了取指周期,進而提高嵌入式系統的整體性能。為研究Burst模式對系統性能的影響程度,需要關閉ICache和DCache。分別測試在SRAM 和SDRAM 情況下Burst模式打開后系統的性能,結果見表5。

表5 Burst模式對嵌入式系統性能的影響
由表5可以看出,Burst模式打開后,嵌入式系統的性能得到了很大程度的提高,且在SDRAM 情況下系統性能的加速比要大于SRAM 情況下的加速比。根據嵌入式處理器RTL級SRAM 和SDRAM 在Burst模式下的時序圖,處理器一次從SRAM 和SDRAM 讀取連續8個數據分別需要19和15加上定期刷新時間。而如果在Burst模式關閉的情況下,處理器一次從SRAM 和SDRAM 讀取連續8個數據分別需要40和64加上定期刷新時間??梢夿urst模式對嵌入式處理器性能的影響很大,所以用戶在環境條件許可的情況下,盡量要打開Burst模式。而嵌入式處理器設計時也應該盡量將Burst Length設置為較大值。
Cache是提高處理器及嵌入式系統性能的關鍵部件,能夠大幅度提高處理器的讀取速度,提升處理器性能,進而提升嵌入式系統的性能。但是在工業控制和航空一些特殊環境下,Cache并沒有打開。為能定量的分析Cache對嵌入式系統性能的影響,本文在Burst模式關閉的情況下,研究程序分別在SRAM 和SDRAM 時,DCache、ICache分別打開關閉對嵌入式系統性能 (CoreMark/MHz)影響,結果如圖2所示。

圖2 Cache對嵌入式系統性能的影響
由圖2可以看出,當僅打開DCache時,在SDRAM 和SRAM 中的嵌入式系統的性能加速比分別為1.38和1.18;當僅打開ICache時,嵌入式系統的性能加速比分別為5.46和3.34;當把Cache全部打開時,加速比分別為8.19 和4.55。根據各種模式下性能加速比,可以看到嵌入式系統性能都有提升。ICache對嵌入式系統性能的影響要高于DCache的影響,了解ICache和DCache在嵌入式系統性能優化中所占比重,幫助嵌入式處理器設計者根據處理器應用環境,合理安排ICache 和DCache 的大小。同時看到Cache全部打開后,嵌入式系統性能有了大幅度的提升,尤其是嵌入式系統采用SDRAM 作為外存時,這一數據可以告訴用戶在環境允許的情況下,要盡量打開Cache,充分發揮嵌入式處理器性能,提高嵌入式系統性能。
根據以上關于SDRAM、SRAM、Burst模式、ICache和DCache這些關鍵部件對嵌入式系統性能 (CoreMark/MHz)影響的分析,可以量化的得到這些關鍵部件在嵌入式系統性能優化中的影響程度。其影響嵌入式系統性能的程度大小依次是Cache,Burst模式,SDRAM 的刷新間隔時間,SRAM 的讀寫等待時間,SDRAM 的CAS 延遲和tRP。根據這些影響程度,可以做出兩套性能優化方案:一是將程序和數據存入SDRAM 中時,SDRAM 的CAS延遲和tRP設置為0,SDRAM 刷新價格時間設置為最大,打開Cache,打開Burst模式,嵌入式系統性能可以達到最大優化。二是將程序和數據存放在SRAM 中時,SRAM 的讀寫等待周期設置為0,打開Cache,打開Burst模式,嵌入式系統性能可以達到最大優化。根據特定的應用環境靈活的改變以上兩種方案的某些參數,可以使嵌入式系統在該特定環境下達到最佳性能。
根據以上兩個方案,在主頻25 MHz的情況下,分別對CoreMark基準集下載在SDRAM 和SRAM 中嵌入式系統的性能做出測試,結果兩種方案的測試結果幾乎相同,且都達到了最大的CoreMark 值。因為Burst模式、Cache打開后,Cache的命中率較高,從主存中訪問的比重很小,再加上Burst模式的作用,SDRAM 和SRAM 訪問速度的差異進一步縮小。對嵌入式系統性能影響的比率很低,因此兩種優化方案下嵌入式系統的性能可以達到相同的值。最終該嵌入式系統的性能測試結果為CoreMark 1.0:39.075/GCC 3.2.3-O3,CoreMark/MHz 1.0A1C31.563/GCC 3.2.3-O3。
本文將目前最新的用于嵌入式處理器性能評測的CoreMark基準集用于面向工業控制的嵌入式系統的性能分析,彌補了長期使用Dhrystone基準集作為嵌入式處理器性能評估的不足。準確評估出嵌入式系統的性能,豐富了同國外先進處理器性能比較的指標。同時對嵌入式系統中的關鍵部件SDRAM、SRAM、ICache、DCache、Burst模式以及它們各自內部的一些因素做了仔細分析。量化的得出它們分別對嵌入式系統的性能的影響程度。為嵌入式系統設計者充分發揮嵌入式處理器性能,優化嵌入式系統性能提供有力支持。但是CoreMark基準集主要是針對整數運算性能,對于浮點運算性能的評估仍需要進一步研究。
[1]Anthony Gutierrez,Ronald G Dreslinski,Thomas F Wenisch,et al.Full-system analysis and characterization of interactive smartphone applications [C]//IEEE Int Symp on Workload Characterization,2011:81-89.
[2]Alexander Heinecke, Karthikeyan Vaidyanathan, Mikhail Smelyanskiy.Design and implementation of the Linpack benchmark for single and multi-node systems based on IntelRXeon PhiTMcoprocessor[C]//IEEE 27th International Symposium on Parallel &Distributed Processing,2013:126-136.
[3]Nabil Litayem,Bochra Jaafar,Slim Ben Saoud.Embedded microprocessor performance evaluation case study of the Leon3 processor[J].Journal of Engineering Science and Technology,2012,7 (5):576-586.
[4]Zhang Tiefei,Yu Licheng,Chen Tianzhou,et al.Process scheduling-based energy management for bank-aware memory system [J].Journal of Information &Computational Science,2012 (9):4013-4015.
[5]Shay Gal-On,Markus Levy.Creating portable,repeatable,realistic benchmarks for embedded systems and the challenges thereof[C]//ACM,2012:149-152.
[6]Marisha Rawlins,Ann Gordon-Ross.On the interplay of loop caching,code compression,and cache configuration [C]//IEEE,2011:244-248.
[7]Jeyaraj Andrews,Thangappan Sasikala.Evaluation of various compiler optimization techniques related to mibench benchmark applications[J].Journal of Computer Science,2013,9 (6):749-756.
[8]Maheswari R,Pattabiraman V.Performance evaluation of OR1200 processor with evolutionary parallel HPRC using GEP [J].ICTACT Journal on Soft Computing,2012,2 (3):331-336.
[9]EmilyBlem,Jaikrishna Menon,Karthikeyan Sankaralingam.A detailed analysis of contemporary ARM and x86architectures[C]//The 19th IEEE Intl Symposium on High Performance Computer Architecture,2013:4-11.
[10]Igor Bohm,Bjorn Franke,Nigel Topham.Cycle-accurate performance modeling in an ultrafast just-in-time dynamic bi-nary translation instruction set simulator [C]//IEEE,2010:1-8.
[11]Shay Gal-On,Markus Levy.CoreMark instruction [EB/OL].[2013-12-20].http://www.CoreMark.org.
[12]Shay Gal-On,Markus Levy.The embedded microprocessor benchmark consortium:EEMBC bench-mark suite [EB/OL].[2013-12-20].http://www.eembc.org.
[13]John L Hennessy,David A Patterson.Computer architecture:A quantitative approach [M].4th ed.Beijing:Publishing House of Electronics Industry,2007:23-30 (in Chinese).[John L Hennessy,David A Patterson.計算機系統結構:量化研究方法 [M].4版.北京:電子工業出版社,2007:23-30.]
[14]John L Hennessy,David A Patterson.Computer organization and design:The hardware/software interface [M].3rd ed.Beijing:China Machine Press,2007:168-178 (in Chinese).[John L Hennessy,David A Patterson.計算機組成與設計:硬件/軟件接口 [M].3版.北京:機械工業出版社,2007:168-178.]