<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式多媒體應用中的片上存儲器分配

嵌入式多媒體應用中的片上存儲器分配

作者: 時(shí)間:2012-04-20 來(lái)源:網(wǎng)絡(luò ) 收藏

引 言

本文引用地址:http://dyxdggzs.com/article/171583.htm

隨著(zhù)CPU速度的迅速提高,CPU與片外的速度差異越來(lái)越大,匹配CPU與外部的方法通常是采用Cache或者片上。微處理器中片上存儲器結構通常包含指令Cache ,數據Cache 或者片上存儲器。對于設備上的數據密集的,數據Cache 與片上存儲器相比存在以下缺陷:(1) 片上存儲器是固定的單周期訪(fǎng)問(wèn),可在設計時(shí)而不是運行時(shí)研究數據訪(fǎng)問(wèn)模式;而Cache還要考慮擊不中的情況,因而有可變的數據訪(fǎng)問(wèn)時(shí)間,執行時(shí)間的預測更加困難。(2) 使用Cache 執行時(shí)間的不可預測性影響編譯器的優(yōu)化;(3) 細顆粒的Cache 對于圖像編碼等的規則數據訪(fǎng)問(wèn)并不合適,因而使用Cache 對于設備可能不是最優(yōu)的。文指出,對于大多數,使用片上存儲器比使用數據Cache能量平均大約節省40 % ,芯片面積與時(shí)間的乘積僅為Cache的46%。因而對于處理器,片上RAM作為數據Cache的替代,功耗更低。片上存儲器的有效使用對于提高嵌入式的速度,降低功耗具有重要的意義。

文討論了在同時(shí)具有數據Cache和片上SRAM的處理器上標量和矩陣變量的存儲器方法。文以摩托羅拉公司的DSP56000為平臺,文以AMS Gepard DSP為平臺,分別討論了如何把數據到X/Y數據存儲器塊,以便最大限度地利用數據移動(dòng)的并行性。DSP56000片上X、Y數據存儲器都是單端口的,并且容量較小。與DSP56000不同,TI公司的TMS320C55x具有更多的數據總線(xiàn),片上RAM容量更大,且分塊多,具有訪(fǎng)問(wèn)能力更強的 DARAM。

TMS320C55x具有極低的功耗(0.05mW/MIPS) ,非常適合手持設備,現在已經(jīng)集成至TI 公司專(zhuān)門(mén)針對3G手機的高性能處理器上。C55x 片上除了24K字節的指令Cache外,還有64K字節的雙端口存儲器(DARAM),96K字節的單端口存儲器(SARAM)。DARAM和SARAM 總共160K字節,分成20個(gè)塊,每個(gè)塊8K字節。本文以C55x的視頻編碼器為例,討論片上存儲器的有效使用。

數據的片外、片上動(dòng)態(tài)

因為片上存儲器比片外存儲器具有更高的數據訪(fǎng)問(wèn)能力和更小的訪(fǎng)問(wèn)功耗,所以盡可能分配數據到片上存儲器,未能分配到片上的數據可在CPU處理前轉移到片上,已經(jīng)轉移到片上的數據,應盡可能在片上保存直到其生命期結束,以便盡可能減少數據從片外存儲器到片上存儲器的數據轉移。在視頻編碼等應用中,標量、常數相對于矩陣而言,通常數量較少,可以分配到片上;若分配到片外,在運算時(shí)直接存取片外數據,CPU流水線(xiàn)將會(huì )停滯。直接存儲器存?。―MA)可以在存儲器之間,存儲器與外設之間轉移數據,除了DMA通道參數初始化以外,DMA轉移數據和CPU處理數據可以并行進(jìn)行。設置DMA通道參數需要一定的時(shí)間,采用DMA來(lái)轉移單個(gè)變量或常數的開(kāi)銷(xiāo)可能比直接存取更大,因此DMA適合轉移具有較多數據的矩陣,并不適合片外標量的轉移。包含大量元素的矩陣可以分配到片外,處理前使用DMA轉移到片上存儲器。

局部變量由編譯器分配到軟件棧上,C55x具有兩個(gè)軟件棧:數據棧和系統棧。C55x的棧有三種工作模式,可設置成雙16比特快返回模式,以減少棧所占的存儲器空間,并提高其運行速度。數據棧和系統棧在函數調用及返回時(shí)同時(shí)訪(fǎng)問(wèn),可將這兩個(gè)棧分配到DARAM塊或者不同的SARAM塊內。

本文中數據存儲器的分配,強調從實(shí)際應用處理的基本數據塊出發(fā),分析簡(jiǎn)單直觀(guān)。多媒體算法總是將原始輸入數據分成一定大小的塊進(jìn)行處理,并產(chǎn)生對應該輸入的最后輸出。如果片上沒(méi)有足夠的存儲器,大量的輸入數據和最后結果僅能可存儲在片外。對于元素較多的矩陣,可以根據算法特征將矩陣分成若干數據子塊,如H.263編碼器中的宏塊,搜索窗等,或者單純根據可得到的片上存儲器數量分成適當大小的子塊逐個(gè)運算,然后分析數據子塊的生命期和使用頻率。我們定義數據子塊的生命期為首次使用到最后一次使用之間的間隔,而通常變量的生命期為定義到最后使用之間的間隔,例如定義整型數組int MB[384],用來(lái)存儲待編碼宏塊的數據,圖像的某個(gè)宏塊的數據在該宏塊編碼結束后,該宏塊數據的生命期也就結束,然后該數組用來(lái)存儲下一宏塊的數據,因而變量的生命期遠比存儲在該變量中的某一具體數據生命期要長(cháng)。若數據子塊具有不相交的生命期,則可以共享相同的片上存儲器。

很多數據子塊在運算中多次使用,可在首次運算前轉移到片上,并盡可能保存到生命期結束,即直到這些數據不再使用為止,因而這些數據僅需要一次轉移。將程序執行時(shí)間看成是由很多連續的時(shí)間間隔組成的,若在下個(gè)時(shí)間間隔內需要轉移新的數據到片上供CPU處理,而片上又沒(méi)有足夠的存儲器存儲這些數據,這時(shí)將隨后需要連續頻繁使用的數據保留到片上;對于隨后較少使用的數據,若片外存儲器還保存有該數據的備份,這些數據可直接覆蓋,等到下次使用時(shí)再從片外存儲器拷貝到片上;否則,在覆蓋前將數據轉移到片外。在片上分配一定的緩沖區,用來(lái)存儲需要再次使用的數據,可有效地減少片外存儲器的訪(fǎng)問(wèn)。對于中間結果,盡量在使用前分階段計算,使用后釋放,以縮減存儲中間結果的存儲器需求。通過(guò)數據的這種動(dòng)態(tài)分配,既可以減少或避免訪(fǎng)問(wèn)片外慢速存儲器所引起的指令延遲,又可以減少片外到片上的數據轉移。

在H.263視頻編碼器中,編碼是按宏塊順序進(jìn)行的,INTRA宏塊編碼僅需要當前的編碼宏塊數據,INTER宏塊編碼還需要以當前宏塊為中心的重建圖像搜索窗。因此根據算法特征將整幀輸入圖像劃分成宏塊,某個(gè)宏塊數據在編碼前轉移到片上,這一宏塊編碼結束后就不再使用,這部分片上存儲器就可釋放,用來(lái)存儲下一宏塊數據。若在編碼的同時(shí)采用DMA轉移下一個(gè)宏塊,這需要在片上分配兩個(gè)宏塊的存儲器空間,用來(lái)存儲編碼的原始圖像。

在進(jìn)行INTER幀編碼時(shí),運動(dòng)搜索需要使用前一幀的重建圖像作為參考,設搜索范圍為 [-16,+16],編碼該宏塊需要搜索參考圖像中以編碼宏塊位置為中心的9個(gè)宏塊,即前一幀中宏塊(x,y) 的的重建圖像直到編碼(x+1,y+1)宏塊后生命期才結束。以CIF分辨率為例,不可能把一幀圖像的所有重建宏塊保存到生命期結束,因而部分重建圖像必需暫時(shí)存儲在片外,若在編碼(x-1,y-1) 前將重建宏塊(x,y)拷貝到片上并一直保存到編碼(x+1,y+1) 宏塊結束,只需要在片上分配將近3個(gè)GOB的空間用來(lái)存儲參考圖像,就可以保證每個(gè)宏塊的重建圖像數據只需要一次片外到片上的轉移。

半像素內插結果,用于在整像素運動(dòng)搜索后作為半像素搜索的參考,因而可在整像素搜索后、半像素搜索前,圍繞整像素運動(dòng)矢量,對整像素運動(dòng)矢量對應的匹配宏塊進(jìn)行內插,這樣就沒(méi)有必要在編碼INTER 幀前將整幀圖像進(jìn)行內插,可顯著(zhù)減少存儲內插結果的存儲器數量,從而分配在片上。

片上數據的存儲器分配

TMS320C55x 除了讀指令的地址數據總線(xiàn)外,還有三條用于從存儲器讀操作數的地址數據總線(xiàn),兩條寫(xiě)操作數到存儲器的地址數據總線(xiàn)。CPU在一個(gè)周期內可完成多個(gè)操作數的讀寫(xiě),由于每個(gè)DARAM塊或SARAM塊有限的訪(fǎng)問(wèn)能力,這些操作數位于適當的DARAM或SARAM塊內,才能在單周期內完成多個(gè)數據的讀入或者數據的同時(shí)讀寫(xiě),而不產(chǎn)生延遲。

指令代碼的分配

應用程序的指令代碼可以存儲在片外存儲器,通過(guò)指令Cache進(jìn)行訪(fǎng)問(wèn),可以減少CPU讀指令代碼與CPU讀寫(xiě)片上存儲器內數據的沖突,同時(shí)將空余更多的片上存儲器空間用于數據分配。若存儲程序代碼和數據所需的存儲器總和少于片上存儲器容量,將代碼分配到片外存儲器的性能與代碼數據全部分配到片上存儲器相比,性能降低大約10%。因此當代碼和數據總和小于片上存儲器容量時(shí),應該全部分配到片上存儲器。通常程序代碼僅供CPU讀取、并不修改,而數據經(jīng)常需要同時(shí)讀寫(xiě),因而應盡量將代碼存儲在SARAM內,以便將訪(fǎng)問(wèn)能力更強的DARAM用來(lái)存儲數據。在單個(gè)CPU周期內,SARAM僅有一次訪(fǎng)問(wèn)能力,同時(shí)讀取指令和數據必然產(chǎn)生延遲,為了保證讀取數據時(shí)不產(chǎn)生延遲,數據不能與訪(fǎng)問(wèn)這些數據的代碼存儲在同一SARAM塊內。也就是說(shuō),當程序代碼大小不是剛好整數個(gè)塊大小時(shí),可通過(guò)調整代碼或者數據的存儲器分配,以免CPU讀代碼與讀寫(xiě)數據產(chǎn)生沖突。

數據分配

前面已經(jīng)討論過(guò)變量和常數的分配,這里主要討論耗時(shí)較多的矩陣運算。通??梢杂肅語(yǔ)言或者匯編語(yǔ)言編寫(xiě)應用程序,C語(yǔ)言編譯后可產(chǎn)生匯編代碼。在匯編語(yǔ)言的代碼中,找到處理矩陣操作數的指令,依次列舉這些指令不產(chǎn)生延遲的矩陣分配限制,并求解滿(mǎn)足這些限制條件的片上存儲器分配。下面列出了C55x中一些常見(jiàn)的存儲器操作數訪(fǎng)問(wèn)形式:

(1) Xmem read ‖Ymem read。

Xmem write ‖Ymem write。

Xmem read ‖Ymem write。

為了不產(chǎn)生延遲,要求Xmem 和Ymem 位于DARAM塊內或者不同的塊內。

(2)Lmem1 read ‖Lmem2 write。

為了不產(chǎn)生延遲,要求Lmem1和Lmem2位于DARAM塊內或者不同的塊內。

(3) Xmem read ‖Cmem read。

例如匯編指令:MACMR Xmem,Cmem,ACx,為了不產(chǎn)生延遲,Xmem,Cmem不在同一塊內,這包括不在同一SARAM塊內,也不在同一DARAM內。

(4) Xmem read ‖Ymem read ‖Cmem例如匯編指令:MPY Xmem ,Cmem ,AC0 ::MPY Ymem ,Cmem,AC1 以及FIRSADD Xmem ,Ymem ,Cmem ,ACx ,ACy 都要求Xmem 和Ymem 位于DARAM塊內或者不同的SARAM塊內,并且Xmem ,Cmem不在同一塊內。

上述指令不產(chǎn)生延遲的約束條件可分成兩類(lèi)基本約束條件:(1)兩變量位于DARAM塊內或者兩變量位于不同的塊內,記為條件A,這是由SARAM塊或者DARAM塊訪(fǎng)問(wèn)能力產(chǎn)生的限制 (2)兩變量位于不同的塊內,記為條件B,這是由于CPU總線(xiàn)的特殊結構產(chǎn)生的限制。其中條件A中的兩變量可在同一DARAM塊內,或者不同的SARAM 塊內,或者一個(gè)變量在DARAM內,另一個(gè)在SARAM內。條件B 指的是兩變量在不同的DARAM塊內,或者在不同的SARAM塊內,或者一個(gè)變量在DARAM塊內,另一個(gè)在SARAM 塊內。條件A可看成是兩種條件的邏輯或關(guān)系。

A = B or C。

其中條件C定義為兩變量都位于DARAM塊內。循環(huán)中的操作數一般表現為矩陣的一個(gè)元素,在一個(gè)應用程序中,通常有多個(gè)矩陣,矩陣中的元素應同時(shí)滿(mǎn)足多個(gè)上述基本條件。當矩陣較多,限制條件復雜時(shí),可以使用計算機求解數據存儲器分配,以滿(mǎn)足矩陣訪(fǎng)問(wèn)不產(chǎn)生延遲的條件。在這里,我們只需要求出滿(mǎn)足條件的一個(gè)解,并不需要求出所有可能的解,因而對求解問(wèn)題做一定的簡(jiǎn)化。

設x,y分別是矩陣X,Y的某一個(gè)元素,X,Y位于不同的塊內是 x,y位于不同的塊內的充分條件,同樣X(jué),Y都位于DARAM內或者不同的塊內是x,y都位于DARAM內或者不同的塊內的充分條件,例如X位于 DARAM塊,Y矩陣部分位于與X 相同的DARAM內,其余位于SARAM內,也能使x,y滿(mǎn)足條件A。

例如:N個(gè)矩陣需要同時(shí)滿(mǎn)足N1個(gè)A 類(lèi)條件和N2個(gè)B類(lèi)條件。從每個(gè)A類(lèi)條件中任選一個(gè)條件(B或者C),最多有2N1個(gè)組合,每種組合與N2個(gè)b類(lèi)條件聯(lián)立求解,其中某些組合可能沒(méi)有解,任意一個(gè)解都能滿(mǎn)足不產(chǎn)生延遲的條件。這時(shí)任何一種組合中可能包含M (0=M=N1)個(gè)C類(lèi)條件,其余的為B類(lèi)條件。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>