<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM Cortex系列(A8/A9/A15/A7) NEON多媒體處理SIMD引擎優(yōu)化

          ARM Cortex系列(A8/A9/A15/A7) NEON多媒體處理SIMD引擎優(yōu)化

          作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          Cortex-A9的NEON多媒體處理器是基于ARMv7的SIMD(Single Instruction Multiple Data)和向量浮點(diǎn)VFPv3(Vector Floating-Point)指令集的,在具體的芯片設(shè)計(jì)中NEON組件是可選的,NEON處理器是面向音頻、視頻編解碼器、圖像處理和語音信號處理以及其他的基帶等信息處理領(lǐng)域的。 本文介紹了NEON處理器的基本架構(gòu)、NEON處理器的并發(fā)情況下Cortex-A8和Cortex-A9的區(qū)別、NEON的寄存器組和數(shù)據(jù)類型、NEON編程的針對編譯器、匯編器的優(yōu)化方法以及其他的提高性能的并行方法。

          本文引用地址:http://www.ex-cimer.com/article/201611/317421.htm

          圖1. ARM體系結(jié)構(gòu)的演進(jìn)

          Cortex-A9處理器簡介

          圖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)的、高效率的、長度動態(tài)可變的、多指令執(zhí)行超標(biāo)量體系結(jié)構(gòu),提供采用亂序猜測方式執(zhí)行的8階段管道處理器,憑借范圍廣泛的消費(fèi)類、網(wǎng)絡(luò)、企業(yè)和移動應(yīng)用中的前沿產(chǎn)品所需的功能,它可以提供史無前例的高性能和高能效。ARMCortex?-A9處理器提供了史無前例的高性能和高能效,從而使其成為需要在低功耗或散熱受限的成本敏感型設(shè)備中提供高性能的設(shè)計(jì)的理想解決方案。它既可用作單核處理器,也可用作可配置的多核處理器,同時可提供可合成或硬宏實(shí)現(xiàn)。該處理器適用于各種應(yīng)用領(lǐng)域,從而能夠?qū)Χ鄠€市場進(jìn)行穩(wěn)定的軟件投資。

          Cortex-A9微體系結(jié)構(gòu)既可用于可伸縮的多核處理器(Cortex-A9 MPCore?多核處理器),也可用于更傳統(tǒng)的處理器(Cortex-A9單核處理器)??缮炜s的多核處理器和單核處理器支持16、32或64KB 4路關(guān)聯(lián)的L1高速緩存配置,對于可選的L2高速緩存控制器,最多支持8MB的L2高速緩存配置,它們具有極高的靈活性,均適用于特定應(yīng)用領(lǐng)域和市場。

          下載Cortex-A9白皮書

          窗體頂端

          與高性能計(jì)算平臺消耗的功率相比,ARM Cortex-A9處理器可提供功率更低的卓越功能,其中包括:

          • 無與倫比的性能,2GHz標(biāo)準(zhǔn)操作可提供TSMC 40G硬宏實(shí)現(xiàn)
          • 以低功耗為目標(biāo)的單核實(shí)現(xiàn),面向成本敏感型設(shè)備
          • 利用高級MPCore技術(shù),最多可擴(kuò)展為4個一致的內(nèi)核
          • 可選NEON?媒體和/或浮點(diǎn)處理引擎

          通過共享以下常見需求,Cortex-A9處理器可提供滿足各種不同市場應(yīng)用需求的可擴(kuò)展解決方案,包括移動手機(jī)以及高性能的消費(fèi)類產(chǎn)品和企業(yè)產(chǎn)品:

          • 通過提高性能、降低功耗來提高能效;
          • 提高最高性能,滿足要求更高的應(yīng)用需求;
          • 能夠在多個設(shè)備之間共享軟件和工具投資;

          Cortex-A9 MPCore多核處理器集成了經(jīng)驗(yàn)證非常成功的ARM MPCore技術(shù)以及更多增強(qiáng)功能,以此簡化了多核解決方案,并使其應(yīng)用范圍得到擴(kuò)展。Cortex-A9 MPCore處理器可提供史無前例的可擴(kuò)展的最高性能,同時還支持靈活設(shè)計(jì)和新功能,從而進(jìn)一步降低和控制處理器和系統(tǒng)級的能耗。借助Cortex-A9 MPCore處理器的定向?qū)崿F(xiàn),移動設(shè)備的最高性能還可在現(xiàn)在的解決方案的基礎(chǔ)上不斷提高,具體方法是:利用設(shè)計(jì)靈活性和ARM MPCore技術(shù)提供的高級功率管理技術(shù),在散熱受限以及移動電源預(yù)算緊張的情況下維持運(yùn)行。使用可伸縮的最高性能,該處理器可超過現(xiàn)今類似的高性能嵌入式設(shè)備的性能,并可在拓寬市場的基礎(chǔ)上進(jìn)行穩(wěn)定的軟件投資。

          Cortex-A9多核處理器是首款結(jié)合了Cortex應(yīng)用級架構(gòu)以及用于可擴(kuò)展性能的多處理能力的ARM處理器,提供了下列增強(qiáng)的多核技術(shù):

            *加速器一致性端口(ACP),用于提高系統(tǒng)性能和降低系統(tǒng)能耗

            *先進(jìn)總線接口單元(Advanced Bus Interface Unit),用于在高帶寬設(shè)備中實(shí)現(xiàn)低延遲時間

            *多核TrustZone® 技術(shù),結(jié)合中斷虛擬,允許基于硬件的安全和加強(qiáng)的類虛擬(paravirtualization)解決方案

          *通用中斷控制器(GIC),用于軟件移植和優(yōu)化的多核通信

          Cortex-A9 NEON媒體處理引擎(MPE)

          Cortex-A9 MPE可用于任一Cortex-A9處理器,并可提供一個具有Cortex-A9浮點(diǎn)單元的性能和功能以及NEON高級SIMD指令集實(shí)現(xiàn)的引擎,以便進(jìn)一步提高媒體和信號處理功能的速度。MPE可擴(kuò)展Cortex-A9處理器的浮點(diǎn)單元(FPU),提供一個quad-MAC以及附加的64位和128位寄存器集,在每個周期8位、16位和32位整型以及32位浮點(diǎn)數(shù)據(jù)量的基礎(chǔ)上支持一組豐富的SIMD操作。

          Cortex-A9浮點(diǎn)單元(FPU)

          在與任一Cortex-A9處理器一起實(shí)現(xiàn)時,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)單元庫和存儲器。標(biāo)準(zhǔn)單元包括功耗管理工具包,可實(shí)現(xiàn)動態(tài)和漏泄功耗節(jié)省技術(shù),例如時鐘門控、多電壓島和功率門控。還提供具有先進(jìn)的功耗節(jié)省功能的存儲編譯器。

            · Fabric IP:Cortex-A9處理器得到廣泛的PrimeCell® fabric IP元件的支持。這些元件包括:一個動態(tài)存儲控制器、一個靜態(tài)存儲控制器、一個AMBA® 3 AXI可配置的內(nèi)部互連及一個優(yōu)化的L2 Cache 控制器,用于匹配Cortex-A9處理器在高頻設(shè)計(jì)中的性能和吞吐能力。

            · 圖形加速: ARM Mali? 圖形處理單元及Cortex-A9處理器的組合,將使得SoC合作活動能夠創(chuàng)造高度整合的系統(tǒng)級解決方案,帶來最佳的尺寸、性能和系統(tǒng)帶寬優(yōu)勢。

            · 系統(tǒng)設(shè)計(jì):ARM RealView® SoC Designer工具提供快速的架構(gòu)優(yōu)化和性能分析,并允許在硬件完成以前很長時間即可進(jìn)行軟件驅(qū)動程序和對時間要求很嚴(yán)格的代碼的早期開發(fā)。RealView系統(tǒng)發(fā)生器(RealView System Generator)工具為基于Cortex-A9處理器的虛擬平臺的采用提供超快建模能力。Realview工具中關(guān)于Cortex-A9處理器的基于周期的(cycle based)及程序員視角的模型將于2008年第二季度上市。

            · 調(diào)試: ARM CoreSight?片上技術(shù)加速了復(fù)雜調(diào)試的時間,縮短了上市時間。程序追蹤宏單元技術(shù)(Program Trace Macrocell technology)具有程序流追蹤能力,能夠?qū)⑻幚砥鞯闹噶盍魍耆梢暬?,同時配置與ARMv7架構(gòu)兼容的調(diào)試接口,實(shí)現(xiàn)工具標(biāo)準(zhǔn)化和更高的調(diào)試性能。用于Cortex-A9處理器的CoreSight設(shè)計(jì)工具包擴(kuò)展了其調(diào)試和追蹤能力,以涵蓋整個片上系統(tǒng),包括多個ARM處理器、DSP以及智能外設(shè)。

           · 軟件開發(fā):ARM RealView開發(fā)套件(ARM RealView Development Suite)包括先進(jìn)的代碼生成工具,為Cortex-A9處理器提供卓越的性能和無以比擬的代碼密度。這套工具還支持矢量編譯,用于NEON媒體和信號處理擴(kuò)展集,使得開發(fā)者無需使用獨(dú)立的DSP,從而降低產(chǎn)品和項(xiàng)目成本。包括先進(jìn)的交叉觸發(fā)在內(nèi)的Cortex-A9 MPCore多核處理器調(diào)試得到RealView ICE和Trace產(chǎn)品的支持,同時也得到一系列硬件開發(fā)板的支持,用于FPGA系統(tǒng)原型設(shè)計(jì)和軟件開發(fā)。

          作為許多下一代設(shè)備的核心,Cortex-A9處理器通常與許多其他IP塊集成。

          系統(tǒng)IP

          系統(tǒng)IP組件對于在芯片上構(gòu)建復(fù)雜的系統(tǒng)至關(guān)重要,通過利用系統(tǒng)IP組件,開發(fā)人員可以顯著縮短開發(fā)和驗(yàn)證周期,從而節(jié)約成本并縮短產(chǎn)品的上市時間。

          工具支持

          所有ARM處理器均受ARM RealView?系列開發(fā)工具以及各種第三方工具、操作系統(tǒng)和EDA供應(yīng)商的支持。ARM RealView工具獨(dú)一無二,所提供的解決方案涉及從概念到最終產(chǎn)品部署的整個開發(fā)過程。

          圖3. 基于Coretex-A9核的主要芯片

          NEON多媒體SIMD引擎簡介

          NEON是一個SIMD數(shù)據(jù)處理架構(gòu),256字節(jié)的寄存器堆包含32個64-bit位寬的寄存器或者16個128-bit位寬的寄存器。所有的寄存器都被視為具有相同數(shù)據(jù)類型的一個向量,支持的數(shù)據(jù)類型包括有符號或者無符號的8-bit、16-bit、32-bit和64-bit的整型數(shù)據(jù)或者單精度浮點(diǎn)數(shù)據(jù)。NEON指令都是針對相同數(shù)據(jù)類型的通道處理的,即所有通道執(zhí)行相同的指令操作。如下圖4所示。

          圖4. ARM NEON處理器的SIMD操作

          NEON的寄存器組:NEON和VFPv3 浮點(diǎn)協(xié)處理器共享寄存器組,這些寄存器和ARM核的寄存器截然不同,NEON還會采用ARM的寄存器作為地址寄存器間接尋址。圖5是NEON寄存器的視圖,16個128-bit的4字節(jié)寄存器Q0~Q15,或者32個64bit的雙字寄存器D0~D31,VFPv3的寄存器堆還有32個32-bit的寄存器S0~S31.

          圖5. NEON和VFPv3協(xié)處理器的寄存器堆視圖

          NEON指令支持的操作數(shù)類型包括:有符號或者無符號的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. 單個寄存器組的元素分配

          NEON支持的一些數(shù)據(jù)訪問:支持非對齊訪問但對齊的訪問速度更快,可以通過訪問@bits來指定地址對齊的位數(shù),如@32、@64、@128等。加載和存儲支持打包的數(shù)據(jù)類型,即可以有2、3、4個通道的interleave的數(shù)據(jù)加載和存儲,還能在標(biāo)量和向量間進(jìn)行數(shù)據(jù)的移動,但是速度比較慢、還能支持單精度浮點(diǎn)的數(shù)據(jù)運(yùn)算。

          NEON指令集

          圖7. NEON的線性加載和存儲指令

          圖8. 交織的數(shù)據(jù)加載和存儲指令

          圖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來使能NEON的并行處理。一般認(rèn)為RVDS或者DS-5編譯器的armcc針對并行處理性能很差,即使調(diào)整算法的結(jié)構(gòu)以適合編譯器進(jìn)行NEON指令的優(yōu)化,但是生成的代碼還是難以讓人滿意。而GCC的自動并行化處理的結(jié)果性能更差,針對Android開發(fā),只能采用Google提供的NDK的GCC工具鏈可以用來開發(fā)。但ARM EABI提供了編譯器支持的C內(nèi)聯(lián)intrinsics??梢詤⒖糀RM V7-A的 ABI手冊以及arm_neon.h文件。

          ARM匯編器的優(yōu)化方法

          使用NEON的intrinsic指令進(jìn)行優(yōu)化需要對NEON的指令集非常熟悉,而且使用intrinsics沒法控制寄存器分配和內(nèi)存對齊等,因而很多的NEON的優(yōu)化還是基于匯編代碼。當(dāng)然手工寫匯編代碼總是需要很多的額外開銷的,而且還要了解ARM EABI編程規(guī)范。

          NEON編程優(yōu)化的基本方法

          一般NEON優(yōu)化是針對需要大量數(shù)據(jù)處理的函數(shù),而函數(shù)的基本操作都是先加載數(shù)據(jù),然后進(jìn)行數(shù)據(jù)處理,最后把計(jì)算的結(jié)果保存到內(nèi)存。首先針對NEON數(shù)據(jù)的加載和存儲,可以參考http://houh-1984.blog.163.com/blog/static/3112783420111159169507/,即適當(dāng)考慮結(jié)構(gòu)化的加載/存儲以有效的進(jìn)行數(shù)據(jù)加載成為有利于并行處理的方式,當(dāng)然除了數(shù)據(jù)加載有利于并行處理,還要考慮數(shù)據(jù)加載有利于cache性能的優(yōu)化。然后采用NEON指令進(jìn)行計(jì)算,針對數(shù)據(jù)訪問,可以考慮使用Q0~Q3的參數(shù)寄存器以及Q8~Q15寄存器,而對于Q4~Q7寄存器則必須根據(jù)EABI的規(guī)范在函數(shù)調(diào)用內(nèi)保存。

          另外就是關(guān)需數(shù)據(jù)的加載類型,一個是數(shù)據(jù)的對齊,雖然NEON完全支持非對齊訪問,但是對齊數(shù)據(jù)一個是有利于加載、存儲,另外一個是也更c(diǎn)ache友好,非對齊的數(shù)據(jù)訪問要消耗更多的時鐘周期尤其是在非對齊還要跨越cache行的情況下,數(shù)據(jù)對齊方式可以采用[,:],其中align可以為32、64、128、256位。軟件流水是非常重要的優(yōu)化工具,因?yàn)楝F(xiàn)在的ARM基于RISC的處理器,流水線是必須的,因而針對流水線需要更好的優(yōu)化方法,雖然NEON的流水線在Coretex-A8和Cortex-A9的處理器上不同,NEON的指令一般都是在一個周期內(nèi)發(fā)出,但是執(zhí)行結(jié)果可能若干個周期才能有效,只有簡單的如VSUB、VADD和VMOV指令才能在下一個周期可以用。并發(fā)的指令發(fā)出也是需要提到的。另外從NEON的寄存器把數(shù)據(jù)保存到ARM寄存器非常耗時,需要至少20個周期的延時,因而盡量避免這類操作,NEON沒有提供除法和求平方根的操作,而VFPv3則存在這些指令。但是由于NEON處理器和VFP單元共用硬件,因而不要混合使用NEON和VFP指令。最后是盡量避免ARM和NEON處理器訪問相同的數(shù)據(jù)區(qū)域。

          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處理器是面向音頻、視頻編解碼器、圖像處理和語音信號處理以及其他的基帶等信息處理領(lǐng)域的。 本文介紹了NEON處理器的基本架構(gòu)、NEON處理器的并發(fā)情況下Cortex-A8和Cortex-A9的區(qū)別、NEON的寄存器組和數(shù)據(jù)類型、NEON編程的針對編譯器、匯編器的優(yōu)化方法以及其他的提高性能的并行方法。



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();