關(guān)于嵌入式多媒體應(yīng)用中的片上存儲(chǔ)器分配
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言 隨著cpu速度的迅速提高,cpu與片外存儲(chǔ)器的速度差異越來(lái)越大,匹配cpu與外部存儲(chǔ)器的方法通常是采用cache或者片上存儲(chǔ)器。微處理器中片上存儲(chǔ)器結(jié)構(gòu)通常包含指令cache ,數(shù)據(jù)cache 或者片上存儲(chǔ)器。對(duì)于嵌入式設(shè)備上的數(shù)據(jù)密集的應(yīng)用,數(shù)據(jù)cache 與片上存儲(chǔ)器相比存在以下缺陷:(1) 片上存儲(chǔ)器是固定的單周期訪問,可在設(shè)計(jì)時(shí)而不是運(yùn)行時(shí)研究數(shù)據(jù)訪問模式;而cache還要考慮擊不中的情況,因而有可變的數(shù)據(jù)訪問時(shí)間,執(zhí)行時(shí)間的預(yù)測(cè)更加困難。(2) 使用cache 執(zhí)行時(shí)間的不可預(yù)測(cè)性影響編譯器的優(yōu)化;(3) 細(xì)顆粒的cache 對(duì)于圖像編碼等的規(guī)則數(shù)據(jù)訪問并不合適,因而使用cache 對(duì)于嵌入式設(shè)備可能不是最優(yōu)的。文指出,對(duì)于大多數(shù)應(yīng)用,使用片上存儲(chǔ)器比使用數(shù)據(jù)cache能量平均大約節(jié)省40 % ,芯片面積與時(shí)間的乘積僅為cache的46%。因而對(duì)于嵌入式多媒體處理器,片上ram作為數(shù)據(jù)cache的替代,功耗更低。片上存儲(chǔ)器的有效使用對(duì)于提高嵌入式應(yīng)用的速度,降低功耗具有重要的意義。 文討論了在同時(shí)具有數(shù)據(jù)cache和片上sram的處理器上標(biāo)量和矩陣變量的存儲(chǔ)器分配方法。文以摩托羅拉公司的dsp56000為平臺(tái),文以ams gepard dsp為平臺(tái),分別討論了如何把數(shù)據(jù)分配到x/y數(shù)據(jù)存儲(chǔ)器塊,以便最大限度地利用數(shù)據(jù)移動(dòng)的并行性。dsp56000片上x、y數(shù)據(jù)存儲(chǔ)器都是單端口的,并且容量較小。與dsp56000不同,ti公司的tms320c55x具有更多的數(shù)據(jù)總線,片上ram容量更大,且分塊多,具有訪問能力更強(qiáng)的daram。 tms320c55x具有極低的功耗(0.05mw/mips) ,非常適合手持設(shè)備,現(xiàn)在已經(jīng)集成至ti 公司專門針對(duì)3g手機(jī)的高性能多媒體處理器上。c55x 片上除了24k字節(jié)的指令cache外,還有64k字節(jié)的雙端口存儲(chǔ)器(daram),96k字節(jié)的單端口存儲(chǔ)器(saram)。daram和saram總共160k字節(jié),分成20個(gè)塊,每個(gè)塊8k字節(jié)。本文以c55x的視頻編碼器為例,討論片上存儲(chǔ)器的有效使用。 數(shù)據(jù)的片外、片上動(dòng)態(tài)分配 因?yàn)槠洗鎯?chǔ)器比片外存儲(chǔ)器具有更高的數(shù)據(jù)訪問能力和更小的訪問功耗,所以盡可能分配數(shù)據(jù)到片上存儲(chǔ)器,未能分配到片上的數(shù)據(jù)可在cpu處理前轉(zhuǎn)移到片上,已經(jīng)轉(zhuǎn)移到片上的數(shù)據(jù),應(yīng)盡可能在片上保存直到其生命期結(jié)束,以便盡可能減少數(shù)據(jù)從片外存儲(chǔ)器到片上存儲(chǔ)器的數(shù)據(jù)轉(zhuǎn)移。在視頻編碼等應(yīng)用中,標(biāo)量、常數(shù)相對(duì)于矩陣而言,通常數(shù)量較少,可以分配到片上;若分配到片外,在運(yùn)算時(shí)直接存取片外數(shù)據(jù),cpu流水線將會(huì)停滯。直接存儲(chǔ)器存取(dma)可以在存儲(chǔ)器之間,存儲(chǔ)器與外設(shè)之間轉(zhuǎn)移數(shù)據(jù),除了dma通道參數(shù)初始化以外,dma轉(zhuǎn)移數(shù)據(jù)和cpu處理數(shù)據(jù)可以并行進(jìn)行。設(shè)置dma通道參數(shù)需要一定的時(shí)間,采用dma來(lái)轉(zhuǎn)移單個(gè)變量或常數(shù)的開銷可能比直接存取更大,因此dma適合轉(zhuǎn)移具有較多數(shù)據(jù)的矩陣,并不適合片外標(biāo)量的轉(zhuǎn)移。包含大量元素的矩陣可以分配到片外,處理前使用dma轉(zhuǎn)移到片上存儲(chǔ)器。 局部變量由編譯器分配到軟件棧上,c55x具有兩個(gè)軟件棧:數(shù)據(jù)棧和系統(tǒng)棧。c55x的棧有三種工作模式,可設(shè)置成雙16比特快返回模式,以減少棧所占的存儲(chǔ)器空間,并提高其運(yùn)行速度。數(shù)據(jù)棧和系統(tǒng)棧在函數(shù)調(diào)用及返回時(shí)同時(shí)訪問,可將這兩個(gè)棧分配到daram塊或者不同的saram塊內(nèi)。 本文中數(shù)據(jù)存儲(chǔ)器的分配,強(qiáng)調(diào)從實(shí)際多媒體應(yīng)用處理的基本數(shù)據(jù)塊出發(fā),分析簡(jiǎn)單直觀。多媒體算法總是將原始輸入數(shù)據(jù)分成一定大小的塊進(jìn)行處理,并產(chǎn)生對(duì)應(yīng)該輸入的最后輸出。如果片上沒有足夠的存儲(chǔ)器,大量的輸入數(shù)據(jù)和最后結(jié)果僅能可存儲(chǔ)在片外。對(duì)于元素較多的矩陣,可以根據(jù)算法特征將矩陣分成若干數(shù)據(jù)子塊,如h.263編碼器中的宏塊,搜索窗等,或者單純根據(jù)可得到的片上存儲(chǔ)器數(shù)量分成適當(dāng)大小的子塊逐個(gè)運(yùn)算,然后分析數(shù)據(jù)子塊的生命期和使用頻率。我們定義數(shù)據(jù)子塊的生命期為首次使用到最后一次使用之間的間隔,而通常變量的生命期為定義到最后使用之間的間隔,例如定義整型數(shù)組int mb[384],用來(lái)存儲(chǔ)待編碼宏塊的數(shù)據(jù),圖像的某個(gè)宏塊的數(shù)據(jù)在該宏塊編碼結(jié)束后,該宏塊數(shù)據(jù)的生命期也就結(jié)束,然后該數(shù)組用來(lái)存儲(chǔ)下一宏塊的數(shù)據(jù),因而變量的生命期遠(yuǎn)比存儲(chǔ)在該變量中的某一具體數(shù)據(jù)生命期要長(zhǎng)。若數(shù)據(jù)子塊具有不相交的生命期,則可以共享相同的片上存儲(chǔ)器?! 『芏鄶?shù)據(jù)子塊在運(yùn)算中多次使用,可在首次運(yùn)算前轉(zhuǎn)移到片上,并盡可能保存到生命期結(jié)束,即直到這些數(shù)據(jù)不再使用為止,因而這些數(shù)據(jù)僅需要一次轉(zhuǎn)移。將程序執(zhí)行時(shí)間看成是由很多連續(xù)的時(shí)間間隔組成的,若在下個(gè)時(shí)間間隔內(nèi)需要轉(zhuǎn)移新的數(shù)據(jù)到片上供cpu處理,而片上又沒有足夠的存儲(chǔ)器存儲(chǔ)這些數(shù)據(jù),這時(shí)將隨后需要連續(xù)頻繁使用的數(shù)據(jù)保留到片上;對(duì)于隨后較少使用的數(shù)據(jù),若片外存儲(chǔ)器還保存有該數(shù)據(jù)的備份,這些數(shù)據(jù)可直接覆蓋,等到下次使用時(shí)再?gòu)钠獯鎯?chǔ)器拷貝到片上;否則,在覆蓋前將數(shù)據(jù)轉(zhuǎn)移到片外。在片上分配一定的緩沖區(qū),用來(lái)存儲(chǔ)需要再次使用