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