片上數(shù)據(jù)的存儲(chǔ)器分配
TMS320C55x 除了讀指令的地址數(shù)據(jù)總線外,還有三條用于從存儲(chǔ)器讀操作數(shù)的地址數(shù)據(jù)總線,兩條寫操作數(shù)到存儲(chǔ)器的地址數(shù)據(jù)總線。CPU在一個(gè)周期內(nèi)可完成多個(gè)操作數(shù)的讀寫,由于每個(gè)DARAM塊或SARAM塊有限的訪問(wèn)能力,這些操作數(shù)位于適當(dāng)?shù)腄ARAM或SARAM塊內(nèi),才能在單周期內(nèi)完成多個(gè)數(shù)據(jù)的讀入或者數(shù)據(jù)的同時(shí)讀寫,而不產(chǎn)生延遲。
指令代碼的分配
應(yīng)用程序的指令代碼可以存儲(chǔ)在片外存儲(chǔ)器,通過(guò)指令Cache進(jìn)行訪問(wèn),可以減少CPU讀指令代碼與CPU讀寫片上存儲(chǔ)器內(nèi)數(shù)據(jù)的沖突,同時(shí)將空余更多的片上存儲(chǔ)器空間用于數(shù)據(jù)分配。若存儲(chǔ)程序代碼和數(shù)據(jù)所需的存儲(chǔ)器總和少于片上存儲(chǔ)器容量,將代碼分配到片外存儲(chǔ)器的性能與代碼數(shù)據(jù)全部分配到片上存儲(chǔ)器相比,性能降低大約10%。因此當(dāng)代碼和數(shù)據(jù)總和小于片上存儲(chǔ)器容量時(shí),應(yīng)該全部分配到片上存儲(chǔ)器。通常程序代碼僅供CPU讀取、并不修改,而數(shù)據(jù)經(jīng)常需要同時(shí)讀寫,因而應(yīng)盡量將代碼存儲(chǔ)在SARAM內(nèi),以便將訪問(wèn)能力更強(qiáng)的DARAM用來(lái)存儲(chǔ)數(shù)據(jù)。在單個(gè)CPU周期內(nèi),SARAM僅有一次訪問(wèn)能力,同時(shí)讀取指令和數(shù)據(jù)必然產(chǎn)生延遲,為了保證讀取數(shù)據(jù)時(shí)不產(chǎn)生延遲,數(shù)據(jù)不能與訪問(wèn)這些數(shù)據(jù)的代碼存儲(chǔ)在同一SARAM塊內(nèi)。也就是說(shuō),當(dāng)程序代碼大小不是剛好整數(shù)個(gè)塊大小時(shí),可通過(guò)調(diào)整代碼或者數(shù)據(jù)的存儲(chǔ)器分配,以免CPU讀代碼與讀寫數(shù)據(jù)產(chǎn)生沖突。
數(shù)據(jù)分配
前面已經(jīng)討論過(guò)變量和常數(shù)的分配,這里主要討論耗時(shí)較多的矩陣運(yùn)算。通??梢杂?a href="http://www.brongaenegriffin.com/v/tag/1743/" target="_blank">C語(yǔ)言或者匯編語(yǔ)言編寫應(yīng)用程序,C語(yǔ)言編譯后可產(chǎn)生匯編代碼。在匯編語(yǔ)言的代碼中,找到處理矩陣操作數(shù)的指令,依次列舉這些指令不產(chǎn)生延遲的矩陣分配限制,并求解滿足這些限制條件的片上存儲(chǔ)器分配。下面列出了C55x中一些常見的存儲(chǔ)器操作數(shù)訪問(wèn)形式:
(1) Xmem read ‖Ymem read。
Xmem write ‖Ymem write。
Xmem read ‖Ymem write。
為了不產(chǎn)生延遲,要求Xmem 和Ymem 位于DARAM塊內(nèi)或者不同的塊內(nèi)。
(2)Lmem1 read ‖Lmem2 write。
為了不產(chǎn)生延遲,要求Lmem1和Lmem2位于DARAM塊內(nèi)或者不同的塊內(nèi)。
(3) Xmem read ‖Cmem read。
例如匯編指令:MACMR Xmem,Cmem,ACx,為了不產(chǎn)生延遲,Xmem,Cmem不在同一塊內(nèi),這包括不在同一SARAM塊內(nèi),也不在同一DARAM內(nèi)。
(4) Xmem read ‖Ymem read ‖Cmem例如匯編指令:MPY Xmem ,Cmem ,AC0 ::MPY Ymem ,Cmem,AC1 以及FIRSADD Xmem ,Ymem ,Cmem ,ACx ,ACy 都要求Xmem 和Ymem 位于DARAM塊內(nèi)或者不同的SARAM塊內(nèi),并且Xmem ,Cmem不在同一塊內(nèi)。
上述指令不產(chǎn)生延遲的約束條件可分成兩類基本約束條件:(1)兩變量位于DARAM塊內(nèi)或者兩變量位于不同的塊內(nèi),記為條件A,這是由SARAM塊或者DARAM塊訪問(wèn)能力產(chǎn)生的限制(2)兩變量位于不同的塊內(nèi),記為條件B,這是由于CPU總線的特殊結(jié)構(gòu)產(chǎn)生的限制。其中條件A中的兩變量可在同一DARAM塊內(nèi),或者不同的SARAM塊內(nèi),或者一個(gè)變量在DARAM內(nèi),另一個(gè)在SARAM內(nèi)。條件B 指的是兩變量在不同的DARAM塊內(nèi),
或者在不同的SARAM塊內(nèi),或者一個(gè)變量在DARAM塊內(nèi),另一個(gè)在SARAM 塊內(nèi)。條件A可看成是兩種條件的邏輯或關(guān)系。
A = B or C。
其中條件C定義為兩變量都位于DARAM塊內(nèi)。循環(huán)中的操作數(shù)一般表現(xiàn)為矩陣的一個(gè)元素,在一個(gè)應(yīng)用程序中,通常有多個(gè)矩陣,矩陣中的元素應(yīng)同時(shí)滿足多個(gè)上述基本條件。當(dāng)矩陣較多,限制條件復(fù)雜時(shí),可以使用計(jì)算機(jī)求解數(shù)據(jù) 存儲(chǔ)器 分配,以滿足矩陣訪問(wèn)不產(chǎn)生延遲的條件。在這里,我們只需要求出滿足條件的一個(gè)解,并不需要求出所有可能的解,因而對(duì)求解問(wèn)題做一定的簡(jiǎn)化。
設(shè)x,y分別是矩陣X,Y的某一個(gè)元素,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個(gè)矩陣需要同時(shí)滿足N1個(gè)A 類條件和N2個(gè)B類條件。從每個(gè)A類條件中任選一個(gè)條件(B或者C),最多有2N1個(gè)組合,每種組合與N2個(gè)b類條件聯(lián)立求解,其中某些組合可能沒有解,任意一個(gè)解都能滿足不產(chǎn)生延遲的條件。這時(shí)任何一種組合中可能包含M (0《=M《=N1)個(gè)C類條件,其余的為B類條件。
C 類條件是兩個(gè)矩陣必需在DARAM塊,將需要滿足C類條件的所有矩陣存儲(chǔ)器的大小相加,相同的矩陣不重復(fù)累加,結(jié)果為需要分配到DARAM的矩陣總數(shù)量,當(dāng)結(jié)果超過(guò)可得到的片上DARAM數(shù)量時(shí),這種條件組合下就沒有解。
每個(gè)B類條件要求某兩個(gè)矩陣必需在不同的塊內(nèi),由于存在多個(gè)B 類條件,事實(shí)上可能要求多個(gè)矩陣相互不在同一個(gè)塊內(nèi),例如要求矩陣A1和A2不在同一塊內(nèi),矩陣A3和A1不在同一塊內(nèi),矩陣A3和A2不在同一塊內(nèi),這實(shí)際上是要求A1,A2,A3相互不在同一塊內(nèi)。若有一組矩陣,其中任何兩個(gè)矩陣都必需分配在不同的存儲(chǔ)器塊內(nèi),稱為B類約束矩陣組。若不存在一個(gè)矩陣,要求與某個(gè)B類約束矩陣組中的所有矩陣都存在B類約束關(guān)系,稱這個(gè)組為最大B類約束矩陣組。最大B 類約束條件矩陣組中的矩陣數(shù)目就是分配這些矩陣所需的最少的存儲(chǔ)器塊數(shù)。
下面給出了以某個(gè)B 類約束條件中的兩矩陣為基礎(chǔ),求解包含這兩個(gè)矩陣的最大B 類約束矩陣組的步驟。
(1) 取出其中一個(gè)B 類約束條件,不妨設(shè)為S2=(A1,A2),初始化其標(biāo)志為1。
(2) 求出包含(A1,A2) 所有可能的三矩陣組如(A1,A2,A3),( A1,A2,A4),(A1,A2,A5)等,由所有的三矩陣組構(gòu)成一個(gè)集合,記為S3,并初始化S3中的各個(gè)元素標(biāo)志為1。若S3為空集,即沒有包含(A1,A2)更大的B類約束組,則停止以該條件為基礎(chǔ)的繼續(xù)搜索;若S3中僅僅包含一個(gè)元素,這時(shí)這個(gè)三矩陣組為包含(A1,A2)最大B 類約束矩陣組,停止以該三矩陣組為基礎(chǔ)的繼續(xù)搜索。只要S3 不為空集,更新原兩矩陣組標(biāo)志為0。求包含(A1,A2)的三矩陣組的過(guò)程,只需要檢查出現(xiàn)次數(shù)不小于2的那些矩陣,若檢查Ai,只需判斷是否存在限制(Ai,A1) 及(Ai,A2)
(3)分別以S3集合中的各個(gè)三矩陣組為基礎(chǔ),檢測(cè)是否存在包含此三矩陣的四矩陣組,并初始化檢測(cè)到的四矩陣組標(biāo)志為1,由這些四矩陣組構(gòu)成S4。若檢查到包含此三矩陣的四矩陣組,將原來(lái)的三矩陣組標(biāo)志更新為0;若S4中僅僅包含一個(gè)元素,停止以該四矩陣組為基礎(chǔ)的繼續(xù)搜索。搜索四矩陣組的過(guò)程,也可簡(jiǎn)化為:簡(jiǎn)單檢查S3集合中的三矩陣組能否兩兩合并,并初始化合并后的四矩陣組標(biāo)志為1。若某兩個(gè)矩陣組能夠合并,更新它們的標(biāo)志為0。例如檢查(A1,A2,A3)和(A1,A2,A4) 能否合并,只需檢查是否存在限制條件(A3,A4);檢查(A1,A2,A3) 和(A1,A2,A5) 能否合并,只需檢查是否存在限制條件(A3,A5)。
(4) 繼續(xù)由四矩陣組搜索五矩陣組,五矩陣組到六矩陣組。直到矩陣組的集合為空集或僅有一個(gè)元素,停止搜索。
(5)上述各矩陣組中標(biāo)志為0已經(jīng)被更大的矩陣組取代,標(biāo)志為1的矩陣組表示它為包含該矩陣組中各矩陣的最大矩陣了,因此標(biāo)志為1的矩陣組就是最大B類約束矩陣組。
分別以每個(gè)B類約束條件為基礎(chǔ),搜索包含這兩個(gè)矩陣分配的最大B類約束矩陣組;由所有的最大B類約束矩陣組構(gòu)成一個(gè)集合S,刪除S中相同的元素,比較各個(gè)最大B類約束矩陣組中的矩陣數(shù)量,包含矩陣數(shù)量最多的B 類約束組中的矩陣數(shù)量就是分配這些矩陣所需要的最少片上 存儲(chǔ)器 塊數(shù)。首先把矩陣數(shù)最多的最大組中的各個(gè)矩陣分配到不同的存儲(chǔ)器塊中,然后按照B類約束矩陣組中矩陣數(shù)從多到少的順序分配這個(gè)組中尚未分配的矩陣,對(duì)于具有相同矩陣數(shù)的組,
先分配未分配矩陣較少的B類約束矩陣組中的矩陣。若B類約束的矩陣同時(shí)存在C類限制,則分配到DARAM上,否則優(yōu)先分配到SARAM上;若SARAM上沒有足夠的空間,再分配到DARAM上。最后在DARAM上分配C類約束條件中的尚未分配的矩陣。
總 結(jié)
上述數(shù)據(jù)存儲(chǔ)器的分配方法只考慮了TMS320C55x中數(shù)據(jù)分配的主要方面,還有一些因素文中尚未涉及,如長(zhǎng)整型數(shù)據(jù)的分配就必需考慮數(shù)據(jù)存儲(chǔ)器地址的對(duì)齊問(wèn)題,這時(shí)數(shù)據(jù)分配的求解變得更加復(fù)雜??梢詫⒕仃嚩陶偷膫€(gè)數(shù)規(guī)定為偶數(shù),以簡(jiǎn)化對(duì)齊問(wèn)題,所以上述求解方法仍具有普遍的實(shí)用意義。
電子發(fā)燒友App











評(píng)論