Cortex-a8 arm11 arm9 xscale powerpc 嵌入式處理器實測性能
一、前言
嵌入式處理器層出不窮,系列和種類繁多。經(jīng)常在嵌入式產(chǎn)業(yè)界見到的處理器,僅指令集家族就有x86,arm,powerpc,mips,sh等。每種指令集往往又有很多系列,下面還有不同版本,甚至同一版本有不同芯片廠家實現(xiàn)產(chǎn)品。這還不夠,再加上不同的主頻、總線結(jié)構(gòu)、存儲器cache配置,即使在行業(yè)里打拼多年的專業(yè)人士也難免眼花繚亂。
所以,經(jīng)常有人會問:200Mhz的arm9比起嵌入式工控機上的賽揚有多大的性能差距?四千多買的500MHz的智能手機究竟比筆記本電腦慢多少?
在短時間內(nèi)全面解釋這類問題,介紹清楚各種嵌入式處理器的來龍去脈是不可能的。筆者前日對手里的幾個嵌入式處理器進行了性能評測,獲得了一些有趣兒的結(jié)果,能夠一定程度上說明問題,于是撰文跟大家分享。
涉及的對象包括arm家族常用的系列嵌入式處理器,從初學(xué)者都知道的S3C2410到基于arm1136jf-s的OMAP2420,還有新一代產(chǎn)品新寵OMAP3/Cortex-a8。軟件運行的操作系統(tǒng)為linux-2.6.24以及之后版本和gcc-4編譯器。最終的測試結(jié)果說明了目前嵌入式處理器的性能現(xiàn)狀,可供感興趣的讀者參考,最后還提供了筆者使用的測試代碼下載。筆者也非常希望愛好者在自己的嵌入式平臺上測試,并將結(jié)果發(fā)帖交流。
二、測試方法介紹
本文的內(nèi)容主要基于筆者親自測試的結(jié)果,也有部分結(jié)果來自于他人的測試,絕大多數(shù)的測試對于稍有嵌入式Linux經(jīng)驗的人都可以很容易的重復(fù)。測試項目包括nbench整數(shù)性能,nbench內(nèi)存帶寬,nbench雙精度浮點性能,單精度浮點FIR性能,SIMD向量單精度浮點FIR性能。測試軟件簡介nbench
nbench是一個簡單的用于測試處理器,存儲器性能的基準測試程序。即著名的BYTE Magazine雜志的BYTEmark benchmark program。nbench在系統(tǒng)中運行并將結(jié)果和一臺運行Linux的AMD K6-233電腦比較,得到的比值作為性能指數(shù)。由于是完全開源的,愛好者可以在各種平臺和操作系統(tǒng)上運行nbench,并進行優(yōu)化和測試,是一個簡單有效的性能測試工具。nbench的結(jié)果主要分為MEM、INT和FP,其中MEM指數(shù)主要體現(xiàn)處理器總線、CACHE和存儲器性能,INT當然是整數(shù)處理性能,F(xiàn)P則體現(xiàn)雙精度浮點性能(大多數(shù)嵌入式處理器都沒有強大的雙精度浮點能力)。
fp_fir
fp_fir是筆者編寫的單精度浮點FIR性能測試程序,簡單并直觀的評價系統(tǒng)的單精度浮點數(shù)乘加性能(玩過DSP就知道,浮點乘加是TigerSHARC的拿手好戲)。fp_fir的一個亮點是可以很容易的SIMD向量化,即利用SSE3/Altivec/Neon等SIMD指令集加速執(zhí)行。這個測試的結(jié)果也是最有戲劇性的。
三、測試結(jié)果
1.nbench測試MEM部分
此測試包括字符排序、數(shù)據(jù)賦值和位操作。這個測試中,高主頻、高速的片內(nèi)CACHE和快速的外存儲器非常重要。采用新架構(gòu)的Cortex-a8和強勁的桌面x86占有很大優(yōu)勢,其中很大一部分是源于片上的二級CACHE結(jié)構(gòu)
具體分數(shù)如下
表1 nbench 存儲器性能
圖1 nbench 存儲器性能
2.nbench測試INT部分
此測試包含整數(shù)排序,模擬浮點運算,霍夫曼編碼,IDEA加密算法。在此測試里,主頻是最主要的性能因素,指令集的并行度也有很大影響,所以超標量處理器PentiumIII和Cortex-a8的優(yōu)勢不僅來自于主頻,也來自于單周期執(zhí)行多條指令、分支預(yù)測等綜合能力。但是更老的PPC440也是雙發(fā)射的超標量CPU,不過并沒有體現(xiàn)太大優(yōu)勢,一方面是PPC440的ALU指令并不能雙發(fā),另一方面也是因為通用整數(shù)運算內(nèi)在的并行度并不高,指令級并行受限較多,并行加速不如主頻提高明顯。
表2 nbench 整數(shù)性能
圖2 nbench 整數(shù)性能
3.nbench測試FP部分
此測試包括雙精度浮點傅立葉變換、神經(jīng)網(wǎng)絡(luò)、LU分解。在此測試里面桌面處理器一枝獨秀,主要是因為PentiumIII擁有強大的SSE浮點處理能力,雙精度浮點硬件流水線性能遠超其他處理器,尤其是只有傳統(tǒng)標量整數(shù)指令集的嵌入式處理器,如S3C2410和PPC440。
低功耗的嵌入式處理器一般不會集成雙精度流水線FPU,主要是因為硅片面積和功耗較大,實現(xiàn)浮點處理靠另外的方法。
S3C2410(ARM920T)和PPC440利用softfloat庫實現(xiàn)浮點處理,性能是最低的。(當然,僅僅是比其他的高級處理器低,雖然只有K6-233性能的百分之幾。如果你測試很多S3C2410開發(fā)板自帶的oabi gcc-2.95硬浮點工具鏈,加上內(nèi)核NWFPE模擬浮點指令,會得到更慘的結(jié)果。oabi+NWFPE性能只有softfloat的10到20分之一,是向量浮點的幾千分之一)
XSCALE以及其他ARMV5TE以上的處理器可以利用定點向量指令加快softfloat庫模擬,其中支持iWMMXT的PXA270可以使用64位定點向量指令顯著加快速度。
新的ARM處理器如OMAP2420集成硬件了VFP,雖然不是桌面CPU規(guī)模的流水線FPU,還是比軟件模擬快很多。
也許讀者會奇怪OMAP3 600MHz的浮點性能比OMAP2 400MHz還低,這是因為Cortex-a8比arm11進一步簡化了VFP的硬件以降低功耗和面積,并引入了如同Pentium4處理器的向量指令集neon。該指令集最大數(shù)據(jù)寬度和SSE3一樣為128bit,可以支持完全流水的向量定點和單精度浮點處理,僅僅比SSE3少了雙精度浮點流水處理。由于nbench進行雙精度浮點測試,并且使用glibc內(nèi)建的未優(yōu)化的數(shù)學(xué)庫,所以無法發(fā)揮neon的性能。
圖3 nbench 雙精度浮點性能
4.fp_fir測試
在fp_fir測試中,為了對Cortex-a8的noen向量處理能力進行對比,加入了高性能的處理器PentiumD 920 3.0GHz的對比評測。該系統(tǒng)配備2GB雙通道DDR2內(nèi)存,運行Linux-2.6.27 x86_64 64-bits系統(tǒng)。同樣,也加入了基于老式arm920t的S3C2410“陪太子讀書”
需要知道的是PentiumD 920除了擁有嵌入式處理器難以企及的3GHz主頻,更有2MB L2CACHE和800MHz 64-bits前端總線,并且同樣集成了SSE3 128-bit SIMD指令集。
表4 測試平臺功能對比
本次測試將fp_fir程序分別編譯到不同平臺上,分為9中不同的CPU與配置組合
表5 測試配置和編譯選項
新版本gcc-4.3已經(jīng)加入了neon向量指令支持,而對sse的支持在更早版本中就已經(jīng)加入了。要啟用向量指令自動生成功能,需要在編譯參數(shù)中加入適當?shù)奶幚砥髦噶罴瘶擞浐透↑c選擇標記,在arm架構(gòu)下為:
-mfloat-abi=softfp -mfpu=neon -ftree-vectorize -ffast-math
在x86架構(gòu)下為:
-mfpmath=sse -ftree-vectorize -mmmx -msse -msse2 -msse3 -ffast-math
另外,在arm linux平臺下,如果使用的是EABI(embedded application binary interface)配置則允許系統(tǒng)中混合運行softfp,vfp,neon向量浮點等各種浮點實現(xiàn)代碼。例如在cortex-a8上運行同時運行優(yōu)化的向量浮點代碼和老式arm920t的軟浮點代碼,這使得上述測試能夠方便的完成。如果用老的oabi環(huán)境,切換不同的浮點配置必須把全部的用戶代碼重新編譯。
下載地址在這里可以找到。
表6 fp_fir 單精度浮點乘加性能
圖4 fp_fir 單精度浮點乘加性能 單位:秒 越小越好
由于向量處理和傳統(tǒng)非流水標量處理性能差距很大,去掉前面5種地性能的配置。截取后4種向量處理配置的柱狀圖,可以清晰的看到neon和sse3性能PK
圖5 fp_fir 單精度浮點乘加性能 單位:秒 越小越好
可以看到流水線化的向量協(xié)處理對數(shù)值運算幫助非常大,有數(shù)量級的性能提升。這也是為什么INTEL/AMD等處理器廠商都把多媒體指令集作為亮點大肆宣傳,各種操作系統(tǒng)和軟件也積極應(yīng)用SIMD指令來進行加速。
因為嵌入式處理器原本就沒有集成全流水線FPU,這種加速對嵌入式處理器如cortex-a8尤其明顯。
此外,嵌入式處理器指令集兼容的歷史包袱比x86要少得多,完全可以直接采用向量指令集得到接近大型CPU和傳統(tǒng)高端DSP的數(shù)值計算性能,有的嵌入式CPU干脆把這類指令叫做嵌入式DSP指令。這類向量指令集在視頻圖像處理、語音識別、計算機視覺、軟件無線電和人工智能等應(yīng)用上擁有極大的性能/功耗比優(yōu)勢。
由此可見,新式的嵌入式處理器實現(xiàn)了一系列同等于原來桌面處理器才有的功能,性能也可以在某種程度上接近傳統(tǒng)的桌面處理器,同時保持了極低的功耗。
文中提到的測試代碼下載請見:
嵌入式系統(tǒng)性能測試下載
本文作者:周明 原載于嵌入式技術(shù)博客,請尊重作者勞動,歡迎轉(zhuǎn)載但需注明原文鏈接!