MPEG-4編碼器在BF561上的優(yōu)化
3 編碼器優(yōu)化方案
3.1 基于Cache和DMA的優(yōu)化
Blackfin系列DSP多級存儲結(jié)構(gòu),其代碼從內(nèi)部L1指令存儲器運行、中間數(shù)據(jù)及常用參數(shù)從內(nèi)部L1數(shù)據(jù)存儲器讀取或存放時,才能實現(xiàn)最佳性能。但是MPEG-4算法大量的算法導致代碼不可能放入L1指令存儲器中,大量的中間數(shù)據(jù)和參數(shù)也不可能僅存放在L1數(shù)據(jù)存儲器中,所以要考慮如何更好地利用處理器上的L1存儲器才能讓系統(tǒng)的性能達到最佳。指令Cache,數(shù)據(jù)DMA,這是目前最流行的系統(tǒng)模型,多數(shù)的嵌入式媒體處理器都是基于這樣的想法而設計的。
使用高速緩存機制允許編程者訪問大的、低成本的外部存儲器。它的工作方式是:在需要的時候自動將代碼讀入L1指令存儲器。這使編程者不必繁瑣地將代碼從內(nèi)部存儲器移入移出。指令高速緩存有助于以更為有效的方式從外部存儲器預取指令。
相比于指令管理方面使用指令Cache,在數(shù)據(jù)管理上使用DMA顯得是自然而然的。但是在優(yōu)化過程中還是注意了以下幾個問題:
(1)由于BF561的外部總線是32位寬的,所以用32位DMA能最大程度地提高數(shù)據(jù)存取的性能。
(2)基于寄存器的DMA和基于描述符的DMA兩種DMA工作方式的選取?;诩拇嫫鞯腄MA中,處理器直接對DMA控制寄存器編程來初始化一個傳送。因為寄存器不必從內(nèi)存中裝載,并且內(nèi)核不必保存描述符,因此,基于寄存器的DMA提供了最好的DMA控制器性能。相反在基于描述符的DMA操作中,可以對一個DMA通道進行編程,以便在當前傳送隊列完成后,自動設置和重啟其他的DMA傳送過程。在管理一個系統(tǒng)的DMA過程時,基于描述符的模型可以提供最大的靈活性?;谏厦娴目紤],在視頻采集模塊中我們選了基于描述符的DMA控制方式,而在其他模塊中選取基于寄存器的DMA方式。
(3)當數(shù)據(jù)在內(nèi)部存儲器移動時,盡量不使用標準C語言中的memepy()函數(shù),而使用MemDMA的方式,這樣可以減少CPU等待時間。
3.2 存儲器管理策略優(yōu)化
對于通常的嵌入式媒體處理器,片上存儲器都不夠存儲一個完整的視頻幀,因此系統(tǒng)必須依賴L3外部RAM來支持對大緩沖區(qū)進行相對較快的訪問。因此對片外存儲器的訪問必須精心設計,以保證較優(yōu)的數(shù)據(jù)吞吐。以下是筆者在優(yōu)化過程中總結(jié)的一些關(guān)鍵步驟:
(1)分組類似傳送來減小存儲器總線出送方向切換的次數(shù)。以相同的方向訪問外存是是最有效率的(如連續(xù)的讀或者寫)。例如,當訪問片外SDRAM時,16個讀16個寫總比單獨的16個讀/寫要快,這是由于先寫再讀而導致的延遲。對外存的隨機訪問會產(chǎn)生高概率的總線中轉(zhuǎn)。因此在給定的方向上充分利用控制傳輸數(shù)量的能力是重要的。
對于MemDMA流,當期望共享可用的DMA總線帶寬時,可編程的DMA控制器以輪流選擇每個數(shù)據(jù)流的方式進行固定數(shù)量的傳送。在每條DMA總線上,這個“方向控制”工具在DMA資源的優(yōu)化使用方面是一個重要的考慮。通過分組同方向地傳送在一起,其提供了一種方法來管理DMA總線傳送方向的頻繁變動。當使用方向控制特性時,DMA控制器優(yōu)先級保證在DMA或存儲器總線上,與前一次傳送據(jù)具有相同讀/寫方向的數(shù)據(jù)傳輸,直到方向控制計數(shù)器溢出,或停止傳送,或傳送過程中自己改變方向。當方向計數(shù)器歸零時,DMA控制器改變其優(yōu)先選擇方向為相反的數(shù)據(jù)流動。
(2)保持SDRAM的行打開及實現(xiàn)多次數(shù)據(jù)傳送。每次訪問SDRAM都會花費幾個SCLK(系統(tǒng)時鐘周期),特別是如果需要的SDRAM的行還沒有被激活時。一旦一行是激活的,就能從一整行中讀取數(shù)據(jù)而不必每次訪問該行的時候再打開?;蛘呖梢赃@樣理解:每個SCLK周期訪問存儲器的任何位置都是可能的,只要這些位置在SDRAM的同一行中。關(guān)閉一行需要多個SDRAM時鐘周期,因此,連續(xù)的行關(guān)閉能嚴格限制SDRAM的吞吐量。
一個SDRAM的頁錯失可花費20~50個CCLK(核時鐘周期)。Blackfin系列DSP可以最多同時打開四個SDRAM行,從而減少設置時間。應用程序應當通過適當放置數(shù)據(jù)緩沖區(qū)和管理訪問來利用打開的SDRAM塊,原則就是把可能同一時間訪問的緩沖區(qū)分配到不同的SDRAM塊中。
3.3 基于雙核結(jié)構(gòu)的優(yōu)化
一片BF561內(nèi)包含了兩個完全相同的Blackfin內(nèi)核,這使其擁有比同系列芯片更為強勁的運算能力。因此想要充分發(fā)揮其能力就必須更具其結(jié)構(gòu)特性為編碼器設定合適的整體構(gòu)架。通常的方式有兩種,一種是非對稱的程序設計模式,另外一種為對稱的程序設計模式。顧名思義,非對稱模式就是兩個內(nèi)核完成不同的處理任務,這種模式下,兩個內(nèi)核好像是兩個單獨的處理器,它們之間不共享代碼。不共享或者只共享少量的數(shù)據(jù)。而對稱的程序設計模式比較適合于處理器任務較為單一,但運算量比較大的情況,更能發(fā)揮雙核在運算能力方面的優(yōu)勢。
基于上面的分析,選擇了對稱的程序設計模式,而且是基于運算量考慮的對稱模型,即兩個核各負責半幀圖像的壓縮,另外A核還負責系統(tǒng)初始化以及輸入/輸出中斷的響應,B核還負責時間字符的疊加以及時間計算等,這樣最大程度上平衡了兩個核的工作量。此外,在L2存儲器中定義了兩個核都需要的變量,以及控制雙核同步的信號量等。雙核協(xié)作工作的過程以及同步方式如圖3所示。本文引用地址:http://cafeforensic.com/article/151817.htm
評論