在嵌入式系統行業用于評價CPU性能名額的标準主要有三種:Dhrystone、MIPS、CoreMark,其中CoreMark是一種新興流行的嵌入式系統處理器測試基準,被認為是比Dhrystone和MIPS更具有實際價值的測試基準。
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是微控制器CPU性能測試基準CoreMark。
在嵌入式系統行業用于評價CPU性能名額的标準主要有三種:Dhrystone、MIPS、CoreMark,其中CoreMark是一種新興流行的嵌入式系統處理器測試基準,被認為是比Dhrystone和MIPS更具有實際價值的測試基準。今天痞子衡就和大家詳細聊一聊CoreMark。
在講CoreMark之前,必須要先提EEMBC(Embedded Microprocessor Benchmark Consortium)即嵌入式微處理器基準評測協會,它是一個非盈利性組織,該組織目前為止(2018.03)共釋出了46個性能測試基準,有了這些性能基準參考,嵌入式設計人員可以快速有效地選擇處理器。
EEMBC測試是基于每秒鐘算法執行的次數和編譯代碼大小的綜合統計結果。衆所周知,編譯器選項會對代碼大小和執行效率會産生巨大的影響,是以每種測試必須包括足夠多的編譯器資訊并設定不同的優化項。
EEMBC發展勢頭很好,其很有可能發展成為嵌入式系統開發人員進行處理器和編譯器性能比較的工業标準。關于EEMBC的更多介紹可移步它的官方網站 http://www.eembc.org/
CoreMark是由EEMBC的Shay Gla-On于2009年提出的一項基準測試程式,其主要目标是測試處理器核心性能。
CoreMark标準的測試方法很簡單,就是在某配置參數組合下機關時間内跑了多少次CoreMark程式,其名額機關為CoreMark/MHz。CoreMark數字越高,意味着性能更高。
CoreMark程式的目前(2018.03)最新版本是1.01。
核心程式下載下傳 http://www.eembc.org/coremark/download.php 平台移植示例 http://www.eembc.org/coremark/ports.php
核心程式包下載下傳後,在\coremark_v1.0\readme.txt裡可見基本介紹,在\coremark_v1.0\docs\Coremark-requirements.doc裡可見設計需求。詳細檔案目錄如下:
如果是移植到ARM Cortex-M平台下裸系統運作,一般隻需要修改\barebones目錄下的檔案即可(僅需改動三個函數portable_init()、barebones_clock()、uart_send_char()以及core_portme.h中若幹宏定義),其餘代碼檔案不需要修改。關于\barebones下的檔案修改,EEMBC上有如下4個示例平台可參考:

前面講到做平台移植時除了必須要改動3個函數外,還需要設定core_portme.h中若幹宏定義,這些宏定義即為配置參數,需要根據要移植到的具體平台的屬性而定。一共如下14個宏:
宏
解釋
示例
HAS_FLOAT
Define to 1 if the platform supports floating point
1
HAS_TIME_H
Define to 1 if platform has the time.h header file and implementation of functions thereof
USE_CLOCK
HAS_STDIO
Define to 1 if the platform has stdio.h.
HAS_PRINTF
Define to 1 if the platform has stdio.h and implements the printf function.
COMPILER_VERSION
Please put compiler version here (e.g. gcc 4.1)
"IAR EWARM v8.20.2"
COMPILER_FLAGS
Please put compiler flags here (e.g. -o3)
"High - Speed - No size constraints"
MEM_LOCATION
Please put the mem location of code execution here (e.g STACK)
"STACK"
CORETIMETYPE
Define type of return from the timing functions.
ee_u32
SEED_METHOD
Defines method to get seed values that cannot be computed at compile time.
SEED_VOLATILE
MEM_METHOD
Defines method to get a block of memry.
MEM_STATIC
MULTITHREAD
Define for parallel execution
MAIN_HAS_NOARGC
Needed if platform does not support getting arguments to main.
MAIN_HAS_NORETURN
Needed if platform does not support returning a value from main.
細心的朋友應該能注意到core_portme.h檔案的最後有如下條件編譯,實際上CoreMark主程式的運作有3種模式可選,即PROFILE_RUN(原型模式)/PERFORMANCE_RUN(性能模式)/VALIDATION_RUN(驗證模式)
而在coremark.h檔案的最開始就定義了預設的TOTAL_DATA_SIZE的值為2000,即CoreMark程式預設跑在PERFORMANCE_RUN(性能模式)下。如果你想修改運作模式,需要在編譯器預編譯選項裡自定義TOTAL_DATA_SIZE。
CoreMark程式使用C語言寫成,包含如下四類運算法則:數學矩陣操作(普通矩陣運算)、列舉(尋找并排序)、狀态機(用來确定輸入流中是否包含有效數字)、CRC(循環備援校驗),都是在真實的嵌入式應用中很常見的操作,這也是CoreMark比其他測試标準更有實際價值的原因所在。
a. Matrix multiply (allow for use of MAC operations, common math use) b. Linked list search/sort/read (common pointer use) c. State machine (common use of data dependent branches) d. CRC (common in embedded)
讓我們嘗試分析CoreMark主函數入口main(以2.2節中配置示例值為例):
當移植好CoreMark程式後,便可以開始跑起來了,在跑程式的時候,EEMBC同時制定了必須要遵守規則(不遵守的話,跑分結果不被EEMBC所認可),詳見 https://www.eembc.org/coremark/CoreMarkRunRules.pdf。
當得到跑分結果後可将結果送出到EEMBC網站上,跑分結果需按如下标準格式進行送出:
如果移植的CoreMark能夠正确運作,你應該可以看到序列槽會列印出類似如下格式的資訊,上述要求的CoreMark标準結果就在列印資訊的最後。
截止到目前(2018.03),EEMBC網站共記錄535款微控制器的CoreMark跑分結果(注意并不是所有跑分結果都經過EEMBC核實),所有跑分結果可在這裡查詢 https://www.eembc.org/coremark/scores.php,下圖是跑分榜部分結果(按送出日期排序)。如果是設計人員根據性能選型的話,可以選按得分高低排序。
在上節介紹的跑分榜裡可點選微控制器型号檢視具體結果,也可選擇多個微控制器進行結果對比。最近兩家ARM Cortex-M微控制器知名廠商恩智浦半導體和意法半導體在高性能微控制器上正一決雌雄,恩智浦推出的i.MX RT1050和意法半導體推出的STM32H743均是基于Cortex-M7核心,且都在2017.10實作初版量産,我們且來比比看這兩款微控制器:
從對比結果來看,i.MX RT1050在性能上完爆STM32H743,其3036的總得分在Cortex-M微控制器裡獨孤求敗,這個跑分結果雖未經過EEMBC認證,但與恩智浦官方給的資料3020基本吻合。
關于i.MX RT系列微控制器簡介可詳見我的另一篇文章 飛思卡爾i.MX RT系列微控制器介紹篇(1)- 概覽,對于i.MX RT1050跑分結果的驗證與複現可詳見我的文章 飛思卡爾i.MX RT系列微控制器介紹篇(2)- 性能CoreMark。
至此,微控制器CPU性能測試基準CoreMark痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。