相關(guān)申請(qǐng)的交叉引用
本申請(qǐng)要求2016年3月4日遞交的美國(guó)臨時(shí)申請(qǐng)62/303,889號(hào)的權(quán)益,在此通過(guò)引用并入該申請(qǐng)的內(nèi)容。
本發(fā)明的實(shí)施例概括而言涉及在圖形處理單元中使用紋理高速緩存(cache)的技術(shù)。
背景技術(shù):
在圖形系統(tǒng)中,紋理通常被以壓縮格式存儲(chǔ)在紋理高速緩存中。例如,塊壓縮格式可將4x4像素塊的顏色和阿爾法壓縮成64比特(64b;8字節(jié)(8b))。在解壓縮之后,有2b的紅、綠和藍(lán)(rgb)成分,每個(gè)成分分別為5比特、6比特、5比特。從而,此壓縮格式實(shí)現(xiàn)了4的壓縮因子(例如,對(duì)于4x4像素塊,2b/像素*16像素)/8b=4)。
該壓縮格式在存儲(chǔ)器要求以及在存儲(chǔ)器層次體系的多個(gè)級(jí)別之間移動(dòng)紋理所需的帶寬上實(shí)現(xiàn)了節(jié)省。然而,有許多缺點(diǎn)和限制與傳統(tǒng)的紋理高速緩存方案相關(guān)聯(lián)。
技術(shù)實(shí)現(xiàn)要素:
附圖說(shuō)明
圖1a是根據(jù)本發(fā)明的實(shí)施例的包括紋理高速緩存體系結(jié)構(gòu)的圖形處理系統(tǒng)的框圖。
圖1b根據(jù)本發(fā)明的實(shí)施例更詳細(xì)圖示了圖1a的紋理高速緩存體系結(jié)構(gòu)。
圖1c圖示了支持astc編解碼器的圖1a的紋理高速緩存體系結(jié)構(gòu)的實(shí)施例。
圖2根據(jù)一實(shí)施例圖示了操作圖形處理單元的方法。
圖3根據(jù)一實(shí)施例圖示了操作圖形處理單元的方法。
圖4根據(jù)一實(shí)施例圖示了高速緩存數(shù)據(jù)和標(biāo)簽映射的示例。
圖5根據(jù)一實(shí)施例圖示了具有無(wú)沖突訪問(wèn)的高速緩存數(shù)據(jù)和標(biāo)簽映射的示例。
圖6根據(jù)一實(shí)施例圖示了對(duì)于四方的3x3足跡的高速緩存訪問(wèn)的示例。
圖7根據(jù)一實(shí)施例圖示了對(duì)于四方的2x2足跡的高速緩存訪問(wèn)的示例。
圖8根據(jù)一實(shí)施例圖示了紋理高速緩存體系結(jié)構(gòu)的子塊的示例。
圖9根據(jù)一實(shí)施例圖示了astc紋素足跡模式的示例。
圖10根據(jù)一實(shí)施例圖示了用來(lái)組合紋素請(qǐng)求的地址生成控制的示例。
圖11根據(jù)一實(shí)施例圖示了astc塊大小和紋理高速緩存線邊界的示例。
圖12圖示了一系列訪問(wèn)中的astc塊大小和紋理高速緩存邊界的示例。
具體實(shí)施方式
圖1a是根據(jù)一實(shí)施例圖示出圖形系統(tǒng)100的框圖。在一個(gè)實(shí)施例中,紋理高速緩存單元110是圖形處理單元(graphicsprocessingunit,gpu)106的一部分。在一個(gè)實(shí)施例中,紋理高速緩存單元110包括紋理高速緩存體系結(jié)構(gòu),下文關(guān)于圖1b對(duì)其進(jìn)行更詳細(xì)描述。
在一個(gè)實(shí)施例中,gpu106可包括圖形硬件,并且實(shí)現(xiàn)包括例如一個(gè)或多個(gè)著色器核的圖形流水線(graphicspipeline)??商峁┩獠繄D形存儲(chǔ)器112來(lái)存儲(chǔ)額外的紋理數(shù)據(jù)。在一個(gè)實(shí)施例中,中央處理單元(centralprocessingunit,cpu)101和關(guān)聯(lián)的系統(tǒng)存儲(chǔ)器102可包括用于驅(qū)動(dòng)器軟件104的計(jì)算機(jī)程序指令??偩€可用于將cpu101通信地耦合到gpu106,將系統(tǒng)存儲(chǔ)器102耦合到cpu100,并且將gpu106耦合到外部圖形存儲(chǔ)器112。
圖1b更詳細(xì)圖示了紋理高速緩存體系結(jié)構(gòu)108的實(shí)施例。對(duì)于未壓縮的紋理數(shù)據(jù)(例如,紋素(texel)數(shù)據(jù))提供第0級(jí)紋理高速緩存(tc0)。在一個(gè)實(shí)施例中,tc0高速緩存保存被組織成64b高速緩存線的解壓縮紋素,其中每個(gè)4b片段被存儲(chǔ)在單獨(dú)的數(shù)據(jù)存儲(chǔ)庫(kù)中,整條高速緩存線存儲(chǔ)在16個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)上。然而,將會(huì)理解,可以使用其他高速緩存線大小和片段大小。對(duì)于壓縮的紋理數(shù)據(jù)(例如,紋素?cái)?shù)據(jù))提供第1級(jí)紋理高速緩存(l1c)。
紋理解壓縮器(texturedecompressor,td)被布置在tc0和l1c之間。提供了第一和第二緩沖器(buffer)來(lái)緩沖數(shù)據(jù)。雖然緩沖器可按不同方式來(lái)實(shí)現(xiàn),但在一個(gè)實(shí)施例中這些緩沖器被實(shí)現(xiàn)為串流(streaming)先進(jìn)先出(first-in,firstout,fifo),包括這樣一種實(shí)現(xiàn)方式:其中第一緩沖器是第一fifo(串流fifo1)并且第二緩沖器是第二fifo(串流fifo2)。串流fifo1將來(lái)自l1c的壓縮數(shù)據(jù)緩沖到td中。串流fifo2將從td提供的解壓縮數(shù)據(jù)緩沖到tc0中。在一個(gè)實(shí)施例中,雖然串流fifo使用一種始終用新進(jìn)入條目替換最舊條目的fifo替換方案,但串流fifo允許讀取訪問(wèn)任何條目,而不像常規(guī)fifo中那樣只是最舊條目。
在一個(gè)實(shí)施例中,紋理地址單元(在圖1b中用虛線示出)生成對(duì)于四方(四個(gè)像素的群組)的一組訪問(wèn)并且將其遞送到以地址生成控制器(addressgenerationcontroller,agc)開(kāi)始的紋理高速緩存體系結(jié)構(gòu)108的前端180。在一個(gè)實(shí)施例中,agc將這些訪問(wèn)合并成一組最小數(shù)目的非沖突標(biāo)簽訪問(wèn)和數(shù)據(jù)存儲(chǔ)庫(kù)訪問(wèn)。在一個(gè)實(shí)施例中,agc隨后在tags單元中查找標(biāo)簽,tags單元將未命中遞送給地址計(jì)算單元。地址計(jì)算單元進(jìn)而生成用來(lái)訪問(wèn)l1c高速緩存中的壓縮紋理數(shù)據(jù)的地址。
在一個(gè)實(shí)施例中,在tc0高速緩存中高速緩存未命中的情況下,agc支持生成地址并且使用(來(lái)自tags單元的)標(biāo)簽來(lái)利用地址計(jì)算塊訪問(wèn)來(lái)自l1c高速緩存的壓縮紋理數(shù)據(jù)。壓縮紋理數(shù)據(jù)隨后被緩沖在串流fifo1中,在td中被解壓縮,被緩沖在串流fifo2中,然后被提供到tc0高速緩存。
在一個(gè)實(shí)施例中,tc0高速緩存支持對(duì)解壓縮紋理數(shù)據(jù)的再利用。響應(yīng)于高速緩存命中,tc0高速緩存的輸出可例如被紋理過(guò)濾器單元(在圖1b中用虛線示出)用來(lái)為像素計(jì)算紋理。此外,如下文更詳細(xì)描述的,在一個(gè)實(shí)施例中,可控制對(duì)fifo1和fifo2的讀取指針來(lái)改善對(duì)紋素?cái)?shù)據(jù)的再利用。在一個(gè)實(shí)施例中,可例如提供控制塊190或其他控制特征來(lái)協(xié)調(diào)td的操作和第一緩沖器(例如,fifo1)和/或第二緩沖器(例如,fifo2)的讀取指針。
在一個(gè)實(shí)施例中,紋理高速緩存單元110接受對(duì)一個(gè)四方(像素的2x2集合)的紋素?cái)?shù)據(jù)的請(qǐng)求并且對(duì)于四方中的每個(gè)活躍像素生成經(jīng)過(guò)濾的紋素,這可涉及對(duì)于每個(gè)像素訪問(wèn)4個(gè)紋素,每周期總共16個(gè)紋素。
在一個(gè)實(shí)施例中,圖形系統(tǒng)100具有重組織紋理內(nèi)的數(shù)據(jù)的靈活性。在一個(gè)實(shí)施例中,驅(qū)動(dòng)器104重組織紋理數(shù)據(jù)以最好地適應(yīng)期望的請(qǐng)求模式。著色器核可以是容忍延時(shí)的,因?yàn)樗鼈兪歉叨榷嗑€程的以利用存在于圖形應(yīng)用中的天然并行性。另外,每個(gè)周期到達(dá)紋理高速緩存的多個(gè)請(qǐng)求可以是相關(guān)的,因?yàn)樗鼈儗?duì)應(yīng)于代表單個(gè)四方作出的紋素請(qǐng)求。
在一個(gè)實(shí)施例中,tc0高速緩存中的數(shù)據(jù)的組織是基于常見(jiàn)數(shù)據(jù)訪問(wèn)模式的,以允許得到以最小數(shù)目的數(shù)據(jù)存儲(chǔ)庫(kù)和標(biāo)簽查找來(lái)處理一組紋素訪問(wèn)。在一個(gè)實(shí)施例中,基于存在于一組訪問(wèn)中的局部性模式,數(shù)據(jù)被組織到tc0高速緩存中以改善tc0高速緩存的高速緩存性能。例如,在構(gòu)成tc0紋理高速緩存的數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)存儲(chǔ)庫(kù)間,可以以攪拌模式存儲(chǔ)數(shù)據(jù)。另外,很可能被一起訪問(wèn)的數(shù)據(jù)可被一起分組到高速緩存線中以減少不同高速緩存線的數(shù)目并且因此減少所需要的不同標(biāo)簽查找的數(shù)目。本文公開(kāi)的示例高速緩存體系結(jié)構(gòu)支持每周期只需要最多4個(gè)標(biāo)簽查找的操作并且只利用16個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)。然而,將會(huì)明白,在替換實(shí)施例中可利用其他數(shù)目的標(biāo)簽查找和數(shù)據(jù)存儲(chǔ)庫(kù)。
參考圖1c,額外地或替換地,一實(shí)施例促進(jìn)了利用可變大小塊的紋理壓縮方案,例如自適應(yīng)可縮放紋理壓縮(adaptivescalabletexturecompression,astc)編解碼器。在一個(gè)實(shí)施例中,這可包括合并來(lái)自不同大小塊的解壓縮數(shù)據(jù)的合并器(coalescer,cls)模塊以及具有控制特征來(lái)控制cls、解壓縮器和對(duì)緩沖器的讀取指針并且支持對(duì)可變大小塊(例如astc的那些)的使用的控制塊192,這些在下文更詳細(xì)描述。
在較舊的紋理壓縮方案中,每個(gè)壓縮塊包含固定2之冪(power-of-two)紋素并且被以固定塊大小存儲(chǔ)。例如,早前描述的紋理壓縮方案將2b紋素的4x4塊壓縮成8b,給出了4的恒定壓縮因子。利用每個(gè)維度上的紋素中的2之冪壓縮大小和2之冪塊大小,包含2d紋理中的紋素(u,v)的壓縮塊的起始地址的計(jì)算只涉及u,v和紋理的基地址上的特定移位操作。另外,在一個(gè)實(shí)施例中,解壓縮tc0中的高速緩存線包含單個(gè)或較小的2之冪壓縮塊的整體。在一個(gè)實(shí)施例中,壓縮塊不被分割在解壓縮高速緩存的多條高速緩存線之間。
astc紋理壓縮方案可以把從4x4到12x12紋素不等的可變大小塊壓縮成16b以捕捉依據(jù)要求的質(zhì)量支持某個(gè)范圍的壓縮因子的益處。有了這種可變大小塊,地址計(jì)算可變得更復(fù)雜。例如,7x5塊導(dǎo)致除以7并且計(jì)算包含期望紋素的壓縮塊的存儲(chǔ)器地址。這種除法可消耗大量的面積和功率。
在一個(gè)實(shí)施例中,tc0高速緩存在未壓縮域中操作,其中紋素地址是利用紋素的未壓縮(u,v)坐標(biāo)來(lái)識(shí)別的。響應(yīng)于tc0高速緩存中的未命中,在地址計(jì)算單元中計(jì)算未命中的非壓縮高速緩存線的壓縮塊地址。
在一個(gè)實(shí)施例中,fifo1的大小被設(shè)定為改善性能。當(dāng)從l1c請(qǐng)求astc或其他壓縮塊時(shí),l1c返回包含一組兩個(gè)或更多個(gè)壓縮塊(例如,多個(gè)塊)的高速緩存線。例如,如果astc壓縮塊是16b并且高速緩存線是64b,則l1c返回四個(gè)壓縮塊。這些塊中的一個(gè)或多個(gè)被保存在fifo1中??紤]到紋理請(qǐng)求中的訪問(wèn)的局部性,td在其存在于fifo1中期間可要求小時(shí)間窗口內(nèi)的這些塊中的一些。在這種情況下,td可直接從fifo1取回它,而無(wú)需作出對(duì)l1c的另一請(qǐng)求(不然的話它就必須作出),從而節(jié)省了訪問(wèn)l1c所需的功率并且可能改善了性能。
在一個(gè)實(shí)施例中,fifo2的大小被設(shè)定為改善性能。當(dāng)塊被td解壓縮時(shí),其生成解壓縮的紋素。但是塊中的許多紋素對(duì)于在當(dāng)前高速緩存線中填入紋素可能不是立即需要的。然而,可能存在來(lái)自tc0的其他高速緩存線未命中請(qǐng)求,這些請(qǐng)求需要這些紋素。在一個(gè)實(shí)施例中,解壓縮的紋素被存入到串流fifo2中。如果一些紋素是滿足后續(xù)tc0高速緩存線填充確實(shí)需要的,則它們被從串流fifo2中取回,從而避免了td對(duì)整個(gè)壓縮塊的另一次解壓縮。
在一個(gè)實(shí)施例中,fifo1和fifo2的串流fifo使用先進(jìn)先出替換策略,消除了對(duì)于額外的替換策略管理狀態(tài)的需要。在一個(gè)實(shí)施例中,串流fifo還具有表示在所有先前引用被處理之后fifo的未來(lái)狀態(tài)的標(biāo)簽。在一個(gè)實(shí)施例中,串流fifo的一個(gè)方面在于它們捕捉紋理地址流中的短期空間局部性。在一個(gè)實(shí)施例中,控制硬件檢測(cè)到fifo1中的所需壓縮塊或fifo2中的紋素群組存在并且計(jì)算分別從fifo1或fifo2訪問(wèn)它們的讀取指針。也就是說(shuō),控制讀取指針來(lái)利用第一讀取指針選擇第一緩沖器內(nèi)的個(gè)體條目并且利用第二讀取指針選擇第二緩沖器內(nèi)的個(gè)體條目??刂谱x取指針的能力允許了關(guān)于在td中訪問(wèn)l1c或?qū)K解壓縮方面的潛在節(jié)省。
圖2是圖示出根據(jù)一實(shí)施例的方法的流程圖。壓縮紋素?cái)?shù)據(jù)被存儲(chǔ)在第一紋理高速緩存(例如,l1c高速緩存)中。解壓縮紋素?cái)?shù)據(jù)被存儲(chǔ)20在第二紋理高速緩存(例如,tc0高速緩存)中。對(duì)于一組像素的紋素?cái)?shù)據(jù)接收215請(qǐng)求。對(duì)于請(qǐng)求的紋素?cái)?shù)據(jù)安排220對(duì)于第一或第二紋理高速緩存的訪問(wèn)。
圖3是圖示出根據(jù)一實(shí)施例的方法以強(qiáng)調(diào)緩沖的方面的流程圖。對(duì)于第一組像素的紋素?cái)?shù)據(jù)接收305第一請(qǐng)求。從第一紋理高速緩存(例如,l1c高速緩存)取得310請(qǐng)求的壓縮紋素?cái)?shù)據(jù)。取得的壓縮紋素?cái)?shù)據(jù)被緩沖315在第一緩沖器中。例如,第一緩沖器可包括fifo1。第一緩沖器的輸出被提供320給紋理解壓縮器以對(duì)一個(gè)或多個(gè)壓縮紋素?cái)?shù)據(jù)塊解壓縮。所得到的解壓縮紋素?cái)?shù)據(jù)被緩沖325在第二緩沖器中。例如,第二緩沖器可包括fifo2。第二緩沖器的輸出被提供330給第二紋理高速緩存(例如,tc0)。在一些實(shí)施例中,由第一緩沖器存儲(chǔ)的一個(gè)或多個(gè)壓縮紋素?cái)?shù)據(jù)塊除了請(qǐng)求的紋素?cái)?shù)據(jù)以外還包括第二紋素?cái)?shù)據(jù)。在一些實(shí)施例中,存儲(chǔ)到第二緩沖器中的一個(gè)或多個(gè)未壓縮紋素群組除了請(qǐng)求的紋素?cái)?shù)據(jù)以外還包括第三未壓縮紋素?cái)?shù)據(jù)。這個(gè)第三紋素?cái)?shù)據(jù)被用于構(gòu)成在以后的事務(wù)中被tc0高速緩存請(qǐng)求的紋素?cái)?shù)據(jù)的未壓縮高速緩存線的一些部分。
圖4根據(jù)一實(shí)施例圖示了tc0高速緩存中的高速緩存數(shù)據(jù)和標(biāo)簽映射。在一個(gè)實(shí)施例中,每個(gè)周期處理16個(gè)請(qǐng)求,對(duì)應(yīng)于對(duì)代表圖示的四個(gè)像素(p0、p1、p2、p3)的2d紋理的16個(gè)請(qǐng)求,它們被映射到屬于四方的紋素空間。每個(gè)像素與對(duì)應(yīng)于紋素空間中的單位方形的角落的四個(gè)請(qǐng)求相關(guān)聯(lián),因此例如在坐標(biāo)(u,v)、(u+1,v)、(u,v+l)和(u+l,v+1)處。通過(guò)將tc0級(jí)別的高速緩存線內(nèi)的數(shù)據(jù)布置為包含紋素空間中的方形(或接近方形)區(qū)域,對(duì)于特定像素的這四個(gè)請(qǐng)求大多位于一高速緩存線內(nèi)并且多個(gè)1b/2b請(qǐng)求在許多情況下甚至可共同位于4b雙字內(nèi)。
圖4圖示了在從0...9a...f以十六進(jìn)制編號(hào)的16個(gè)存儲(chǔ)庫(kù)間如何布局紋素?cái)?shù)據(jù)的示例。16個(gè)紋素(0...9a...f)的群組被包含在標(biāo)簽存儲(chǔ)中具有單個(gè)標(biāo)簽的高速緩存線中。紋素的4x4方形集合(圖示為包含十六進(jìn)制數(shù)0...9a...f的方形)被映射到編號(hào)clo至cl15的每條高速緩存線。為了例示,紋素內(nèi)的數(shù)字表示保存該數(shù)據(jù)的存儲(chǔ)庫(kù)。在此示例中,高速緩存線的標(biāo)簽被包含在由tb<num>指示的標(biāo)簽存儲(chǔ)庫(kù)中。為了例示,具有加粗輪廓的紋素方形例示了用于為像素計(jì)算過(guò)濾紋理值的紋素(例如,cl0tb0中的紋素0、1、2和3用于像素p0;cl4tb0中的紋素a和b以及cl5tb1中的紋素0和1用于像素p1;cl2tb2中的紋素6、7、c和d用于像素p2;并且cl3tb3中的紋素c、d、e和f用于像素p3)。
圖4圖示了當(dāng)紋素?cái)?shù)據(jù)大小是4b時(shí)高速緩存線如何被映射到四個(gè)標(biāo)簽存儲(chǔ)庫(kù)(tb0、tb1、tb2和tb3)的示例。在此情況下,紋理是每個(gè)4b大小的紋素的二維(2d)陣列。在一個(gè)實(shí)施例中,驅(qū)動(dòng)器和紋理解壓縮器協(xié)作來(lái)如圖所示布局?jǐn)?shù)據(jù)。每條高速緩存線的16個(gè)方形的每一者表示一紋素并且紋素內(nèi)的數(shù)字表示保存該數(shù)據(jù)的存儲(chǔ)庫(kù)。注意在一個(gè)實(shí)施例中,按z序或莫頓序布局?jǐn)?shù)據(jù)以利用兩個(gè)維度上的局部性,這與利用一個(gè)維度或另一維度上的局部性的傳統(tǒng)布局不同。z序(也稱(chēng)為莫頓序)是在保留數(shù)據(jù)點(diǎn)的局部性的同時(shí)映射多維數(shù)據(jù)的功能。
標(biāo)記為(p0,p1,p2,p3)的方形指示出來(lái)自紋理請(qǐng)求的四方的四個(gè)像素映射到紋素空間中的何處。注意,雖然它們傾向于被映射到紋素空間中的方形,但它們也可被映射到紋素空間中的任何區(qū)域。鄰近每個(gè)像素的虛線框中的紋素方形指示用于執(zhí)行雙線性過(guò)濾或加權(quán)平均來(lái)計(jì)算過(guò)濾紋理值的紋素。
在圖4的這個(gè)示例中,每個(gè)像素使用非重疊的四個(gè)紋素,因此總共16個(gè)紋素需要被從高速緩存取得。這可表示罕見(jiàn)的極端情況,但被選擇來(lái)概括例示tc0高速緩存的操作。
在一個(gè)實(shí)施例中,取決于高速緩存實(shí)現(xiàn)方式,tc0高速緩存的操作可考慮到對(duì)紋素訪問(wèn)的一個(gè)或多個(gè)約束。在一個(gè)實(shí)施例中,tc0高速緩存被配置為在數(shù)據(jù)訪問(wèn)期間至多訪問(wèn)來(lái)自每個(gè)存儲(chǔ)庫(kù)的一個(gè)唯一紋素。然而,在圖4的示例中,每個(gè)像素要求對(duì)來(lái)自特定存儲(chǔ)庫(kù)的紋素?cái)?shù)據(jù)的訪問(wèn)。例如,像素p2和p3訪問(wèn)被映射到存儲(chǔ)庫(kù)c和d的紋素,從而由于在數(shù)據(jù)訪問(wèn)期間從每個(gè)存儲(chǔ)庫(kù)至多訪問(wèn)一個(gè)唯一紋素的約束,對(duì)于像素p2和p3的訪問(wèn)發(fā)生在至少兩個(gè)周期中。可能約束的另一個(gè)示例是對(duì)于tc0高速緩存的約束,即對(duì)于一標(biāo)簽存儲(chǔ)庫(kù)可作出不多于一個(gè)標(biāo)簽訪問(wèn)。
關(guān)于紋素訪問(wèn)的任何約束可被agc考慮來(lái)組織紋素訪問(wèn)的序列。在一個(gè)實(shí)施例中,圖1b中所示的agc起到如下作用:將一個(gè)四方的訪問(wèn)分割成多個(gè)集合,使得每個(gè)集合可在沒(méi)有數(shù)據(jù)存儲(chǔ)庫(kù)沖突或標(biāo)簽存儲(chǔ)庫(kù)沖突的情況下被執(zhí)行(如果該約束適用的話)。在一個(gè)實(shí)施例中,agc可在一個(gè)周期中安排對(duì)于圖4的p0和p2的訪問(wèn),因?yàn)樗鼈兩婕坝糜诟咚倬彺婢€clo和cl2的非沖突標(biāo)簽存儲(chǔ)庫(kù)tbo和tb2和用于p0的非沖突數(shù)據(jù)存儲(chǔ)庫(kù)(0,1,2,3)和用于p2的非沖突數(shù)據(jù)存儲(chǔ)庫(kù)(6,7,c,d)。類(lèi)似地,對(duì)于p1和p3的訪問(wèn)僅分別涉及用于像素p1和p3的非沖突標(biāo)簽存儲(chǔ)庫(kù)tbo、tb1和tb3以及非沖突數(shù)據(jù)存儲(chǔ)庫(kù)(a,b,0,l)和(c,d,e,f)。
雖然一個(gè)四方的四個(gè)像素可映射到紋理空間中的任意位置,但它們?cè)诩y理空間中可傾向于接近。具體地,在有適當(dāng)mip映射表面的情況下,紋理空間中的四方的像素之間的距離對(duì)于雙線性采樣傾向于小于1.5并且對(duì)于三線性采樣的較高mip級(jí)別/較低mip級(jí)別分別傾向于小于1.0/2.0。
圖5根據(jù)一實(shí)施例圖示了對(duì)16個(gè)紋素的無(wú)沖突訪問(wèn)。圖5代表了訪問(wèn)代表單個(gè)四方的16個(gè)紋素的場(chǎng)景,其中所有16個(gè)紋素都可在單個(gè)周期中被訪問(wèn)。當(dāng)四方的像素在紋素空間中映射到的位置之間在紋素空間中水平和垂直分離時(shí),足跡(或布局)是紋素的4x4集合,如加粗輪廓所示。方形p0、p1、p2和p3表示像素在紋素空間中的位置并且可以看出所有四個(gè)像素的四個(gè)相鄰紋素的并集是紋素的4x4集合(帶有加粗輪廓),隨后稱(chēng)為紋素足跡。
在圖5的情形中,紋素足跡中的紋素分布在四條高速緩存線上并且這些高速緩存線進(jìn)而映射到四個(gè)不同的標(biāo)簽存儲(chǔ)庫(kù)。從而,可以并行訪問(wèn)標(biāo)簽,而沒(méi)有存儲(chǔ)庫(kù)沖突。具體地,加粗紋素方形的編號(hào)是全異的;沒(méi)有兩個(gè)加粗方形具有表明它們映射到相同數(shù)據(jù)存儲(chǔ)庫(kù)的相同數(shù)字。因此,所有16個(gè)紋素可被以無(wú)沖突方式訪問(wèn)。一般地,無(wú)論4x4紋素足跡的位置如何,所有16個(gè)紋素都將被映射到不同的存儲(chǔ)庫(kù),而且這些紋素映射到至多4條高速緩存線,這4條高速緩存線映射到不同的標(biāo)簽存儲(chǔ)庫(kù)。因此,無(wú)論4x4紋素足跡如何,都存在無(wú)沖突訪問(wèn)。對(duì)于此情況,agc著眼于紋素足跡并且在這種情況下將所有標(biāo)簽訪問(wèn)和數(shù)據(jù)存儲(chǔ)庫(kù)訪問(wèn)安排到單個(gè)周期。
圖6圖示了當(dāng)執(zhí)行雙線性濾波時(shí)用于適當(dāng)mip映射的紋理的紋素足跡的實(shí)施例。當(dāng)紋素空間中的間距是大約1.5紋素時(shí),像素傾向于共享相同紋素并且因此紋素足跡經(jīng)常是如圖6中所示的3x3。在此情況下,帶有加粗輪廓的九個(gè)紋素具有不同的數(shù)字,表明足跡中沒(méi)有兩個(gè)紋素映射到相同的存儲(chǔ)庫(kù)。另外,所有九個(gè)紋素屬于映射到不同標(biāo)簽存儲(chǔ)庫(kù)的兩條高速緩存線之一。與之前一樣,無(wú)論3x3足跡的定位如何,這些觀察結(jié)果都適用。
在一些情況下,像素在紋素空間中可能是翹曲的。例如,紋素足跡可能是斜的或者以其他方式在水平/垂直方向上未對(duì)齊。即使在這種情況下,所有紋素都可被以無(wú)沖突方式訪問(wèn),只要像素間間距小于1.5紋素。
圖7根據(jù)一實(shí)施例圖示了四方的最小2x2足跡。圖7示出了當(dāng)像素映射到紋素空間中的如此小的區(qū)域以至于紋素足跡被減小到最小2x2足跡9時(shí)的紋素足跡(即,帶有加粗輪廓的四個(gè)紋素)。這在進(jìn)行三線性過(guò)濾時(shí)可發(fā)生在例如較高的(不那么詳細(xì)的)mip級(jí)別。此足跡可被以無(wú)沖突方式處理,其中四個(gè)紋素映射到不同的存儲(chǔ)庫(kù),并且所有四個(gè)紋素可屬于單條高速緩存線。
從而,在一示例實(shí)施例中,tc0高速緩存支持每周期四個(gè)標(biāo)簽查找。64b的每個(gè)tc0高速緩存線被映射到16個(gè)存儲(chǔ)庫(kù),每個(gè)32b寬。每個(gè)存儲(chǔ)庫(kù)具有單個(gè)讀取端口。如果四方的請(qǐng)求要求對(duì)每個(gè)存儲(chǔ)庫(kù)的多于一次訪問(wèn)或者多于四次標(biāo)簽查找,則該請(qǐng)求被分割在多個(gè)周期上,以便在每個(gè)周期中滿足這些約束。
此外,為了對(duì)于許多情況提供良好的性能,在一個(gè)實(shí)施例中,驅(qū)動(dòng)器在存儲(chǔ)器中組織紋理數(shù)據(jù)并且硬件解壓縮器進(jìn)一步在tc0高速緩存線中布置數(shù)據(jù)以使得數(shù)據(jù)存儲(chǔ)庫(kù)沖突和標(biāo)簽查找達(dá)到最低限度。在一個(gè)實(shí)施例中,紋理數(shù)據(jù)被組織成mtile,其中高速緩存線被驅(qū)動(dòng)器按莫頓(z)序組織以使得紋素的連續(xù)方形塊要求最小數(shù)目(即,小于預(yù)定義數(shù)目)的不同高速緩存線并且因此要求最小數(shù)目的標(biāo)簽查找。從而,在一個(gè)實(shí)施例中,只要代表四方的四個(gè)紋素的紋理請(qǐng)求映射到mtile內(nèi)的高速緩存線的2x2塊,則不需要多于四個(gè)標(biāo)簽查找。
在一個(gè)實(shí)施例中,在64b的tc0高速緩存線大小的情況下,常見(jiàn)的2b/紋素紋理中的每條高速緩存線保存8x4紋素塊。因此,2x2高速緩存線塊保存16x8紋素塊。四方的紋素足跡可以是3x3紋素塊。在適當(dāng)?shù)膍ip映射的情況下,最大預(yù)期紋素足跡是朝向45度并且在紋素空間中具有2紋素的像素間距離的四方的。這種紋素足跡是(2√2+1=)3.8x3.8塊,很好地在2x2高速緩存線塊中包含的16x8紋素下。因此,對(duì)于許多情況避免了存儲(chǔ)庫(kù)沖突。
在一個(gè)實(shí)施例中,在請(qǐng)求沒(méi)有被適當(dāng)mip映射的情況下,原始的紋理請(qǐng)求被分割成多個(gè)請(qǐng)求。在常見(jiàn)的情況中,紋理高速緩存以非常高效的方式處理16個(gè)請(qǐng)求,利用了這些請(qǐng)求的預(yù)期屬性來(lái)實(shí)現(xiàn)高帶寬和高功率效率兩者。
圖8根據(jù)一實(shí)施例圖示了紋理高速緩存體系結(jié)構(gòu)的一部分的子塊。在圖6中省略了l1c高速緩存。在一個(gè)實(shí)施例中,對(duì)于tc0高速緩存提供l0數(shù)據(jù)存儲(chǔ)。在一個(gè)實(shí)施例中,l0數(shù)據(jù)存儲(chǔ)對(duì)應(yīng)于16個(gè)存儲(chǔ)庫(kù),每個(gè)存儲(chǔ)庫(kù)有32個(gè)字并且每個(gè)字有32b。l0數(shù)據(jù)讀取控制塊和l0數(shù)據(jù)寫(xiě)入控制塊控制從l0數(shù)據(jù)存儲(chǔ)讀取和寫(xiě)入數(shù)據(jù)。在一個(gè)實(shí)施例中,l0縱橫式交換矩陣被用于輸出紋素?cái)?shù)據(jù)。l0讀取延時(shí)fifo從agc接收存儲(chǔ)庫(kù)地址。l0行與寫(xiě)入控制延時(shí)fifo從l0標(biāo)簽存儲(chǔ)接收行地址。
在一個(gè)實(shí)施例中,第一輸入801(來(lái)自紋理地址(ta)子單元(圖8中未示出))對(duì)應(yīng)于最多達(dá)(upto)16個(gè)地址。每個(gè)請(qǐng)求是對(duì)于最多達(dá)16個(gè)紋素的,對(duì)應(yīng)于紋理基地址和2d紋理中的16個(gè)(u,v)坐標(biāo)。每個(gè)請(qǐng)求的紋理基地址在所有16個(gè)紋素間是共享的。每個(gè)四方由四個(gè)像素構(gòu)成并且每個(gè)像素訪問(wèn)布置在具有一對(duì)坐標(biāo)coordu和coord_v的單位方形中的4個(gè)紋素。在每一對(duì)中,coord_u[i][l]可以是coord_u[i]+1,除了卷繞情況以外。對(duì)于3d紋理,每個(gè)像素訪問(wèn)布置在單位立方體中的8個(gè)紋素,要求另一個(gè)坐標(biāo)coord_w來(lái)指定額外的維度。
在一個(gè)實(shí)施例中,來(lái)自ta單元的第一輸入分組上的剩余字段是從狀態(tài)以及輸入得出的。mip映射的寬度、高度和深度對(duì)于此請(qǐng)求是在mip級(jí)別的紋理圖像的維度并且是從提供的基地址計(jì)算偏移量所需要的。在一個(gè)實(shí)施例中,紋理格式以特定的紋素大小描述紋理圖像的格式。在一個(gè)實(shí)施例中,該格式的一些方面被下游td子單元使用。在一個(gè)實(shí)施例中,兩個(gè)字段nr_samples和sample_idx被用于多重采樣的紋理訪問(wèn)。
在一個(gè)實(shí)施例中,紋素?cái)?shù)據(jù)輸出802由16個(gè)紋素的兩個(gè)集合構(gòu)成,其中每個(gè)紋素32b寬。對(duì)于大于32b的紋素大小,輸出的2之冪集合被集群在一起以發(fā)送單個(gè)紋素并且16個(gè)紋素的集合是在多個(gè)周期中遞送的。
箭頭803和804圖示了與l1c高速緩存的交互。在tc0高速緩存未命中的情況下,向l1c高速緩存作出提供高速緩存線的虛擬地址的請(qǐng)求。由于虛擬地址是48b并且高速緩存線大小的log2是6b,所以此地址是42b。作為響應(yīng),l1c遞送64b數(shù)據(jù)。
在一個(gè)實(shí)施例中,agc對(duì)于一個(gè)四方的四個(gè)像素接收u、v、w維度上的兩個(gè)坐標(biāo)位置,總共16個(gè)坐標(biāo),來(lái)指定16個(gè)紋素。agc輸出由最多達(dá)四個(gè)標(biāo)簽請(qǐng)求以及從數(shù)據(jù)陣列訪問(wèn)紋素所需的數(shù)據(jù)存儲(chǔ)庫(kù)和縱橫式交換矩陣控制比特構(gòu)成。
在一個(gè)實(shí)施例中,agc接受來(lái)自紋理地址單元的16個(gè)請(qǐng)求并且在tc0tag存儲(chǔ)中生成標(biāo)簽查找。此外,agc生成用于對(duì)于16個(gè)存儲(chǔ)庫(kù)的每一者選擇四個(gè)線地址之一并且將32b的數(shù)據(jù)從每個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)路由到輸出端口的控制比特。標(biāo)簽在未命中時(shí)被立即更新并且未命中被發(fā)送到l1c高速緩存。數(shù)據(jù)訪問(wèn)被延遲,直到數(shù)據(jù)從l1c到達(dá)為止。延遲的訪問(wèn)請(qǐng)求被保存在延時(shí)fifo中并且被以有序方式處理。16個(gè)存儲(chǔ)庫(kù)可代表16個(gè)紋素被同時(shí)讀取。數(shù)據(jù)在輸出縱橫式交換矩陣處被路由到正確的紋素輸出。
在一個(gè)實(shí)施例中,agc將這16個(gè)請(qǐng)求組織成最小數(shù)目的集合(例如,一個(gè)),以使得一個(gè)集合內(nèi)的紋素請(qǐng)求不訪問(wèn)多于四條高速緩存線并且從16個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)的每一者不多于一個(gè)4b取得。在一個(gè)實(shí)施例中,agc在每個(gè)周期中向l0標(biāo)簽存儲(chǔ)提供最多達(dá)四個(gè)標(biāo)簽。l0標(biāo)簽存儲(chǔ)寫(xiě)入到l0行與寫(xiě)入控制延時(shí)fifo中。在一個(gè)實(shí)施例中,提供合并器(cls)和cls控制器來(lái)支持將解壓縮的塊合并成標(biāo)準(zhǔn)形式大小。
在一個(gè)實(shí)施例中,數(shù)據(jù)寫(xiě)入控制塊接受來(lái)自合并器的進(jìn)入數(shù)據(jù)并且填充tc0數(shù)據(jù)陣列。lo數(shù)據(jù)讀取控制塊彈出被agc寫(xiě)入的rdl0fifo并且協(xié)調(diào)讀出最多達(dá)四條高速緩存線以及從這四條高速緩存線選擇最多達(dá)16個(gè)紋素的數(shù)據(jù)。tc0將最多達(dá)16個(gè)紋素遞送到紋理過(guò)濾器。
在一個(gè)實(shí)施例中,tc0高速緩存參數(shù)是2kb大小、64b線大小、32線、4集合、8向集合關(guān)聯(lián)的。在一個(gè)實(shí)施例中,tc0高速緩存是利用40b基地址和u,v坐標(biāo)的串接來(lái)尋址的,其中u,v坐標(biāo)對(duì)于2d紋理各自是14b,總共40+28=68b。但3d紋理具有三個(gè)坐標(biāo),每個(gè)11b,從而要求在紋素空間中支持40+33=73b的地址寬度。然而,考慮到ctile中的最小紋素塊是2x2xl并且在每個(gè)軸上ctile中的紋素的數(shù)目是2的冪,u,v坐標(biāo)將始終是偶數(shù)的。不必將u,v坐標(biāo)的lsbl比特存儲(chǔ)為標(biāo)簽。這留下了71b的標(biāo)簽比特。每個(gè)周期總共有四個(gè)進(jìn)入的標(biāo)簽,它們?nèi)伎芍赶蛱囟ǖ臉?biāo)簽存儲(chǔ)庫(kù)。每個(gè)標(biāo)簽存儲(chǔ)庫(kù)具有充足的比較器和其他資源來(lái)支持最多達(dá)四個(gè)進(jìn)入標(biāo)簽上的標(biāo)簽匹配。每個(gè)進(jìn)入的71b標(biāo)簽地址被并行地與全部8個(gè)71b標(biāo)簽相比較。在匹配時(shí),5b線地址被向下發(fā)送到讀取標(biāo)簽延時(shí)fifo。
在未命中時(shí),未命中的地址被發(fā)送到l1c高速緩存。在一個(gè)實(shí)施例中,四條高速緩存線請(qǐng)求的每一者可未命中高速緩存,導(dǎo)致在一個(gè)周期中生成最多四個(gè)未命中。在未命中時(shí),用于該存儲(chǔ)庫(kù)的相應(yīng)data_ram_line_miss比特被設(shè)置。該集合的八條線之一被選擇來(lái)替換并且其標(biāo)簽被新的標(biāo)簽所覆寫(xiě)。在一些情形中,在替換的標(biāo)簽上可能有未決請(qǐng)求,但由于對(duì)于這些請(qǐng)求已經(jīng)對(duì)線地址執(zhí)行了查找,這意味著可以只是就在第一次使用之前并且因此在任何未決請(qǐng)求之后覆寫(xiě)高速緩存線。在串行高速緩存組織的情況下,標(biāo)簽甚至可以在相應(yīng)的數(shù)據(jù)已被從數(shù)據(jù)ram讀出之前被覆寫(xiě)。
在一個(gè)實(shí)施例中,采用基于局部性的替換策略來(lái)最大限度地利用紋理訪問(wèn)中的空間局部性。當(dāng)將輸入71b標(biāo)簽與高速緩存集合中的標(biāo)簽相比較時(shí),也判定差別是否僅在協(xié)調(diào)成分的較低比特中。首先從高位未命中標(biāo)簽中選擇出犧牲者。當(dāng)沒(méi)有高位未命中標(biāo)簽時(shí),從低位未命中標(biāo)簽中選擇出犧牲者。在一個(gè)實(shí)施例中,在相同優(yōu)先級(jí)群組中使用隨機(jī)選擇。由以下標(biāo)準(zhǔn)檢測(cè)低位未命中。如果在基地址中存在差別,則其是高位未命中。否則,對(duì)于2d紋理、切片組織的3d紋理:如果差別僅在每個(gè)u,v坐標(biāo)成分的lsb6比特中,則其是低位未命中。對(duì)于3d塊組織的3d紋理:如果差別僅在每個(gè)u,v,w坐標(biāo)成分的lsb4比特中,則其是低位未命中。否則,其是高位未命中。
如圖8中所示,在一個(gè)實(shí)施例中,串流fifo1(lsf表示其從l1高速緩存接收數(shù)據(jù))保存從l1c遞送來(lái)的可能壓縮的高速緩存線。td將壓縮紋素的塊解壓縮成解壓縮高速緩存線。串流fifo2(dsf表示其從解壓縮器接收數(shù)據(jù))保存這些解壓縮高速緩存線。tc0保存被組織成64b高速緩存線的解壓縮紋素,其中每個(gè)4b片段被存儲(chǔ)在單獨(dú)的數(shù)據(jù)存儲(chǔ)庫(kù)中,整條高速緩存線存儲(chǔ)在16個(gè)數(shù)據(jù)存儲(chǔ)庫(kù)上。
在一個(gè)實(shí)施例中,每個(gè)解碼的rgbaastc紋素占據(jù)8字節(jié)的空間(對(duì)于每個(gè)成分是浮點(diǎn)16),允許了tc0高速緩存線(64b)保存被組織為具有4列2行的4x2塊的8個(gè)未壓縮紋素。每個(gè)壓縮的8bastc塊包含5x5壓縮紋素。在未命中時(shí),tc將請(qǐng)求4cx2r未壓縮紋素(4列乘2行)的網(wǎng)格。取決于未壓縮網(wǎng)格如何映射到壓縮astc網(wǎng)格上,4cx2r網(wǎng)格可映射到多個(gè)(1-4個(gè))壓縮astc塊。
在一個(gè)實(shí)施例中,cls和關(guān)聯(lián)的控制特征被用于產(chǎn)生可被加載到l0數(shù)據(jù)存儲(chǔ)中的未壓縮紋素?cái)?shù)據(jù)的對(duì)齊塊。這對(duì)于astc中存在的非2之冪塊大小維度是有用的。對(duì)于其他壓縮方案,解壓縮因子是小的2之冪,并且每個(gè)壓縮塊容易擴(kuò)展到64b高速緩存線中。也就是說(shuō),對(duì)壓縮塊的小2之冪集合解壓縮產(chǎn)生可被直接加載到l0數(shù)據(jù)存儲(chǔ)中的對(duì)齊的64b未壓縮紋素?cái)?shù)據(jù)。在一個(gè)實(shí)施例中,解壓縮器與lsf控制器(decompressor&lsfcontroller,dlc)控制器對(duì)多個(gè)(可變大小)astc塊解壓縮以產(chǎn)生64b線中的解壓縮4x4紋素塊。經(jīng)由到fifo1和fifo2中的讀取指針的控制提供額外的協(xié)調(diào)。
作為示例,考慮如果在沒(méi)有適當(dāng)協(xié)調(diào)和再利用的情況下解壓縮和利用astc塊則可如何浪費(fèi)功率和帶寬。4b的標(biāo)稱(chēng)紋素大小,這對(duì)于l0數(shù)據(jù)存儲(chǔ)中的64b線意味著4x4塊。由于astc非2之冪塊在l0數(shù)據(jù)存儲(chǔ)高速緩存線中未在4x4未壓縮塊上對(duì)齊,所以每個(gè)這樣的塊可要求解壓縮到最多達(dá)4個(gè)塊(比如6x6),總共6*6*4=144個(gè)紋素。這些紋素中只有16個(gè)是4x4塊所需的。因此,最多達(dá)144-16=128個(gè)紋素可被丟棄,浪費(fèi)了解壓縮器功率和帶寬。另外,這4個(gè)塊在最壞情況下可在4個(gè)單獨(dú)的64b線上,浪費(fèi)了l1c訪問(wèn)功率和帶寬。
然而,假定在紋理訪問(wèn)模式中有大量的空間局部性。因此,很有可能在填充l0數(shù)據(jù)存儲(chǔ)中的一個(gè)4x4塊時(shí)未使用的解壓縮紋素將很快被用于填充其他請(qǐng)求的附近4x4塊。類(lèi)似地,包括l1高速緩存線的4個(gè)astc塊很有可能要被再用于附近的4x4塊。因此,高速緩存壓縮的l1高速緩存線和解壓縮的astc塊的兩個(gè)小緩沖器(fifo1和fifo2)在減少?gòu)膌1c取得的高速緩存線塊的數(shù)目和未使用的解壓縮紋素的數(shù)目上是有效的。
在串流fifo中,最舊的寫(xiě)入線始終被選擇來(lái)替換。從而,寫(xiě)入指針在每次寫(xiě)入時(shí)被以卷繞方式遞增。然而,讀取可從寫(xiě)入的窗口內(nèi)的任何線發(fā)生。一條線可被讀取多次,從而導(dǎo)致對(duì)再利用的利用。返回的l1c高速緩存線被存放到串流fifo1中。解壓縮器從串流fifo1讀取16b塊(對(duì)于非astc可能更大),對(duì)它們解壓縮并且將它們送出到cls。cls收集td輸出數(shù)據(jù)來(lái)構(gòu)造64b高速緩存線并且將它們寫(xiě)入到l0數(shù)據(jù)存儲(chǔ)中。串流fifo是目標(biāo)在于消除到l1c的過(guò)多請(qǐng)求流量的簡(jiǎn)單高速緩存結(jié)構(gòu)。
tc在解壓縮器的輸入處使用小緩沖器,因?yàn)橥粔嚎s塊可能是生成時(shí)間上鄰近的多個(gè)解壓縮64b塊所需要的。
圖8的額外方面包括對(duì)于標(biāo)簽未命中接收標(biāo)簽的標(biāo)簽未命中fifo(由標(biāo)簽未命中串行化器串行化)。選擇未命中四方請(qǐng)求(selectmissingquadrequest,smqr)塊選擇未命中請(qǐng)求之一,將其與基地址和來(lái)自紋理圖像描述符的關(guān)聯(lián)信息配對(duì),并且將整個(gè)封包遞送到壓縮塊地址生成單元(compressedblockaddressgeneration,cbag)。具體而言,對(duì)于每個(gè)維度,cbag計(jì)算紋素維度的最小值和最大值。對(duì)于2d紋理,輸出因此是基地址、(umin,umax)和(vmin,vmax)。在一個(gè)實(shí)施例中,cbag計(jì)算壓縮(存儲(chǔ)器)地址空間中的最多達(dá)4個(gè)astc塊地址。一般地,此地址計(jì)算涉及將每個(gè)維度范圍除以該維度上的astc塊大小。例如,對(duì)于5x6塊,將(umin,umax)除以5并且將(vmin,vmax)除以6來(lái)得到需要的astc塊。接下來(lái),計(jì)算這些塊的每一者的地址。輸出是最多達(dá)4個(gè)astc塊地址的集合,其低位4b是零(由于astc塊大小是24=16b)。
在一個(gè)實(shí)施例中,紋理解壓縮器(dc)每個(gè)周期可處理以預(yù)定義組織之一布局的最多達(dá)4個(gè)輸出紋素。在一個(gè)實(shí)施例中,dsf標(biāo)簽查找和lsf標(biāo)簽查找將存儲(chǔ)器訪問(wèn)流量分割成多個(gè)預(yù)定義的紋素足跡模式并且將它們逐一送出。圖9根據(jù)一實(shí)施例圖示了dc可處理的astc紋素足跡模式的示例。圖示了六個(gè)不同的示例情況,其中圖示了在一個(gè)或兩個(gè)周期中處理1、2、3或4個(gè)紋素的不同選項(xiàng)。
在一個(gè)實(shí)施例中,cls被dsf條目信號(hào)所控制,dsf條目信號(hào)進(jìn)而通過(guò)dsf標(biāo)簽查找接收控制比特。這些控制比特指定來(lái)自9個(gè)存儲(chǔ)庫(kù)的最多達(dá)9個(gè)紋素四方的集合(對(duì)于4b紋素大小情況),雖然從4像素四方可生成4x4大小塊。額外的控制比特指定這些四方的哪些部分被路由到l0數(shù)據(jù)存儲(chǔ)中的64b高速緩存線的哪些部分。cls讀取規(guī)定的四方,路由數(shù)據(jù)并且在接收到(例如,來(lái)自cc的)準(zhǔn)備就緒信號(hào)時(shí)將64b高速緩存線寫(xiě)入到l0數(shù)據(jù)存儲(chǔ)中。
在一個(gè)實(shí)施例中,來(lái)自dsf標(biāo)簽查找的進(jìn)入地址在完全關(guān)聯(lián)lsf標(biāo)簽查找中被進(jìn)行命中測(cè)試。未命中被分配以被推進(jìn)的寫(xiě)入指針處的條目。未命中被發(fā)送到l1c。在一個(gè)實(shí)施例中,既作為串流fifo也作為l1c與解壓縮器控制(dlc)之間的緩沖器,lsf控制fifo功能。
圖10根據(jù)一實(shí)施例圖示了agc過(guò)程流。組織紋素請(qǐng)求的過(guò)程被分散在多個(gè)步驟上(s0、s1、s2、s3、s4),其中每個(gè)步驟嘗試組合滿足約束集合更大或不同的一組請(qǐng)求。在一個(gè)實(shí)施例中,約束的集合包括來(lái)自每個(gè)存儲(chǔ)庫(kù)的不多于四條不同的高速緩存線和不多于一個(gè)雙字。然而,將會(huì)理解可利用其他約束。在第一步驟s1中,檢查源自于每個(gè)像素的請(qǐng)求以找出用于這些請(qǐng)求的高速緩存線地址。每個(gè)高速緩存線地址隨后被鏈接到四個(gè)請(qǐng)求的每一者所要求的存儲(chǔ)庫(kù)偏移量。此過(guò)程在圖8中被稱(chēng)為桶裝(bucketing)。第一步驟s1因此產(chǎn)生四個(gè)群組,每個(gè)群組具有四個(gè)桶,每個(gè)桶包含最多達(dá)四個(gè)紋素請(qǐng)求。在后續(xù)步驟中,每個(gè)桶可包含許多另外的紋素請(qǐng)求,只要它們不與該群組中的其他請(qǐng)求具有存儲(chǔ)庫(kù)沖突。在一個(gè)實(shí)施例中,驅(qū)動(dòng)器軟件組織紋理數(shù)據(jù)以使得與一像素相關(guān)聯(lián)的請(qǐng)求極為不可能具有存儲(chǔ)庫(kù)沖突。然而,在存在存儲(chǔ)庫(kù)沖突的罕見(jiàn)情況下,相應(yīng)的像素的請(qǐng)求被單獨(dú)處理。
在第二步驟s2中,考慮桶對(duì)的兩個(gè)組合。例如,對(duì)p0&p1的桶裝檢查與曾在兩個(gè)不同桶集合中的像素p0和p1相關(guān)聯(lián)的所有請(qǐng)求是否能被放入單個(gè)桶集合中,而同時(shí)仍滿足約束,即,從每個(gè)存儲(chǔ)庫(kù)不多于四條不同高速緩存線且不多于一個(gè)雙字。在第二步驟結(jié)束時(shí),我們具有兩個(gè)情況的桶裝,其中像素被不同的配對(duì)。
第三步驟s3檢查兩組配對(duì)是否失敗,在失敗的情況下我們對(duì)p0和p3的第三配對(duì)進(jìn)行桶裝并且如果該桶裝符合約束的話則發(fā)送對(duì)p0&p3的請(qǐng)求。在此之后是檢查p1&p2(未示出)。然而,最常見(jiàn)的情況是兩個(gè)情況1和2都符合所有約束,在此情況下該過(guò)程考慮桶裝所有四個(gè)像素,如“桶裝p0&p1&p2&p3”所示。再一次,示例情況是此桶裝是成功的并且來(lái)自四個(gè)像素的請(qǐng)求的所有請(qǐng)求都可在同一周期中被處理。
圖10也圖示了其他情況,例如當(dāng)像素p0的請(qǐng)求必須被單獨(dú)發(fā)送時(shí),如步驟s4中所示。該過(guò)程是層次化的,開(kāi)始于單個(gè)像素的請(qǐng)求,然后構(gòu)建對(duì),最后是就其標(biāo)簽和數(shù)據(jù)存儲(chǔ)庫(kù)訪問(wèn)要求而言兼容的像素的四方。該過(guò)程在全部四個(gè)像素都被桶裝在一起的常見(jiàn)情況下高效地終止,但對(duì)于在其他情況下迅速確定兼容的子集也是有用的。
圖11根據(jù)一實(shí)施例示出了三個(gè)可能塊映射的示例的紋理高速緩存邊界和astc塊圖。圖12圖示了15x15astc紋理的示例。粗黑線1105示出了tc0中的高速緩存線邊界和未命中時(shí)對(duì)dc的請(qǐng)求。細(xì)黑線1110示出了紋理的astc5x5塊邊界。在未命中時(shí),tc0從td中的astc解碼器請(qǐng)求4x2紋素網(wǎng)格。取決于高速緩存線未命中,三種類(lèi)型的請(qǐng)求是可能的。對(duì)于0類(lèi)塊,未命中映射在一個(gè)astc5x5塊內(nèi)。td將在2個(gè)周期中遞送解碼的紋素(吞吐量而不是延時(shí)的度量)。對(duì)于1類(lèi)塊,未命中映射到兩個(gè)astc5x5塊。td將在2個(gè)(塊b)或3個(gè)(塊a)周期中對(duì)該塊解碼。塊a在第二個(gè)astc塊上要求2個(gè)周期(因?yàn)槠湫枰獙?duì)6個(gè)紋素解碼)并且在第一個(gè)astc塊上要求1個(gè)周期(1cx2r)。塊b在兩個(gè)astc塊的每一者上要求1個(gè)周期。2類(lèi)塊未命中映射到4個(gè)astc5x5塊上。塊a和b兩者對(duì)于解碼都要求四個(gè)周期。在一個(gè)實(shí)施例中,td被要求對(duì)2cx2r、4cx1r(或子集)和1cx2r塊解碼以支持吞吐量。
除了支持astc以外,串流fifo2在示例實(shí)施例中還可高效地支持etc2壓縮格式。結(jié)果,在一個(gè)實(shí)施例中,串流fifo2包括4個(gè)128比特寬的存儲(chǔ)庫(kù),足以存儲(chǔ)8個(gè)astc解碼紋素或16個(gè)etc2解碼紋素。每個(gè)存儲(chǔ)庫(kù)在示例實(shí)施例中具有對(duì)通道掩蔽的支持和寫(xiě)入高64b或低64b的能力。就astc解碼紋素的4x2塊內(nèi)的紋素編號(hào)而言,存儲(chǔ)庫(kù)0保存紋素0和1,存儲(chǔ)庫(kù)1保存紋素2和3,等等依此類(lèi)推。在示例實(shí)施例中,對(duì)于所有三種類(lèi)型的塊都沒(méi)有存儲(chǔ)庫(kù)沖突發(fā)生。
在示例實(shí)施例中,如果有靈活性的選擇,則解碼器對(duì)4cx1r或1cx2r塊解碼。td對(duì)于1類(lèi)塊b情況將只對(duì)2cx2r塊解碼。
現(xiàn)在將描述對(duì)于astc紋理的紋理高速緩存到紋理解壓縮器排序的示例。對(duì)于0類(lèi)塊,為了填充高速緩存線,可向td作出對(duì)于8個(gè)紋素的請(qǐng)求。對(duì)于向td單元請(qǐng)求解碼,存在兩個(gè)選擇。該請(qǐng)求可以是最多達(dá)2個(gè)4cxlr塊的請(qǐng)求或者最多達(dá)2個(gè)2cx2r塊的請(qǐng)求。
在一個(gè)實(shí)施例中,對(duì)于1類(lèi)塊,對(duì)于來(lái)自兩個(gè)astc塊的未壓縮數(shù)據(jù)作出請(qǐng)求。其從每個(gè)塊請(qǐng)求2-4個(gè)紋素。在一個(gè)實(shí)施例中,遵循以下順序:
·從左上astc塊請(qǐng)求1cx2r或2cx2r或3cx2r。
·對(duì)于lcx2r請(qǐng)求,在一個(gè)實(shí)施例中,串流fifo2解壓縮器輸出對(duì)于個(gè)體紋素到不同存儲(chǔ)庫(kù)的通道掩蔽具有支持(例如,紋素0被寫(xiě)入到存儲(chǔ)庫(kù)0,紋素4被寫(xiě)入到存儲(chǔ)庫(kù)2,紋素3被寫(xiě)入到存儲(chǔ)庫(kù)1,并且紋素6被寫(xiě)入到存儲(chǔ)庫(kù)3)。
·對(duì)于2cx2r情況,請(qǐng)求分別被寫(xiě)入到存儲(chǔ)庫(kù)0和存儲(chǔ)庫(kù)2,或者反之。
·從右上astc塊請(qǐng)求1cx2r或2cx2r或3cx2r。
·始終遵循請(qǐng)求的z序。
對(duì)于2類(lèi)塊,紋理高速緩存從四個(gè)astc塊請(qǐng)求數(shù)據(jù)。在這些情況下,保持z序。
從左上astc塊請(qǐng)求1cxlr或2cx1r或3cx1r。
·從右上astc塊請(qǐng)求1cx1r或2cxlr或3cxlr。
·從左下astc塊請(qǐng)求lcxlr或2cxlr或3cxlr。
·從右下astc塊請(qǐng)求lcxlr或2cxlr或3cxlr。
在這些情況下,排序是完全相同的,并且串流fifo2中對(duì)通道掩蔽的支持允許了數(shù)據(jù)被高效地寫(xiě)入。支持3cx2r要求td上的額外緩沖并且這可被進(jìn)一步分割成兩個(gè)3cx1r請(qǐng)求。
未壓縮域地址和存儲(chǔ)器中的相應(yīng)壓縮塊的地址之間的關(guān)系對(duì)于astc中使用的非2之冪塊大小可能是復(fù)雜的。對(duì)齊的64b塊所需要的紋素?cái)?shù)據(jù)可來(lái)自多個(gè)壓縮塊。
圖12圖示了示出astc5x5:64b紋素的示例。邊界由細(xì)黑線1110圖示。塊在細(xì)黑線中在第一行上從00..02編號(hào),最后一行編號(hào)為20…22。高速緩存線包含4個(gè)astc塊(00、01、10、11)。
紋理高速緩存塊是4x264b紋素。塊邊界由粗黑線1105圖示。塊在粗黑線中在第一行上從00..03編號(hào)并且在第一列上編號(hào)為00至50。
第一訪問(wèn)具有作為0的示為陰影塊的紋素足跡并且第二訪問(wèn)具有作為1的斜線塊足跡。
從空高速緩存/緩沖器開(kāi)始,第一訪問(wèn)將具有(00,01,10,11)的高速緩存線帶入lsf中,對(duì)astc細(xì)黑塊00解壓縮并存儲(chǔ)在dsf中,用未壓縮的粗黑塊10、20填充tc0。
第二訪問(wèn)對(duì)于astc塊00在dsf中命中并且對(duì)于astc塊(01,10,11)在lsf中命中。這節(jié)省了對(duì)astc塊00的重復(fù)解壓縮和對(duì)于包含(01,10,11)的高速緩存線再次訪問(wèn)l1c。
對(duì)astc塊(01,10,11)執(zhí)行解壓縮。合并器組合所有三個(gè)加上解壓縮的00來(lái)生成未壓縮的粗黑塊21。這用未壓縮的粗黑塊21填充tc0。
本發(fā)明的實(shí)施例的一個(gè)示范性但非限制性的應(yīng)用在移動(dòng)環(huán)境中。在移動(dòng)環(huán)境中,對(duì)于將數(shù)據(jù)從主存儲(chǔ)器經(jīng)由l2高速緩存?zhèn)魉偷絞pu的紋理高速緩存所要求的存儲(chǔ)器帶寬和功率存在約束。將雙字(4b)從低功率雙數(shù)據(jù)率隨機(jī)訪問(wèn)存儲(chǔ)器(lowpowerdoubledataraterandomaccessmemory,lpddr)移動(dòng)到l1高速緩存的能量成本被估計(jì)為是進(jìn)行浮點(diǎn)操作的約50倍。從而,本文公開(kāi)的示例實(shí)施例可促進(jìn)在移動(dòng)gpu的紋理單元中實(shí)現(xiàn)高壓縮因子的壓縮格式。
雖然壓縮格式就數(shù)據(jù)移動(dòng)成本而言可能是能量效率高的,但與解壓縮相關(guān)聯(lián)的能量成本可能是相當(dāng)大的。例如,在示例塊壓縮格式中,解壓縮器在兩個(gè)顏色之間線性插值來(lái)生成總共比如四種顏色。解壓縮器隨后基于紋素地址選擇索引并且使用該2b索引來(lái)選擇四個(gè)顏色之一。插值的能量成本可能是相當(dāng)大的。索引機(jī)制引入了兩個(gè)級(jí)別的查找。隨著支持多種更精致壓縮方案的趨勢(shì),解壓縮和數(shù)據(jù)路由能量成本可占整體紋理單元功率的重大部分。
為了將這些成本的一些分?jǐn)傇诙鄠€(gè)紋素訪問(wèn)上,紋理高速緩存體系結(jié)構(gòu)的示例實(shí)施例在解壓縮器和尋址邏輯之間插入第0級(jí)(tc0)高速緩存。tc0高速緩存保存解壓縮的紋素,這與以壓縮格式保存紋素?cái)?shù)據(jù)的第1級(jí)高速緩存(l1c)不同。解壓縮的能量成本被分?jǐn)傇诙鄠€(gè)周期中、多個(gè)紋素訪問(wèn)上。例如,如果在四個(gè)連續(xù)的周期中從4x4壓縮塊訪問(wèn)四個(gè)紋素,則tc0高速緩存在四個(gè)周期中保存未壓縮紋素并且解壓縮成本只被招致一次,與沒(méi)有解壓縮tc0高速緩存情況下的四次形成對(duì)比。
對(duì)傳統(tǒng)上用于支持非2之冪塊尺寸的功率和面積作出貢獻(xiàn)的另一因素是雖然高速緩存線包含具有例如8x4這樣的2之冪尺寸的未壓縮紋素塊,但存儲(chǔ)器中的壓縮塊的尺寸可以是非2之冪的,例如7x5。在這種情況下,壓縮塊的邊界可不與高速緩存線中的2之冪塊的邊界對(duì)齊。在這個(gè)特定示例中,填充8x4可要求兩個(gè)7x5塊或4個(gè)7x5塊。結(jié)果,紋理解壓縮器必須對(duì)許多壓縮塊解壓縮來(lái)填充高速緩存線中的所有紋素。示例實(shí)施例可被利用來(lái)對(duì)非2之冪塊尺寸支持改善的性能。相同壓縮塊(或同一l1c高速緩存線中的其他塊)中的許多可能是填充接下來(lái)幾個(gè)未命中高速緩存線中的紋素所必需的并且必須被從l1c重復(fù)取得,導(dǎo)致了浪費(fèi)的帶寬和功率。保存最近訪問(wèn)的壓縮塊的串流fifo1可起到減少對(duì)l1c的訪問(wèn)的作用。如果接下來(lái)幾個(gè)高速緩存線填充請(qǐng)求要求相同的壓縮塊,則串流fifo1將它們遞送到td,而不要求l1c訪問(wèn)。
紋理高速緩存體系結(jié)構(gòu)的實(shí)施例的一個(gè)方面是紋理高速緩存客戶端對(duì)于延時(shí)是相對(duì)不敏感的。在cpu第1級(jí)高速緩存中,標(biāo)簽訪問(wèn)和數(shù)據(jù)訪問(wèn)被并行進(jìn)行(或者使用某種方式的預(yù)測(cè)硬件)來(lái)將高速緩存命中延時(shí)減少到大約1-4個(gè)周期。由于涉及例如細(xì)節(jié)層次(levelofdetail,lod)計(jì)算和紋理過(guò)濾操作的復(fù)雜尋址邏輯,即使在沒(méi)有任何第1級(jí)未命中的情況下紋理單元的延時(shí)也可超過(guò)50個(gè)周期。在高速緩存未命中、然后是到不同地址的高速緩存命中的情況下,cpu高速緩存立即遞送命中高速緩存的數(shù)據(jù),而不是等待不相關(guān)的未命中數(shù)據(jù)從下一個(gè)存儲(chǔ)器層次體系級(jí)別到達(dá)。這種不按順序的或者未命中之下命中(hit-under-miss)的數(shù)據(jù)返回可減少cpu中的單個(gè)線程的延時(shí),但不在gpu中提供重大的益處,這是由于著色器核訪問(wèn)的向量性和圖形流水線的整體有序性??紤]到著色器性能對(duì)于紋理延時(shí)的相對(duì)不敏感性、由于紋理尋址和過(guò)濾引起的大的固定成分以及整體圖形流水線的有序性,對(duì)cpu第1級(jí)高速緩存組織的替換方案是有吸引力的。
在一個(gè)實(shí)施例中,發(fā)送到紋理高速緩存體系結(jié)構(gòu)108的所有地址被有序地處理。在高速緩存未命中之后是高速緩存命中的情況下,高速緩存命中的數(shù)據(jù)的遞送被延遲,直到高速緩存未命中的數(shù)據(jù)之后為止。另外,標(biāo)簽陣列中的命中不一定意味著相應(yīng)的數(shù)據(jù)存在于高速緩存中,而只意味著一旦所有先前引用被處理其就將存在于高速緩存中。其中所有引用被有序地整體流傳輸過(guò)高速緩存的這個(gè)紋理高速緩存的串流行為帶來(lái)了重要的益處和設(shè)計(jì)簡(jiǎn)化。在圖形流水線中,狀態(tài)和工作是有序的,也就是說(shuō),接收到的任何狀態(tài)只適用于后來(lái)的工作請(qǐng)求。對(duì)未命中前的命中的無(wú)序處理使?fàn)顟B(tài)到數(shù)據(jù)的應(yīng)用復(fù)雜化。例如,紋理過(guò)濾邏輯必須認(rèn)識(shí)到較新的狀態(tài)要被應(yīng)用到命中,而同時(shí)其保持著較舊的狀態(tài)來(lái)應(yīng)用到未命中。在其他高速緩存中,如果標(biāo)簽比較在主標(biāo)簽陣列上失敗,則控制邏輯進(jìn)一步發(fā)起對(duì)于在同一高速緩存線上是否有更早的未解決的未命中的檢查。在示例實(shí)施例中,此檢查在串流高速緩存中是不必要的。
在一個(gè)實(shí)施例中,一種圖形處理單元的示例包括:控制器,被配置為接收對(duì)于第一像素群組的紋素?cái)?shù)據(jù)的第一請(qǐng)求;第一緩沖器,存儲(chǔ)響應(yīng)于第一請(qǐng)求從第一紋理高速緩存取得的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊,壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊至少包括所請(qǐng)求的紋素?cái)?shù)據(jù);紋理解壓縮器,對(duì)存儲(chǔ)在第一緩沖器中的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊解壓縮;以及第二緩沖器,存儲(chǔ)解壓縮的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊并且將解壓縮的所請(qǐng)求的紋素?cái)?shù)據(jù)作為輸出提供到第二紋理高速緩存;其中由第一緩沖器存儲(chǔ)的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊除了所請(qǐng)求的紋素?cái)?shù)據(jù)以外還包括第二紋素?cái)?shù)據(jù)。在一個(gè)實(shí)施例中,第一緩沖器可以是第一fifo緩沖器并且第二緩沖器可以是第二fifo緩沖器。在一個(gè)實(shí)施例中,由第一緩沖器存儲(chǔ)的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊除了所請(qǐng)求的紋素?cái)?shù)據(jù)以外還可包括第二紋素?cái)?shù)據(jù)。在一個(gè)實(shí)施例中,控制器可被配置為接收對(duì)于第二像素群組的紋素?cái)?shù)據(jù)的第二請(qǐng)求,第一請(qǐng)求的一個(gè)或多個(gè)塊的至少一部分對(duì)應(yīng)于第二像素群組的至少一部分;并且第一緩沖器被配置為響應(yīng)于第二請(qǐng)求向紋理解壓縮器提供該一個(gè)或多個(gè)塊的該部分,而沒(méi)有從第一高速緩存的第二次取得。在一個(gè)實(shí)施例中,控制器可被配置為接收對(duì)于第二像素群組的紋素?cái)?shù)據(jù)的第二請(qǐng)求,第二請(qǐng)求的至少一個(gè)紋素對(duì)應(yīng)于由于處理第一請(qǐng)求而存儲(chǔ)在第二緩沖器中的解壓縮紋素?cái)?shù)據(jù);并且第一緩沖器被配置為響應(yīng)于第二請(qǐng)求而向第二紋理高速緩存提供第二請(qǐng)求的該至少一個(gè)紋素,而沒(méi)有從第一緩沖器的第二次解壓縮。在一個(gè)實(shí)施例中,第一紋理高速緩存可被配置為存儲(chǔ)非2之冪塊大小。在一個(gè)實(shí)施例中,第二紋理高速緩存可被配置為存儲(chǔ)2之冪塊大小。在一個(gè)實(shí)施例中,可包括合并器單元來(lái)在存儲(chǔ)在第二紋理高速緩存中之前合并解壓縮的紋理數(shù)據(jù)。在一個(gè)實(shí)施例中,第一紋理高速緩存存儲(chǔ)根據(jù)自適應(yīng)可縮放紋理壓縮(astc)編解碼器的塊大小。在一個(gè)實(shí)施例中,控制器可控制第一緩沖器的第一讀取指針以選擇第一緩沖器內(nèi)的個(gè)體條目并且控制第二緩沖器的第二讀取指針以選擇第二緩沖器內(nèi)的個(gè)體條目。
在一個(gè)實(shí)施例中,一種操作圖形處理單元的方法的示例包括:接收對(duì)于第一像素群組的紋素?cái)?shù)據(jù)的第一請(qǐng)求;從第一紋理高速緩存取得所請(qǐng)求的壓縮紋素?cái)?shù)據(jù);將取得的壓縮紋素?cái)?shù)據(jù)緩沖在第一緩沖器中;將第一緩沖器的輸出提供到紋理解壓縮器并且對(duì)壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊解壓縮;將解壓縮的紋素?cái)?shù)據(jù)緩沖在第二緩沖器中;并且將第二緩沖器的輸出提供到第二紋理高速緩存;其中由第一緩沖器存儲(chǔ)的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊除了所請(qǐng)求的紋素?cái)?shù)據(jù)以外還包括第二紋素?cái)?shù)據(jù)。在一種方法的一個(gè)實(shí)施例中,第一緩沖器是第一fifo緩沖器并且第二緩沖器是第二fifo緩沖器。在一個(gè)實(shí)施例中,由第一緩沖器存儲(chǔ)的壓縮紋素?cái)?shù)據(jù)的一個(gè)或多個(gè)塊除了所請(qǐng)求的紋素?cái)?shù)據(jù)以外還包括第二紋素?cái)?shù)據(jù)。在一個(gè)特定實(shí)施例中,對(duì)第一緩沖器的讀取指針被選擇來(lái)再利用第一緩沖器中的紋素?cái)?shù)據(jù)以服務(wù)多于一個(gè)對(duì)紋素?cái)?shù)據(jù)的請(qǐng)求。在一個(gè)實(shí)施例中,對(duì)第二緩沖器的讀取指針被選擇來(lái)再利用第二緩沖器中的紋素?cái)?shù)據(jù)以服務(wù)多于一個(gè)對(duì)紋素?cái)?shù)據(jù)的請(qǐng)求。一個(gè)實(shí)施例包括再利用為第一請(qǐng)求取得的第一緩沖器中的紋素?cái)?shù)據(jù)來(lái)至少部分服務(wù)對(duì)于第二像素群組的紋素?cái)?shù)據(jù)的第二請(qǐng)求,而沒(méi)有從第一紋理高速緩存的第二次取得。在一個(gè)實(shí)施例中,第一紋理高速緩存被配置為存儲(chǔ)非2之冪塊大小。在一個(gè)實(shí)施例中,第二高速緩存被配置為存儲(chǔ)2之冪塊大小。一個(gè)實(shí)施例還包括在存儲(chǔ)在第二高速緩存中之前合并從第二緩沖器接收的解壓縮紋理數(shù)據(jù)。在一個(gè)特定實(shí)施例中,來(lái)自多個(gè)非2之冪塊的紋素?cái)?shù)據(jù)被合并。
在一個(gè)實(shí)施例中,一種圖形處理單元的示例包括:第一紋理高速緩存,被配置為存儲(chǔ)壓縮紋素?cái)?shù)據(jù);第二紋理高速緩存,被配置為存儲(chǔ)已從第一紋理高速緩存解壓縮的紋素?cái)?shù)據(jù);以及控制器,被配置為接收對(duì)于像素群組的紋素?cái)?shù)據(jù)的請(qǐng)求,并且為了該紋素?cái)?shù)據(jù)安排對(duì)第一紋理高速緩存或第二紋理高速緩存的訪問(wèn)。在一個(gè)實(shí)施例中,控制器還被配置為:判定在第二紋理高速緩存中對(duì)于所請(qǐng)求的紋素?cái)?shù)據(jù)是存在高速緩存命中還是高速緩存未命中;響應(yīng)于對(duì)高速緩存未命中的判定,為所請(qǐng)求的紋素?cái)?shù)據(jù)訪問(wèn)第一紋理高速緩存;并且響應(yīng)于對(duì)高速緩存命中的判定,為所請(qǐng)求的紋素?cái)?shù)據(jù)訪問(wèn)第二紋理高速緩存。在一個(gè)實(shí)施例中,數(shù)據(jù)基于存在于訪問(wèn)集合中的局部性模式被組織到第二紋理高速緩存中。在一個(gè)實(shí)施例中,第二紋理高速緩存讓紋素?cái)?shù)據(jù)被分組到按莫頓序組織的與連續(xù)二維紋素塊相對(duì)應(yīng)的高速緩存線中。在一個(gè)實(shí)施例中,控制器還被配置為將請(qǐng)求的紋素地址的集合劃分成至少一個(gè)非沖突存儲(chǔ)器訪問(wèn)的序列。在一個(gè)實(shí)施例中,該至少一個(gè)非沖突存儲(chǔ)器訪問(wèn)不具有標(biāo)簽沖突或數(shù)據(jù)存儲(chǔ)庫(kù)沖突。在一個(gè)實(shí)施例中,控制器還被配置為基于每存儲(chǔ)庫(kù)的不同高速緩存線的數(shù)目或雙字的數(shù)目中的至少一者來(lái)組合滿足約束集合的紋素請(qǐng)求。在一個(gè)實(shí)施例中,控制器還被配置為:查找源自于像素群組的每個(gè)像素的紋素請(qǐng)求所要求的高速緩存線地址;并且組合滿足從每個(gè)存儲(chǔ)庫(kù)不多于四條不同高速緩存線和不多于一個(gè)雙字的約束的紋素請(qǐng)求。在一個(gè)實(shí)施例中,第二紋理高速緩存具有4向入庫(kù)標(biāo)簽查找和16向入庫(kù)數(shù)據(jù)存儲(chǔ)。在一個(gè)實(shí)施例中,第二紋理高速緩存中的紋素的布局被選擇來(lái)確保紋素足跡中的四方紋素在不同存儲(chǔ)庫(kù)上。
在一個(gè)實(shí)施例中,一種操作圖形處理單元的方法的示例包括:將壓縮紋素?cái)?shù)據(jù)存儲(chǔ)在第一紋理高速緩存中;在第二紋理高速緩存中存儲(chǔ)已從第一紋理高速緩存解壓縮的紋素?cái)?shù)據(jù);接收對(duì)于像素群組的紋素?cái)?shù)據(jù)的請(qǐng)求,并且為了該紋素?cái)?shù)據(jù)安排對(duì)第一紋理高速緩存或第二紋理高速緩存的訪問(wèn)。在一個(gè)實(shí)施例中,安排包括:判定在第二紋理高速緩存中對(duì)于所請(qǐng)求的紋素?cái)?shù)據(jù)是存在高速緩存命中還是高速緩存未命中;響應(yīng)于對(duì)高速緩存未命中的判定,為所請(qǐng)求的紋素?cái)?shù)據(jù)訪問(wèn)第一紋理高速緩存;并且響應(yīng)于對(duì)高速緩存命中的判定,為所請(qǐng)求的紋素?cái)?shù)據(jù)訪問(wèn)第二紋理高速緩存。一個(gè)實(shí)施例還包括將第二紋理高速緩存中的紋素?cái)?shù)據(jù)組織到貼片(tile)中,在這些貼片內(nèi)高速緩存線被以莫頓序組織以使得連續(xù)二維紋素塊要求小于預(yù)定義數(shù)目的不同高速緩存線和標(biāo)簽查找。一個(gè)實(shí)施例還包括將請(qǐng)求的紋素地址的集合劃分成非沖突訪問(wèn)集合的集合。在一個(gè)實(shí)施例中,非沖突訪問(wèn)集合不具有標(biāo)簽沖突或數(shù)據(jù)存儲(chǔ)庫(kù)沖突。一個(gè)實(shí)施例還包括基于每存儲(chǔ)庫(kù)的不同高速緩存線的數(shù)目或雙字的數(shù)目中的至少一者來(lái)組合滿足關(guān)于數(shù)目的約束的集合的紋素請(qǐng)求。在一個(gè)實(shí)施例中,組合紋素請(qǐng)求包括組合滿足從每個(gè)存儲(chǔ)庫(kù)不多于四條不同高速緩存線和不多于一個(gè)雙字的約束的紋素請(qǐng)求。在一個(gè)實(shí)施例中,第二紋理高速緩存具有4向入庫(kù)標(biāo)簽查找和16向入庫(kù)數(shù)據(jù)存儲(chǔ)。在一個(gè)實(shí)施例中,第二紋理高速緩存中的紋素的布局被選擇來(lái)確保紋素足跡中的四方紋素在不同存儲(chǔ)庫(kù)上。在一個(gè)實(shí)施例中,數(shù)據(jù)基于存在于訪問(wèn)集合中的局部性模式被組織到第二紋理高速緩存中。
雖然已結(jié)合特定實(shí)施例描述了本發(fā)明,但將會(huì)理解并不意圖將本發(fā)明限制到描述的實(shí)施例。相反,意圖覆蓋可包括在如所附權(quán)利要求限定的本發(fā)明的精神和范圍內(nèi)的替換、修改和等同。沒(méi)有這些具體細(xì)節(jié)中的一些或全部,也可實(shí)現(xiàn)實(shí)施例。此外,可不詳細(xì)描述公知的特征以避免不必要地模糊本發(fā)明。根據(jù)本發(fā)明,組件、過(guò)程步驟和/或數(shù)據(jù)結(jié)構(gòu)可利用各種類(lèi)型的操作系統(tǒng)、編程語(yǔ)言、計(jì)算平臺(tái)、計(jì)算機(jī)程序和/或計(jì)算設(shè)備來(lái)實(shí)現(xiàn)。此外,本領(lǐng)域普通技術(shù)人員將會(huì)認(rèn)識(shí)到,在不脫離本文公開(kāi)的發(fā)明構(gòu)思的范圍和精神的情況下,也可使用諸如硬連線設(shè)備、現(xiàn)場(chǎng)可編程門(mén)陣列(fieldprogrammablegatearray,fpga)、專(zhuān)用集成電路(applicationspecificintegratedcircuit,asic)之類(lèi)的設(shè)備。本發(fā)明也可有形地體現(xiàn)為存儲(chǔ)在諸如存儲(chǔ)器設(shè)備之類(lèi)的計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)指令的集合。