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

2020-12-18 電子產品世界
Cortex-A9的NEON多媒體處理器是基於ARMv7的SIMD(Single Instruction Multiple Data)和向量浮點VFPv3(Vector Floating-Point)指令集的,在具體的晶片設計中NEON組件是可選的,NEON處理器是面向音頻、視頻編解碼器、圖像處理和語音信號處理以及其他的基帶等信息處理領域的。 本文介紹了NEON處理器的基本架構、NEON處理器的並發情況下Cortex-A8和Cortex-A9的區別、NEON的寄存器組和數據類型、NEON編程的針對編譯器、彙編器的優化方法以及其他的提高性能的並行方法。

本文引用地址:http://www.eepw.com.cn/article/201611/317421.htm

圖1. ARM體系結構的演進

Cortex-A9處理器簡介

圖2. Coretex-A9處理器的架構框圖(View Larger Cortex-A9處理器Image)

Cortex-A9是性能最高的ARM處理器,可實現受到廣泛支持的ARMv7體系結構的豐富功能。Cortex-A9處理器的設計旨在打造最先進的、高效率的、長度動態可變的、多指令執行超標量體系結構,提供採用亂序猜測方式執行的8階段管道處理器,憑藉範圍廣泛的消費類、網絡、企業和移動應用中的前沿產品所需的功能,它可以提供史無前例的高性能和高能效。ARMCortex?-A9處理器提供了史無前例的高性能和高能效,從而使其成為需要在低功耗或散熱受限的成本敏感型設備中提供高性能的設計的理想解決方案。它既可用作單核處理器,也可用作可配置的多核處理器,同時可提供可合成或硬宏實現。該處理器適用於各種應用領域,從而能夠對多個市場進行穩定的軟體投資。

Cortex-A9微體系結構既可用於可伸縮的多核處理器(Cortex-A9 MPCore?多核處理器),也可用於更傳統的處理器(Cortex-A9單核處理器)。可伸縮的多核處理器和單核處理器支持16、32或64KB 4路關聯的L1高速緩存配置,對於可選的L2高速緩存控制器,最多支持8MB的L2高速緩存配置,它們具有極高的靈活性,均適用於特定應用領域和市場。

下載Cortex-A9白皮書

窗體頂端

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

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

  • 通過提高性能、降低功耗來提高能效;

  • 提高最高性能,滿足要求更高的應用需求;

  • 能夠在多個設備之間共享軟體和工具投資;

Cortex-A9 MPCore多核處理器集成了經驗證非常成功的ARM MPCore技術以及更多增強功能,以此簡化了多核解決方案,並使其應用範圍得到擴展。Cortex-A9 MPCore處理器可提供史無前例的可擴展的最高性能,同時還支持靈活設計和新功能,從而進一步降低和控制處理器和系統級的能耗。藉助Cortex-A9 MPCore處理器的定向實現,行動裝置的最高性能還可在現在的解決方案的基礎上不斷提高,具體方法是:利用設計靈活性和ARM MPCore技術提供的高級功率管理技術,在散熱受限以及移動電源預算緊張的情況下維持運行。使用可伸縮的最高性能,該處理器可超過現今類似的高性能嵌入式設備的性能,並可在拓寬市場的基礎上進行穩定的軟體投資。

Cortex-A9多核處理器是首款結合了Cortex應用級架構以及用於可擴展性能的多處理能力的ARM處理器,提供了下列增強的多核技術:

  *加速器一致性埠(ACP),用於提高系統性能和降低系統能耗

  *先進總線接口單元(Advanced Bus Interface Unit),用於在高帶寬設備中實現低延遲時間

  *多核TrustZone® 技術,結合中斷虛擬,允許基於硬體的安全和加強的類虛擬(paravirtualization)解決方案

*通用中斷控制器(GIC),用於軟體移植和優化的多核通信

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

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

Cortex-A9浮點單元(FPU)

在與任一Cortex-A9處理器一起實現時,FPU可提供與ARM VFPv3體系結構兼容的高性能的單雙精度浮點指令,該體系結構是與上一代ARM浮點協處理器兼容的軟體。

物理IP:提供在Cortex-A9處理器上實現低功耗、高性能應用所需的眾多標準單元庫和存儲器。標準單元包括功耗管理工具包,可實現動態和漏洩功耗節省技術,例如時鐘門控、多電壓島和功率門控。還提供具有先進的功耗節省功能的存儲編譯器。

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

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

  · 系統設計:ARM RealView® SoC Designer工具提供快速的架構優化和性能分析,並允許在硬體完成以前很長時間即可進行軟體驅動程序和對時間要求很嚴格的代碼的早期開發。RealView系統發生器(RealView System Generator)工具為基於Cortex-A9處理器的虛擬平臺的採用提供超快建模能力。Realview工具中關於Cortex-A9處理器的基於周期的(cycle based)及程式設計師視角的模型將於2008年第二季度上市。

  · 調試: ARM CoreSight?片上技術加速了複雜調試的時間,縮短了上市時間。程序追蹤宏單元技術(Program Trace Macrocell technology)具有程序流追蹤能力,能夠將處理器的指令流完全可視化,同時配置與ARMv7架構兼容的調試接口,實現工具標準化和更高的調試性能。用於Cortex-A9處理器的CoreSight設計工具包擴展了其調試和追蹤能力,以涵蓋整個片上系統,包括多個ARM處理器、DSP以及智能外設。

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

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

系統IP

系統IP組件對於在晶片上構建複雜的系統至關重要,通過利用系統IP組件,開發人員可以顯著縮短開發和驗證周期,從而節約成本並縮短產品的上市時間。

工具支持

所有ARM處理器均受ARM RealView?系列開發工具以及各種第三方工具、作業系統和EDA供應商的支持。ARM RealView工具獨一無二,所提供的解決方案涉及從概念到最終產品部署的整個開發過程。

圖3. 基於Coretex-A9核的主要晶片

NEON多媒體SIMD引擎簡介

NEON是一個SIMD數據處理架構,256位元組的寄存器堆包含32個64-bit位寬的寄存器或者16個128-bit位寬的寄存器。所有的寄存器都被視為具有相同數據類型的一個向量,支持的數據類型包括有符號或者無符號的8-bit、16-bit、32-bit和64-bit的整型數據或者單精度浮點數據。NEON指令都是針對相同數據類型的通道處理的,即所有通道執行相同的指令操作。如下圖4所示。

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

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

圖5. NEON和VFPv3協處理器的寄存器堆視圖

NEON指令支持的操作數類型包括:有符號或者無符號的8-bit、16-bit、32-bit和64-bit的整型數據(I8、S8、U8、I16、S16、U16、I32、S32、U32、I64、S64、U64)或者單精度浮點數據(F32)。

圖6. 單個寄存器組的元素分配

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

NEON指令集

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

圖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的並行優化方法

ARM編譯器優化方法

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來使能NEON的並行處理。一般認為RVDS或者DS-5編譯器的armcc針對並行處理性能很差,即使調整算法的結構以適合編譯器進行NEON指令的優化,但是生成的代碼還是難以讓人滿意。而GCC的自動並行化處理的結果性能更差,針對Android開發,只能採用Google提供的NDK的GCC工具鏈可以用來開發。但ARM EABI提供了編譯器支持的C內聯intrinsics。可以參考ARM V7-A的 ABI手冊以及arm_neon.h文件。

ARM彙編器的優化方法

使用NEON的intrinsic指令進行優化需要對NEON的指令集非常熟悉,而且使用intrinsics沒法控制寄存器分配和內存對齊等,因而很多的NEON的優化還是基於彙編代碼。當然手工寫彙編代碼總是需要很多的額外開銷的,而且還要了解ARM EABI編程規範。

NEON編程優化的基本方法

一般NEON優化是針對需要大量數據處理的函數,而函數的基本操作都是先加載數據,然後進行數據處理,最後把計算的結果保存到內存。首先針對NEON數據的加載和存儲,可以參考http://houh-1984.blog.163.com/blog/static/3112783420111159169507/,即適當考慮結構化的加載/存儲以有效的進行數據加載成為有利於並行處理的方式,當然除了數據加載有利於並行處理,還要考慮數據加載有利於cache性能的優化。然後採用NEON指令進行計算,針對數據訪問,可以考慮使用Q0~Q3的參數寄存器以及Q8~Q15寄存器,而對於Q4~Q7寄存器則必須根據EABI的規範在函數調用內保存。

另外就是關需數據的加載類型,一個是數據的對齊,雖然NEON完全支持非對齊訪問,但是對齊數據一個是有利於加載、存儲,另外一個是也更cache友好,非對齊的數據訪問要消耗更多的時鐘周期尤其是在非對齊還要跨越cache行的情況下,數據對齊方式可以採用[,:],其中align可以為32、64、128、256位。軟體流水是非常重要的優化工具,因為現在的ARM基於RISC的處理器,流水線是必須的,因而針對流水線需要更好的優化方法,雖然NEON的流水線在Coretex-A8和Cortex-A9的處理器上不同,NEON的指令一般都是在一個周期內發出,但是執行結果可能若干個周期才能有效,只有簡單的如VSUB、VADD和VMOV指令才能在下一個周期可以用。並發的指令發出也是需要提到的。另外從NEON的寄存器把數據保存到ARM寄存器非常耗時,需要至少20個周期的延時,因而儘量避免這類操作,NEON沒有提供除法和求平方根的操作,而VFPv3則存在這些指令。但是由於NEON處理器和VFP單元共用硬體,因而不要混合使用NEON和VFP指令。最後是儘量避免ARM和NEON處理器訪問相同的數據區域。

Vld1.8 {D0}, [R1:64]

Vld1.8 {D0,D1}, [R1:128]!

Vld1.8 {D0,D1,D2,D3}, [R2:256]!,R3

Cortex-A8和Cortex-A9的多指令並發有所不同,A8是每次並發兩次fetch,而A9除了多次並發外,還能亂序執行,因而指令重排的優化非常重要。一般而言NEON的SIMD優化能提高至少2倍的系統性能,取決於實際處理的位寬。

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)和向量浮點VFPv3(Vector Floating-Point)指令集的,在具體的晶片設計中NEON組件是可選的,NEON處理器是面向音頻、視頻編解碼器、圖像處理和語音信號處理以及其他的基帶等信息處理領域的。 本文介紹了NEON處理器的基本架構、NEON處理器的並發情況下Cortex-A8和Cortex-A9的區別、NEON的寄存器組和數據類型、NEON編程的針對編譯器、彙編器的優化方法以及其他的提高性能的並行方法。

相關焦點

  • ARM平臺NEON指令的編譯和優化
    本文介紹了ARM平臺基於ARM v7-A架構的ARM Cortex-A系列處理器(Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15)上的NEON多媒體處理硬體加速器針對C/C++語言、彙編語言和NEON intrinsics
  • ARM處理器NEON編程及優化技巧——矩陣乘法的實例
    ARM的NEON協處理器技術是一個64/128-bit的混合SIMD架構,用於加速包括視頻編碼解碼、音頻解碼編碼、3D圖像、語音和圖像等多媒體和信號處理應用。本文主要介紹如何使用NEON的彙編程序來寫SIMD的代碼,包括如何開始NEON的開發,如何高效的利用NEON。首先會關注內存操作,即如何變更指令來靈活有效的加載和存儲數據。
  • ARM處理器NEON編程及優化技巧——處理剩餘的元素
    ARM的NEON協處理器技術是一個64/128-bit的混合SIMD架構,用於加速包括視頻編碼解碼、音頻解碼編碼、3D圖像、語音和圖像等多媒體和信號處理應用。本文主要介紹如何使用NEON的彙編程序來寫SIMD的代碼,包括如何開始NEON的開發,如何高效的利用NEON。首先會關注內存操作,即如何變更指令來靈活有效的加載和存儲數據。
  • ARM處理器NEON編程及優化技巧——數據加載和存儲
    ARM的NEON協處理器技術是一個64/128-bit的混合SIMD架構,用於加速包括視頻編碼解碼、音頻解碼編碼、3D圖像、語音和圖像等多媒體和信號處理應用。
  • ARM NEON技術加速新一代移動多媒體,推動消費電子增長
    今日,ARM公司發布了新的媒體和信號處理NEON技術,將加速多種應用。ARM NEON技術適用於手機和消費娛樂電子,可靈活地實現多種視頻編/解碼、三維圖像、語音處理、音頻解碼、圖像處理和基帶功能。NEON技術將應用在將來的ARM處理器中,該技術也將獲得ARM和第三方工具提供商的廣泛支持。
  • 奧迪A7最高降7.82萬,比寶馬5系更拉風
    如果說上一代奧迪a7站在從容優雅的奔馳cls面前時還沒有十足的底氣,那麼經過換代之後的全新一代產品情況則發生了完全的轉變。目前市面上最新的2021款奧迪a7於今年的9月30日進行正式上市,新車總共推出了三款配置車型,它的售價區間為57.38~70.48萬元,作為年度改款車型它主要是針對配置方面進行調整。
  • 同頻下A7/A8/A9/A15/Krait性能對比-同頻,A7,A8,A9,A15,Krait,性能...
    同頻下A7/A8/A9/A15/Krait性能對比 2013-06-18 11:00:05     編輯:朝暉[爆料] 1080p AB OP軟解(多核性能):平均幀數,A7 12.45幀 A9 18.16幀 A15 25.2幀 Krait200 16.88幀 Krait300 17.7幀
  • 索尼相機A7系列三代 擁有成熟微單系統的全畫幅相機
    索尼 A7 系列,絕對算是相機歷史上成長最快、產品更新速度最快的全畫幅相機系列;5 年時間共有三個系列、三代產品以及八款具體型號發布,這在相機發展史上都實屬罕見。這一代 A7 系列,基本上不在具有設計上的硬傷。作為三代機身,A7RM3 與 A7M3 都沒有提升像素,而是將高像素與高速度進行了充分融合,而且大大改進了對焦系統。索尼 A7RM3 具備追焦狀態下的 10fps 連拍速度,而且連拍續航達到了 76 張。索尼之前機型一直是緩存不夠,拍攝之後需要耐心等待存儲卡寫入,A7 三代機身沒有了這個問題。
  • ARM實時處理器Cortex-R8介紹_Cortex-R系列處理器盤點
    >   說起ARM處理器,大家肯定都會想到Cortex-A系列,但這只是人家三大產品線之一的高性能應用處理器,同時還有非常低調的Cortex-M系列微控制器、Cortex-R系列實時處理器。
  • 13.一文搞懂Cortex-A9 RTC
    ARM系列文章合集如下: 《從0學arm合集》 一、RTC RTC(Real-Time Clock) 實時時鐘。 報警時間日期的設置也是對一系列的寄存器進行操作(報警秒數據寄存器ALMSEC、報警分鐘數據寄存器ALMMIN、報警小時數據寄存器ALMHOUR、報警日期數據寄存器ALMDATE、報警月數據寄存器ALMMON、報警年數據寄存器ALMYEAR)。
  • 19款奧迪A7即將上市,全新內飾升級,全觸摸中控臺,網友:期待!
    但在這三款車中奧迪a6的銷量卻遠遠超過另外兩款車,銷量要超過寶馬六和奔馳cls幾倍不止,甚至寶馬6系列還因此停產了,那為什麼價格相同配置又差不多的三款車有如此大的差距呢?19款奧迪a7已經在近日到達中國,不久還將會在奧迪的4s店中展車,到時我們便能看到,期待已久的19款奧迪a7,19奧迪a7相對於老款的車型變化不可謂是不大,全新的車型設計,相對於老款車型新車型將隔欄改成了六邊形,看上去更加年輕炫酷,左右的保險槓也進行了新的設計,裝上了網狀隔欄,一九款奧迪a7最特別的還是大燈的設計,利用了條紋形狀,不僅減少了風的阻力,而且看上去更加美觀
  • 詞根系列|ARM 「weapon」
    詞根arm來源於拉丁名詞arma "weapons", 也可以來自拉丁動詞armare "to arm 武裝", From PIE root *ar- "to fit together停戰,休戰;休戰協議■拆: arm(to arm)+i+st(stand: 站立; 停止)+ice(n後綴) -> 休戰■GRE ■短語
  • 最便宜的奧迪A8提車!落地價與寶馬7系看齊,內飾豪華不輸奔馳S級
    說到最近一段時間,大家都很關注的中大型豪華轎車,可以說無論是全新的奧迪a4,奧迪a6,奧迪a7,奧迪a8,還是新款的寶馬3系,寶馬5系,寶馬7系以及經典。你的奔馳c級,奔馳E級和奔馳s級都給大家留下了深刻的印象,而相比這些車型來說,車身尺寸最大也最豪華的奧迪a8,同樣也變得更有魅力,近日有網友就提到了一臺最便宜的入門版奧迪a8,該車的落地價基本與經典的新款寶馬7系看齊,並且還擁有不輸奔馳s級的豪華內飾,可以說相比老款車型全新奧迪a8有了明顯的進步,與此同時這臺全新的奧迪a8還換上了奧迪汽車最新的家族式外觀造型,尤其是更加精緻的大尺寸鋁合金輪轂以及全新的
  • ARM處理器全解析:A8/A9/A15都是什麼?
    前不久ARM正式宣布推出新款ARMv8架構的Cortex-A50處理器系列產品,以此來擴大ARM在高性能與低功耗Cortex-A57、A53處理器Cortex-A53、Cortex-A57兩款處理器屬於Cortex-A50系列,首次採用64位ARMv8架構,意義重大,這也是ARM最近剛剛發布的兩款產品。
  • ARM架構是什麼?為什麼連高通都離不開?
    還有基於ARM設計的派生產品,重要產品包括Marvell的XScale架構和德州儀器的OMAP系列。ARM家族佔比所有32位嵌入式處理器的75%,成為佔全世界最多數的32位架構。當然現在已經不只是32位了。