《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 微波|射頻 > 設(shè)計應(yīng)用 > 嵌入式片上存儲器有效使用的方法
嵌入式片上存儲器有效使用的方法
摘要: 嵌入式片上存儲器有效使用的方法,引言隨著CPU速度的迅速提高,CPU與片外存儲器的速度差異越來越大,匹配CPU與外部存儲器的方法通常是采用Cache或者片上存儲器。對于嵌入式設(shè)備上數(shù)據(jù)密集的應(yīng)用,數(shù)據(jù)Cache與片上存儲器相比存在以下缺陷:①片上
關(guān)鍵詞: 存儲器 嵌入式 片外存儲器
Abstract:
Key words :

引 言

  隨著CPU速度的迅速提高,CPU與片外存儲器的速度差異越來越大,匹配CPU與外部存儲器的方法通常是采用Cache或者片上存儲器。對于嵌入式設(shè)備上數(shù)據(jù)密集的應(yīng)用,數(shù)據(jù)Cache與片上存儲器相比存在以下缺陷:①片上存儲器是固定的單周期訪問,可在設(shè)計時(不是運行時)研究數(shù)據(jù)訪問模式;而Cache還要考慮不命中的情況,因而有可變的數(shù)據(jù)訪問時間,執(zhí)行時間的預(yù)測更加困難。②使用Cache執(zhí)行時間的不可預(yù)測性影響編譯器的優(yōu)化。③細顆粒的Cache對于圖像編碼等的規(guī)則數(shù)據(jù)訪問并不合適,因而使用Cache對于嵌入式設(shè)備可能不是最優(yōu)的。

        對于大多數(shù)應(yīng)用,使用片上存儲器比使用數(shù)據(jù)Cache能耗平均節(jié)省約40%,芯片面積與時間的乘積僅為Cache的46%,因而對于嵌入式多媒體處理器,片上RAM作為數(shù)據(jù)Cache的替代,功耗更低。片上存儲器的有效使用對于提高嵌入式應(yīng)用的速度、降低功耗具有重要的意義。
 

  TMS320C55x(簡稱為“C55x”)具有極低的功耗(0.05 mW/MIPS),本文以C55x上的視頻編碼器為例,討論片上存儲器的有效使用。

  1 數(shù)據(jù)的片外、片上動態(tài)分配

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

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

  本文中數(shù)據(jù)存儲器的分配,強調(diào)從實際多媒體應(yīng)用處理的基本數(shù)據(jù)塊出發(fā),分析簡單、直觀。多媒體算法總是將原始輸入數(shù)據(jù)分成一定大小的塊來處理,并產(chǎn)生對應(yīng)該輸入的最后輸出。如果片上沒有足夠的存儲器,則大量的輸入數(shù)據(jù)和最后結(jié)果僅能存儲在片外。對于元素較多的矩陣,可以根據(jù)算法特征,將矩陣分成若干數(shù)據(jù)子塊,如H.263編碼器中的宏塊和搜索窗等,或者單純根據(jù)可得到的片上存儲器數(shù)最分成適當(dāng)大小的子塊逐個運算,然后分析數(shù)據(jù)子塊的生命期和使用頻率。

  這里定義數(shù)據(jù)子塊的生命期為首次使用到最后一次使用之間的間隔,而通常變量的生命期為定義到最后使用之間的間隔。例如,定義整型數(shù)組int MB[384],用來存儲待編碼宏塊的數(shù)據(jù),圖像的某個宏塊的數(shù)據(jù)在該宏塊編碼結(jié)束后,該宏塊數(shù)據(jù)的生命期也就結(jié)束}然后該數(shù)組用來存儲下一宏塊的數(shù)據(jù),因而變量的生命期遠比存儲在該變量中的某一具體數(shù)據(jù)的生命期要長。若數(shù)據(jù)子塊具有不相交的生命期,則可以共享相同的片上存儲器。很多數(shù)據(jù)子塊在運算中多次使用,可在首次運算前轉(zhuǎn)移到片上,并盡可能保存到生命期結(jié)束,即直到這些數(shù)據(jù)不再使用為止,因而這些數(shù)據(jù)僅需要一次轉(zhuǎn)移。將程序執(zhí)行時間看成是由很多連續(xù)的時間間隔組成的,若在下個時間間隔內(nèi)需要轉(zhuǎn)移新的數(shù)據(jù)到片上供CPU處理,而片上又沒有足夠的存儲器存儲這些數(shù)據(jù),則這時將隨后需要蓮續(xù)頻繁使用的數(shù)據(jù)保留到片上。對于隨后較少使用的數(shù)據(jù),若片外存儲器還保存有該數(shù)據(jù)的備份,則這些數(shù)據(jù)可直接覆蓋,等到下次使用時再從片外存儲器拷貝到片上;否則,在覆蓋前將數(shù)據(jù)轉(zhuǎn)移到片外。在片上分配一定的緩沖區(qū),用來存儲需要再次使用的數(shù)據(jù),可有效地減少片外存儲器的訪問。對于中間結(jié)果,盡量在使用前分階段計算,使用后釋放,以縮減存儲中間結(jié)果的存儲器需求。通過數(shù)據(jù)的這種動態(tài)分配,既可以減小或避免訪問片外慢速存儲器所引起的指令延遲,又可以減少片外到片上的數(shù)據(jù)轉(zhuǎn)移。

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

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

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

  2 片上數(shù)據(jù)的存儲器分配

  C55x除了讀指令的地址、數(shù)據(jù)總線外,還有3條用于從存儲器讀操作數(shù)的地址、數(shù)據(jù)總線,2條寫操作數(shù)到存儲器的地址、數(shù)據(jù)總線。CPU在1個周期內(nèi)可完成多個操作數(shù)的讀寫,由于每個DARAM塊或SARAM塊的訪問能力有限,這些操作數(shù)位于適當(dāng)?shù)腄ARAM或SARAM塊內(nèi),才能在單周期內(nèi)完成多個數(shù)據(jù)的讀入或者數(shù)據(jù)的同時讀寫,而不產(chǎn)生延遲。

  2.1 指令代碼的分配

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

  2.2 數(shù)據(jù)分配

  前面已經(jīng)討論過變量和常數(shù)的分配,這里主要討論的耗時較多的矩陣運算,通常口丁以用C語言或者匯編語言編寫應(yīng)用程序,C語言編譯后可產(chǎn)生匯編代碼。在匯編語言的代碼中,找到處理矩陣操作數(shù)的指令,依次列舉這些指令不產(chǎn)生延遲的矩陣分配限制,并求解滿足這些限制條件的片上存儲器分配。

  不產(chǎn)生延遲的約束條件可分成兩類基本約束條件:

 ?、賰勺兞课挥贒ARAM塊內(nèi)或者兩變量位于不同的塊內(nèi),記為條件A(這是由SARAM塊或者DARAM塊訪問能力產(chǎn)生的限制);②兩變量位于不同的塊內(nèi),記為條件B(這是由CPU總線的特殊結(jié)構(gòu)產(chǎn)生的限制)。其中條件A中的兩變量可在同一DARAM塊內(nèi);或者不同的SARAM塊內(nèi);或者一個變量在DARAM內(nèi),另一個在SARAM內(nèi)。條件B指的是兩變量在不同的DARAM塊內(nèi);或者在不同的SARAM塊內(nèi);或者一個變量在DARAM塊內(nèi),另一個在SARAM塊內(nèi)。條件A可看成是兩種條件的邏輯“或”關(guān)系:

  A=B Or C

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

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

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

  C類條件是兩個矩陣必須在DARAM塊,將需要滿足C類條件的所有矩陣存儲器的大小相加,相同的矩陣不重復(fù)累加,結(jié)果為需要分配到DARAM的矩陣總數(shù)量。當(dāng)結(jié)果超過可得到的片上DARAM數(shù)量時,這種條件組合下就沒有解。

  每個B類條件要求某兩個矩陣必須在不同的塊內(nèi),由于存在多個B類條件,事實上可能要求多個矩陣相互不在同一個塊內(nèi)。例如,要求矩陣A1和A2不在同一塊內(nèi),矩陣A3和A1不在同一塊內(nèi),矩陣A3和A2不在同一塊內(nèi),這實際上是要求A1、A2、A3相互不在同一塊內(nèi)。若有一組矩陣,其中任何兩個矩陣都必須分配在不同的存儲器塊內(nèi),稱為“B類約束矩陣組”。若不存在一個矩陣,要求與某個B類約束矩陣組中的所有矩陣都存在B類約束關(guān)系,則稱這個組為“最大B類約束矩陣組”。最大B類約束條件矩陣組中的矩陣數(shù)目就是分配這些矩陣所需的最少的存儲器塊數(shù)。把矩陣數(shù)最多的最大組中的各個矩陣分配到不同的存儲器塊中,然后按照B類約束矩陣組中矩陣數(shù)從多到少的順序分配這個組中尚未分配的矩陣,對于具有相同矩陣數(shù)的組,則先分配未分配矩陣較少的B類約束矩陣組中的矩陣,若B類約束的矩陣同時存在C類限制,則分配到DARAM上;否則優(yōu)先分配到SARAM上。若SARAM上沒有足夠的空間,再分配到DARAM上。最后在DARAM 上分配C類約束條件中的尚未分配的矩陣。

  3 總結(jié)

  上述數(shù)據(jù)存儲器的分配方法只考慮了C55x中數(shù)據(jù)分配的主要方面,還有一些因素尚未涉及。例如長整型數(shù)據(jù)的分配就必須考慮數(shù)據(jù)存儲器地址的對齊問題,這時數(shù)據(jù)分配的求解變得更加復(fù)雜。可以將矩陣短整型的個數(shù)規(guī)定為偶數(shù),以簡化對齊問題,所以卜述求解方法仍具有普遍的實用意義。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久久久久久久久久成人| 国产精品日本| 国产亚洲一区二区在线观看| 欧美日韩精品国产| 欧美高清视频在线| 欧美sm视频| 免费在线一区二区| 久久亚洲欧美| 久久久久国产一区二区| 欧美在线国产| 欧美一二三区在线观看| 亚洲在线一区二区三区| 亚洲一区二区三区午夜| 亚洲一级影院| 亚洲欧美日韩另类| 亚洲欧美日韩国产中文| 亚洲一区二区三区免费视频| 亚洲一二三区在线观看| 亚洲一区免费观看| 午夜精品久久久久久久蜜桃app | 国产精品区一区| 国产精品久久久亚洲一区| 欧美性片在线观看| 国产精品福利网| 国产精品一区二区三区成人| 国产亚洲观看| 在线观看一区二区视频| 亚洲成人在线| 亚洲啪啪91| 亚洲视频碰碰| 亚洲欧美激情视频在线观看一区二区三区| 亚洲一区二区三区涩| 香蕉av777xxx色综合一区| 欧美一区免费视频| 亚洲国产三级在线| 99国产精品视频免费观看一公开| 亚洲色无码播放| 午夜精品亚洲| 久久精品论坛| 欧美不卡视频| 欧美午夜久久| 国产丝袜一区二区| 在线观看中文字幕不卡| 亚洲九九九在线观看| 亚洲一级免费视频| 久久国产精品网站| 99国产精品一区| 亚洲欧美一区二区三区在线| 久久久精品午夜少妇| 欧美激情第8页| 国产精品香蕉在线观看| 激情六月婷婷久久| 日韩午夜电影| 欧美一区二区视频在线观看2020| 亚洲欧洲另类| 午夜视频久久久| 麻豆成人在线| 国产精品av久久久久久麻豆网| 国产亚洲一二三区| 亚洲免费大片| 久久精品论坛| 亚洲女同精品视频| 裸体女人亚洲精品一区| 欧美日韩黄色一区二区| 国产区二精品视| 亚洲欧洲日韩女同| 午夜伦欧美伦电影理论片| 亚洲卡通欧美制服中文| 性8sex亚洲区入口| 欧美激情综合五月色丁香小说 | 在线观看成人小视频| 一区二区三区日韩精品视频| 久久成人在线| 亚洲欧美激情视频| 欧美成人国产va精品日本一级| 国产精品久久久久7777婷婷| 亚洲第一区在线观看| 亚洲欧美久久| 一区二区激情| 免费日韩av片| 国产日韩成人精品| a4yy欧美一区二区三区| 亚洲黄色尤物视频| 香港成人在线视频| 欧美日韩大陆在线| 伊人婷婷欧美激情| 亚洲欧美一区二区三区极速播放| 亚洲美女精品久久| 久久中文在线| 国产日韩欧美精品综合| 99热这里只有成人精品国产| 亚洲精品国产精品久久清纯直播| 久久精品国产欧美激情| 国产精品久久99| 亚洲欧洲综合另类| 亚洲黄色一区| 久久综合中文字幕| 国产日韩欧美日韩大片| 亚洲一级高清| 亚洲一区二区三区中文字幕在线 | 欧美**字幕| 狠狠色综合日日| 性久久久久久久久久久久| 亚洲一区综合| 欧美日韩综合在线免费观看| 亚洲人精品午夜在线观看| 亚洲激情网址| 免费亚洲视频| 在线观看日韩www视频免费| 欧美影片第一页| 久久激情综合| 国产区日韩欧美| 午夜精品久久久久久99热软件| 亚洲一区二区在线观看视频| 欧美三级第一页| av成人黄色| 中文日韩欧美| 欧美视频亚洲视频| 一区二区日韩精品| 亚洲自拍偷拍视频| 国产精品国产自产拍高清av王其| 99精品热视频| 亚洲一区二区三区乱码aⅴ| 欧美三级视频| 亚洲深夜福利网站| 亚洲欧美激情四射在线日 | 1024成人| 亚洲人成网站色ww在线 | 欧美日韩成人综合天天影院| 亚洲日本中文字幕| 在线中文字幕不卡| 欧美涩涩视频| 亚洲一区免费| 久久av资源网| 黄网站色欧美视频| 亚洲国产aⅴ天堂久久| 久久综合一区二区三区| 亚洲国产精品久久久久秋霞不卡 | 欧美日韩亚洲一区二区三区| 制服丝袜亚洲播放| 亚洲欧美日韩在线一区| 国产日韩精品一区二区三区在线| 欧美一区二区三区婷婷月色| 久久久噜噜噜久久| 亚洲第一福利视频| 一区二区三区精品视频| 国产精品久久久久久久7电影 | 亚洲伦理久久| 亚洲在线视频免费观看| 国产伦精品一区二区三区照片91 | 亚洲国产精品久久久久秋霞影院| 9色精品在线| 国产精品色网| 久久国产日韩欧美| 欧美不卡视频| 中文精品视频一区二区在线观看| 欧美一区二区三区免费观看视频| 国产字幕视频一区二区| 亚洲免费久久| 国产欧美精品在线播放| 亚洲国产三级| 欧美三级午夜理伦三级中视频| 午夜精品一区二区三区四区| 裸体一区二区| 亚洲无亚洲人成网站77777| 久久久久国产免费免费| 亚洲精品视频在线观看网站| 西西人体一区二区| 伊伊综合在线| 亚洲一区二区黄| 国模吧视频一区| 夜夜嗨av一区二区三区网站四季av | 亚洲欧美日韩在线| 欧美成人国产| 亚洲欧美日本精品| 欧美大尺度在线| 亚洲免费影视| 欧美精品一区二区三区高清aⅴ| 亚洲欧美日韩在线播放| 欧美激情bt| 欧美中文在线免费| 欧美日韩一级视频| 久久精品国产视频| 国产精品swag| 亚洲韩国精品一区| 国产精品久久97| 亚洲九九爱视频| 国产一区二区av| 亚洲视频一区二区| 激情成人综合| 午夜天堂精品久久久久| 91久久久久久| 久久久国产精品亚洲一区 | 亚洲性夜色噜噜噜7777| 在线观看欧美黄色| 先锋a资源在线看亚洲| 亚洲精品在线看| 久久综合伊人77777麻豆| 亚洲一区综合| 欧美三区免费完整视频在线观看|