H264 解碼耗時分析

2021-08-25 12:14:41 字數 2828 閱讀 4546

在數字基帶處理器上**的最佳放置

美國模擬器件公司 jose fridman

最近幾年,高速緩衝儲存器(caches)在dsp和嵌入式系統中已經很普遍。在快取記憶體出現前,嵌入式軟體需要對片內sram和片外sram、sdram和flash等所有物理儲存資源中的**進行管理。軟體工程師必須根據執行時間統計查詢所有對全部執行時間起關鍵作用的**模組的位置。例如,當需要乙個對執行時間非常關鍵的模組時,例如通訊系統中的資料均衡器,其**在執行之前必須從低速的片外儲存器移至高速的片內sram。這個預載入的過程確保了模組快速執行,並且在預定義的執行時間範圍內。

然而,這種預載入過程很消耗時間,而且除了相當小的系統,這種預載入過程都會是非常複雜的。例如,現在的手機系統已經發展到了非常複雜的程度,特別是那些新一代的多模手機,其中gsm調製解調與fdd wcdma調製解調模式共存。除了移動通訊標準,手機可能還需要支援多種無線連線標準(例如ieee 802.11無線區域網和藍芽標準)以及多**標準(例如mpeg-4和h.264標準)。因此無線標準的多樣性使已經很複雜軟硬體系統又增加了負擔,從而使很明確的**放置問題也不再容易。

而另一方面,如果我們在設計乙個具有指令快取記憶體的系統時沒有考慮程式**的合理放置,很可能會在從快取記憶體獲取程式**以及用來儲存程式**的記憶體,由於頻寬的原因會花費很多時間。例如,如果將整個程式放在外部flash中,這種情況就會出現。

本文中,我們將介紹一種方法,在使用指令快取記憶體的條件下確定在blackfin dsp上執行大型軟體系統中**段的最佳位置。我們採用該方法實現手機終端數字基帶處理器(dbb)ad6900中的**優化配置,同樣該方法適用於所有基於blackfin處理器的裝置。

ad6900的體系結構描述

下面簡單介紹一下ad6900 dbb處理器,ad6900的結構如圖1所示。在圖1的右上方是blackfin處理器的子系統,其中包含blackfin的核心、l1**和資料儲存器(按照caches或sram配置)、l2儲存器、稱作dspdma的blackfin直接儲存期訪問(dma)控制器和一組用於採集和處理gsm資料的dsp外圍裝置。blackfin子系統與系統匯流排介面單元(sbiu)相連,ssiu是乙個多端**叉開關,提供dsp和l1儲存器以及系統其他部分之間的連線。圖的右下方是arm926ej-s子系統。第**系統片記憶體儲器稱作系統隨機儲存器(ram)(即l3儲存器),blackfin和arm核心都可訪問l3。通過外部匯流排控制器(ebs)、sdram控制器(sdc)和乙個與非門快閃儲存器控制器(nfc)可訪問外部儲存器(l4)。

圖1 ad6900結構框圖

ad6900基於層次儲存系統。從blackfin處理器的角度來看,l1儲存器僅提供了一種有限的快速零等待狀態儲存。而較低等級的儲存器(例如l2、l3和l4儲存器)提供了增大的儲存容量,但以比較低的速率接入。blackfin dsp具有兩通道32b匯流排寬度、16kb指令快取記憶體。

表1 按dsp占用百分比對h.264函式的分類統計分析

這種統計分析中還包含每個函式基所需要的指令快取記憶體線路占用數目的資訊。例如,函式_decode_residual不但是消耗指令週期最多的函式,還使指令快取記憶體讀取相當多的快取記憶體線路。在這種情況下,僅僅這乙個函式就消耗了整個h.264解碼器所需的快取記憶體線路數目的10.5%。

類似的,其他函式,也許不是占用dsp指令週期最多的函式,也需要占用大量的指令快取記憶體數目。在表1中我們用框線標出要求指令快取記憶體線路佔用率最大的三個函式,占用總數的幾乎40%。總之,dsp消耗的指令週期和指令快取記憶體線路佔用率無關。許多函式,也許消耗的dsp指令週期較少,但卻需要相當多的快取記憶體線路佔用率,而有一些消耗dsp指令週期較多的函式可能需要較少的快取記憶體線路(例如,_filter_mb_edgev_4pix消耗6.7%的dsp指令週期,但只消耗0.1%的指令快取)。

如果將表1中強調的三個函式放在離dsp近的儲存器中,例如l1程式儲存器,那麼可以節省大約40%的片外讀指令頻寬。這是根據快取記憶體線路佔用率進行統計分析的主要目的。

更一般地,在表2中示出了同樣的分類,但是按照指令快取記憶體佔用率遞減順序排列的。我們可以看見一些函式雖然並不占用太多dsp指令週期,但卻需要大量的指令快取記憶體佔用率。例如,如果採用傳統的基於指令週期的統計分析方法處理函式_hl_motion,那麼我們可能認為並不需要優化該函式,因為它只消耗0.7%的dsp指令週期。然而,它需要占用5.5%指令快取線路佔用率,因此在這種情況下應該將該函式放置在離dsp近的儲存器中,可以大幅度提公升其應用效能。

表2 按照指令快取記憶體佔用率對h.264函式的分類統計分析

利用表2提供的統計分析,我們挑選那些消耗指令快取記憶體最大的函式,並且將其放入l1 dsp儲存器。該函式的數量取決於系統其他部分的需求和l1儲存器可用容量。在這個具體例子中,我們有乙個16kb的l1 dsp儲存器並且將它放在函式的頂層,可使程式讀取頻寬下降54%。隨著頻寬的減小,h.264解碼器占用總週期的時間將會減少10%。h.264解碼器的程式**長度大約為125kb,這就意味著通過重新鏈結並且將13%的**移動到片記憶體儲器,可以提公升指令執行週期性能。

結論

當考慮優化應用程式時,我們常常只關注問題的一方面:應用程式所消耗dsp資源的程度,即消耗的指令週期或每秒指令數(mips)。然而,在許多嵌入式系統中最重要的資源除了處理器執行時間外,還有整個裝置的匯流排及外部儲存器介面。這些資源在高整合度系統中尤其重要,例如手機中數字基帶處理器,其外部介面通常是最重要的系統資源之一。在本文中我們介紹了一種根據執行在基於指令快取記憶體系統所消耗的頻寬統計分析應用程式的方法。在外部介面受限制的裝置中優化那些使用快取記憶體的應用程式的讀取頻寬,對提公升指令週期性能有著良好效果。

H264 編譯碼框架簡介

2 h264和以前的標準 如h261 h263 mpeg 1 mpeg 4 的編解碼器實現流程沒有太大區別,主要的不同在於各功能塊的細節。3 h264就是利用實現的複雜性獲得壓縮效能的明顯改善。至於複雜度的評估,以後會介紹 下面介紹一下h264的編碼器框圖 編碼器採用的仍是變換和 的混合編碼法。在圖...

海思h264解碼庫

海思的dll,解碼h264 解碼後轉出yuv12 呼叫方法 if h264dec.hi264decau dechandle,ph264data,framelen,0,ref decodeframe,0 0 ph264data是h264幀的控制代碼,framelen是h264幀的長度,decodefr...

H264碼流分析

sodb 資料位元串 最原始的編碼資料 rbsp 原始位元組序列載荷 在sodb的後面填加了結尾位元 rbsp trailing bits 乙個bit 1 若干位元 0 以便位元組對齊。ebsp 擴充套件位元組序列載荷 在rbsp基礎上填加了仿校驗位元組 0x03 它的原因是 在nalu加到anne...