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