媒體處理框架在復雜應用中的導向
最近隨著高性能嵌入式媒體處理器走向實用,原來以個人計算機(PC)為中心的設計在許多應用領域都將讓位于嵌入式解決方案。這就意味著軟件工程師需要將基于媒體的算法從存儲器資源“無限的”原型系統(例如PC或工作站)移植到嵌入式系統中,嵌入式系統必須進行資源管理才能滿足最低的性能要求。這些工程師力爭在特定的應用中獲得最高的性能,而且不增加他們習慣的編程模型的復雜度。考慮到這種情況,他們需要的就是一套編程“框架”,幫助他們克服多媒體處理的主要難題——例如,組織輸入和輸出緩沖數據流,智能地劃分存儲器,以及采用信號量來控制數據傳送。
數據傳送的物理過程
了解系統中數據傳送的“物理過程”是所有項目開始的必需步驟。除了確定希望得到的吞吐量對于一個應用是否剛好能行,實踐可以產生很大的性能儲備,而且無需很大量的初期投資。
大多數媒體處理器都采用分級的存儲器體系結構,力圖在幾級具有不同尺寸和性能水準的存儲器之間達到平衡。一般地,最靠近內核處理器的存儲器(稱為一級或L1存儲器)以全時鐘速率工作,支持單周期內的指令執行。L1存儲器通常被劃分為指令段和數據段,目的是有效地利用存儲器的總線帶寬。這種存儲器通常配置為靜態隨機存儲器(SRAM)或高速緩存。需要最快決定的應用可以在單個內核時鐘周期內訪問芯片內的SRAM。對于需要較大代碼尺寸的系統,通常要用到附加的片內L2存儲器,其訪問延時要高于L1,但還是比外部存儲器讀取要快得多.
對于多媒體應用,片內存儲器往往不夠用于存儲完整的視頻幀,盡管這樣做對于高效處理來說是很理想的。因此,系統通常都必須依賴芯片外(“L3”)的動態隨即存儲器(DRAM)來支持較快地訪問大的緩沖器。連接片外存儲器的處理器接口構成了設計有效的媒體框架的一個主要因素,因為對外部存儲器的訪問模式必需充分地考慮以便保證最理想的數據吞吐量。有幾種高水平的措施來保證數據能在任何系統的存儲器中平穩地流動。下面將討論其中的一些,而且它們在后面討論的框架中起到了關鍵的作用。
1.在L1或L2中分段存儲L3緩存數據
在片內存儲器中緩存L3數據有幾個重要的作用。首先,處理器內核訪問片內緩沖器的延時要比訪問片外緩沖器低得多。這樣就直接地提高了系統性能。此外,在片內存儲器中緩存L3數據允許更高效的外圍DMA(“直接存儲器存取”) 訪問這些數據。例如,快速地將一幀視頻從視頻端口傳送到L3存儲器中會造成這樣一種情況,其它的外圍設備可能被鎖定而無法訪問它們需要的數據,因為視頻傳送是一個高優先權的進程。但是,通過將行增量從視頻端口傳送到L1或L2存儲器中,可以發起一次存儲器DMA流,這樣就會把視頻傳送當成一個低優先權的進程悄悄地將這些數據傳送到L3,從而使系統外圍設備可以訪問它們需要的數據。
分組傳送以便減少存儲器總線轉向
當對外部存儲器的訪問在同一方向時(例如連續讀或連續寫),執行的效率是最高的。例如,在訪問片外的同步存儲器時,16次寫操作接著16次讀操作完成得往往比16次間插讀寫要快。這是因為寫之后接著讀的話會產生延時。如果隨機訪問外部存儲器,“轉向”發生的概率是很高的。這中附加延時很可能使可用帶寬減半。因此,選擇一種可以對特定方向的傳送數量進行控制的處理器是很重要的。通常,在系統活動緩和時期采用最大的同向連續傳送數量是最佳的。但是,對于負荷最重的系統數據流,選擇一個中間值通常是最好,要保證不會有任何外圍設備被鎖定而無法訪問外部存儲器。
采用DMA和(或)高速緩存往往有助于在這個方面提高性能,因為在這類事務期間數據塊是同向傳送的。例如,一次DMA傳送通常包括一塊很大的數據緩沖區,將其從一個位置移動到另一個位置。類似地,一次高速緩存線的填充就是將一組連續存儲器位置的數據移進或者移出設備。
保證SDRAM的行打開并完成數據的多次傳遞
每次訪問外部SDRAM都可能占用好幾個時鐘周期,尤其是當所需的SDRAM行尚未激活時。行一旦被激活后,就有可能從一整行中讀取數據,而不用每次訪問時都重新打開該行。換句話說,在每個時鐘周期訪問存儲器中的任何位置都是可能的,只要這些位置處于SDRAM的相同行中。
應用應該利用SDRAM組的優勢,當它們因為適當地放置了數據緩存并在任何可能的時候管理訪問而打開的時候。理想情況下,處理器應該允許一次打開SDRAM的多行,以便縮短隨后對打開的存儲器組中相同行的訪問所需的建立時間(因此提高了吞吐率)。例如,在只打開一行的系統中,行激活延時會大大降低總性能。而另一方面,如果一次打開四行,行激活延時可以分攤給數百次訪問。
關閉一行需要多個SDRAM時鐘周期,因此頻繁的行關閉會嚴重限制SDRAM的吞吐量。緩解這個問題的一種方法就是選擇一種具有很高的最大時鐘速率的SDRAM器件,并使處理器的外部總線時鐘運行在頻率。
優化時鐘設置并保證刷新速率適合SDRAM運行的速率
SDRAM需要周期性的刷新以保證存儲器中的數據保持其本征值。內核處理器或DMA引擎的訪問在一個內部刷新周期結束之前是被禁止的。如果刷新得太頻繁,對SDRAM的實際訪問次數就會減少,SDRAM吞吐量也會降低。
構建一種框架的策略
在腦中有了上述概念,下面我們來分析三類多媒體框架。雖然它們只代表了所有可能的策略中的一小部分,但是它們提供了最常見的源管理情況的優良實例。為了說明問題,我們將采用以視頻為中心的系統來說明這幾種情況,因為它們包括在內部和外部存儲器之間傳送大量的數據,以及將原始數據轉移進系統并將處理過的數據移出系統:
1.不能容忍延時的安全系統
2.性能優先于編程難度的處理量大型應用
3.編程難度優先于性能的系統(換句話說,程序員有規定的期限!)
最低延時
這種情況力爭在輸入數據和輸出結果之間取得絕對最低的延時。例如,假設一個基于照相機的汽車防撞系統,力圖通過快速估計視野內連續視頻幀以便將碰撞發生的可能減至最低。因為視頻幀需要極大的存儲容量(僅僅一幀NTSC電視圖像就需要差不多700 KB的存儲器),它們通常都需要外部存儲器來存儲,因為處理器很少會有足夠的片內存儲器來存哪怕是一幀的數據。但是如果防撞系統必須等到一幀完整的路面圖像進入存儲器之后才開始處理輸入數據的話,就會損失33 ms的寶貴時間(假設幀率為30 Hz)。
為了保證最低的延時,視頻數據可以送入片內的L1或L2存儲器然后按照逐行的原則進行處理,從而實現快速計算,更快地得到結果。如果算法一次只能處理很少的幾行,幀緩存器需求就很容易滿足。NTSC視頻的幾行數據很容易進入L2存儲器,因為L2存儲器比片外的DRAM更接近內核處理器,這也可以顯著地提高性能。
在這種框架中,處理器內核可以直接訪問L2存儲器中的視頻數據。采用這種方式,編程模型與一般的基于PC的模型是相符的。為了保證數據的完整性,軟件必須確保在當前幀處理完畢之前活動視頻幀緩存器不會被新的數據覆蓋。通過一種信號量機制,這是很容易控制的。在防撞系統中,每幀的處理結果都是一個判定――是否將有碰撞發生?因此,在這種情況下,就沒有需要防止被覆蓋的輸出視頻緩沖器。
性能優先于編程模型
這種情況通常注重算法,限制了目標處理器。一般地,開發工程師會設法讓處理器“正好符合”其預期應用,所以他們不會把成本花在能力過剩的器件上。因此,這種“高效帶寬”框架集中在取得最高的性能,其代價就是可能增加編程復雜度。對于這種情況,系統實現可能會花較長的時間,集成的難度要高一些,但是以低成本器件來設計帶來的長期成本節省可能將證明額外的開發時間是合理的。在開發周期中的早期投入更多時間的原因就是數據流程的每一個方面都需要仔細地規劃。當最終的數據流程構建好以后,就很難再重用了,因為要通過手工完成框架來滿足特定的解決方案。
這里和前面的例子一樣,視頻數據行也可以送入L2存儲器,內核可以根據需要直接訪問它們用于預處理,延時比訪問片外存儲器要低。雖然這是一個很重要的側面優勢,但是這里采用L2存儲器的目的是緩存幾行的數據以便在相同方向進行成組的傳送,以此提高外部存儲器的總線性能。
編程難度優先于性能
第三種框架完全集中于獲得最簡單的編程模型,而可能付出一些性能代價。在這種情況下,面市時間通常是最重要的因素。它可能會造成器件超過規定的技術指標,這樣一定會因為沒有優化的編碼造成大量空間的低效率。實際上,這種策略也提供了一種可升級的平臺,因為一旦有可能集中優化應用代碼時,處理器的帶寬最終可以被釋放出來。
任何一次處理多行數據并且不涉及壓縮和解壓縮的視頻算法,都很適合采用這種框架。考慮一幅5
評論