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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計應(yīng)用 > 一種處理器的視頻編碼器平臺的探討

          一種處理器的視頻編碼器平臺的探討

          作者: 時間:2012-04-25 來源:網(wǎng)絡(luò) 收藏
          索,否則將繼續(xù)以此點為搜索中心進行SPSS搜索。

            經(jīng)JM實驗證實,采用此種方法,可以節(jié)約大約10%的運行時間,且代碼量無太大增長。

            針對DSP的特點和相關(guān)的硬件指令,設(shè)計時可對代碼進行如下優(yōu)化:

            ◇對程序結(jié)構(gòu)進行調(diào)整。對不適合DSP執(zhí)行的語句進行改寫,以提高代碼的并行性。

            ◇宏的使用。也就是將有些較短,執(zhí)行單一、調(diào)用次數(shù)多的函數(shù)改為宏。

            ◇循環(huán)優(yōu)化是將C語言中的for循環(huán)打開,排流水線,提高并行性。

            ◇浮點數(shù)定點化。因為Blackfin561并不支持浮點運算,但原始程序代碼卻是浮點運算的格式,所以必須改成定點運算,而其修改后的執(zhí)行速度也會加快很多。

            ◇盡量用邏輯運算代替乘除運算。由于乘除運算指令的執(zhí)行時間要遠遠大于邏輯移位指令,尤其是除法指令,故應(yīng)盡量用邏輯移位運算來代替乘除運算,以加快指令的運行速度。

            ◇減少判斷轉(zhuǎn)換。

            ◇盡量靜態(tài)分配內(nèi)存。

            ◇調(diào)用系統(tǒng)提供的豐富的內(nèi)聯(lián)函數(shù)。

            此外,為了充分發(fā)揮DSP的運算能力,還必須從它的硬件結(jié)構(gòu)出發(fā),最大限度地利用它的8個功能單元,使用軟件流水線盡量讓程序無沖突地并行執(zhí)行。也可將最耗時的函數(shù)抽取出來,用線性匯編改寫,從而最大限度的利用DSP的并行性。

            4.2 匯編級優(yōu)化

            匯編級優(yōu)化主要指如下幾點操作:

            (1)使用寄存器資源

            Blackfin561提供了8個32位數(shù)據(jù)寄存器以及一系列的地址寄存器。使用寄存器代替局部變量時,若局部變量用來保存中間結(jié)果,那么用寄存器代替局部變量可省掉很多訪問內(nèi)存的時間。

           ?。?)使用專用指令

            Blackfin561提供有求最大值、最小值、絕對值、CUP及大量視頻專用指令,應(yīng)可能用多位的指令來訪問少位的數(shù)據(jù)。通過使用這些指令能大大提高代碼的執(zhí)行速度。如用int型(32位)訪問2個short(16位)型數(shù)據(jù)時,可將其分別放在32位寄存器的高16位和低16位字段。這樣,數(shù)據(jù)讀取效率可以提高1倍,從而減少內(nèi)存訪問次數(shù)。

           ?。?)使用并行指令和向量指令

            ADSP-BF561中每條通用指令都可以和一條或兩條存儲器訪問指令并列執(zhí)行,這樣有利于ADSP-BF561的流水線滿負荷運行,更充分發(fā)揮ADSP-BF561的數(shù)據(jù)處理能力。

           ?。?)合理存放反復(fù)調(diào)用的程序段

            把被反復(fù)調(diào)用的程序段(如DCT變換和IDCT變換)放在片內(nèi)程序存儲區(qū)中,把頻繁用到的數(shù)據(jù)段(如編碼表)放在片內(nèi)數(shù)據(jù)存儲器中,而把不常用到的程序和數(shù)據(jù)段放在片外存儲器中,以避免對程序或數(shù)據(jù)進行不必要的反復(fù)搬移。

           ?。?)合理使用內(nèi)外存儲器

            BF561片內(nèi)只有256KB的存儲空間,因此當前幀、參考幀和當前幀的重建幀都必須放至片外存儲器,壓縮碼流若被主機讀取,也可放至片外。其它數(shù)據(jù)如程序代碼、全局變量、VLC碼表、各編碼模塊產(chǎn)生的中間數(shù)據(jù)等均可放至片內(nèi)。

           ?。?)DMA的使用

            由于CPU訪問片外存儲器的速度通常要比訪問片內(nèi)慢幾十倍,片外數(shù)據(jù)的傳輸通常成為程序運行時的瓶頸,這樣,即使代碼效率很高,流水線也會因為等待數(shù)據(jù)而被嚴重阻塞。解決這一問題的有效方法是用DMA傳送數(shù)據(jù)。程序是逐個宏塊進行編碼的,在編碼當前宏塊的同時,先由DMA將下一個宏塊的數(shù)據(jù)、用到的參考幀數(shù)據(jù)由片外傳送至片內(nèi),當前宏塊做完運動補償后,DMA又將重建后的宏塊由片內(nèi)傳送至片外。這樣CPU只對片內(nèi)數(shù)據(jù)進行操作,從而使流水線可以順利進行,而壓縮碼流按逐個碼字有時間間隔地寫入,可由CPU直接寫至片外。

            5 結(jié)束語

            經(jīng)過用ADSP-BF561匯編語言改寫的對應(yīng)函數(shù)的優(yōu)化程序經(jīng)調(diào)試運行后,DCT,IDCT部分效率提高了大約15倍,去塊濾波部分效率提高了大約6~7倍。對于模塊中的其它部分函數(shù),也同樣取得了良好的優(yōu)化結(jié)果。說明其優(yōu)化工作確實達到了良好的效果。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(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); })();