新聞中心

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

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

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

本文引用地址:http://2s4d.com/article/257521.htm


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


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


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


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


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

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

上一頁 1 2 下一頁

評論


相關(guān)推薦

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

關(guān)閉