隨著cpu速度的迅速提高,cpu與片外存儲器的速度差異越來越大,匹配cpu與外部存儲器的方法通常是采用cache或者片上存儲器。微處理器中的片上存儲器結構通常包含指令cache、數據cache或者片上存儲器。對于嵌入式設備上數據密集的應用,數據cache與片上存儲器相比存在以下缺陷:①片上存儲器是固定的單周期訪問,可在設計時(不是運行時)研究數據訪問模式;而cache還要考慮不命中的情況,因而有可變的數據訪問時間,執(zhí)行時間的預測更加困難。②使用cache執(zhí)行時間的不可預測性影響編譯器的優(yōu)化。③細顆粒的cache對于圖像編碼等的規(guī)則數據訪問并不合適,因而使用cache對于嵌入式設備可能不是最優(yōu)的。對于大多數應用,使用片上存儲器比使用數據cache能耗平均節(jié)省約40%,芯片面積與時間的乘積僅為cache的46%,因而對于嵌入式多媒體處理器,片上ram作為數據cache的替代,功耗更低。片上存儲器的有效使用對于提高嵌入式應用的速度、降低功耗具有重要的意義。
tms320c55x(簡稱為“c55x”)具有極低的功耗(0.05 mw/mips),非常適合手持設備,現在已經集成至tt公司專門針對3g手機的高性能多媒體處理器上。c55x片上除了24 kb的指令cache外,還有64 kb的雙端口存儲器(daram)和96 kb的單端口存儲器(saram)。daram和saram總共160 kb,分成20個塊,每個塊8 kb。本文以c55x上的視頻編碼器為例,討論片上存儲器的有效使用。 1 數據的片外、片上動態(tài)分配
因為片上存儲器比片外存儲器具有更強的數據訪問能力和更低的訪問功耗,所以盡可能分配數據到片上存儲器;未能分配到片上的數據可在cpu處理前轉移到片上;已經轉移到片上的數據,應盡可能在片上保存,直到其生命期結束,以便盡可能減少數據從片外存儲器到片上存儲器的數據轉移。在視頻編碼等應用中,標量、常數相對矩陣而言,通常數量較少,可以分配到片上。若分配到片外,則在運算時直接存取片外數據,cpu流水線將會停滯。直接存儲器存取(dma)可以在存儲器之間、存儲器與外設之間轉移數據,除了dma通道參數初始化以外,dma轉移數據和cpu處理數據可以并行進行。設置dma通道參數需要一定的時間,用dma來轉移單個變量或常數的開銷可能比直接存取更大,因此dma適合轉移具有較多數據的矩陣,并不適合片外標量的轉移。包含大量元素的矩陣可以分配到片外,處理前使用dma轉移到片上存儲器。
局部變量由編譯器分配到軟件棧上,c55x具有兩個軟件?!獢祿:拖到y(tǒng)棧。c55x的棧有3種工作模式,可設置成雙16比特快返回模式,以減小棧所占的存儲器空間,并提高其運行速度。數據棧和系統(tǒng)棧在函數調用及返回時同時訪問,可將這兩個棧分配到daram塊或者不同的saram塊內。
本文中數據存儲器的分配,強調從實際多媒體應用處理的基本數據塊出發(fā),分析簡單、直觀。多媒體算法總是將原始輸入數據分成一定大小的塊來處理,并產生對應該輸入的最后輸出。如果片上沒有足夠的存儲器,則大量的輸入數據和最后結果僅能存儲在片外。對于元素較多的矩陣,可以根據算法特征,將矩陣分成若干數據子塊,如h.263編碼器中的宏塊和搜索窗等,或者單純根據可得到的片上存儲器數最分成適當大小的子塊逐個運算,然后分析數據子塊的生命期和使用頻率。
這里定義數據子塊的生命期為首次使用到最后一次使用之間的間隔,而通常變量的生命期為定義到最后使用之間的間隔。例如,定義整型數組int mb[384],用來存儲待編碼宏塊的數據,圖像的某個宏塊的數據在該宏塊編碼結束后,該宏塊數據的生命期也就結束}然后該數組用來存儲下一宏塊的數據,因而變量的生命期遠比存儲在該變量中的某一具體數據的生命期要長。若數據子塊具有不相交的生命期,則可以共享相同的片上存儲器。很多數據子塊在運算中多次使用,可在首次運算前轉移到片上,并盡可能保存到生命期結束,即直到這些數據不再使用為止,因而這些數據僅需要一次轉移。將程序執(zhí)行時間看成是由很多連續(xù)的時間間隔組成的,若在下個時間間隔內需要轉移新的數據到片上供cpu處理,而片上又沒有足夠的存儲器存儲這些數據,則這時將隨后需要蓮續(xù)頻繁使用的數據保留到片上。對于隨后較少使用的數據,若片外存儲器還保存有該數據的備份,則這些數據可直接覆蓋,等到下次使用時再從片外存儲器拷貝到片上;否則,在覆蓋前將數據轉移到片外。在片上分配一定的緩沖區(qū),用來存儲需要再次使用的數據,可有效地減少片外存儲器的訪問。對于中間結果,盡量在使用前分階段計算,使用后釋放,以縮減存儲中間結果的存儲器需求。通過數據的這種動態(tài)分配,既可以減小或避免訪問片外慢速存儲器所引起的指令延遲,又可以減少片外到片上的數據轉移。
在h.263視頻編碼器中,編碼是按宏塊順序進行的。intra宏塊編碼不僅需要當前的編碼宏塊數據,還需要以當前宏塊為中心的重建圖像搜索窗。因此,根據算法特征將整幀輸入圖像劃分成宏塊,某個宏塊數據在編碼前轉移到片上,這一宏塊編碼結





