新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在ADSP-BF561上實(shí)現(xiàn)與優(yōu)化的H.264

在ADSP-BF561上實(shí)現(xiàn)與優(yōu)化的H.264

作者: 時(shí)間:2012-05-11 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://www.butianyuan.cn/article/257521.htm


  (1)匯編代碼編寫
  使用匯編優(yōu)化有兩個(gè)方法:對(duì)于LEAF函數(shù)(函數(shù)體中不再調(diào)用其余函數(shù)),采用整個(gè)函數(shù)完全用匯編指令重寫的方式;而對(duì)于NONLEAF函數(shù)則可使用asm關(guān)鍵字,在C代碼中嵌入?yún)R編代碼。在匯編代碼的編寫過程中一些情況會(huì)造成流水線stall,在編寫匯編代碼時(shí)要特別注意避免這些情況。IDE集成了PIPLELINEVIEWER工具,如圖4所示。在編寫完成匯編代碼后,可使用該工具觀察運(yùn)行時(shí)流水線的情況。如果有stall等出現(xiàn),會(huì)給出原因,優(yōu)化人員根據(jù)工具分析結(jié)果重新更改代碼,提高執(zhí)行效率。


  ADI公司提供的IDE具有非常靈活的設(shè)置,能根據(jù)用戶的需要生成針對(duì)不同限制的代碼。如內(nèi)存有限,用戶可以設(shè)置生成文件更小的代碼;如果用戶更注重運(yùn)行速度,則設(shè)置編譯器生成運(yùn)行速度更快的代碼,或是在其間取一個(gè)折中。
  ADSP-BF561有專門用于處理視頻相關(guān)的一些專用DSP指令(video pixel operations、vectoroperations等),這些專用指令通過SIMD技術(shù)或者操作專門硬件支持某些特殊運(yùn)算(累加、多參數(shù)取均值,同時(shí)完成加減法等),以提高運(yùn)行速度。如前文求SAD情況,匯編指令中有指令專門計(jì)算連續(xù)4個(gè)像素與另外連續(xù)4個(gè)像素之差的絕對(duì)值之和,結(jié)果與累加器的值相加。如果要隔點(diǎn)算(即取一半的點(diǎn)計(jì)算),反而需要增加指令后對(duì)數(shù)據(jù)進(jìn)行下采樣,既耗時(shí)而且不準(zhǔn)確。所以采用計(jì)算一半像素點(diǎn)的策略并不適用于ADSP-BF561。編譯器自動(dòng)生成的代碼中不會(huì)使用到這些專用指令。所以只能根據(jù)對(duì)算法的理解和對(duì)平臺(tái)的熟悉程度來對(duì)算法進(jìn)行匯編優(yōu)化。
  在編寫匯編代碼時(shí)還需注意部分寄存器的使用,如I0、I1,其值不僅用做地址索引,還會(huì)影響許多指令的計(jì)算結(jié)果。在使用這些寄存器時(shí),一定要注意將其壓?;蛑脼檫m當(dāng)?shù)闹?。此外,關(guān)于數(shù)據(jù)的載入,一般應(yīng)遵循對(duì)齊原則,但在做運(yùn)動(dòng)估計(jì)計(jì)算匹配準(zhǔn)則函數(shù)時(shí),這樣的要求往往達(dá)不到。故如能將兩者分開來計(jì)算,將更能提高效率。
  此外,應(yīng)盡量合理地使用寄存器,多使用并行指令也能提高代碼的執(zhí)行效率。
  (2)分級(jí)存儲(chǔ)器結(jié)構(gòu)
  ADSP-BF561采用改進(jìn)的哈佛結(jié)構(gòu)和分級(jí)的存儲(chǔ)器結(jié)構(gòu)。Level1(L1)存儲(chǔ)器以全速運(yùn)行,只有很少的延遲。在L1級(jí),指令存儲(chǔ)器存放指令。兩個(gè)數(shù)據(jù)存儲(chǔ)器存放數(shù)據(jù),一個(gè)專用的臨時(shí)數(shù)據(jù)存儲(chǔ)器存放堆棧和局部變量信息。由多個(gè)L1 存儲(chǔ)器組成的模塊,可進(jìn)行SRAM和CACHE的混合配置。存儲(chǔ)器管理單元(MMU)提供存儲(chǔ)器保護(hù)功能,對(duì)運(yùn)行于內(nèi)核上的獨(dú)立任務(wù),可保護(hù)系統(tǒng)寄存器免于意外的存取。L1存儲(chǔ)器是ADSP-BF561內(nèi)核中性能最高、最重要的存儲(chǔ)器。通過外部總線接口單元(EBIU),片外存儲(chǔ)器可以由SDRAM、FLASH和SRAM 進(jìn)行擴(kuò)展,可以訪問多達(dá)132MB的物理存儲(chǔ)器。根據(jù)這樣的特點(diǎn),將執(zhí)行率更高的代碼放入L1指令緩存中,能使代碼更快地運(yùn)行。IDE提供了Profile工具,能在運(yùn)行時(shí)統(tǒng)計(jì)各個(gè)函數(shù)所占的CYCLE數(shù)和占總CYCLE數(shù)的百分比。通過將X264中比較耗時(shí)的部分算法代碼,如模式選擇部分代碼放入L1指令空間,能進(jìn)一步提升運(yùn)行效率。Profile工具統(tǒng)計(jì)結(jié)果同樣也是選擇需要使用匯編優(yōu)化函數(shù)的依據(jù),IDE可根據(jù)Profile結(jié)果對(duì)代碼進(jìn)行優(yōu)化。X264代碼Profile統(tǒng)計(jì)結(jié)果與測(cè)試數(shù)據(jù)有很大關(guān)系,選用更類似以后應(yīng)用場(chǎng)所的數(shù)據(jù)作為測(cè)試數(shù)據(jù),能使統(tǒng)計(jì)結(jié)果更接近以后的應(yīng)用環(huán)境。為達(dá)到比較準(zhǔn)確的統(tǒng)計(jì)結(jié)果,最好在Simulation階段進(jìn)行統(tǒng)計(jì)。雖然這樣非常耗時(shí),但為得到一個(gè)準(zhǔn)確的統(tǒng)計(jì)作為參考依據(jù)是值得的。此外CACHEVIEWER工具能提供運(yùn)行時(shí)CACHE的使用情況,使用它來分析CACHE的使用,對(duì)于提高代碼運(yùn)行效率很有用處。
3 實(shí)驗(yàn)結(jié)果評(píng)估
3.1 關(guān)鍵函數(shù)優(yōu)化測(cè)試結(jié)果
  采用以上優(yōu)化方法對(duì)編碼關(guān)鍵函數(shù)進(jìn)行優(yōu)化,優(yōu)化前后函數(shù)耗時(shí)如表1所示??梢?,以上優(yōu)化方法能大幅度減少編碼時(shí)間。


3.2 測(cè)試序列測(cè)試結(jié)果
  對(duì)三種測(cè)試序列在總線頻率120MHz下進(jìn)行優(yōu)化前后幀率測(cè)試,結(jié)果如表2所示。從表2可以看出,采用以上優(yōu)化方法能顯著提高幀率。


3.3 不同數(shù)據(jù)總線頻率下測(cè)試結(jié)果
  對(duì)于不同的總線頻率,優(yōu)化后編碼幀率不同,結(jié)果如表3所示,采用的測(cè)試序列為foreman。


  本文介紹了H.264標(biāo)準(zhǔn)的框架,研究了X264軟件的實(shí)現(xiàn)方案,對(duì)ADSP-BF561體系結(jié)構(gòu)進(jìn)行分析,提出了一套X264優(yōu)化方案,包括:算法替代和改進(jìn)、內(nèi)聯(lián)函數(shù)、匯編代碼編寫、高速存儲(chǔ)器應(yīng)用等。測(cè)試結(jié)果表明,優(yōu)化后的算法編碼效率有顯著提高,具有很強(qiáng)的實(shí)用價(jià)值。但是,本文主要從編碼速度和效率兩方面對(duì)編碼器進(jìn)行優(yōu)化,在復(fù)雜度和編碼質(zhì)量上仍需不斷對(duì)關(guān)鍵算法進(jìn)行分析整合,提出新的優(yōu)化算法。同時(shí),編碼器的碼率控制尚未完善,如何在降低計(jì)算復(fù)雜度的前提下有效進(jìn)行碼率控制,需進(jìn)一步研究。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

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

關(guān)閉