ARM Cortex系列(A8/A9/A15/A7) NEON多媒體處理SIMD引擎優(yōu)化
圖1. ARM體系結構的演進(jìn)
Cortex-A9處理器簡(jiǎn)介
圖2. Coretex-A9處理器的架構框圖(View Larger Cortex-A9處理器Image)
Cortex-A9是性能最高的ARM處理器,可實(shí)現受到廣泛支持的ARMv7體系結構的豐富功能。Cortex-A9處理器的設計旨在打造最先進(jìn)的、高效率的、長(cháng)度動(dòng)態(tài)可變的、多指令執行超標量體系結構,提供采用亂序猜測方式執行的8階段管道處理器,憑借范圍廣泛的消費類(lèi)、網(wǎng)絡(luò )、企業(yè)和移動(dòng)應用中的前沿產(chǎn)品所需的功能,它可以提供史無(wú)前例的高性能和高能效。ARMCortex?-A9處理器提供了史無(wú)前例的高性能和高能效,從而使其成為需要在低功耗或散熱受限的成本敏感型設備中提供高性能的設計的理想解決方案。它既可用作單核處理器,也可用作可配置的多核處理器,同時(shí)可提供可合成或硬宏實(shí)現。該處理器適用于各種應用領(lǐng)域,從而能夠對多個(gè)市場(chǎng)進(jìn)行穩定的軟件投資。
Cortex-A9微體系結構既可用于可伸縮的多核處理器(Cortex-A9 MPCore?多核處理器),也可用于更傳統的處理器(Cortex-A9單核處理器)??缮炜s的多核處理器和單核處理器支持16、32或64KB 4路關(guān)聯(lián)的L1高速緩存配置,對于可選的L2高速緩存控制器,最多支持8MB的L2高速緩存配置,它們具有極高的靈活性,均適用于特定應用領(lǐng)域和市場(chǎng)。
下載Cortex-A9白皮書(shū)
窗體頂端
與高性能計算平臺消耗的功率相比,ARM Cortex-A9處理器可提供功率更低的卓越功能,其中包括:
- 無(wú)與倫比的性能,2GHz標準操作可提供TSMC 40G硬宏實(shí)現
- 以低功耗為目標的單核實(shí)現,面向成本敏感型設備
- 利用高級MPCore技術(shù),最多可擴展為4個(gè)一致的內核
- 可選NEON?媒體和/或浮點(diǎn)處理引擎
通過(guò)共享以下常見(jiàn)需求,Cortex-A9處理器可提供滿(mǎn)足各種不同市場(chǎng)應用需求的可擴展解決方案,包括移動(dòng)手機以及高性能的消費類(lèi)產(chǎn)品和企業(yè)產(chǎn)品:
- 通過(guò)提高性能、降低功耗來(lái)提高能效;
- 提高最高性能,滿(mǎn)足要求更高的應用需求;
- 能夠在多個(gè)設備之間共享軟件和工具投資;
Cortex-A9 MPCore多核處理器集成了經(jīng)驗證非常成功的ARM MPCore技術(shù)以及更多增強功能,以此簡(jiǎn)化了多核解決方案,并使其應用范圍得到擴展。Cortex-A9 MPCore處理器可提供史無(wú)前例的可擴展的最高性能,同時(shí)還支持靈活設計和新功能,從而進(jìn)一步降低和控制處理器和系統級的能耗。借助Cortex-A9 MPCore處理器的定向實(shí)現,移動(dòng)設備的最高性能還可在現在的解決方案的基礎上不斷提高,具體方法是:利用設計靈活性和ARM MPCore技術(shù)提供的高級功率管理技術(shù),在散熱受限以及移動(dòng)電源預算緊張的情況下維持運行。使用可伸縮的最高性能,該處理器可超過(guò)現今類(lèi)似的高性能嵌入式設備的性能,并可在拓寬市場(chǎng)的基礎上進(jìn)行穩定的軟件投資。
Cortex-A9多核處理器是首款結合了Cortex應用級架構以及用于可擴展性能的多處理能力的ARM處理器,提供了下列增強的多核技術(shù):
*加速器一致性端口(ACP),用于提高系統性能和降低系統能耗
*先進(jìn)總線(xiàn)接口單元(Advanced Bus Interface Unit),用于在高帶寬設備中實(shí)現低延遲時(shí)間
*多核TrustZone® 技術(shù),結合中斷虛擬,允許基于硬件的安全和加強的類(lèi)虛擬(paravirtualization)解決方案
*通用中斷控制器(GIC),用于軟件移植和優(yōu)化的多核通信
Cortex-A9 NEON媒體處理引擎(MPE)
Cortex-A9 MPE可用于任一Cortex-A9處理器,并可提供一個(gè)具有Cortex-A9浮點(diǎn)單元的性能和功能以及NEON高級SIMD指令集實(shí)現的引擎,以便進(jìn)一步提高媒體和信號處理功能的速度。MPE可擴展Cortex-A9處理器的浮點(diǎn)單元(FPU),提供一個(gè)quad-MAC以及附加的64位和128位寄存器集,在每個(gè)周期8位、16位和32位整型以及32位浮點(diǎn)數據量的基礎上支持一組豐富的SIMD操作。
Cortex-A9浮點(diǎn)單元(FPU)
在與任一Cortex-A9處理器一起實(shí)現時(shí),FPU可提供與ARM VFPv3體系結構兼容的高性能的單雙精度浮點(diǎn)指令,該體系結構是與上一代ARM浮點(diǎn)協(xié)處理器兼容的軟件。
物理IP:提供在Cortex-A9處理器上實(shí)現低功耗、高性能應用所需的眾多標準單元庫和存儲器。標準單元包括功耗管理工具包,可實(shí)現動(dòng)態(tài)和漏泄功耗節省技術(shù),例如時(shí)鐘門(mén)控、多電壓島和功率門(mén)控。還提供具有先進(jìn)的功耗節省功能的存儲編譯器。
· Fabric IP:Cortex-A9處理器得到廣泛的PrimeCell® fabric IP元件的支持。這些元件包括:一個(gè)動(dòng)態(tài)存儲控制器、一個(gè)靜態(tài)存儲控制器、一個(gè)AMBA® 3 AXI可配置的內部互連及一個(gè)優(yōu)化的L2 Cache 控制器,用于匹配Cortex-A9處理器在高頻設計中的性能和吞吐能力。
· 圖形加速: ARM Mali? 圖形處理單元及Cortex-A9處理器的組合,將使得SoC合作活動(dòng)能夠創(chuàng )造高度整合的系統級解決方案,帶來(lái)最佳的尺寸、性能和系統帶寬優(yōu)勢。
· 系統設計:ARM RealView® SoC Designer工具提供快速的架構優(yōu)化和性能分析,并允許在硬件完成以前很長(cháng)時(shí)間即可進(jìn)行軟件驅動(dòng)程序和對時(shí)間要求很?chē)栏竦拇a的早期開(kāi)發(fā)。RealView系統發(fā)生器(RealView System Generator)工具為基于Cortex-A9處理器的虛擬平臺的采用提供超快建模能力。Realview工具中關(guān)于Cortex-A9處理器的基于周期的(cycle based)及程序員視角的模型將于2008年第二季度上市。
· 調試: ARM CoreSight?片上技術(shù)加速了復雜調試的時(shí)間,縮短了上市時(shí)間。程序追蹤宏單元技術(shù)(Program Trace Macrocell technology)具有程序流追蹤能力,能夠將處理器的指令流完全可視化,同時(shí)配置與ARMv7架構兼容的調試接口,實(shí)現工具標準化和更高的調試性能。用于Cortex-A9處理器的CoreSight設計工具包擴展了其調試和追蹤能力,以涵蓋整個(gè)片上系統,包括多個(gè)ARM處理器、DSP以及智能外設。
· 軟件開(kāi)發(fā):ARM RealView開(kāi)發(fā)套件(ARM RealView Development Suite)包括先進(jìn)的代碼生成工具,為Cortex-A9處理器提供卓越的性能和無(wú)以比擬的代碼密度。這套工具還支持矢量編譯,用于NEON媒體和信號處理擴展集,使得開(kāi)發(fā)者無(wú)需使用獨立的DSP,從而降低產(chǎn)品和項目成本。包括先進(jìn)的交叉觸發(fā)在內的Cortex-A9 MPCore多核處理器調試得到RealView ICE和Trace產(chǎn)品的支持,同時(shí)也得到一系列硬件開(kāi)發(fā)板的支持,用于FPGA系統原型設計和軟件開(kāi)發(fā)。
作為許多下一代設備的核心,Cortex-A9處理器通常與許多其他IP塊集成。
系統IP
系統IP組件對于在芯片上構建復雜的系統至關(guān)重要,通過(guò)利用系統IP組件,開(kāi)發(fā)人員可以顯著(zhù)縮短開(kāi)發(fā)和驗證周期,從而節約成本并縮短產(chǎn)品的上市時(shí)間。
工具支持
所有ARM處理器均受ARM RealView?系列開(kāi)發(fā)工具以及各種第三方工具、操作系統和EDA供應商的支持。ARM RealView工具獨一無(wú)二,所提供的解決方案涉及從概念到最終產(chǎn)品部署的整個(gè)開(kāi)發(fā)過(guò)程。
圖3. 基于Coretex-A9核的主要芯片
NEON多媒體SIMD引擎簡(jiǎn)介
NEON是一個(gè)SIMD數據處理架構,256字節的寄存器堆包含32個(gè)64-bit位寬的寄存器或者16個(gè)128-bit位寬的寄存器。所有的寄存器都被視為具有相同數據類(lèi)型的一個(gè)向量,支持的數據類(lèi)型包括有符號或者無(wú)符號的8-bit、16-bit、32-bit和64-bit的整型數據或者單精度浮點(diǎn)數據。NEON指令都是針對相同數據類(lèi)型的通道處理的,即所有通道執行相同的指令操作。如下圖4所示。
圖4. ARM NEON處理器的SIMD操作
NEON的寄存器組:NEON和VFPv3 浮點(diǎn)協(xié)處理器共享寄存器組,這些寄存器和ARM核的寄存器截然不同,NEON還會(huì )采用ARM的寄存器作為地址寄存器間接尋址。圖5是NEON寄存器的視圖,16個(gè)128-bit的4字節寄存器Q0~Q15,或者32個(gè)64bit的雙字寄存器D0~D31,VFPv3的寄存器堆還有32個(gè)32-bit的寄存器S0~S31.
圖5. NEON和VFPv3協(xié)處理器的寄存器堆視圖
NEON指令支持的操作數類(lèi)型包括:有符號或者無(wú)符號的8-bit、16-bit、32-bit和64-bit的整型數據(I8、S8、U8、I16、S16、U16、I32、S32、U32、I64、S64、U64)或者單精度浮點(diǎn)數據(F32)。
圖6. 單個(gè)寄存器組的元素分配
NEON支持的一些數據訪(fǎng)問(wèn):支持非對齊訪(fǎng)問(wèn)但對齊的訪(fǎng)問(wèn)速度更快,可以通過(guò)訪(fǎng)問(wèn)@bits來(lái)指定地址對齊的位數,如@32、@64、@128等。加載和存儲支持打包的數據類(lèi)型,即可以有2、3、4個(gè)通道的interleave的數據加載和存儲,還能在標量和向量間進(jìn)行數據的移動(dòng),但是速度比較慢、還能支持單精度浮點(diǎn)的數據運算。
NEON指令集
圖7. NEON的線(xiàn)性加載和存儲指令
圖8. 交織的數據加載和存儲指令
圖9. 使用結構化的加載指令加載RGB數據
vld1.32 {d16-d19}, [r1]!
vmul.f32 q12, q8, d0[0]
vmla.f32 q12, q9, d0[1]
vst1.32 {d24-d27}, [r0]!
NEON的并行優(yōu)化方法
ARM編譯器優(yōu)化方法
NEON并行化和向量化的編譯選項:ARM RVDS 3.0以上版本或者DS-5使用編譯選項armcc --vectorize或者Codesourcery 2007q3之后的gcc版本使用如下編譯選項使能vfp:-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp -mfpu=vfp或者使用-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize來(lái)使能NEON的并行處理。一般認為RVDS或者DS-5編譯器的armcc針對并行處理性能很差,即使調整算法的結構以適合編譯器進(jìn)行NEON指令的優(yōu)化,但是生成的代碼還是難以讓人滿(mǎn)意。而GCC的自動(dòng)并行化處理的結果性能更差,針對Android開(kāi)發(fā),只能采用Google提供的NDK的GCC工具鏈可以用來(lái)開(kāi)發(fā)。但ARM EABI提供了編譯器支持的C內聯(lián)intrinsics??梢詤⒖糀RM V7-A的 ABI手冊以及arm_neon.h文件。
ARM匯編器的優(yōu)化方法
使用NEON的intrinsic指令進(jìn)行優(yōu)化需要對NEON的指令集非常熟悉,而且使用intrinsics沒(méi)法控制寄存器分配和內存對齊等,因而很多的NEON的優(yōu)化還是基于匯編代碼。當然手工寫(xiě)匯編代碼總是需要很多的額外開(kāi)銷(xiāo)的,而且還要了解ARM EABI編程規范。
NEON編程優(yōu)化的基本方法
一般NEON優(yōu)化是針對需要大量數據處理的函數,而函數的基本操作都是先加載數據,然后進(jìn)行數據處理,最后把計算的結果保存到內存。首先針對NEON數據的加載和存儲,可以參考http://houh-1984.blog.163.com/blog/static/3112783420111159169507/,即適當考慮結構化的加載/存儲以有效的進(jìn)行數據加載成為有利于并行處理的方式,當然除了數據加載有利于并行處理,還要考慮數據加載有利于cache性能的優(yōu)化。然后采用NEON指令進(jìn)行計算,針對數據訪(fǎng)問(wèn),可以考慮使用Q0~Q3的參數寄存器以及Q8~Q15寄存器,而對于Q4~Q7寄存器則必須根據EABI的規范在函數調用內保存。
另外就是關(guān)需數據的加載類(lèi)型,一個(gè)是數據的對齊,雖然NEON完全支持非對齊訪(fǎng)問(wèn),但是對齊數據一個(gè)是有利于加載、存儲,另外一個(gè)是也更c(diǎn)ache友好,非對齊的數據訪(fǎng)問(wèn)要消耗更多的時(shí)鐘周期尤其是在非對齊還要跨越cache行的情況下,數據對齊方式可以采用[
Vld1.8 {D0}, [R1:64]
Vld1.8 {D0,D1}, [R1:128]!
Vld1.8 {D0,D1,D2,D3}, [R2:256]!,R3
Cortex-A8和Cortex-A9的多指令并發(fā)有所不同,A8是每次并發(fā)兩次fetch,而A9除了多次并發(fā)外,還能亂序執行,因而指令重排的優(yōu)化非常重要。一般而言NEON的SIMD優(yōu)化能提高至少2倍的系統性能,取決于實(shí)際處理的位寬。
http://houh-1984.blog.163.com/
http://baike.baidu.com/view/2937500.htm
http://www.arm.com/zh/products/processors/cortex-a/cortex-a9.php
Cortex-A9的NEON多媒體處理器是基于A(yíng)RMv7的SIMD(Single Instruction Multiple Data)和向量浮點(diǎn)VFPv3(Vector Floating-Point)指令集的,在具體的芯片設計中NEON組件是可選的,NEON處理器是面向音頻、視頻編解碼器、圖像處理和語(yǔ)音信號處理以及其他的基帶等信息處理領(lǐng)域的。 本文介紹了NEON處理器的基本架構、NEON處理器的并發(fā)情況下Cortex-A8和Cortex-A9的區別、NEON的寄存器組和數據類(lèi)型、NEON編程的針對編譯器、匯編器的優(yōu)化方法以及其他的提高性能的并行方法。
評論