新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > H.264視頻編碼器在DSP上的實現與優化

        H.264視頻編碼器在DSP上的實現與優化

        作者: 時間:2011-01-12 來源:網絡 收藏

        3.2 內存分配及Cache

          與PC機相比,的程序數據存儲空間非常有限。因此,對于編碼這種需要處理大量數據的程序而言,必須合理安排數據和程序的存儲方式,對存儲器的。實驗表明,合理利用兩級緩存并配合低工作頻率外部存儲器,系統的效率能達到全部使用高工作頻率內部存儲器的80%~90%。

          本文將占據較大空間的數據或使用頻率不高的程序放在片外存儲器中,啟用L2 Cache,調用C6000的芯片支持庫CSL中的CACHE-setL2Mode函數,將L2設置為198KB的SRAM和64KB的Cache模式。并根據算法本身的結構,采取以下方法對存儲器進行:利用CCS的分析工具Profile分析C代碼,將反復調用的程序段(例如DCT變換和IDCT變換)放在片內程序存儲區中,把頻繁用到的數據段(如編碼表)放在片內數據存儲器中,把運用次數較少的程序和數據段放在片外存儲器中,避免對程序或數據進行不必要的反復搬移。

          在運行過程中,由于一幀圖象的數據量很大,因此將參考幀和當前幀數據放到片外存儲器中,需要用到時,再將它們從外部存儲器搬到片內存儲器中,以提高程序的運行效率。

          3.3 代碼優化

          進行代碼優化,先要找出程序的瓶頸,即占用CPU時間較多的代碼,然后對其進行有針對性的優化。使用CCS提供的代碼剖析工具Profile可以統計顯示出程序中各個重要段和函數的運行時間,找出運算量較大的程序段,優化這些程序段,對于提高算法的性能有巨大影響。

          ⑴ 聯合使用-pm和-03編譯選項,對代碼進行項目級的優化:CCS提供了強大功能的編譯選項,從-O0到-O3共四級優化。-O3編譯選項使能軟件流水和其他優化方法,-pm選項從程序代碼角度,把整個項目的所有源程序聯合起來,作為一個模塊來處理。-pm和-03兩個選項聯合使用,能進行一系列的優化,并且代碼尺寸變小很多。


          ⑵ 使用const、restrict 關鍵字修飾指針:const指示編譯器其修飾的指針所指向的內容不能修改;restrict指示編譯器其修飾的指針與其他指針指向的內容不會覆蓋,這些信息使兩個指針不會訪問同一存儲器地址,可以消除存儲器之間的相關性,這樣可以并行執行多個數據的讀取和運算,使代碼運行達到昀大效率。

          ⑶ 對短字長數據使用寬長度的存儲器訪問(數據打包處理):即當CPU執行一連串短型數據(如16bit數據)操作時,可將數據類型設置為32bit長度的int型,這樣可以一次性訪問2個短型數據,然后使用C6000指令,同時進行兩個數據的操作,減少了對內存的訪問,這比采用16bit長度short型節約一半的時間。

          ⑷ 循環展開,把C語言中的循環打開,把多循環變為少循環,減少循環嵌套,使得可能并行的指令增加,從而改進軟件流水編排,改善代碼性能。

          ⑸ 減少C函數的調用,盡量使用系統提供的內聯函數(intrinsics函數)代替C函數,C6000編譯器提供了許多intrinsics,是直接與C6000匯編指令映射的在線函數,可以快速優化C代碼,這樣減少許多不必要的操作,提高代碼運算速度。

          ⑹ 使用軟件流水技術,軟件流水是一種對循環中的指令進行調度優化的技術,利用軟件流水可生成非常緊湊的循環代碼。當編譯時采用-O2或-O3級別的優化選項時,編譯器將對程序中的循環進行軟件流水。通過軟件流水的優化,可以大大提高循環代碼的效率,極大地指令的并行性。

          3.4 匯編程序級優化

          通過 profile clock工具找出效率很低的部分,使用線形匯編繼續優化。線性匯編語言是 C6000系列 獨有的一種編程語言,介于高級語言和低級語言之間。和標準的匯編語言不同的是,在編寫線性匯編程序時可不必考慮指令的延時、指令的并行、寄存器的使用和功能單元的分配等,匯編優化器將根據代碼的情況自動確定這些信息。匯編程序優化可通過對自動編譯生成的匯編文件進行修改而進行。匯編優化其實就是根據以上各個方面的特點,采取針對性的方法,以獲得盡可能高的程序效率。常用的匯編偽指令如下:

          ⑴ 定義一個可被匯編優化器優化且可被 C/C++當做函數調用的線性匯編代碼段的偽指令:

          label .cproc [ var1,[var2,…] ]

        .endproc



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 关岭| 隆昌县| 宿州市| 萨迦县| 清苑县| 神池县| 昆明市| 南投市| 武清区| 荆州市| 宝鸡市| 崇礼县| 嵊州市| 五指山市| 白沙| 微博| 河间市| 双柏县| 礼泉县| 西昌市| 浦县| 阳春市| 北安市| 阳泉市| 沧州市| 凌海市| 长白| 潮安县| 汾西县| 渑池县| 原平市| 黄石市| 和顺县| 玉山县| 名山县| 宜川县| 西和县| 怀安县| 开鲁县| 博白县| 永胜县|