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