999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ARM NEON的H.265解碼器優化

2014-09-18 00:15:24
電視技術 2014年15期
關鍵詞:指令優化

簡 歡

(福州瑞芯微電子有限公司,福建福州350003)

ARM NEON已廣泛應用于數字信號處理和多媒體應用中,特別是音視頻編解碼。本文基于ARM Cortex A9處理器平臺,對NEON處理器的結構、指令和編程優化方法等技術進行了研究,并在此平臺上開展了H.265解碼器的具體實現和優化。通過在瑞芯微電子的RK3188 SDK開發板上的實際測試,結果表明NEON處理器可以較好地提高H.265軟件解碼器在Cortex A9處理器上的執行效率。

1 ARM Cortex A9架構及NEON處理器簡介

1.1 ARM Cortex A9架構

ARM Cortex A9是高性能ARM處理器,可實現各種基于ARM v7體系結構的應用和功能。Cortex A9處理器具備高效的、長度動態可變和多指令執行超標量體系結構,提供采用亂序猜測方式執行的8階管道處理器。在消費類、網絡、企業和移動應用中,Cortex A9都展示出了極高的性能和效率。

Cortex A9微體系結構既可以配置成可伸縮的多核處理器,也可以配置成單核處理器。可伸縮的多核處理器和單核處理器支持多種L1高速緩存配置,同時支持可選的L2高速緩存控制器,Cortex A9的靈活性保證了對各種應用領域和市場的適用性。

1.2 NEON多媒體處理器簡介

Cortex-A9的NEON處理器設計是基于ARM v7的SIMD(Single Instruction Multiple Data)和矢量浮點計算VFP v3(Vector Floating-Point)指令集進行的,在不同的芯片設計中NEON組件是可選的。在多媒體處理領域,如音視頻編解碼器、圖像處理和語音信號處理,以及通信領域,如基帶信息處理,NEON處理器都有自己獨特的優勢。

NEON處理器是ARM Cortex A系列處理器的128位SIMD(單指令多數據)體系結構擴展,它具有32個64 bit位寬寄存器或者16個128 bit位寬寄存器,所有的寄存器都被視為具有相同數據類型的一個向量,支持多種數據類型,包括有符號和無符號數據類型,也包括單精度浮點數據類型。另外,NEON指令都是針對相同數據類型的通道處理的,即所有通道執行相同的指令操作。

圖1是NEON寄存器的視圖,16個128 bit的4 byte寄存器Q0~Q15,或者32個64 bit的雙字寄存器D0~D31。注意NEON寄存器和ARM寄存器存在區別,但NEON會采用ARM的寄存器作為地址寄存器進行間接尋址。

圖1 NEON寄存器視圖

圖2是NEON單個寄存器組的元素分配,表示了NEON可支持的操作類型數據。包括有符號或者無符號的8 bit、16 bit、32 bit和64 bit的整型數據(I8,S8,U8,I16,S16,U16,I32,S32,U32,I64,S64,U64)或者單精度浮點數據(F32)。

圖2 NEON單個寄存器組的元素分配

NEON處理器同時支持內存非對齊訪問和對齊訪問,對齊訪問的速度更快,可通過指定@bits來確定地址對齊的位數,如@32,@64,@128等。數據加載和存儲支持交錯打包方式,即支持有2、3、4個通道的交錯數據加載和存儲。除此之外,還能在標量和向量間進行數據的移動,但速度較慢。同時,NEON也支持單精度浮點的數據運算。

2 NEON編程優化方法

NEON編程優化方法通常包括如下幾種手段:

1)編寫匯編代碼

最直接使用NEON的方式是編寫NEON匯編代碼。相對于其他的DSP編程語言,NEON的編寫并不復雜。但要寫出高質量的,能對性能有較大優化的匯編仍然具有一定難度。在對一個模塊進行NEON匯編優化之前,需要先確保對模塊的算法優化做到了最佳,特別是按照NEON的并行處理指令思路來改寫模塊,要將模塊改寫成使其盡量滿足NEON的并行處理框架。完成了算法優化后,即可動手開始編寫匯編代碼。

和傳統的Intel X86匯編、DSP匯編相同,NEON匯編也涉及到出棧入棧操作,這要求匯編代碼編寫者小心對待,以免因為入棧和出棧不一致導致程序運行錯誤。

2)采用內聯函數(Intrinsic Function)

內聯函數可以被C和C++的程序所調用,可自動進行類型檢測和寄存器分配。內聯函數在被編譯器編譯的時候,它會被轉化為有序的NEON指令進行執行。簡單的看,采用內聯函數可以實現在高級語言(如C/C++)中直接使用低級語言(如NEON)的功能。內聯函數最大的好處是程序員不用去接觸匯編,可以減小優化的難度。但采用內聯函數獲得的優化效率沒有直接使用匯編代碼獲得的優化效率高。

3)自動矢量化

ARM編譯器可針對C/C++代碼進行自動矢量化操作,這樣做的一個好處就是程序員不需要編寫匯編代碼或者使用內聯函數,即可實現NEON優化的效果。用C進行編程同時也保證了在不同平臺上的兼容性。

在C語言的for循環內部使用自動矢量化技術可獲得較好的性能優化結果。假設在執行循環體操作時,每次循環內部執行的操作相同,則可以采用自動矢量化技術,將多次循環的操作盡可能轉換成一次操作完成。在一次操作中,有多個計算單元按照相同的操作步驟來完成多次循環執行。

4)使用第三方的NEON庫(NEON Library)

ARM公司本身對常見的算法進行了NEON優化,并封裝成Library。如針對多媒體跨平臺API的OPENMAX[1],ARM 提供了針對 OPENAM 開發層(OPENMAX DEVELOPMENT LAYER)的優化實現。在開源代碼社區,有不少開發者和感興趣的人提供了很多基于NEON優化的library,這些Library覆蓋了音視頻編解碼和數字信號處理的常見模塊。一個著名的NEON代碼優化社區是Project Ne10[2]。

3 H.265解碼器NEON優化

本文采用開源的 OPENHEVC[3]作為 H.265[4]解碼器進行優化。相對于H.265標準的參考實現HM[5],OPENHEVC解碼器同樣符合H.265標準的語法語義,其實現更為簡練和高效。解碼器主要模塊包括熵解碼、反量化、反變換、幀內預測、幀間運動補償(MC)、去塊效應環路濾波(Deblocking)和樣本自適應偏移量濾波器(SAO)等。其解碼器框圖如圖3所示。

圖3OPENHEVC解碼基本框架

在OPENHEVC解碼器中,由于熵解碼模塊的串行程度高,條件分支過多,不適合采用NEON進行優化,該模塊可用ARM指令和Thumb指令代替NEON指令進行優化。對于其他模塊,如整數反余弦變換(IDCT),MC和Deblocking等,模塊算法中對于不同像素點的運算過程可以高度并行,并且運算步驟基本一致,適合采用NEON優化。因此對這部分進行了充分的NEON優化。由于優化的模塊較多,這里僅以IDCT為例,來說明NEON優化的思路及具體實現。

H.265編碼標準中對變換單元(Transform Unit,TU)通過使用整數正弦變換(DST)和整數余弦變換(DCT)將時空域信號轉換為頻域信號,再進行量化,達到壓縮的目的。相應地,在H.265解碼端,需要進行整數反正弦變換(IDST)和整數反余弦變換(IDCT)。

H.265指定了4種不同的TU塊尺寸,分別為4×4,8×8,16×16和32×32。在幀內編碼中,4×4亮度變換塊采用DST進行整數變換,以此提高大約1%的壓縮比[6]。除此之外,其他類型的變換塊均統一采用IDCT進行處理。

以8×8 IDCT為例,描述如何采用NEON進行加速。

式中:X為8×8 TU塊的數據;M為8×8 IDCT的系數變換矩陣;MT為M的轉置矩陣;Z為8×8 IDCT的最終結果。M具體取值為

即首先得到IDCT的一維運算結果Y,然后將MT和Y做矩陣乘法得到IDCT的二維運算結果Z。

對IDCT的一維運算采用蝶形變換來進行算法優化,其實現框圖如圖4所示。

觀察式(1),可將其變換成如下等式

圖4 H.265,8×8 IDCT 1-D蝶形運算示意圖

圖4中x0到x7表示8×8 TU塊的同一列系數,x0表示該列的第一個系數,x7表示該列的最后一個系數。采用一維快速蝶形運算來實現IDCT算法,雖然從C代碼層面上已經有效降低了計算復雜度,但每次運算都只針對矩陣中一列系數,對于8×8矩陣來說,需要對8列系數進行8次相同運算,才能完成整個一維快速蝶形運算。而采用NEON進行并行優化,可以將4次運算合并為1次,因此可極大提高運算速度。

基于IDCT的快速蝶形運算思路,采用NEON對IDCT進行優化的整體思路如下:

1)在8×8 IDCT實現中,TU塊的系數采用16位無符號整數表示。充分利用NEON的128 bit位寬,可一次用2個連續的64位D寄存器(也可以用1個128位Q寄存器表示)保存TU塊一行8個系數。

2)NEON支持最多4個16 bit整數同時進行乘累加,因此通過前面加載進來的8個系數,需要執行兩次乘累加操作。由于8×8塊左邊4列和右邊4列的操作完全一樣,因此可以將8×8 TU塊分為左右兩個8×4子塊,對子塊采用快速蝶形運算得到8×4一維運算結果。

以左邊8×4子塊為例,詳細描述快速蝶形運算的NEON實現步驟。

(1)將8×4 TU塊的32個數據加載進D寄存器,后面的運算將不再從內存中讀取數據。

(2)計算圖4 中O8_0~O8_3。將M[1][8],M[3][8],M[5][8]和M[7][8]的值賦給 D 寄存器,為后面的乘累加操作做準備。

(3)對4個系數同時進行乘累加,得到O8_0。其示意圖如圖5a所示。同理可得到O8_1,O8_2和O8_3的結果。

(4)計算圖4 中E8_0~E8_3。將M[1][8],M[3][8],M[5][8]和M[7][8]的值賦給 D 寄存器,為后面的乘累加操作做準備。

(5)如圖5b所示,對4個系數同時進行乘累加,得到e0。同理得到e1。

(6)和步驟(5)類似,如圖5c計算得到o0,o1。

(7)將e0,e1,o0和o1進行交叉相加減,得到E8_0~E8_3。

(8)最后對E8_0~E8_3,O8_0~O8_3進行交叉相加減,并最終經過移位操作后得到最終結果。

為方便NEON在做IDCT二維計算的時候,可以如一維計算一樣,一次加載連續多個數據進入D寄存器,需要對IDCT一維輸出結果進行轉置。NEON中的VZIP指令可以幫助實現這樣的操作。VZIP指令可交叉存取兩個向量的元素。以VZIP.8為例,如圖6所示,可將dn和dm兩個寄存器每8 bit進行交叉存儲。

圖5 計算O8_0,e0和O0框圖

圖6 VZIP.8 dn,dm示意圖

二維運算過程和一維運算過程基本相似,這里不再敘述。二維運算的結果即最終的IDCT運算結果。

4 OPENHEVC解碼器NEON優化結果測

本文采用了內置瑞芯微電子 RK3188處理器[7]的SDK開發板作為測試平臺,其CPU為ARM Cortex A9四核,帶NEON和VFP加速處理單元,CPU主頻最高可運行至1.6 GHz。

軟件平臺采用Android 4.4操作系統,通過對H.265編碼視頻的解碼幀率測試,來評估NEON優化代碼的效率。本文采用了包括各種分辨率和碼率的測試序列進行解碼測試,優化效果隨著分辨率上升愈顯明顯。具體優化結果如表1所示。

表1 OPENHEVC解碼器整體優化效果對比

5 小結

ARM NEON技術廣泛應用于多媒體優化中。NEON的SIMD架構使得其非常適合多媒體編解碼器中的許多計算密集型模塊。NEON在H.265解碼器中的優化效果表明,采用NEON進行多媒體優化效果顯著,能較好地提高多媒體應用的執行效率。

:

[1] The standard for media library portability[EB/OL].[2014-02-05].http://www.khronos.org/openmax/.

[2] An open optimized software library project for the ARM architecture[EB/OL].[2014-02-05].http://projectne10.github.io/Ne10/.

[3] OpenHEVC [EB/OL].[2014-02-05].https://github.com/Open-HEVC/openHEVC.

[4] ITU-T recommendation H.265 [EB/OL].[2014-02-05].http://download.csdn.net/download/sugufe/5593167.

[5] HEVC Test Model(HM)documentation[EB/OL].[2014-02-05].https://hevc.hhi.fraunhofer.de/HM-doc/.

[6] SAXENA A,FERNANDES F C.DCT/DST-based transform coding for intra prediction in image/video coding[J].IEEE Trans.Image Processing,2013,22(10):1685-1688.

[7] RK31 Series[EB/OL].[2014-02-05].http://www.rock-chips.com/a/en/products/RK31_Series/2013/0808/314.html.

猜你喜歡
指令優化
聽我指令:大催眠術
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
由“形”啟“數”優化運算——以2021年解析幾何高考題為例
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
基于低碳物流的公路運輸優化
現代企業(2015年2期)2015-02-28 18:45:09
主站蜘蛛池模板: AV老司机AV天堂| 一区二区三区四区精品视频 | 亚洲人成成无码网WWW| 55夜色66夜色国产精品视频| 亚洲日本中文字幕乱码中文| 欧美日韩资源| 亚洲人成网站色7799在线播放| 国产免费网址| 国产高清在线观看| 国产福利影院在线观看| 亚洲成人一区二区| 亚洲资源站av无码网址| a级毛片一区二区免费视频| 国产午夜不卡| 99免费视频观看| 国产福利免费视频| 欧美亚洲中文精品三区| 好久久免费视频高清| 麻豆精品在线视频| 麻豆精品在线播放| 无码一区二区三区视频在线播放| 久青草网站| 久久精品国产精品青草app| h视频在线播放| 国产精品久久久久久久久| 欧美日韩国产一级| 欧美成人国产| 无码国内精品人妻少妇蜜桃视频| 在线免费看片a| 伊人激情综合| 亚洲日韩高清在线亚洲专区| 亚洲色图在线观看| 亚洲人成影视在线观看| 亚洲日本中文字幕乱码中文| 国产成人精品免费av| 国产香蕉97碰碰视频VA碰碰看| 国内熟女少妇一线天| 97狠狠操| 欧美亚洲国产一区| 免费观看无遮挡www的小视频| 国产成人综合亚洲欧洲色就色| 久久不卡国产精品无码| 婷婷激情亚洲| 国产午夜不卡| 老司机久久精品视频| 巨熟乳波霸若妻中文观看免费| 欧美h在线观看| 国产成熟女人性满足视频| 三区在线视频| 免费一看一级毛片| 国产无人区一区二区三区| 国产成人亚洲精品无码电影| 任我操在线视频| 日本亚洲最大的色成网站www| 成人在线观看一区| 国产一区二区三区免费| 亚洲人成网18禁| 国产精品19p| 在线亚洲精品福利网址导航| 久久精品人妻中文系列| 亚洲中文字幕无码爆乳| 久热精品免费| 69视频国产| 在线精品亚洲一区二区古装| 色哟哟国产精品| 免费一极毛片| 夜夜操天天摸| 亚洲午夜福利精品无码不卡 | 婷婷亚洲天堂| 99久久国产综合精品2020| 青青草原偷拍视频| 依依成人精品无v国产| 精品一区二区三区四区五区| 尤物成AV人片在线观看| 中文字幕永久在线观看| 久久一本精品久久久ー99| 国产一级在线播放| 亚洲综合二区| P尤物久久99国产综合精品| 国产青青操| 亚洲区视频在线观看| 国产高清不卡|