嵌入式多媒體系統(tǒng)的優(yōu)化權(quán)衡
隨著嵌入式多媒體應(yīng)用的不斷發(fā)展,系統(tǒng)控制和信號處理之間的交互性不斷增強(qiáng)。最新的嵌入式多媒體處理器已能夠同時處理MCU和DSP的任務(wù),從而將那些熟悉用MCU方式進(jìn)行應(yīng)用開發(fā)的C程序員帶入了一個新的領(lǐng)域。其中對代碼和數(shù)據(jù)流的智能管理會顯著提高系統(tǒng)的性能。然而,對多媒體處理器的高性能直接內(nèi)存訪問(DMA)能力應(yīng)認(rèn)真地考慮,懂得在這些應(yīng)用中對使用高速緩存和DMA進(jìn)行權(quán)衡將有助于更好地理解為優(yōu)化系統(tǒng)如何編程。
本文引用地址:http://m.butianyuan.cn/article/4545.htm存儲器結(jié)構(gòu)
——對存儲器管理的要求
媒體處理器通過分級的存儲器結(jié)構(gòu),來平衡幾種不同容量和性能等級的存儲器。離核心處理器最近的存儲器(L1存儲器)通常支持單時鐘周期指令的運(yùn)行,以全時鐘速率工作。為了高效地利用存儲器總線的帶寬,L1存儲器一般分為指令段和數(shù)據(jù)段,被配置成SRAM或高速緩存。對于那些權(quán)限最高的應(yīng)用,在一個單時鐘周期內(nèi)就能夠訪問片內(nèi)SRAM。對于要求較長代碼的系統(tǒng),則可以提供附加的片內(nèi)和片外存儲器——這會增加等待時間。
這種層次結(jié)構(gòu)本身作用有限,為了適應(yīng)僅配合低速外部存儲器的大部分應(yīng)用,高速處理器通常不得不以很低的速度降級使用。這時為了提高性能,程序員可以人工地選擇將關(guān)鍵代碼移入或移出內(nèi)部SRAM。另外,還可以通過將數(shù)據(jù)高速緩存和指令高速緩存加入進(jìn)這種結(jié)構(gòu),從而使程序員能夠更方便地人工管理外部存儲器。由于高速緩存減少了將指令和數(shù)據(jù)流送入處理器內(nèi)核的人工管理,從而極大地簡化了編程模式。
指令存儲器管理
——高速緩存還是DMA
對嵌入式媒體處理器市場的調(diào)查表明,核心處理器的速度不低于600 MHz。盡管這種性能可以開辟許多新應(yīng)用,但只有在從內(nèi)部L1存儲器中讀取代碼時才能達(dá)到這種最高速度。當(dāng)然,理想嵌入式處理器可以具有無限容量的L1存儲器,但這不切實(shí)際。因此,程序員在為其實(shí)際系統(tǒng)優(yōu)化存儲器和數(shù)據(jù)流時,必須考慮幾種可選方案以充分利用置于處理器內(nèi)的L1存儲器。
第一種方案是目標(biāo)應(yīng)用代碼可以完全放入L1指令存儲器。對于這種情況,程序員只需將應(yīng)用代碼直接映射到該存儲器空間,而無需特殊操作。這就是為什么包含MCU和DSP兩種功能的媒體處理器必然在這種體系架構(gòu)支持的代碼密度方面具有獨(dú)特優(yōu)勢的原因。
第二種方案是采用一種高速緩存機(jī)構(gòu)允許程序員訪問更大容量、較低成本的外部存儲器。這種方法的主要優(yōu)點(diǎn)是程序員無需管理代碼移入和移出高速緩存。當(dāng)執(zhí)行線性代碼時,能達(dá)到最好的效果;但當(dāng)執(zhí)行非線性代碼時,高速緩存線可能會因替換頻繁,而導(dǎo)致實(shí)時性能變差。
指令高速緩存實(shí)際上具有兩個作用。第一,它以更有效率的方式從外部存儲器中預(yù)取指令。第二,由于高速緩存一般使用某種“最近使用的指令”的算法,所以那些使用最頻繁的指令往往被保持在高速緩存中。這樣做很有好處,因?yàn)榇嬖贚1高速緩存中的指令能夠在一個單時鐘周期內(nèi)完成。
大多數(shù)嚴(yán)格的實(shí)時程序員一般不相信這種高速緩存能帶來最佳的系統(tǒng)性能。理由是如果一系列指令在需要執(zhí)行時卻沒有在高速緩存內(nèi),將導(dǎo)致性能下降。采用高速緩存鎖定機(jī)制能彌補(bǔ)這一問題,一旦將關(guān)鍵的指令裝入高速緩存,高速緩存線就被鎖住,因此指令不會被覆蓋。這樣,程序員就能夠在高速緩存中保持他們所需的指令,而使該高速緩存機(jī)制來管理次要指令。
最后一種方案是通過使用一個獨(dú)立于處理器內(nèi)核的DMA通道將代碼移入或移出L1存儲器。當(dāng)處理器內(nèi)核在存儲器的一個存儲塊運(yùn)行時,該DMA將代碼送入下一個存儲塊去執(zhí)行。這種方案通常被稱為一種覆蓋技術(shù)。
雖然通過DMA將覆蓋代碼送入L1指令存儲器可以比高速緩存方式提供更多的關(guān)鍵指令,但程序員需要預(yù)先安排一種覆蓋代碼的方法和恰當(dāng)?shù)嘏渲肈MA通道,這會顯著增加程序員的工作量。
數(shù)據(jù)存儲器管理
嵌入式媒體處理器的數(shù)據(jù)存儲器結(jié)構(gòu)對于整個系統(tǒng)性能的重要性等同于指令時鐘速度的重要性。因?yàn)樵诙嗝襟w應(yīng)用中經(jīng)常會有多個數(shù)據(jù)傳送任務(wù)同時進(jìn)行,所以其總線結(jié)構(gòu)必須支持內(nèi)核和DMA對所有外部和內(nèi)部存儲器塊的訪問。對DMA控制器和內(nèi)核之間的沖突進(jìn)行自動處理時,首先要求在內(nèi)核與DMA之間建立DMA控制器,然后當(dāng)要進(jìn)行處理的數(shù)據(jù)已經(jīng)準(zhǔn)備好時,響應(yīng)中斷。
處理器的一項(xiàng)基本功能是執(zhí)行數(shù)據(jù)讀取操作。雖然這通常是傳送數(shù)據(jù)效率最低的機(jī)制,但卻是最簡單的編程方式。小容量、快速方便的存儲器有時可以用來作為L1數(shù)據(jù)存儲器的一部分,但對于較大容量的片外緩沖器,如果內(nèi)核要從外部存儲器讀取所有數(shù)據(jù),那么訪問時間就會太長。所以在多媒體和其它存在大量數(shù)據(jù)操作的應(yīng)用中,要不斷地將大量數(shù)據(jù)存儲移入或移出SDRAM,雖然內(nèi)核的讀取數(shù)據(jù)操作總是需要的,但為了維持性能,必須要使用DMA或高速緩存來傳送大量的數(shù)據(jù)。
使用DMA管理數(shù)據(jù)
為了在多媒體系統(tǒng)中有效地利用DMA,應(yīng)該有足夠多的DMA通道以充分支持處理器的外圍電路,從而達(dá)到在存儲器與DMA之間可以同時傳送一對以上的數(shù)據(jù)流,這一點(diǎn)非常重要。同時,隨著數(shù)據(jù)傳輸速率和性能要求的提高,設(shè)計(jì)工程師能隨意對“系統(tǒng)性能調(diào)節(jié)”進(jìn)行控制也變得非常關(guān)鍵。例如,通過優(yōu)化DMA控制器使每個時鐘周期都可傳送一個數(shù)據(jù)字。當(dāng)向同一方向同時傳送多個數(shù)據(jù)流時,這通常是最有效的操縱控制器的方式,因?yàn)檫@種方法可以防止DMA總線有空閑時間。
但是當(dāng)傳送多個雙向視頻和音頻數(shù)據(jù)流時,就必須使用“業(yè)務(wù)量控制”,以防止一個數(shù)據(jù)流獨(dú)占總線。例如,如果DMA控制器總是把DMA總線連接到任何一個準(zhǔn)備每次傳送一個數(shù)據(jù)字的外圍電路,那么總的數(shù)據(jù)吞吐率就會降低。在這種情況下,幾乎每個時鐘周期的數(shù)據(jù)傳送都改變一次方向,因此在SDRAM總線上與來回切換時間相關(guān)的等待時間將顯著降低吞吐率。此時,具有一個通道可編程傳送數(shù)據(jù)字長度的DMA控制器比那種具有固定傳送長度的控制器有明顯的優(yōu)勢。因?yàn)槊總€DMA通道都可以將一個外圍設(shè)備與外部或內(nèi)部存儲器相連。
DMA控制器的另一個特性是二維DMA性能。首先,這種性能允許以一種比較直觀的處理順序?qū)?shù)據(jù)放入存儲器。其次,二維DMA的交錯和去交錯功能在處理視頻和圖像數(shù)據(jù)之前能減少存儲器總線的傳送時間。另外,通過有選擇性地進(jìn)行數(shù)據(jù)傳送,即只選擇需要的輸入圖像數(shù)據(jù)塊而不是全部圖像的數(shù)據(jù),二維DMA還能夠使系統(tǒng)的數(shù)據(jù)帶寬降低到最小。
其它的DMA控制器特性還包括為滿足當(dāng)前的外圍設(shè)備任務(wù)請求,區(qū)分DMA通道優(yōu)先級的能力,以及為匹配這些優(yōu)先級設(shè)置相應(yīng)的DMA中斷的能力。這些功能有助于確保數(shù)據(jù)緩沖器不會因DMA忙于其它外圍設(shè)備而溢出,并且還使程序設(shè)計(jì)工程師在每個DMA通道的數(shù)據(jù)流通基礎(chǔ)上優(yōu)化整個系統(tǒng)性能時具有更大的自由度。
由于內(nèi)部存儲器通常分為幾個子存儲塊,所以DMA控制器和內(nèi)核同時訪問時將會通過把數(shù)據(jù)存放在不同子存儲塊中而使整個操作在一個單時鐘周期內(nèi)完成。
數(shù)據(jù)高速緩存
DMA控制器的靈活性是一把雙刃劍。當(dāng)在兩個處理器之間讀取一個大的C/C++應(yīng)用程序時,程序員有時不愿意將DMA功能整合到已有工作代碼中,這時,往往是將數(shù)據(jù)通過高速緩存直接送入L1存儲器以便最快處理。這種數(shù)據(jù)高速緩存的作用像一個小DMA一樣,但涉及到程序員的工作量卻大大減少。
由于高速緩存具有線填充特性,所以高速緩存不只存儲當(dāng)前正在被處理的數(shù)據(jù),它還向與當(dāng)前相鄰的數(shù)據(jù)塊內(nèi)預(yù)取數(shù)據(jù)。這在對連續(xù)數(shù)據(jù)存放塊進(jìn)行操作時非常有用。這是因?yàn)閷τ诙嗝襟w圖象、音頻和視頻流,這是一個合理的假設(shè)。
但是,由于數(shù)據(jù)緩沖器通常來自外圍電路,所以對數(shù)據(jù)高速緩存的操作并不總象對指令高速緩存的操作那樣容易。這是因?yàn)楸仨氃诜恰氨O(jiān)聽”的高速緩存中人工控制一致性。因此在使用這些高速緩存準(zhǔn)備對新數(shù)據(jù)進(jìn)行任何讀取之前都必須使該數(shù)據(jù)緩沖器無效。
結(jié)語
總之,在一個具體的多媒體系統(tǒng)中對指令和數(shù)據(jù)傳送的最佳機(jī)制的選擇應(yīng)該是高速緩存還是DMA沒有一種簡單的答案。但大至如圖1所示。一旦開發(fā)工程師了解到這其中需要考慮權(quán)衡的,就能通過以上分析達(dá)到一種“折衷”的狀態(tài),從而使系統(tǒng)的整體性能達(dá)到最優(yōu)?!?br/>
評論