新聞中心

EEPW首頁 > 設(shè)計(jì)應(yīng)用 > 媒體處理框架在復(fù)雜應(yīng)用中的導(dǎo)向

媒體處理框架在復(fù)雜應(yīng)用中的導(dǎo)向

——
作者:美國模擬器件公司Blackfin應(yīng)用部 David Katz和Rick Gentile 時(shí)間:2007-04-23 來源:電子產(chǎn)品世界 收藏

  最近隨著高性能嵌入式媒體處理器走向?qū)嵱?,原來以個(gè)人計(jì)算機(jī)(PC)為中心的設(shè)計(jì)在許多應(yīng)用領(lǐng)域都將讓位于嵌入式解決方案。這就意味著軟件工程師需要將基于媒體的算法從存儲(chǔ)器資源“無限的”原型系統(tǒng)(例如PC或工作站)移植到中,必須進(jìn)行資源管理才能滿足最低的性能要求。這些工程師力爭在特定的應(yīng)用中獲得最高的性能,而且不增加他們習(xí)慣的編程模型的復(fù)雜度。考慮到這種情況,他們需要的就是一套編程“框架”,幫助他們克服多媒體處理的主要難題——例如,組織輸入和輸出緩沖數(shù)據(jù)流,智能地劃分存儲(chǔ)器,以及采用信號(hào)量來控制數(shù)據(jù)傳送。

數(shù)據(jù)傳送的物理過程

  了解系統(tǒng)中數(shù)據(jù)傳送的“物理過程”是所有項(xiàng)目開始的必需步驟。除了確定希望得到的吞吐量對(duì)于一個(gè)應(yīng)用是否剛好能行,實(shí)踐可以產(chǎn)生很大的性能儲(chǔ)備,而且無需很大量的初期投資。

  大多數(shù)媒體處理器都采用分級(jí)的存儲(chǔ)器體系結(jié)構(gòu),力圖在幾級(jí)具有不同尺寸和性能水準(zhǔn)的存儲(chǔ)器之間達(dá)到平衡。一般地,最靠近內(nèi)核處理器的存儲(chǔ)器(稱為一級(jí)或L1存儲(chǔ)器)以全時(shí)鐘速率工作,支持單周期內(nèi)的指令執(zhí)行。L1存儲(chǔ)器通常被劃分為指令段和數(shù)據(jù)段,目的是有效地利用存儲(chǔ)器的總線帶寬。這種存儲(chǔ)器通常配置為靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)或高速緩存。需要最快決定的應(yīng)用可以在單個(gè)內(nèi)核時(shí)鐘周期內(nèi)訪問芯片內(nèi)的SRAM。對(duì)于需要較大代碼尺寸的系統(tǒng),通常要用到附加的片內(nèi)L2存儲(chǔ)器,其訪問延時(shí)要高于L1,但還是比外部存儲(chǔ)器讀取要快得多.

  對(duì)于多媒體應(yīng)用,片內(nèi)存儲(chǔ)器往往不夠用于存儲(chǔ)完整的視頻幀,盡管這樣做對(duì)于高效處理來說是很理想的。因此,系統(tǒng)通常都必須依賴芯片外(“L3”)的動(dòng)態(tài)隨即存儲(chǔ)器(DRAM)來支持較快地訪問大的緩沖器。連接片外存儲(chǔ)器的處理器接口構(gòu)成了設(shè)計(jì)有效的媒體框架的一個(gè)主要因素,因?yàn)閷?duì)外部存儲(chǔ)器的訪問模式必需充分地考慮以便保證最理想的數(shù)據(jù)吞吐量。有幾種高水平的措施來保證數(shù)據(jù)能在任何系統(tǒng)的存儲(chǔ)器中平穩(wěn)地流動(dòng)。下面將討論其中的一些,而且它們?cè)诤竺嬗懻摰目蚣苤衅鸬搅岁P(guān)鍵的作用。

  1.在L1或L2中分段存儲(chǔ)L3緩存數(shù)據(jù)

  在片內(nèi)存儲(chǔ)器中緩存L3數(shù)據(jù)有幾個(gè)重要的作用。首先,處理器內(nèi)核訪問片內(nèi)緩沖器的延時(shí)要比訪問片外緩沖器低得多。這樣就直接地提高了系統(tǒng)性能。此外,在片內(nèi)存儲(chǔ)器中緩存L3數(shù)據(jù)允許更高效的外圍DMA(“直接存儲(chǔ)器存取”) 訪問這些數(shù)據(jù)。例如,快速地將一幀視頻從視頻端口傳送到L3存儲(chǔ)器中會(huì)造成這樣一種情況,其它的外圍設(shè)備可能被鎖定而無法訪問它們需要的數(shù)據(jù),因?yàn)橐曨l傳送是一個(gè)高優(yōu)先權(quán)的進(jìn)程。但是,通過將行增量從視頻端口傳送到L1或L2存儲(chǔ)器中,可以發(fā)起一次存儲(chǔ)器DMA流,這樣就會(huì)把視頻傳送當(dāng)成一個(gè)低優(yōu)先權(quán)的進(jìn)程悄悄地將這些數(shù)據(jù)傳送到L3,從而使系統(tǒng)外圍設(shè)備可以訪問它們需要的數(shù)據(jù)。

分組傳送以便減少存儲(chǔ)器總線轉(zhuǎn)向

  當(dāng)對(duì)外部存儲(chǔ)器的訪問在同一方向時(shí)(例如連續(xù)讀或連續(xù)寫),執(zhí)行的效率是最高的。例如,在訪問片外的同步存儲(chǔ)器時(shí),16次寫操作接著16次讀操作完成得往往比16次間插讀寫要快。這是因?yàn)閷懼蠼又x的話會(huì)產(chǎn)生延時(shí)。如果隨機(jī)訪問外部存儲(chǔ)器,“轉(zhuǎn)向”發(fā)生的概率是很高的。這中附加延時(shí)很可能使可用帶寬減半。因此,選擇一種可以對(duì)特定方向的傳送數(shù)量進(jìn)行控制的處理器是很重要的。通常,在系統(tǒng)活動(dòng)緩和時(shí)期采用最大的同向連續(xù)傳送數(shù)量是最佳的。但是,對(duì)于負(fù)荷最重的系統(tǒng)數(shù)據(jù)流,選擇一個(gè)中間值通常是最好,要保證不會(huì)有任何外圍設(shè)備被鎖定而無法訪問外部存儲(chǔ)器。

  采用DMA和(或)高速緩存往往有助于在這個(gè)方面提高性能,因?yàn)樵谶@類事務(wù)期間數(shù)據(jù)塊是同向傳送的。例如,一次DMA傳送通常包括一塊很大的數(shù)據(jù)緩沖區(qū),將其從一個(gè)位置移動(dòng)到另一個(gè)位置。類似地,一次高速緩存線的填充就是將一組連續(xù)存儲(chǔ)器位置的數(shù)據(jù)移進(jìn)或者移出設(shè)備。

  保證SDRAM的行打開并完成數(shù)據(jù)的多次傳遞

  每次訪問外部SDRAM都可能占用好幾個(gè)時(shí)鐘周期,尤其是當(dāng)所需的SDRAM行尚未激活時(shí)。行一旦被激活后,就有可能從一整行中讀取數(shù)據(jù),而不用每次訪問時(shí)都重新打開該行。換句話說,在每個(gè)時(shí)鐘周期訪問存儲(chǔ)器中的任何位置都是可能的,只要這些位置處于SDRAM的相同行中。

  應(yīng)用應(yīng)該利用SDRAM組的優(yōu)勢(shì),當(dāng)它們因?yàn)檫m當(dāng)?shù)胤胖昧藬?shù)據(jù)緩存并在任何可能的時(shí)候管理訪問而打開的時(shí)候。理想情況下,處理器應(yīng)該允許一次打開SDRAM的多行,以便縮短隨后對(duì)打開的存儲(chǔ)器組中相同行的訪問所需的建立時(shí)間(因此提高了吞吐率)。例如,在只打開一行的系統(tǒng)中,行激活延時(shí)會(huì)大大降低總性能。而另一方面,如果一次打開四行,行激活延時(shí)可以分?jǐn)偨o數(shù)百次訪問。

  關(guān)閉一行需要多個(gè)SDRAM時(shí)鐘周期,因此頻繁的行關(guān)閉會(huì)嚴(yán)重限制SDRAM的吞吐量。緩解這個(gè)問題的一種方法就是選擇一種具有很高的最大時(shí)鐘速率的SDRAM器件,并使處理器的外部總線時(shí)鐘運(yùn)行在頻率。

  優(yōu)化時(shí)鐘設(shè)置并保證刷新速率適合SDRAM運(yùn)行的速率
SDRAM需要周期性的刷新以保證存儲(chǔ)器中的數(shù)據(jù)保持其本征值。內(nèi)核處理器或DMA引擎的訪問在一個(gè)內(nèi)部刷新周期結(jié)束之前是被禁止的。如果刷新得太頻繁,對(duì)SDRAM的實(shí)際訪問次數(shù)就會(huì)減少,SDRAM吞吐量也會(huì)降低。

構(gòu)建一種框架的策略

  在腦中有了上述概念,下面我們來分析三類多媒體框架。雖然它們只代表了所有可能的策略中的一小部分,但是它們提供了最常見的源管理情況的優(yōu)良實(shí)例。為了說明問題,我們將采用以視頻為中心的系統(tǒng)來說明這幾種情況,因?yàn)樗鼈儼ㄔ趦?nèi)部和外部存儲(chǔ)器之間傳送大量的數(shù)據(jù),以及將原始數(shù)據(jù)轉(zhuǎn)移進(jìn)系統(tǒng)并將處理過的數(shù)據(jù)移出系統(tǒng):

  1.不能容忍延時(shí)的安全系統(tǒng)
  2.性能優(yōu)先于編程難度的處理量大型應(yīng)用
  3.編程難度優(yōu)先于性能的系統(tǒng)(換句話說,程序員有規(guī)定的期限!)
     
最低延時(shí)

  這種情況力爭在輸入數(shù)據(jù)和輸出結(jié)果之間取得絕對(duì)最低的延時(shí)。例如,假設(shè)一個(gè)基于照相機(jī)的汽車防撞系統(tǒng),力圖通過快速估計(jì)視野內(nèi)連續(xù)視頻幀以便將碰撞發(fā)生的可能減至最低。因?yàn)橐曨l幀需要極大的存儲(chǔ)容量(僅僅一幀NTSC電視圖像就需要差不多700 KB的存儲(chǔ)器),它們通常都需要外部存儲(chǔ)器來存儲(chǔ),因?yàn)樘幚砥骱苌贂?huì)有足夠的片內(nèi)存儲(chǔ)器來存哪怕是一幀的數(shù)據(jù)。但是如果防撞系統(tǒng)必須等到一幀完整的路面圖像進(jìn)入存儲(chǔ)器之后才開始處理輸入數(shù)據(jù)的話,就會(huì)損失33 ms的寶貴時(shí)間(假設(shè)幀率為30 Hz)。

  為了保證最低的延時(shí),視頻數(shù)據(jù)可以送入片內(nèi)的L1或L2存儲(chǔ)器然后按照逐行的原則進(jìn)行處理,從而實(shí)現(xiàn)快速計(jì)算,更快地得到結(jié)果。如果算法一次只能處理很少的幾行,幀緩存器需求就很容易滿足。NTSC視頻的幾行數(shù)據(jù)很容易進(jìn)入L2存儲(chǔ)器,因?yàn)長2存儲(chǔ)器比片外的DRAM更接近內(nèi)核處理器,這也可以顯著地提高性能。

  在這種框架中,處理器內(nèi)核可以直接訪問L2存儲(chǔ)器中的視頻數(shù)據(jù)。采用這種方式,編程模型與一般的基于PC的模型是相符的。為了保證數(shù)據(jù)的完整性,軟件必須確保在當(dāng)前幀處理完畢之前活動(dòng)視頻幀緩存器不會(huì)被新的數(shù)據(jù)覆蓋。通過一種信號(hào)量機(jī)制,這是很容易控制的。在防撞系統(tǒng)中,每幀的處理結(jié)果都是一個(gè)判定――是否將有碰撞發(fā)生?因此,在這種情況下,就沒有需要防止被覆蓋的輸出視頻緩沖器。

性能優(yōu)先于編程模型

  這種情況通常注重算法,限制了目標(biāo)處理器。一般地,開發(fā)工程師會(huì)設(shè)法讓處理器“正好符合”其預(yù)期應(yīng)用,所以他們不會(huì)把成本花在能力過剩的器件上。因此,這種“高效帶寬”框架集中在取得最高的性能,其代價(jià)就是可能增加編程復(fù)雜度。對(duì)于這種情況,系統(tǒng)實(shí)現(xiàn)可能會(huì)花較長的時(shí)間,集成的難度要高一些,但是以低成本器件來設(shè)計(jì)帶來的長期成本節(jié)省可能將證明額外的開發(fā)時(shí)間是合理的。在開發(fā)周期中的早期投入更多時(shí)間的原因就是數(shù)據(jù)流程的每一個(gè)方面都需要仔細(xì)地規(guī)劃。當(dāng)最終的數(shù)據(jù)流程構(gòu)建好以后,就很難再重用了,因?yàn)橐ㄟ^手工完成框架來滿足特定的解決方案。

  這里和前面的例子一樣,視頻數(shù)據(jù)行也可以送入L2存儲(chǔ)器,內(nèi)核可以根據(jù)需要直接訪問它們用于預(yù)處理,延時(shí)比訪問片外存儲(chǔ)器要低。雖然這是一個(gè)很重要的側(cè)面優(yōu)勢(shì),但是這里采用L2存儲(chǔ)器的目的是緩存幾行的數(shù)據(jù)以便在相同方向進(jìn)行成組的傳送,以此提高外部存儲(chǔ)器的總線性能。

編程難度優(yōu)先于性能

  第三種框架完全集中于獲得最簡單的編程模型,而可能付出一些性能代價(jià)。在這種情況下,面市時(shí)間通常是最重要的因素。它可能會(huì)造成器件超過規(guī)定的技術(shù)指標(biāo),這樣一定會(huì)因?yàn)闆]有優(yōu)化的編碼造成大量空間的低效率。實(shí)際上,這種策略也提供了一種可升級(jí)的平臺(tái),因?yàn)橐坏┯锌赡芗袃?yōu)化應(yīng)用代碼時(shí),處理器的帶寬最終可以被釋放出來。

  任何一次處理多行數(shù)據(jù)并且不涉及壓縮和解壓縮的視頻算法,都很適合采用這種框架。考慮一幅5



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉