TMS320C6678存儲器訪(fǎng)問(wèn)性能(上)
DSP核讀SL2通常會(huì )通過(guò)L1D cache,所以,和訪(fǎng)問(wèn)LL2一樣,DSP核訪(fǎng)問(wèn)SL2的性能高度依賴(lài)cache。
本文引用地址:http://dyxdggzs.com/article/276392.htmXMC中還有一個(gè)prefetch buffer(8x128bytes),它可以被看作是一個(gè)額外的只對讀操作可用的cache。DSP核之外的每16-MB存儲器塊都可以通過(guò)MAR(Memory Attribute Register)的PFX(PreFetchable eXternally)bit 被配置為是否通過(guò)prefetch buffer讀,使能它會(huì )對多個(gè)主模塊共享存儲器的效率有很大幫助;它也能顯著(zhù)地改善對SL2連續讀的性能。不過(guò),prefetch buffer對寫(xiě)操作沒(méi)有任何作用。
SL2可以通過(guò)從0x0C000000開(kāi)始的缺省的地址空間訪(fǎng)問(wèn),這個(gè)空間總是cacheable,通常它也被配置為prefetchable。SL2可以通過(guò)XMC的配置被重映射到其它地址空間,通常重映射空間被用作non-cacheable, nonprefetchable 訪(fǎng)問(wèn)(當然它也可以被設置為cacheable而且prefetchable)。通過(guò)缺省地址空間訪(fǎng)問(wèn)比通過(guò)重映射空間訪(fǎng)問(wèn)稍微快一點(diǎn),因為地址重映射需要一個(gè)額外的時(shí)鐘周期。
由于L1D cache不會(huì )在寫(xiě)操作時(shí)被分配,并且這里的測試之前cache都被清空了,所以任何對SL2的寫(xiě)操作都通過(guò)L1D write buffer(4x16bytes)。對多個(gè)寫(xiě)操作,如果地址偏移小于16bytes,這些操作可能在write buffer中被合并成一個(gè)對SL2的寫(xiě)操作,從而獲得比較高的效率。XMC也有類(lèi)似的寫(xiě)合并buffer,它可以合并兩個(gè)在32 bytes內的寫(xiě)操作,所以,對偏移小于32bytes的寫(xiě)操作,XMC的寫(xiě)buffer改善了寫(xiě)操作的性能。
當寫(xiě)偏移是N*256 bytes時(shí),每個(gè)寫(xiě)操作總是訪(fǎng)問(wèn)SL2相同的bank(SL2存儲器組織結構是4 bankx2sub-bankx 32 bytes),對相同bank的連續訪(fǎng)問(wèn)間隔是4個(gè)時(shí)鐘周期。對其它的訪(fǎng)問(wèn)偏移量,連續的寫(xiě)操作會(huì )訪(fǎng)問(wèn)SL2不同的bank,這樣的多個(gè)訪(fǎng)問(wèn)的在流水線(xiàn)上可以被重疊起來(lái),從而使平均的訪(fǎng)問(wèn)時(shí)延比較小。
圖5 比較了DSP核訪(fǎng)問(wèn)SL2和LL2的訪(fǎng)問(wèn)時(shí)延。對地址偏移小于16bytes的連續訪(fǎng)問(wèn),訪(fǎng)問(wèn)SL2的性能和LL2幾乎相同。而對地址偏移比較大的連續訪(fǎng)問(wèn),訪(fǎng)問(wèn)SL2的性能比LL2差。因此,SL2最適合于存放代碼。

圖5 DSP核訪(fǎng)問(wèn)SL2和LL2的性能比較
3.3 DSP核訪(fǎng)問(wèn)外部DDR存儲器的時(shí)延
DSP核訪(fǎng)問(wèn)外部DDR存儲器高度依賴(lài)cache。當DSP核訪(fǎng)問(wèn)外部存儲器時(shí),一個(gè)傳輸請求會(huì )被發(fā)給XMC。根據cacheable和prefetchable的設置,傳輸請求可能是下列情況中的一種:
一個(gè)數據單元–如果存儲器空間是non-cacheable,nonprefetchable
一個(gè)L1 cache line-如果存儲器空間是cacheable而沒(méi)有L2 cache,
一個(gè)L2 cache line-如果存儲器空間是cacheable并且設置了L2 cache。
如果要訪(fǎng)問(wèn)的數據在L1/L2 cache或prefetch buffer中,則不會(huì )有傳輸請求發(fā)出。
如果被訪(fǎng)問(wèn)的空間是prefetchable的,可能還會(huì )產(chǎn)生額外的prefetch請求。
外部存儲器的內容可以被緩存在L1 cache或/和L2 cache,或者都不用。DSP核之外的每16-MB存儲器塊都可以通過(guò)MAR(Memory Attribute Register)的PC(Permit Copy)bit被配置為是否通過(guò)cache訪(fǎng)問(wèn)。如果PC比特為0,這段空間就不是cacheable的。如果PC比特是1而L2 cache大小為0(所有LL2都被用作普通SRAM),那外部存儲器的內容只會(huì )被L1 cache緩存。如果PC比特是1并且L2 cache大于0,則外部存儲器的內容可以被L1和L2 cache同時(shí)緩存。
像訪(fǎng)問(wèn)SL2一樣,對外部存儲器的讀操作也可以利用XMC里的prefetch buffer。它可以通過(guò)MAR(Memory Attribute Register)的PFX(PreFetchable eXternally)bit來(lái)配置。
多個(gè)訪(fǎng)問(wèn)之間的地址偏移(stride)顯著(zhù)地影響訪(fǎng)問(wèn)效率,地址連續的訪(fǎng)問(wèn)可以充分地利用cache和prefetch buffer;大于或等于64字節的地址偏移導致每次訪(fǎng)問(wèn)都miss L1 cache因為L(cháng)1D cache行大小是64 bytes;大于或等于128字節的地址偏移導致每次訪(fǎng)問(wèn)都miss L2 cache因為L(cháng)2 cache行大小是128 bytes。
如果發(fā)生cache miss,DSP需要等待外部數據傳輸完成。等待的時(shí)間是請求發(fā)出時(shí)間,數據傳輸時(shí)間或數據返回時(shí)間的總和。
圖6是在1GHz C6678 EVM(64-bit 1333MTS DDR)上測得的DSP核訪(fǎng)問(wèn)DDR的時(shí)延。DSP核執行512個(gè)連續的LDDW(LoaD Double Word)或STDW(STore Double Word)指令所花的時(shí)間被測量,平均下來(lái)每個(gè)操作所花的時(shí)間被畫(huà)在圖中。測試中,L1D被配置成32KB cache,LL2的256KB被設置為cache。
對LDB/STB和LDW/STW的測試表明,它們的時(shí)延與LDDW/STDW相同。
注意,下面第二和第三個(gè)圖實(shí)際上是第一個(gè)圖左邊的放大。


圖6 DSP核對DDR Load/Store的時(shí)延
對地址偏移小于128 bytes的訪(fǎng)問(wèn),性能主要受cache的影響。
L2 cache會(huì )在寫(xiě)操作時(shí)被分配,對任何寫(xiě)操作,cache控制器總是先把被訪(fǎng)問(wèn)的數據所在的cache行(128 bytes)讀進(jìn)L2 cache,然后在cache中改寫(xiě)數據。被改寫(xiě)是數據會(huì )在發(fā)生cache沖突或手工cache回寫(xiě)操作時(shí)被最終寫(xiě)到外部存儲里。當寫(xiě)操作的地址偏移是1024 bytes的整數倍時(shí),多個(gè)訪(fǎng)問(wèn)在L2 cache中發(fā)生沖突的概率很大,所以L(fǎng)2 cacheable寫(xiě)操作的時(shí)延會(huì )顯著(zhù)地增加。最壞的情況下,每個(gè)寫(xiě)操作都會(huì )導致一個(gè)cache行的回寫(xiě) (之前的數據因為沖突而被替換/回寫(xiě))和一個(gè)cache行的讀入(新的數據被分配到cache中)。
當地址偏移大于512bytes時(shí),DDR頁(yè)(行)切換開(kāi)銷(xiāo)成為性能下降的主要因素。C6678 EVM上的DDR頁(yè)(行)大小或bank寬度是8KB,而DDR3存儲器包含8個(gè)banks。最壞的情況是,當訪(fǎng)問(wèn)地址偏移量是64KB時(shí),每個(gè)讀或寫(xiě)操作都會(huì )訪(fǎng)問(wèn)相同bank中一個(gè)新的行,而這種行切換會(huì )增加大約40個(gè)時(shí)鐘周期的時(shí)延。請注意,不同的DDR存儲器的時(shí)延可能會(huì )不一樣。
存儲器相關(guān)文章:存儲器原理
評論