背景技術(shù):
圖形和中央處理器可以具有存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)具有相對(duì)快速的大的近存儲(chǔ)器(nm)高速緩沖存儲(chǔ)器,并且這又被廉價(jià)的而且慢得多的遠(yuǎn)存儲(chǔ)器(fm)支持。在這樣的分級(jí)的存儲(chǔ)器體系結(jié)構(gòu)中,在nm中獲得盡可能高的命中率是非常重要的,因?yàn)槲疵?,?qǐng)求將被發(fā)送到fm,并且在請(qǐng)求的數(shù)據(jù)是可存取的之前,將會(huì)花費(fèi)相對(duì)長(zhǎng)的時(shí)間。例如,近存儲(chǔ)器可以是安裝在片上系統(tǒng)的圖形/中央處理單元上的易失性存儲(chǔ)器(即動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)。遠(yuǎn)存儲(chǔ)器可以是諸如閃速存儲(chǔ)器的非易失性存儲(chǔ)器。
同時(shí),處理器可以把它的緩沖器中的某些緩沖器壓縮成小的固定大小的集合。對(duì)于快速隨機(jī)存取,“稀疏地”(非連續(xù)地)存儲(chǔ)壓縮的高速緩沖存儲(chǔ)器線路。當(dāng)前,因?yàn)閚m無法利用這種類型的壓縮,nm中的壓縮的數(shù)據(jù)仍然具有與nm中的未壓縮的數(shù)據(jù)相同的占用(footprint)。因此,在任何時(shí)間實(shí)例未使用更昂貴的nm的相當(dāng)大的部分。
當(dāng)前的渲染高速緩沖存儲(chǔ)器數(shù)據(jù)壓縮技術(shù)(例如用于顏色)并未減少渲染緩沖器的存儲(chǔ)器占用。那些技術(shù)僅僅減少了到存儲(chǔ)器和來自存儲(chǔ)器的數(shù)據(jù)業(yè)務(wù)的量。壓實(shí)是減少已經(jīng)壓縮的數(shù)據(jù)的存儲(chǔ)器占用的方式。
其它有損數(shù)據(jù)壓縮技術(shù)可以減少占用,但是僅以質(zhì)量的潛在無限制的損失來減少占用。例如,被重復(fù)地讀取/修改/寫入的有損壓縮的緩沖器可以使質(zhì)量惡化。數(shù)據(jù)損失在許多情況下是不可接受的(例如,由于api兼容性、視覺偽像、非圖像數(shù)據(jù)導(dǎo)致的)。
壓實(shí)是減少已經(jīng)壓縮的數(shù)據(jù)的存儲(chǔ)器占用而不會(huì)引入任何損失的方式。在觸發(fā)昂貴的遠(yuǎn)存儲(chǔ)器(fm)訪問之前,nm中的占用減少使能存儲(chǔ)更多的數(shù)據(jù)。因此,在某些實(shí)施例中,nm的視在容量被增加,導(dǎo)致了更高的性能、不太昂貴的片上系統(tǒng)以及減少的功耗。
附圖說明
關(guān)于下列圖來描述某些實(shí)施例:
圖1是一個(gè)實(shí)施例的示意性描繪;
圖2是用于壓實(shí)緩沖器的一個(gè)實(shí)施例的流程圖;
圖3是用于根據(jù)一個(gè)實(shí)施例的壓實(shí)的流程圖;
圖4是根據(jù)一個(gè)實(shí)施例的壓實(shí)的描繪;
圖5是根據(jù)又一個(gè)實(shí)施例的壓實(shí)的示意性描繪;
圖6是用于另一個(gè)實(shí)施例的示意性描繪;
圖7是用于另一個(gè)實(shí)施例的操作圖;
圖8是用于根據(jù)一個(gè)實(shí)施例的壓實(shí)守護(hù)進(jìn)程(daemon)的流程圖;
圖9是用于選擇要壓實(shí)的頁面的算法的流程圖;
圖10是根據(jù)一個(gè)實(shí)施例的處理系統(tǒng)的框圖;
圖11是根據(jù)一個(gè)實(shí)施例的處理器的框圖;
圖12是根據(jù)一個(gè)實(shí)施例的圖形處理器的框圖;
圖13是根據(jù)一個(gè)實(shí)施例的圖形處理引擎的框圖;
圖14是圖形處理器的另一個(gè)實(shí)施例的框圖;
圖15是根據(jù)一個(gè)實(shí)施例的線程執(zhí)行邏輯的描繪;
圖16是根據(jù)某些實(shí)施例的圖形處理器指令格式的框圖;
圖17是圖形處理器的另一個(gè)實(shí)施例的框圖;
圖18a是根據(jù)某些實(shí)施例的圖形處理器命令格式的框圖;
圖18b是說明根據(jù)某些實(shí)施例的圖形處理器命令序列的框圖;
圖19是根據(jù)某些實(shí)施例的示范的圖形軟件體系結(jié)構(gòu)的描繪;
圖20是說明根據(jù)某些實(shí)施例的ip核開發(fā)系統(tǒng)的框圖;以及
圖21是示出根據(jù)某些實(shí)施例的示范的片上系統(tǒng)集成電路的框圖。
具體實(shí)施方式
根據(jù)某些實(shí)施例,與壓縮形成對(duì)照,壓實(shí)被用來減少近存儲(chǔ)器的占用。在壓實(shí)中,存儲(chǔ)設(shè)備內(nèi)的數(shù)據(jù)存儲(chǔ)的密度被增加了。在壓縮中,被用來表示信息的比特?cái)?shù)量被減少了。因此,你可以進(jìn)行壓縮,同時(shí)仍然具有稀疏的或者非連續(xù)布置的存儲(chǔ)。作為結(jié)果,壓縮可以并非總是減少存儲(chǔ)器占用。通過壓實(shí)壓縮的數(shù)據(jù),可以減少存儲(chǔ)器內(nèi)存儲(chǔ)的信息的占用。有時(shí)壓實(shí)可以減少對(duì)于遠(yuǎn)存儲(chǔ)器訪問的需要。
根據(jù)第一技術(shù),在來自緩沖器(諸如渲染緩沖器)的數(shù)據(jù)進(jìn)入近存儲(chǔ)器之前所述數(shù)據(jù)被壓實(shí)。這可以使用緩沖的壓實(shí)技術(shù)來進(jìn)行。
根據(jù)另一個(gè)實(shí)施例,壓實(shí)守護(hù)進(jìn)程可以在近存儲(chǔ)器上獨(dú)立操作以釋放空間。根據(jù)某些實(shí)施例,可以盡可能晚地進(jìn)行使用壓實(shí)守護(hù)進(jìn)程的壓實(shí)以減少過早壓實(shí)時(shí)不必要的存儲(chǔ)器業(yè)務(wù)和邏輯。
守護(hù)進(jìn)程是在預(yù)先確定的時(shí)間或者響應(yīng)于某些事件而執(zhí)行指定的操作的過程。它可以是計(jì)算機(jī)程序、固件或硬件。通常,并不由用戶來調(diào)用守護(hù)進(jìn)程。
近存儲(chǔ)器和遠(yuǎn)存儲(chǔ)器可以被耦合至處理器。近存儲(chǔ)器比遠(yuǎn)存儲(chǔ)器更快并且由遠(yuǎn)存儲(chǔ)器來支持近存儲(chǔ)器。編解碼器被耦合至渲染高速緩沖存儲(chǔ)器。根據(jù)第一技術(shù),所述編解碼器和近存儲(chǔ)器之間的緩沖器為編解碼器存儲(chǔ)壓縮的數(shù)據(jù)。為更連續(xù)的(或者不太稀疏的)尋址存儲(chǔ)的緩沖器中的壓實(shí)且壓縮的數(shù)據(jù)比當(dāng)被壓縮但是未被壓實(shí)時(shí)的相同數(shù)據(jù)具有更小的占用。
利用壓縮,在從顏色高速緩沖存儲(chǔ)器被逐出時(shí),近存儲(chǔ)器(nm)中的高速緩沖存儲(chǔ)器線路可以被壓縮降到給定大小的子塊的倍數(shù),因此將數(shù)據(jù)業(yè)務(wù)減少到遠(yuǎn)存儲(chǔ)器(fm)的更低級(jí)高速緩沖存儲(chǔ)器。例如,壓縮可以是2:n或4:n。高速緩沖存儲(chǔ)器線路可以典型地是128b或256b。那么,在一個(gè)實(shí)施例中,可以將高速緩沖存儲(chǔ)器線路壓縮到64b子塊的整數(shù)倍或整數(shù)數(shù)量。
可以將近存儲(chǔ)器分解成被稱為近存儲(chǔ)器頁面大小的分配的大小的頁面。壓實(shí)頁面組是一組連續(xù)尋址的nm頁面。壓實(shí)頁面組大小是nm的頁面分配大小的倍數(shù)。
例如,在512字節(jié)的nm頁面分配大小和2,048字節(jié)的壓實(shí)頁面組大小的情況下,結(jié)合壓縮的高速緩沖存儲(chǔ)器線路以適合更少數(shù)量的nm頁面(在這種情況下是一個(gè)、兩個(gè)或三個(gè)nm頁面,而不是四個(gè))是可能的,因此減少了nm中的所需要的占用。如果壓縮的高速緩沖存儲(chǔ)器線路的數(shù)量太低(即,很少的壓縮的線路或者低壓縮率),有時(shí)壓實(shí)可能是不可能的。
雖然在來自渲染高速緩沖存儲(chǔ)器的圖形數(shù)據(jù)的上下文中給出了示例,但是實(shí)施例通??蛇m用于處理使用壓縮的隨機(jī)訪問數(shù)據(jù)的具有兩個(gè)或多于兩個(gè)級(jí)別的存儲(chǔ)器分級(jí)體系中的壓縮的數(shù)據(jù)。
正如圖1中所示出的,在使用渲染高速緩沖存儲(chǔ)器的實(shí)施例中,中央處理單元或圖形處理單元(gpu)10與渲染高速緩沖存儲(chǔ)器12(諸如顏色高速緩沖存儲(chǔ)器)和遠(yuǎn)存儲(chǔ)器11通信。渲染高速緩沖存儲(chǔ)器可以是被用于為包括顏色高速緩沖存儲(chǔ)器的圖形處理器存儲(chǔ)壓縮的數(shù)據(jù)的任何高速緩沖存儲(chǔ)器。在壓縮和解壓縮像素?cái)?shù)據(jù)的編解碼器16之后提供壓實(shí)緩沖器(cb)14。壓實(shí)緩沖器收集屬于壓實(shí)頁面組的壓縮的高速緩沖存儲(chǔ)器線路(cl)(例如,對(duì)于512b的nm頁面大小,為2kb)。如果壓實(shí)頁面組被完全填充的話,它可以被安全壓實(shí)并且從壓實(shí)緩沖器被驅(qū)逐到nm18。如果數(shù)據(jù)被充分壓實(shí)的話,它在壓實(shí)之后可需要nm中相當(dāng)少的占用。
如下面更詳細(xì)地描述的,當(dāng)壓實(shí)且壓縮的數(shù)據(jù)從nm被讀取、修改并且寫回時(shí),數(shù)據(jù)可占用比之前更多或更少的數(shù)據(jù),導(dǎo)致擴(kuò)展和收縮。假定合理大小的壓實(shí)緩沖器,可以避免這些事件中的許多事件。
在某些實(shí)施例中,與在存儲(chǔ)器系統(tǒng)的更遠(yuǎn)的部分(即遠(yuǎn)存儲(chǔ)器(fm))中相反,nm中的占用減少使能nm中的更多并且更大的渲染目標(biāo)和緩沖器的存儲(chǔ),因此減少了功耗和等待時(shí)間并且導(dǎo)致更高的性能渲染。本文描述的技術(shù)有時(shí)可以減少有限的nm容量的問題。
壓實(shí)緩沖器(cb)保持從渲染(例如顏色)高速緩沖存儲(chǔ)器中被逐出的高速緩沖存儲(chǔ)器線路。在某些實(shí)施例中,只有已經(jīng)被修改的高速緩沖存儲(chǔ)器線路被驅(qū)逐到cb??梢詨嚎s或者不壓縮這些高速緩沖存儲(chǔ)器線路。壓實(shí)控制表面17追蹤并且記錄如何通過編解碼器來壓縮特定的高速緩沖存儲(chǔ)器線路以及通過編解碼器來將特定的高速緩沖存儲(chǔ)器線路壓縮到什么程度。
與近存儲(chǔ)器相比,壓實(shí)緩沖器像近存儲(chǔ)器一樣快,但是要小得多。通常,壓實(shí)緩沖器可以與將壓縮的數(shù)據(jù)供給壓實(shí)緩沖器的渲染高速緩沖存儲(chǔ)器一樣快。在某些實(shí)施例中,壓實(shí)緩沖器可以在物理上被定位成靠近渲染高速緩沖存儲(chǔ)器。
cb中的項(xiàng)可以是被稱作壓實(shí)頁面組(cpg)的成組的連續(xù)尋址的nm頁面。在從渲染高速緩沖存儲(chǔ)器的逐出處,cb被檢查以察看它當(dāng)前是否保持對(duì)應(yīng)的cpg。在一種情況下,將高速緩沖存儲(chǔ)器線路映射到cpg的尋址邏輯是右移位操作以去除地址的最低有效位,但是如果需要的話,邏輯可以是更精細(xì)的。
控制表面15中的壓實(shí)控制表面(ccs)記住哪些nm頁面被壓實(shí)。這個(gè)ccs指示cpg是否被壓實(shí)。在一個(gè)實(shí)施例中,這個(gè)表面可以是每cpg單個(gè)比特并且它的位置是任意的,即它可以被存儲(chǔ)在片上或片外的專用緩沖器中,或者它可以是一般存儲(chǔ)器系統(tǒng)的一部分。
可以在軟件、固件和/或硬件中實(shí)現(xiàn)圖2中示出的、用于實(shí)現(xiàn)壓實(shí)緩沖器的序列20。在某些實(shí)施例中,可以在軟件或固件中以存儲(chǔ)在一個(gè)或多個(gè)非暫時(shí)性計(jì)算機(jī)可讀媒體(諸如磁的、光的或者半導(dǎo)體存儲(chǔ)裝置)中的計(jì)算機(jī)執(zhí)行的指令的形式來實(shí)現(xiàn)序列。例如,在某些實(shí)施例中,可以通過圖形處理單元來實(shí)現(xiàn)步驟。
在從渲染高速緩沖存儲(chǔ)器的逐出處(圖2,菱形22),存在有至少兩種可能性:
1.如果高速緩沖存儲(chǔ)器線路的cpg存在于cb中(菱形24,是):
a.在cpg中存儲(chǔ)逐出的線路數(shù)據(jù),連同詳述高速緩沖存儲(chǔ)器線路如何被壓縮以及將高速緩沖存儲(chǔ)器線路壓縮到什么程度的它的壓縮控制位)(塊26)。
2.如果高速緩沖存儲(chǔ)器線路的cpg未存在于cb中(菱形24,否):
a.如果cb未滿(菱形28,是),則可以分配一個(gè)空閑的cpg并且可以將逐出的線路存入它,連同對(duì)應(yīng)的壓縮控制位(塊30)。
b.如果cb是滿的(菱形28,否),cpg需要被逐出(塊32)。所使用的替換政策可以是任意的,但是在一個(gè)實(shí)施例中政策可以基于與cpg如何被填充的度量相結(jié)合的年齡(即,與最近最少使用的(lru)替換政策類似),并且還可能基于壓實(shí)性的量。在cpg被逐出之后,正如上面在2a中那樣,空的cpg槽被用來存儲(chǔ)逐出的高速緩沖存儲(chǔ)器線路。
可以在軟件、固件和/或硬件中實(shí)現(xiàn)圖3中示出的壓實(shí)序列34。在軟件和固件的實(shí)施例中,可以通過存儲(chǔ)在一個(gè)或多個(gè)非暫時(shí)性計(jì)算機(jī)可讀媒體(諸如磁的、光的或者半導(dǎo)體存儲(chǔ)裝置)中的計(jì)算機(jī)執(zhí)行的指令來實(shí)現(xiàn)它。例如,在一個(gè)實(shí)施例中,可以通過圖形處理器來實(shí)現(xiàn)序列。
在從cb逐出時(shí),選擇合適的cpg。如果用于cpg的所有數(shù)據(jù)存在于cb中,cb檢查cpg中的高速緩沖存儲(chǔ)器線路的壓縮控制位(塊36)并且計(jì)算可能的壓實(shí)的量(塊38)。如果實(shí)現(xiàn)了壓實(shí)(菱形40,是),即用來存儲(chǔ)cpg的nm頁面的數(shù)量比非壓實(shí)地存儲(chǔ)它們更低,設(shè)置ccs中的位(塊42)并且以連續(xù)的組塊將高速緩沖存儲(chǔ)器線路發(fā)送到近存儲(chǔ)器(塊44)??梢詫⑷魏挝词褂玫膎m頁面用信號(hào)通知為空閑的(塊50)。如果未實(shí)現(xiàn)壓實(shí)(菱形40,否),在nm中未壓實(shí)地存儲(chǔ)數(shù)據(jù)(塊46)。
作為示例,假定512字節(jié)的nm頁面大小和1,024字節(jié)的cpg大小(即兩個(gè)nm頁面,使能至多2:1壓實(shí))。此外,假定顏色緩沖器高速緩沖存儲(chǔ)器中的高速緩沖存儲(chǔ)器線路大小是在適當(dāng)位置具有4:n壓縮的256字節(jié)。在cpg的逐出處,檢查壓縮控制位,并且如果所有高速緩沖存儲(chǔ)器線路的總壓縮大于或等于2:1,壓實(shí)是可能的。對(duì)于單獨(dú)的高速緩沖存儲(chǔ)器線路(cl)的壓縮率的任何組合,即導(dǎo)致2:1的總壓實(shí)的4:1、4:2和4:3是可能的。使能壓實(shí)的不同量的nm頁面大小、cpg大小、cl大小以及壓縮率的其它組合是可能的。
無論如何,在最后分配的nm頁面中可以存在有未使用的部分。例如,使用512字節(jié)nm頁面,如果1,024字節(jié)的壓實(shí)的數(shù)據(jù),cpg占用假定576字節(jié),那么這個(gè)算法分配2個(gè)nm頁面,因?yàn)?imgfile="dest_path_image002.gif"wi="94"he="21"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>。
在圖4中示出了類似的示例,其中在左邊示出了2kbcpg51,并且它以壓縮的形式將所有cl包含在其中。因此,當(dāng)這樣的cpg被標(biāo)記用于從cb的逐出時(shí),壓實(shí)數(shù)據(jù)51并且在這種情況下需要兩個(gè)頁面(512b*2)以用于壓實(shí)的數(shù)據(jù)。在這種情況下,這些可以在任何地方被分配,但是最經(jīng)常地,在近存儲(chǔ)器18中它們將是連續(xù)的。
在圖5中示出了擴(kuò)展的示例。一個(gè)2kb塊21中的數(shù)據(jù)被讀入顏色高速緩沖存儲(chǔ)器并且在23處被解壓縮、寫入并且接著在25處被再次壓縮。在這一點(diǎn)上,數(shù)據(jù)比之前占用了更多空間,并且如在27處指示的,突然它不適合2個(gè)頁面。因此,在29處,在nm中分配了第三頁面,并且將數(shù)據(jù)混洗進(jìn)這三個(gè)頁面中的正確位置。
當(dāng)cpg從cb被逐出時(shí),可以發(fā)生所有數(shù)據(jù)不存在以用于檢查,即某個(gè)數(shù)據(jù)仍駐留在渲染高速緩沖存儲(chǔ)器中并且某些數(shù)據(jù)可以駐留在nm中。無論如何,這個(gè)數(shù)據(jù)必須被取入cb以使能cpg的壓實(shí)。從nm讀取數(shù)據(jù)確實(shí)需要帶寬,但是可以利用合理大小的cb和高效的壓縮來保持低帶寬。屬于逐出的cpg的數(shù)據(jù)可以從渲染高速緩沖存儲(chǔ)器被強(qiáng)制逐出;然而,在不久的將來是否將會(huì)再次使用那個(gè)數(shù)據(jù)是未知的。一個(gè)選項(xiàng)是只允許所有cl已經(jīng)從渲染高速緩沖存儲(chǔ)器被逐出的cpg的壓實(shí)。如果沒有這樣的罕見的情況存在,從渲染高速緩沖存儲(chǔ)器的強(qiáng)制逐出可被用作撤退。
當(dāng)從近存儲(chǔ)器讀回?cái)?shù)據(jù)時(shí),它首先被解壓縮并且接著被直接置于可以是顏色/渲染高速緩沖存儲(chǔ)器或者其它高速緩沖存儲(chǔ)器的高速緩沖存儲(chǔ)器中。
當(dāng)寫到nm作為從llc的臟線路的逐出的結(jié)果發(fā)生并且頁面組已經(jīng)處于壓實(shí)的狀態(tài)時(shí),可以咨詢r(jià)cs以決定是否需要擴(kuò)展尋址的頁面組。如果以與nm中壓實(shí)的表示中相同的方式來壓縮從llc被逐出的線路,則與寫線路相比不需要另外的動(dòng)作。備選方案是讓守護(hù)進(jìn)程解壓實(shí)頁面組中的數(shù)據(jù),并且接著執(zhí)行寫入而不咨詢r(jià)cs。
如果未將從llc逐出的線路壓縮到與先前相同的程度,即壓縮的表示已經(jīng)或者收縮或者擴(kuò)展,在寫線路之前,首先將nm頁面組解壓實(shí)。這個(gè)頁面組則適合于未來的時(shí)間點(diǎn)處的壓實(shí)。
如果需要在壓實(shí)緩沖器中進(jìn)行逐出,若干替換策略是可能的。為了最小化數(shù)據(jù)業(yè)務(wù),則可以首先優(yōu)先化滿的cpg,后面是壓實(shí)緩沖器中最老的cpg。如果沒有滿的cpg存在,則可以選擇具有最高數(shù)量的高速緩沖存儲(chǔ)器線路的cpg,因?yàn)槟菍⒆钚』瘉碜詎m的讀取業(yè)務(wù)。其它策略也是可能的。
由每cpg一個(gè)比特組成的壓實(shí)控制表面(ccs)需要相對(duì)小的空間。對(duì)于大小
在上面描述的實(shí)施例中,使用緩沖的壓實(shí)方法,在數(shù)據(jù)進(jìn)入nm之前壓實(shí)數(shù)據(jù)。然而,因?yàn)榭赡懿坏貌粩U(kuò)展/收縮被壓實(shí)并且接著讀取/修改/寫入的數(shù)據(jù),那個(gè)方法有利地使用足夠大的壓實(shí)緩沖器以避免這些事件中的大多數(shù)。
根據(jù)第二技術(shù),壓實(shí)守護(hù)進(jìn)程在近存儲(chǔ)器上獨(dú)立操作以便剛好及時(shí)或者稍微提前釋放空間。盡可能晚地壓實(shí)避免浪費(fèi)過早壓實(shí)時(shí)的(片上)存儲(chǔ)器業(yè)務(wù)和邏輯。
如在圖6中示出的,存儲(chǔ)器系統(tǒng)包括耦合至高速緩沖存儲(chǔ)器分級(jí)體系的一個(gè)或多個(gè)緩沖器壓縮編解碼器72。近存儲(chǔ)器(nm)86擔(dān)當(dāng)最后級(jí)別的傳統(tǒng)高速緩沖存儲(chǔ)器(例如,llc)78之后的大的高速緩沖存儲(chǔ)器。以與將數(shù)據(jù)寫到當(dāng)前圖形處理器中的存儲(chǔ)器相同的方式但是總是以未壓實(shí)的形式(即稀疏地存儲(chǔ))潛在地壓縮寫到nm的數(shù)據(jù)。
壓實(shí)守護(hù)進(jìn)程90被連接到nm。當(dāng)nm填充時(shí),壓實(shí)守護(hù)進(jìn)程在nm上異步操作以壓實(shí)它的數(shù)據(jù)。將nm分成某個(gè)大?。ɡ?12b)的存儲(chǔ)頁面。壓實(shí)守護(hù)進(jìn)程選擇稀疏的但是不可能被再次寫入的小范圍的存儲(chǔ)頁面并且將這些壓實(shí)成更少的一個(gè)或多個(gè)存儲(chǔ)頁面。這釋放了nm中的空的頁面。
如由當(dāng)前占用級(jí)別和/或預(yù)算所指示的,例如又如由應(yīng)用程序接口(api)事件所指示的,壓實(shí)守護(hù)進(jìn)程可以是可以在任意時(shí)間點(diǎn)處運(yùn)行的獨(dú)立軟件(線程)。
用于選擇用于壓實(shí)的頁面的若干不同政策是可能的。行為還可以受益于軟件控制(即通過圖形驅(qū)動(dòng)器)。例如,當(dāng)渲染目標(biāo)被完成渲染并且被綁定為著色器資源(紋理)時(shí),可以通過驅(qū)動(dòng)器將相關(guān)的存儲(chǔ)頁面標(biāo)記為只讀。壓實(shí)守護(hù)進(jìn)程可以接著在那些頁面上操作以釋放潛在大數(shù)量的頁面。
守護(hù)進(jìn)程有效地將整個(gè)nm用作壓實(shí)緩沖器。當(dāng)nm開始用完空間時(shí),數(shù)據(jù)開始得到壓實(shí)。例如,當(dāng)只有閾值數(shù)量的打開頁面是可用的時(shí)候,在一個(gè)實(shí)施例中可以觸發(fā)守護(hù)進(jìn)程以開始?jí)簩?shí)。因此,在某些實(shí)施例中,具有本地在nm范圍內(nèi)的工作集合的應(yīng)用可不招致額外的片上業(yè)務(wù)/處理以用于壓實(shí)。
可以或者在數(shù)據(jù)進(jìn)入nm之前使用緩沖方法來進(jìn)行數(shù)據(jù)的壓實(shí),或者在數(shù)據(jù)已經(jīng)被存儲(chǔ)在nm中之后(但是在驅(qū)逐到fm之前)使用守護(hù)進(jìn)程壓實(shí)方法來進(jìn)行數(shù)據(jù)的壓實(shí)。早期的壓實(shí)(即在nm之前)招致額外的帶寬/處理,甚至對(duì)于具有適合nm的工作集合的應(yīng)用也是。另外,壓縮緩沖器(cb)的控制邏輯可以更復(fù)雜以處理當(dāng)將要被逐出并且被壓實(shí)的數(shù)據(jù)未被完全存儲(chǔ)在cb中時(shí)的情況。例如,一個(gè)或多個(gè)存儲(chǔ)頁面的部分可以駐留在更低級(jí)高速緩沖存儲(chǔ)器(其必須被強(qiáng)制逐出)中和/或在nm(其必須在壓實(shí)之前被讀回)中。
參考圖7,一個(gè)或多個(gè)l1或者渲染高速緩沖存儲(chǔ)器70使用被編解碼器72無損壓縮到一個(gè)或多個(gè)64b子塊或者被未壓縮地存儲(chǔ)的某個(gè)大?。ɡ?56b)的高速緩沖存儲(chǔ)器線路。與每個(gè)緩沖器相關(guān)聯(lián)的渲染控制表面(rcs)74編碼如何/是否壓縮高速緩沖存儲(chǔ)器線路。l1高速緩沖存儲(chǔ)器被耦合至中央處理單元和/或圖形處理單元68。
一個(gè)或多個(gè)編解碼器被連接到一個(gè)或多個(gè)更高級(jí)高速緩沖存儲(chǔ)器(包括l2高速緩沖存儲(chǔ)器76,直到最后級(jí)別高速緩沖存儲(chǔ)器78)的分級(jí)體系。以壓縮的形式但是未壓實(shí)地(即稀疏的)將數(shù)據(jù)存儲(chǔ)在這些高速緩沖存儲(chǔ)器中。當(dāng)從llc高速緩沖存儲(chǔ)器逐出修改的高速緩沖存儲(chǔ)器線路時(shí),將數(shù)據(jù)寫到近存儲(chǔ)器(nm)86??梢酝ㄟ^近存儲(chǔ)器控制器80進(jìn)行對(duì)nm的訪問。近存儲(chǔ)器被耦合至遠(yuǎn)存儲(chǔ)器92。
近存儲(chǔ)器被組織成某個(gè)大?。ɡ?12b)的存儲(chǔ)頁面84。這些又被組織成更大的頁面組(例如,4個(gè)頁面成2kb)。壓實(shí)守護(hù)進(jìn)程90在頁面組上操作以將它們壓實(shí)成更少的512b頁面,從每個(gè)頁面組潛在地釋放一個(gè)或多個(gè)頁面。
圖7示出了壓實(shí)操作的示例。由壓實(shí)守護(hù)進(jìn)程90壓實(shí)近存儲(chǔ)器82a中稀疏存儲(chǔ)的數(shù)據(jù),使得一個(gè)頁面組94適合一個(gè)存儲(chǔ)頁面96。接著在82b處它被存儲(chǔ)在近存儲(chǔ)器中作為壓實(shí)的。頁面組可以由具有連續(xù)存儲(chǔ)器地址的頁面組成,但是所述頁面被不連續(xù)地存儲(chǔ)在nm中。近存儲(chǔ)器控制器80(圖7)中的存儲(chǔ)器地址翻譯表91(在圖7中)記住地址到頁面映射。
單獨(dú)的頁面組控制表面(pgcs)88(圖7)編碼每個(gè)頁面組是否被壓實(shí)地存儲(chǔ)??梢允褂门c每頁面組單個(gè)比特一樣小地來進(jìn)行這個(gè)。近存儲(chǔ)器控制器80(圖7)訪問pgcs88以檢測(cè)特定頁面是否被壓實(shí)。
不同可能性存在,但是一個(gè)配置讓近存儲(chǔ)器(nm)作為大的犧牲高速緩沖存儲(chǔ)器(victimcache)來操作。從更高級(jí)高速緩沖存儲(chǔ)器被逐出并且被標(biāo)記為已修改的數(shù)據(jù)被寫到nm。這樣的數(shù)據(jù)可以被壓縮,但是總是未被壓實(shí)。
壓實(shí)守護(hù)進(jìn)程可以稍后壓實(shí)數(shù)據(jù)以清理nm中的存儲(chǔ)頁面。當(dāng)讀取訪問時(shí),數(shù)據(jù)從nm被取出(壓實(shí)的或者未壓實(shí)的)并且被未壓實(shí)地存儲(chǔ)在最后級(jí)別高速緩沖存儲(chǔ)器(llc)中。檢查pgcs以查明某個(gè)頁面是否被壓實(shí)。注意頁面可以壓實(shí)的形式留在nm中。
當(dāng)寫到nm發(fā)生時(shí),通常情況是守護(hù)進(jìn)程已經(jīng)能夠保持足夠的空的頁面可用。在它不具有的罕見情況下,或者由于所有數(shù)據(jù)已經(jīng)被壓實(shí)或者由于守護(hù)進(jìn)程尚未有時(shí)間去壓實(shí)一切,可能不得不進(jìn)行從nm驅(qū)逐到遠(yuǎn)存儲(chǔ)器(fm)。
為了進(jìn)一步減少fm訪問的數(shù)量,存儲(chǔ)器控制器可以決定等待守護(hù)進(jìn)程完成更多的壓實(shí)操作,如果這樣的事正在進(jìn)行中的話。
壓實(shí)守護(hù)進(jìn)程經(jīng)由端口或總線(圖7,雙箭頭)被連接到近存儲(chǔ)器(nm),但是守護(hù)進(jìn)程可以在它自己的時(shí)鐘/功率域中內(nèi)部地操作。因?yàn)閴簩?shí)異步發(fā)生并且只在被需要時(shí)發(fā)生,所以守護(hù)進(jìn)程可以長(zhǎng)時(shí)間段是空閑的。在這樣的時(shí)間期間,對(duì)它斷電或者降低它的時(shí)鐘是有利的。
守護(hù)進(jìn)程可以或者具有它自己的到nm的數(shù)據(jù)端口94,或者與相同互連上的其它單元(例如,最后級(jí)別傳統(tǒng)高速緩沖存儲(chǔ)器或者用于遠(yuǎn)存儲(chǔ)器的存儲(chǔ)器控制器)共享數(shù)據(jù)端口。在后者的情況下,它可以利用互連上的未使用的讀/寫周期來訪問nm以執(zhí)行壓實(shí)。
正在由守護(hù)進(jìn)程取出的頁面仍然可以被其它單元同時(shí)地只讀訪問。當(dāng)壓實(shí)完成并且當(dāng)頁面正在被守護(hù)進(jìn)程更新時(shí)(即它們的內(nèi)容被壓實(shí)的內(nèi)容替換),它們可以臨時(shí)被鎖住。備選地,如果在nm中存在有其它空的頁面,則守護(hù)進(jìn)程可以將壓實(shí)的數(shù)據(jù)寫到那些空的頁面,并且僅當(dāng)它被完成時(shí),更新地址翻譯表以指向壓實(shí)的頁面。在那個(gè)點(diǎn)上,原始的未壓實(shí)的頁面可以被標(biāo)記為空的。這個(gè)策略減少了系統(tǒng)等待時(shí)間。
可以在軟件、固件或硬件中實(shí)現(xiàn)在圖8中示出的壓實(shí)守護(hù)進(jìn)程序列100。在軟件和固件實(shí)施例中,它可以通過存儲(chǔ)在一個(gè)或多個(gè)非暫時(shí)性計(jì)算機(jī)可讀媒體(諸如磁的、光的或者半導(dǎo)體存儲(chǔ)裝置)中的計(jì)算機(jī)可讀指令來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,它可以通過圖形處理單元來實(shí)現(xiàn)。
圖8中示出的序列通過在102處確定是否需要壓實(shí)而開始。如果是這樣的話,如在塊103中所指示的,在一個(gè)實(shí)施例中可以暫緩(stay)遠(yuǎn)存儲(chǔ)器訪問。接著,如塊104中所指示的,可以選擇要壓實(shí)的稀疏的存儲(chǔ)頁面的范圍。如在塊106中所指示的,將這個(gè)范圍的頁面壓實(shí)成更少的頁面。如在塊108中所指示的,在地址翻譯表中存儲(chǔ)地址到頁面映射。接著,如在塊110中所指示的,在pgcs中存儲(chǔ)壓實(shí)指示器以指示已經(jīng)壓實(shí)頁面組。最后,如在塊112中所指示的,在某些實(shí)施例中可以解除暫緩(unstay)遠(yuǎn)存儲(chǔ)器訪問。
可以在軟件、固件或硬件中實(shí)現(xiàn)在圖9中示出的用于壓實(shí)頁面選擇的序列120。在軟件和固件實(shí)施例中,它可以通過存儲(chǔ)在一個(gè)或多個(gè)非暫時(shí)性計(jì)算機(jī)可讀媒體(諸如磁的、光的或者半導(dǎo)體存儲(chǔ)裝置)中的計(jì)算機(jī)可讀指令來實(shí)現(xiàn)??梢岳缭趫D形處理單元中實(shí)現(xiàn)所述序列。
壓實(shí)頁面選擇序列120在一個(gè)實(shí)施例中通過如在塊122中所指示的選擇被驅(qū)動(dòng)器標(biāo)記為只讀的頁面組而開始。接著,如在塊124中所指示的,壓實(shí)所選擇的頁面組。
菱形126處的檢查確定是否需要更多的壓實(shí)。如果是這樣的話,如在塊128中所指示的,選擇最老的頁面組以用于壓實(shí)。如在塊130中所指示的,接著壓實(shí)那些選擇的頁面組。接著,菱形132處的檢查確定是否仍然期望附加的壓實(shí)。如果是這樣的話,如在塊134中所指示的,咨詢r(jià)cs以找到可以被最壓實(shí)存儲(chǔ)的頁面組。還可以使用其它的技術(shù)。
因?yàn)樵谀承?shí)施例中壓實(shí)守護(hù)進(jìn)程異步且獨(dú)立操作,所以不存在與其它高速緩沖存儲(chǔ)器的復(fù)雜交互(例如,強(qiáng)制的逐出等等)。比較起來,緩沖的壓實(shí)方法可以具有這樣的復(fù)雜性。守護(hù)進(jìn)程簡(jiǎn)單地以它自己的步調(diào)用壓實(shí)的頁面替換成組的已完成的頁面。
壓實(shí)守護(hù)進(jìn)程基于諸如圖10中示出的政策的陣列來選擇頁面組(例如2kb塊)以用于壓實(shí)。例如,被驅(qū)動(dòng)器標(biāo)記為只讀數(shù)據(jù)的頁面組適合于第一選擇,因?yàn)檫@樣的數(shù)據(jù)可以被壓實(shí)而沒有稍后被寫到(并且因此被擴(kuò)展)的風(fēng)險(xiǎn)。
后面是這個(gè),可以選定依據(jù)某個(gè)度量是“老”的頁面組。例如,最近最少寫入的(lrw)是有用的度量,因?yàn)檫@樣的頁面組在下一次寫入之前更可能具有更長(zhǎng)的時(shí)間間隔(可能從來不)。
為了在不同的頁面組之間選擇,壓實(shí)守護(hù)進(jìn)程可以查看關(guān)聯(lián)的渲染控制表面(rcs)以察看可以最壓實(shí)地存儲(chǔ)哪個(gè)頁面組(即壓實(shí)之后最少的頁面數(shù))。
因?yàn)閳D形驅(qū)動(dòng)器和/或用戶應(yīng)用具有附加的高層信息(包括命令流中預(yù)測(cè)未來的可能性),可以將提示發(fā)送到壓實(shí)守護(hù)進(jìn)程以改進(jìn)系統(tǒng)性能。
典型的示例是稍后被用作紋理的渲染目標(biāo),并且因此從讀/寫(r/w)存儲(chǔ)器轉(zhuǎn)到只讀。另一個(gè)示例是平鋪渲染,其中已經(jīng)被完成的平鋪貼圖(tile)在長(zhǎng)時(shí)間內(nèi)(例如下一幀)將不會(huì)被寫到。可以以優(yōu)先順序排列這樣的區(qū)域以用于壓實(shí)。
在最近的應(yīng)用程序接口(api)(例如dx12)中可用的丟棄命令還可以被壓實(shí)守護(hù)進(jìn)程使用來異步清除不再被需要的頁面,而不是壓實(shí)它們或者將它們驅(qū)逐到fm。注意,可以同樣地利用緩沖的壓實(shí)方法來做這個(gè)。
實(shí)際上,可以通過將機(jī)制直接傳遞到在內(nèi)部可以保持適合于壓實(shí)的頁面組的隊(duì)列的守護(hù)進(jìn)程的消息或者通過具有可以被nm控制器通過發(fā)送給它的命令直接寫入的pgcs中的附加的控制位來進(jìn)行將信息從軟件棧傳送到壓實(shí)守護(hù)進(jìn)程。
與緩沖的壓實(shí)(bc)方法相比,守護(hù)進(jìn)程執(zhí)行更少的工作。然而,因?yàn)閎c始終執(zhí)行壓實(shí),它的壓實(shí)率可以更好,但是有代價(jià)。例如,bc可消耗更多的片上帶寬,因?yàn)樗鼒?zhí)行更多的壓實(shí)操作,并且每個(gè)壓實(shí)可以潛在地觸發(fā)從nm的讀回。
在某些實(shí)施例中,可以使用壓縮緩沖器和壓實(shí)守護(hù)進(jìn)程兩者。例如,它們可以并行工作。
圖10是根據(jù)實(shí)施例的處理系統(tǒng)100的框圖。在各種實(shí)施例中,系統(tǒng)100包括一個(gè)或多個(gè)處理器102和一個(gè)或多個(gè)圖形處理器108,并且可以是單處理器桌上系統(tǒng)、多處理器工作站系統(tǒng)、或者具有大量處理器102或處理器核107的服務(wù)器系統(tǒng)。在一個(gè)實(shí)施例中,系統(tǒng)100是并入片上系統(tǒng)(soc)集成電路內(nèi)的處理平臺(tái),以供移動(dòng)、手持或者嵌入式設(shè)備之用。
系統(tǒng)100的實(shí)施例可以包括或者被并入基于服務(wù)器的游戲平臺(tái)、游戲控制臺(tái)(包括游戲和媒體控制臺(tái))、移動(dòng)游戲控制臺(tái)、手持游戲控制臺(tái)或在線游戲控制臺(tái)內(nèi)。在某些實(shí)施例中,系統(tǒng)100是移動(dòng)電話、智能電話、平板計(jì)算設(shè)備或移動(dòng)互聯(lián)網(wǎng)設(shè)備。數(shù)據(jù)處理系統(tǒng)100還可以包括可穿戴設(shè)備(諸如智能手表可穿戴設(shè)備、智能眼睛佩戴物設(shè)備、增強(qiáng)的現(xiàn)實(shí)設(shè)備或虛擬現(xiàn)實(shí)設(shè)備),與可穿戴設(shè)備耦合,或者被集成在可穿戴設(shè)備內(nèi)。在某些實(shí)施例中,數(shù)據(jù)處理系統(tǒng)100是具有一個(gè)或多個(gè)處理器102和由一個(gè)或多個(gè)圖形處理器108生成的圖形接口的電視或者機(jī)頂盒設(shè)備。
在某些實(shí)施例中,一個(gè)或多個(gè)處理器102各自包括一個(gè)或多個(gè)處理器核107以處理指令,所述指令在被執(zhí)行時(shí)為系統(tǒng)和用戶軟件執(zhí)行操作。在某些實(shí)施例中,一個(gè)或多個(gè)處理器核107中的每個(gè)處理器核被配置成處理特定的指令集109。在某些實(shí)施例中,指令集109可以有助于復(fù)雜指令集計(jì)算(cisc)、精簡(jiǎn)指令集計(jì)算(risc)或者借助于超長(zhǎng)指令字(vliw)的計(jì)算。多個(gè)處理器核107可以各自處理可以包括有助于其它指令集的模擬的指令的不同指令集109。處理器核107還可以包括其它處理設(shè)備,這樣的數(shù)字信號(hào)處理器(dsp)。
在某些實(shí)施例中,處理器102包括高速緩沖存儲(chǔ)器104。取決于體系結(jié)構(gòu),處理器102可以具有單個(gè)內(nèi)部高速緩沖存儲(chǔ)器或者多個(gè)級(jí)別的內(nèi)部高速緩沖存儲(chǔ)器。在某些實(shí)施例中,在處理器102的各種部件之間共享高速緩沖存儲(chǔ)器。在某些實(shí)施例中,處理器102還使用可以使用已知的高速緩沖存儲(chǔ)器一致性技術(shù)來在處理器核107之間共享的外部高速緩沖存儲(chǔ)器(例如,3級(jí)(l3)高速緩沖存儲(chǔ)器或者最后級(jí)別高速緩沖存儲(chǔ)器(llc))(未示出)。寄存器堆106被另外地包括在處理器102中,其可以包括用于存儲(chǔ)不同類型的數(shù)據(jù)的不同類型的寄存器(例如,整數(shù)寄存器、浮點(diǎn)寄存器、狀態(tài)寄存器和指令指針寄存器)。某些寄存器可以是通用寄存器,然而其它寄存器可以是特定于處理器102的設(shè)計(jì)的。
在某些實(shí)施例中,處理器102被耦合至處理器總線110以在處理器102和系統(tǒng)100中的其它部件之間傳輸通信信號(hào),諸如地址、數(shù)據(jù)或者控制信號(hào)。在一個(gè)實(shí)施例中,系統(tǒng)100使用包括存儲(chǔ)器控制器集線器116和輸入輸出(i/o)控制器集線器130的示范的‘集線器’系統(tǒng)體系結(jié)構(gòu)。存儲(chǔ)器控制器集線器116有助于存儲(chǔ)器設(shè)備和系統(tǒng)100的其它部件之間的通信,而i/o控制器集線器(ich)130提供經(jīng)由本地i/o總線到i/o設(shè)備的連接。在一個(gè)實(shí)施例中,存儲(chǔ)器控制器集線器116的邏輯被集成在處理器內(nèi)。
存儲(chǔ)器設(shè)備120可以是動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)設(shè)備、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)設(shè)備、閃速存儲(chǔ)器設(shè)備、相變存儲(chǔ)器設(shè)備或者具有合適的性能以充當(dāng)過程存儲(chǔ)器的某個(gè)其它存儲(chǔ)器設(shè)備。在一個(gè)實(shí)施例中,存儲(chǔ)器設(shè)備120可以作為系統(tǒng)100的系統(tǒng)存儲(chǔ)器來操作以當(dāng)一個(gè)或多個(gè)處理器102執(zhí)行應(yīng)用或過程時(shí)存儲(chǔ)數(shù)據(jù)122和指令121以用于使用。存儲(chǔ)器控制器集線器116還與可以與處理器102中的一個(gè)或多個(gè)圖形處理器108通信以執(zhí)行圖形和媒體操作的可選的外部圖形處理器112耦合。
在某些實(shí)施例中,ich130使得外圍設(shè)備能夠經(jīng)由高速i/o總線連接到存儲(chǔ)器設(shè)備120和處理器102。i/o外圍設(shè)備包括但不限于音頻控制器146、固件接口128、無線收發(fā)器126(例如,wi-fi、藍(lán)牙)、數(shù)據(jù)存儲(chǔ)設(shè)備124(例如,硬盤驅(qū)動(dòng)器、閃速存儲(chǔ)器等等)以及用于將遺留(例如,個(gè)人系統(tǒng)2(ps/2))設(shè)備耦合至系統(tǒng)的遺留i/o控制器140。一個(gè)或多個(gè)通用串行總線(usb)控制器142連接輸入設(shè)備,諸如鍵盤和鼠標(biāo)144組合。網(wǎng)絡(luò)控制器134還可以耦合至ich130。在某些實(shí)施例中,高性能網(wǎng)絡(luò)控制器(未示出)耦合至處理器總線110。將會(huì)意識(shí)到,示出的系統(tǒng)100是示范的并且不是限制的,因?yàn)檫€可以使用不同配置的其它類型的數(shù)據(jù)處理系統(tǒng)。例如,可以將i/o控制器集線器130集成在一個(gè)或多個(gè)處理器102內(nèi),或者可以將存儲(chǔ)器控制器集線器116和i/o控制器集線器130集成在謹(jǐn)慎的外部圖形處理器中,諸如外部圖形處理器112。
圖11是具有一個(gè)或多個(gè)處理器核202a-202n、集成的存儲(chǔ)器控制器214以及集成的圖形處理器208的處理器200的實(shí)施例的框圖。圖11的具有與本文的任何其它圖的元件相同的附圖標(biāo)記(或名稱)的那些元件可以以與本文在別的地方描述的類似的任何方式來操作或者運(yùn)行,但是不限于這樣。處理器200可以包括相當(dāng)于并且包括由虛線盒子表示的附加的核202n的附加的核。處理器核202a-202n中的每個(gè)處理器核包括一個(gè)或多個(gè)內(nèi)部高速緩沖存儲(chǔ)器單元204a-204n。在某些實(shí)施例中,每個(gè)處理器核還可以訪問一個(gè)或多個(gè)共享高速緩存的單元206。
內(nèi)部高速緩沖存儲(chǔ)器單元204a-204n和共享的高速緩沖存儲(chǔ)器單元206表示處理器200內(nèi)的高速緩沖存儲(chǔ)器分級(jí)體系。高速緩沖存儲(chǔ)器分級(jí)體系可以包括每個(gè)處理器核內(nèi)的指令和數(shù)據(jù)高速緩沖存儲(chǔ)器的至少一個(gè)級(jí)別以及共享的中級(jí)高速緩沖存儲(chǔ)器的一個(gè)或多個(gè)級(jí)別,諸如2級(jí)(l2)、3級(jí)(l3)、4級(jí)(l4)或者高速緩沖存儲(chǔ)器的其它級(jí)別,其中外部存儲(chǔ)器之前的高速緩沖存儲(chǔ)器的最高級(jí)別被分類為llc。在某些實(shí)施例中,高速緩沖存儲(chǔ)器一致性邏輯維持各種高速緩沖存儲(chǔ)器單元206和204a-204n之間的一致性。
在某些實(shí)施例中,處理器200還可以包括系統(tǒng)代理核210和一個(gè)或多個(gè)總線控制器單元216的集合。一個(gè)或多個(gè)總線控制器單元216管理外圍總線的集合,諸如一個(gè)或多個(gè)外圍部件互連總線(例如,pci、pciexpress)。系統(tǒng)代理核210為各種處理器部件提供管理功能性。在某些實(shí)施例中,系統(tǒng)代理核210包括一個(gè)或多個(gè)集成的存儲(chǔ)器控制器214以管理對(duì)各種外部存儲(chǔ)器設(shè)備(未示出)的訪問。
在某些實(shí)施例中,處理器核202a-202n中的一個(gè)或多個(gè)處理器核包括對(duì)于同時(shí)多線程的支持。在這樣的實(shí)施例中,系統(tǒng)代理核210包括用于在多線程的處理期間協(xié)調(diào)和操作核202a-202n的部件。系統(tǒng)代理核210可以另外地包括功率控制單元(pcu),所述pcu包括調(diào)節(jié)處理器核202a-202n和圖形處理器208的功率狀態(tài)的邏輯和部件。
在某些實(shí)施例中,處理器200另外地包括執(zhí)行圖形處理操作的圖形處理器208。在某些實(shí)施例中,圖形處理器208與共享的高速緩沖存儲(chǔ)器單元206的集合以及包括一個(gè)或多個(gè)集成的存儲(chǔ)器控制器214的系統(tǒng)代理核210耦合。在某些實(shí)施例中,顯示器控制器211與圖形處理器208耦合以驅(qū)動(dòng)圖形處理器輸出到一個(gè)或多個(gè)耦合的顯示器。在某些實(shí)施例中,顯示器控制器211可以是經(jīng)由至少一個(gè)互連與圖形處理器耦合的單獨(dú)的模塊,或者可以被集成在圖形處理器208或系統(tǒng)代理核210內(nèi)。
在某些實(shí)施例中,基于環(huán)的互連單元212被使用來耦合處理器200的內(nèi)部部件。然而,可以使用備選的互連單元,諸如點(diǎn)對(duì)點(diǎn)互連、切換互連或者其它技術(shù),包括本領(lǐng)域眾所周知的技術(shù)。在某些實(shí)施例中,圖形處理器208經(jīng)由i/o鏈路213與環(huán)形互連212耦合。
示范的i/o鏈路213表示多種i/o互連中的至少一個(gè),包括有助于各種處理器部件和高性能嵌入式存儲(chǔ)器模塊218(諸如edram模塊)之間通信的封裝的i/o互連。在某些實(shí)施例中,圖形處理器208和處理器核202-202n中的每個(gè)將嵌入式存儲(chǔ)器模塊218用作共享的最后級(jí)別高速緩沖存儲(chǔ)器。
在某些實(shí)施例中,處理器核202a-202n是執(zhí)行相同指令集體系結(jié)構(gòu)的同類核。在另一個(gè)實(shí)施例中,處理器核202a-202n在指令集體系結(jié)構(gòu)(isa)方面是異類的,其中處理器核202a-n中的一個(gè)或多個(gè)處理器核執(zhí)行第一指令集,然而其它核中的至少一個(gè)核執(zhí)行第一指令集的子集或者不同的指令集。在一個(gè)實(shí)施例中,處理器核202a-202n在微體系結(jié)構(gòu)方面是異類的,其中具有相對(duì)更高的功耗的一個(gè)或多個(gè)核與具有更低功耗的一個(gè)或多個(gè)功率核耦合。另外,可以在一個(gè)或多個(gè)芯片上或者作為除其它部件之外還有的說明的部件的soc集成電路來實(shí)現(xiàn)處理器200。
圖12是圖形處理器300的框圖,所述圖形處理器300可以是離散的圖形處理單元或者可以是與多個(gè)處理核集成的圖形處理器。在某些實(shí)施例中,圖形處理器經(jīng)由到圖形處理器上的寄存器的存儲(chǔ)器映射的i/o接口進(jìn)行通信并且與被放入處理器存儲(chǔ)器中的命令通信。在某些實(shí)施例中,圖形處理器300包括訪問存儲(chǔ)器的存儲(chǔ)器接口314。存儲(chǔ)器接口314可以是到本地存儲(chǔ)器、一個(gè)或多個(gè)內(nèi)部高速緩沖存儲(chǔ)器、一個(gè)或多個(gè)共享的外部高速緩沖存儲(chǔ)器和/或到系統(tǒng)存儲(chǔ)器的接口。
在某些實(shí)施例中,圖形處理器300還包括驅(qū)動(dòng)顯示器輸出數(shù)據(jù)到顯示設(shè)備320的顯示器控制器302。顯示器控制器302包括用于用戶接口元件或視頻的多個(gè)層的合成和顯示的一個(gè)或多個(gè)疊加平面的硬件。在某些實(shí)施例中,圖形處理器300包括視頻編解碼器引擎306以將媒體編碼、解碼或轉(zhuǎn)碼到一個(gè)或多個(gè)媒體編碼格式,從一個(gè)或多個(gè)媒體編碼格式編碼、解碼或轉(zhuǎn)碼媒體,或者在一個(gè)或多個(gè)媒體編碼格式之間編碼、解碼或轉(zhuǎn)碼媒體,所述一個(gè)或多個(gè)媒體編碼格式包括但不限于運(yùn)動(dòng)圖像專家組(mpeg)格式(諸如mpeg-2)、高級(jí)視頻編碼(avc)格式(諸如h.264/mpeg-4avc以及電影與電視工程師協(xié)會(huì)(smpte)421m/vc-1)和聯(lián)合圖像專家組(jpeg)格式(諸如jpeg)以及運(yùn)動(dòng)jpeg(mjpeg)格式。
在某些實(shí)施例中,圖形處理器300包括塊圖像傳送(blit)引擎304以執(zhí)行包括例如位邊界塊傳送的二維(2d)光柵化操作。然而,在一個(gè)實(shí)施例中,使用圖形處理引擎(gpe)310的一個(gè)或多個(gè)部件來執(zhí)行2d圖形操作。在某些實(shí)施例中,圖形處理引擎310是用于執(zhí)行包括三維(3d)圖形操作和媒體操作的圖形操作的計(jì)算引擎。
在某些實(shí)施例中,gpe310包括3d管線312以用于執(zhí)行3d操作,諸如使用按照3d圖元形狀(例如,矩形、三角形等等)行動(dòng)的處理功能來渲染三維圖像和場(chǎng)景。3d管線312包括執(zhí)行元件內(nèi)的各種任務(wù)和/或產(chǎn)生到3d/媒體子系統(tǒng)315的執(zhí)行線程的可編程和固定功能元件。當(dāng)3d管線312可以被使用來執(zhí)行媒體操作時(shí),gpe310的實(shí)施例還包括被特別使用來執(zhí)行諸如視頻后處理和圖像增強(qiáng)的媒體操作的媒體管線316。
在某些實(shí)施例中,媒體管線316包括固定功能或者可編程邏輯單元以代替或者代表視頻編解碼器引擎306執(zhí)行一個(gè)或多個(gè)專用的媒體操作,諸如視頻解碼加速、視頻去除交錯(cuò)和視頻編碼加速。在某些實(shí)施例中,媒體管線316另外地包括產(chǎn)生用于在3d/媒體子系統(tǒng)315上執(zhí)行的線程的線程產(chǎn)生單元。產(chǎn)生的線程為包括在3d/媒體子系統(tǒng)315中的一個(gè)或多個(gè)圖形執(zhí)行單元上的媒體操作執(zhí)行計(jì)算。
在某些實(shí)施例中,3d/媒體子系統(tǒng)315包括用于執(zhí)行由3d管線312和媒體管線316產(chǎn)生的線程的邏輯。在一個(gè)實(shí)施例中,管線將線程執(zhí)行請(qǐng)求發(fā)送到包括用于仲裁和分派各種請(qǐng)求到可用的線程執(zhí)行資源的線程分派邏輯的3d/媒體子系統(tǒng)315。執(zhí)行資源包括處理3d和媒體線程的圖形執(zhí)行單元的陣列。在某些實(shí)施例中,3d/媒體子系統(tǒng)315包括用于線程指令和數(shù)據(jù)的一個(gè)或多個(gè)內(nèi)部高速緩沖存儲(chǔ)器。在某些實(shí)施例中,子系統(tǒng)還包括共享的存儲(chǔ)器以共享線程之間的數(shù)據(jù)并且存儲(chǔ)輸出的數(shù)據(jù),所述共享的存儲(chǔ)器包括寄存器和可尋址的存儲(chǔ)器。
圖13是根據(jù)某些實(shí)施例的圖形處理器的圖形處理引擎410的框圖。在一個(gè)實(shí)施例中,gpe410是圖12中示出的gpe310的版本。具有與本文的任何其它圖的元件相同的附圖標(biāo)記(或名稱)的圖13的元件可以以與本文在別的地方描述的類似的任何方式來操作或運(yùn)行,但是不限于這樣。
在某些實(shí)施例中,gpe410與將命令流提供給gpe3d和媒體管線412、416的命令流化器403耦合。在某些實(shí)施例中,命令流化器403被耦合至存儲(chǔ)器,所述存儲(chǔ)器可以是系統(tǒng)存儲(chǔ)器、或者共享的高速緩沖存儲(chǔ)器和內(nèi)部高速緩沖存儲(chǔ)器中的一個(gè)或多個(gè)。在某些實(shí)施例中,命令流化器403從存儲(chǔ)器接收命令并且將命令發(fā)送到3d管線412和/或媒體管線416。所述命令是從存儲(chǔ)用于3d和媒體管線412、416的命令的環(huán)形緩沖器取出的指示。在一個(gè)實(shí)施例中,環(huán)形緩沖器可以另外地包括存儲(chǔ)成批的多個(gè)命令的批量命令緩沖器。3d和媒體管線412、416通過借助于相應(yīng)管線內(nèi)的邏輯來執(zhí)行操作或者通過將一個(gè)或多個(gè)執(zhí)行線程分派到執(zhí)行單元陣列414來處理命令。在某些實(shí)施例中,執(zhí)行單元陣列414是可縮放的,使得陣列基于gpe410的目標(biāo)功率和性能級(jí)別來包括可變數(shù)量的執(zhí)行單元。
在某些實(shí)施例中,采樣引擎430與存儲(chǔ)器(例如,高速緩沖存儲(chǔ)器或系統(tǒng)存儲(chǔ)器)和執(zhí)行單元陣列414耦合。在某些實(shí)施例中,采樣引擎430為執(zhí)行單元陣列414提供允許執(zhí)行陣列414從存儲(chǔ)器讀取圖形和媒體數(shù)據(jù)的存儲(chǔ)器訪問機(jī)制。在某些實(shí)施例中,采樣引擎430包括為媒體執(zhí)行專用的圖像采樣操作的邏輯。
在某些實(shí)施例中,采樣引擎430中的專用媒體采樣邏輯包括去除噪聲/去除交錯(cuò)模塊432、運(yùn)動(dòng)估計(jì)模塊434以及圖像縮放和濾波模塊436。在某些實(shí)施例中,去除噪聲/去除交錯(cuò)模塊432包括用來對(duì)解碼的視頻數(shù)據(jù)執(zhí)行去除噪聲或去除交錯(cuò)算法中的一個(gè)或多個(gè)的邏輯。去除交錯(cuò)邏輯將交錯(cuò)的視頻內(nèi)容的交變字段組合成視頻的單個(gè)幀。去除噪聲邏輯從視頻和圖像數(shù)據(jù)中減少或去除數(shù)據(jù)噪聲。在某些實(shí)施例中,去除噪聲邏輯和去除交錯(cuò)邏輯是運(yùn)動(dòng)適應(yīng)的并且基于在視頻數(shù)據(jù)中檢測(cè)的運(yùn)動(dòng)量來使用空間或時(shí)間濾波。在某些實(shí)施例中,去除噪聲/去除交錯(cuò)模塊432包括專用的運(yùn)動(dòng)檢測(cè)邏輯(例如,在運(yùn)動(dòng)估計(jì)引擎434內(nèi))。
在某些實(shí)施例中,運(yùn)動(dòng)估計(jì)引擎434通過執(zhí)行視頻加速功能(諸如視頻數(shù)據(jù)上的運(yùn)動(dòng)向量估計(jì)和預(yù)測(cè))來為視頻操作提供硬件加速。運(yùn)動(dòng)估計(jì)引擎確定描述連續(xù)視頻幀之間的圖像數(shù)據(jù)的轉(zhuǎn)換的運(yùn)動(dòng)向量。在某些實(shí)施例中,圖形處理器媒體編解碼器使用視頻運(yùn)動(dòng)估計(jì)引擎434來在以其他方式可能是太計(jì)算密集以致不能利用通用處理器來執(zhí)行的宏塊級(jí)別上執(zhí)行對(duì)視頻的操作。在某些實(shí)施例中,運(yùn)動(dòng)估計(jì)引擎434通??杀粓D形處理器部件利用來幫助對(duì)視頻數(shù)據(jù)內(nèi)的運(yùn)動(dòng)的方向或量值敏感或適應(yīng)的視頻解碼和處理功能。
在某些實(shí)施例中,圖像縮放和濾波模塊436執(zhí)行圖像處理操作以增強(qiáng)生成的圖像和視頻的視覺質(zhì)量。在某些實(shí)施例中,縮放和濾波模塊436在將數(shù)據(jù)提供給執(zhí)行單元陣列414之前在采樣操作期間處理圖像和視頻數(shù)據(jù)。
在某些實(shí)施例中,gpe410包括為圖形子系統(tǒng)提供附加的機(jī)制以便訪問存儲(chǔ)器的數(shù)據(jù)端口444。在某些實(shí)施例中,數(shù)據(jù)端口444有助于用于包括渲染目標(biāo)寫入、恒定的緩沖器讀取、擦除存儲(chǔ)器空間讀取/寫入以及媒體表面訪問的操作的存儲(chǔ)器訪問。在某些實(shí)施例中,數(shù)據(jù)端口444包括高速緩沖存儲(chǔ)器空間以便對(duì)存儲(chǔ)器進(jìn)行高速緩存訪問。高速緩沖存儲(chǔ)器可以是單個(gè)數(shù)據(jù)高速緩沖存儲(chǔ)器或者被分成用于經(jīng)由數(shù)據(jù)端口訪問存儲(chǔ)器的多個(gè)子系統(tǒng)的多個(gè)高速緩沖存儲(chǔ)器(例如,渲染緩沖器高速緩沖存儲(chǔ)器、恒定的緩沖器高速緩沖存儲(chǔ)器等等)。在某些實(shí)施例中,在執(zhí)行單元陣列414中的執(zhí)行單元上執(zhí)行的線程通過經(jīng)由耦合gpe410的子系統(tǒng)中的每個(gè)子系統(tǒng)的數(shù)據(jù)分布互連交換消息來與數(shù)據(jù)端口通信。
圖14是圖形處理器500的另一個(gè)實(shí)施例的框圖。具有與本文的任何其它圖的元件相同的附圖標(biāo)記(或名稱)的圖14的元件可以以與本文在別的地方描述的類似的任何方式來操作或者運(yùn)行,但是不限于這樣。
在某些實(shí)施例中,圖形處理器500包括環(huán)形互連502、管線前端504、媒體引擎537以及圖形核580a-580n。在某些實(shí)施例中,環(huán)形互連502將圖形處理器耦合至包括其它圖形處理器或者一個(gè)或多個(gè)通用處理器核的其它處理單元。在某些實(shí)施例中,圖形處理器是集成在多核處理系統(tǒng)內(nèi)的多個(gè)處理器中的一個(gè)處理器。
在某些實(shí)施例中,圖形處理器500經(jīng)由環(huán)形互連502接收成批的命令。通過管線前端504中的命令流化器503來解釋傳入的命令。在某些實(shí)施例中,圖形處理器500包括借助于一個(gè)或多個(gè)圖形核580a-580n來執(zhí)行3d幾何處理和媒體處理的可縮放執(zhí)行邏輯。對(duì)于3d幾何處理命令,命令流化器503將命令供應(yīng)給幾何管線536。對(duì)于至少某些媒體處理命令,命令流化器503將命令供應(yīng)給與媒體引擎537耦合的視頻前端534。在某些實(shí)施例中,媒體引擎537包括用于視頻和圖像后處理的視頻質(zhì)量引擎(vqe)530以及提供硬件加速的媒體數(shù)據(jù)編碼和解碼的多格式編碼/解碼(mfx)533引擎。在某些實(shí)施例中,幾何管線536和媒體引擎537各自生成用于由至少一個(gè)圖形核580a提供的線程執(zhí)行資源的執(zhí)行線程。
在某些實(shí)施例中,圖形處理器500包括以模塊化的核580a-580n(有時(shí)被稱為核片)為特色的可縮放線程執(zhí)行資源,所述模塊化的核各自具有多個(gè)子核550a-550n、560a-560n(有時(shí)被稱為核子片)。在某些實(shí)施例中,圖形處理器500可以具有任何數(shù)量的圖形核580a直到580n。在某些實(shí)施例中,圖形處理器500包括具有至少第一子核550a和第二核子核560a的圖形核580a。在其它實(shí)施例中,圖形處理器是具有單個(gè)子核(例如550a)的低功率處理器。在某些實(shí)施例中,圖形處理器500包括多個(gè)圖形核580a-580n,各自包括第一子核550a-550n的集合和第二子核560a-560n的集合。第一子核550a-550n的集合中的每個(gè)子核包括至少執(zhí)行單元552a-552n和媒體/紋理采樣器554a-554n的第一集合。第二子核560a-560n的集合中的每個(gè)子核包括至少執(zhí)行單元562a-562n和采樣器564a-564n的第二集合。在某些實(shí)施例中,每個(gè)子核550a-550n、560a-560n共享共享的資源570a-570n的集合。在某些實(shí)施例中,共享的資源包括共享的高速緩沖存儲(chǔ)器和像素操作邏輯。其它共享的資源還可以被包括在圖形處理器的各種實(shí)施例中。
圖15說明了線程執(zhí)行邏輯600包括在gpe的某些實(shí)施例中使用的處理元件的陣列。具有與本文的任何其它圖的元件相同的附圖標(biāo)記(或名稱)的圖15的元件可以以與本文在別的地方描述的類似的任何方式來操作或者運(yùn)行,但是不限于這樣。
在某些實(shí)施例中,線程執(zhí)行邏輯600包括像素著色器602、線程分派器604、指令高速緩沖存儲(chǔ)器606、包括有多個(gè)執(zhí)行單元608a-608n的可縮放執(zhí)行單元陣列、采樣器610、數(shù)據(jù)高速緩沖存儲(chǔ)器612以及數(shù)據(jù)端口614。在一個(gè)實(shí)施例中,經(jīng)由鏈接到部件中的每個(gè)部件的互連結(jié)構(gòu)來互連所包括的部件。在某些實(shí)施例中,線程執(zhí)行邏輯600包括通過指令高速緩沖存儲(chǔ)器606、數(shù)據(jù)端口614、采樣器610以及執(zhí)行單元陣列608a-608n中的一個(gè)或多個(gè)的、到存儲(chǔ)器(諸如系統(tǒng)存儲(chǔ)器或者高速緩沖存儲(chǔ)器)的一個(gè)或多個(gè)連接。在某些實(shí)施例中,每個(gè)執(zhí)行單元(例如608a)是能夠執(zhí)行多個(gè)同時(shí)線程并且為每個(gè)線程并行處理多個(gè)數(shù)據(jù)元素的單獨(dú)的向量處理器。在某些實(shí)施例中,執(zhí)行單元陣列608a-608n包括任何數(shù)量的單獨(dú)的執(zhí)行單元。
在某些實(shí)施例中,執(zhí)行單元陣列608a-608n主要被用來執(zhí)行“著色器”程序。在某些實(shí)施例中,陣列608a-608n中的執(zhí)行單元執(zhí)行包括對(duì)于許多標(biāo)準(zhǔn)3d圖形著色器指令的本地支持的指令集,使得利用最小翻譯執(zhí)行來自圖形庫(例如,direct3d和opengl)的著色器程序。執(zhí)行單元支持頂點(diǎn)和幾何處理(例如,頂點(diǎn)程序、幾何程序、頂點(diǎn)著色器)、像素處理(例如,像素著色器、片段著色器)以及通用處理(例如,計(jì)算和媒體著色器)。
執(zhí)行單元陣列608a-608n中的每個(gè)執(zhí)行單元在數(shù)據(jù)元素的陣列上操作。數(shù)據(jù)元素的數(shù)量是“執(zhí)行大小”或者用于指令的通道數(shù)量。執(zhí)行通道是用于指令內(nèi)的數(shù)據(jù)元素訪問、掩蔽(masking)和流程控制的執(zhí)行的邏輯單元。通道數(shù)量可以獨(dú)立于用于特定圖形處理器的物理算術(shù)邏輯單元(alu)或浮點(diǎn)單元(fpu)的數(shù)量。在某些實(shí)施例中,執(zhí)行單元608a-608n支持整數(shù)和浮點(diǎn)數(shù)據(jù)類型。
執(zhí)行單元指令集包括單指令多數(shù)據(jù)(simd)指令。各種數(shù)據(jù)元素可以在寄存器中被存儲(chǔ)為壓縮數(shù)據(jù)類型并且執(zhí)行單元將基于元素的數(shù)據(jù)大小來處理各種元素。例如,當(dāng)在256比特寬的向量上操作時(shí),向量的256比特被存儲(chǔ)在寄存器中并且執(zhí)行單元在作為四個(gè)單獨(dú)的64位壓縮的數(shù)據(jù)元素(四倍長(zhǎng)字(qw)大小數(shù)據(jù)元素)、八個(gè)單獨(dú)的32位壓縮的數(shù)據(jù)元素(雙字(dw)大小數(shù)據(jù)元素)、十六個(gè)單獨(dú)的16位壓縮的數(shù)據(jù)元素(字(w)大小數(shù)據(jù)元素)或者三十二個(gè)單獨(dú)的8位數(shù)據(jù)元素(字節(jié)(b)大小數(shù)據(jù)元素)的向量上操作。然而,不同的向量寬度和寄存器大小是可能的。
一個(gè)或多個(gè)內(nèi)部指令高速緩沖存儲(chǔ)器(例如606)被包括在線程執(zhí)行邏輯600中以便為執(zhí)行單元高速緩存線程指令。在某些實(shí)施例中,一個(gè)或多個(gè)數(shù)據(jù)高速緩沖存儲(chǔ)器(例如612)被包括以便在線程執(zhí)行期間高速緩存線程數(shù)據(jù)。在某些實(shí)施例中,采樣器610被包括以便為3d操作提供紋理采樣并且為媒體操作提供媒體采樣。在某些實(shí)施例中,采樣器610包括專用的紋理或媒體采樣功能性以在將采樣的數(shù)據(jù)提供給執(zhí)行單元之前在采樣過程期間處理紋理或媒體數(shù)據(jù)。
在期間執(zhí)行,圖形和媒體管線經(jīng)由線程產(chǎn)生和分派邏輯將線程發(fā)起請(qǐng)求發(fā)送到線程執(zhí)行邏輯600。在某些實(shí)施例中,線程執(zhí)行邏輯600包括仲裁來自圖形和媒體管線的線程發(fā)起請(qǐng)求并且在一個(gè)或多個(gè)執(zhí)行單元608a-608n上例示請(qǐng)求的線程的本地線程分派器604。例如,幾何管線(例如,圖14的536)將頂點(diǎn)處理、鑲嵌或者幾何處理線程分派到線程執(zhí)行邏輯600(圖15)。在某些實(shí)施例中,線程分派器604還可以處理來自執(zhí)行著色器程序的運(yùn)行時(shí)間線程產(chǎn)生請(qǐng)求。
一旦一組幾何對(duì)象已經(jīng)被處理并且被光柵化成像素?cái)?shù)據(jù),像素著色器602被調(diào)用以便進(jìn)一步計(jì)算輸出的信息并且促使結(jié)果將要被寫到輸出表面(例如顏色緩沖器、深度緩沖器、模板緩沖器等等)。在某些實(shí)施例中,像素著色器602計(jì)算將要跨光柵化的對(duì)象被內(nèi)插的各種頂點(diǎn)屬性的值。在某些實(shí)施例中,像素著色器602接著執(zhí)行應(yīng)用編程接口(api)供應(yīng)的像素著色器程序。為了執(zhí)行像素著色器程序,像素著色器602經(jīng)由線程分派器604將線程分派到執(zhí)行單元(例如608a)。在某些實(shí)施例中,像素著色器602使用采樣器610中的紋理采樣邏輯來訪問被存儲(chǔ)在存儲(chǔ)器中的紋理映射中的紋理數(shù)據(jù)。紋理數(shù)據(jù)和輸入幾何數(shù)據(jù)上的算術(shù)操作為每個(gè)幾何片段計(jì)算像素顏色數(shù)據(jù),或者從進(jìn)一步處理中丟棄一個(gè)或多個(gè)像素。
在某些實(shí)施例中,數(shù)據(jù)端口614將為線程執(zhí)行邏輯600輸出處理的數(shù)據(jù)到存儲(chǔ)器提供存儲(chǔ)器訪問機(jī)制以用于在圖形處理器輸出管線上處理。在某些實(shí)施例中,數(shù)據(jù)端口614包括或者耦合至一個(gè)或多個(gè)高速緩沖存儲(chǔ)器(例如,數(shù)據(jù)高速緩沖存儲(chǔ)器612)以便高速緩存數(shù)據(jù)以用于經(jīng)由數(shù)據(jù)端口的存儲(chǔ)器訪問。
圖16是說明根據(jù)某些實(shí)施例的圖形處理器指令格式700的框圖。在一個(gè)或多個(gè)實(shí)施例中,圖形處理器執(zhí)行單元支持具有多種格式的指令的指令集。實(shí)線盒子說明了通常被包括在執(zhí)行單元指令中的部件,而虛線包括是可選的或者僅僅被包括在指令的子集中的部件。在某些實(shí)施例中,與一旦指令被處理則由指令產(chǎn)生的微操作解碼相反,所描述的和所說明的指令格式700是宏指令,因?yàn)樗鼈兪潜还?yīng)給執(zhí)行單元的指令。
在某些實(shí)施例中,圖形處理器執(zhí)行單元本地支持128位格式710的指令?;谒x擇的指令、指令選項(xiàng)以及操作數(shù)的數(shù)量,64位壓實(shí)的指令格式730對(duì)于某些指令是可用的。本地128位格式710提供對(duì)所有指令選項(xiàng)的訪問,而某些選項(xiàng)和操作被限制在64位格式730。64位格式730可用的本地指令隨實(shí)施例而變化。在某些實(shí)施例中,使用索引字段713中的索引值的集合來部分壓實(shí)指令。執(zhí)行單元硬件基于索引值來引用壓實(shí)表的集合并且使用壓實(shí)表輸出來重建128位格式710的本地指令。
對(duì)于每個(gè)格式,指令操作碼712定義執(zhí)行單元將要執(zhí)行的操作。執(zhí)行單元跨每個(gè)操作數(shù)的多個(gè)數(shù)據(jù)元素并行執(zhí)行每個(gè)指令。例如,響應(yīng)于加法指令,執(zhí)行單元跨表示紋理元素或圖片元素的每個(gè)顏色通道執(zhí)行同時(shí)加法操作。缺省地,執(zhí)行單元跨操作數(shù)的所有數(shù)據(jù)通道執(zhí)行每個(gè)指令。在某些實(shí)施例中,指令控制字段714使能控制某些執(zhí)行選項(xiàng),諸如通道選擇(例如預(yù)測(cè))和數(shù)據(jù)通道順序(例如攪和(swizzle))。對(duì)于128位指令710,執(zhí)行大?。╡xec-size)字段716限制將被并行執(zhí)行的數(shù)據(jù)通道的數(shù)量。在某些實(shí)施例中,執(zhí)行大小字段716不可用于64位壓實(shí)指令格式730。
某些執(zhí)行單元指令具有多達(dá)三個(gè)操作數(shù),包括兩個(gè)源操作數(shù)src0722、srd1722和一個(gè)目的地718。在某些實(shí)施例中,執(zhí)行單元支持雙目的地指令,其中目的地中的一個(gè)被暗示。數(shù)據(jù)操縱指令可以具有第三源操作數(shù)(例如,src2724),其中指令操作碼712確定源操作數(shù)的數(shù)量。指令的最后源操作數(shù)可以是隨指令傳遞的立即(例如硬編碼)值。
在某些實(shí)施例中,128位指令格式710包括指定例如是使用直接寄存器尋址模式還是使用間接寄存器尋址模式的訪問/地址模式信息726。當(dāng)使用直接寄存器尋址模式時(shí),通過指令710中的位直接提供一個(gè)或多個(gè)操作數(shù)的寄存器地址。
在某些實(shí)施例中,128位指令格式710包括指定對(duì)于指令的地址模式和/或訪問模式的訪問/地址模式字段726。在一個(gè)實(shí)施例中,訪問模式定義用于指令的數(shù)據(jù)訪問對(duì)準(zhǔn)。某些實(shí)施例支持包括16字節(jié)對(duì)準(zhǔn)的訪問模式和1字節(jié)對(duì)準(zhǔn)的訪問模式的訪問模式,其中訪問模式的字節(jié)對(duì)準(zhǔn)確定指令操作數(shù)的訪問對(duì)準(zhǔn)。例如,當(dāng)處在第一模式時(shí),指令710可以為源和目的地操作數(shù)使用字節(jié)對(duì)準(zhǔn)的尋址并且當(dāng)處在第二模式時(shí),指令710可以為所有源和目的地操作數(shù)使用16字節(jié)對(duì)準(zhǔn)的尋址。
在一個(gè)實(shí)施例中,訪問/地址模式字段726的地址模式部分確定指令將使用是直接還是間接尋址。當(dāng)使用直接寄存器尋址模式時(shí),指令710中的比特直接地提供一個(gè)或多個(gè)操作對(duì)象的寄存器地址。當(dāng)使用間接寄存器尋址模式時(shí),可以基于指令中的地址寄存器值和地址立即字段計(jì)算一個(gè)或多個(gè)操作數(shù)的寄存器地址。
在某些實(shí)施例中,基于操作碼712位字段來對(duì)指令分組以簡(jiǎn)化操作碼解碼740。對(duì)于8位操作碼,位4、5和6允許執(zhí)行單元確定操作碼的類型。示出的精確的操作碼分組僅僅是示例。在某些實(shí)施例中,移動(dòng)和邏輯操作碼組742包括數(shù)據(jù)移動(dòng)和邏輯指令(例如,移動(dòng)(mov)、比較(cmp))。在某些實(shí)施例中,移動(dòng)和邏輯組742共享五個(gè)最高有效位(msb),其中移動(dòng)(mov)指令是以0000xxxxb的形式并且邏輯指令是以0001xxxxb的形式。流程控制指令組744(例如,調(diào)用、跳(jmp))包括以0010xxxxb的形式(例如0x20)的指令。雜項(xiàng)指令組746包括指令的混合,包括以0011xxxxb的形式(例如0x30)的同步指令(例如,等待、發(fā)送)。并行數(shù)學(xué)指令組748包括以0100xxxxb的形式(例如0x40)的部件方式算術(shù)指令(例如,加、乘(mul))。并行數(shù)學(xué)組748跨數(shù)據(jù)通道并行執(zhí)行算術(shù)操作。向量數(shù)學(xué)組750包括以0101xxxxb的形式(例如0x50)的算術(shù)指令(例如dp4)。向量數(shù)學(xué)組對(duì)向量操作數(shù)執(zhí)行算術(shù),諸如點(diǎn)乘計(jì)算。
圖17是圖形處理器800的另一個(gè)實(shí)施例的框圖。具有與本文的任何其它圖的元件相同的附圖標(biāo)記(或名稱)的圖17的元件可以以與本文在別的地方描述的類似的任何方式來操作或者運(yùn)行,但是不限于這樣。
在某些實(shí)施例中,圖形處理器800包括圖形管線820、媒體管線830、顯示器引擎840、線程執(zhí)行邏輯850以及渲染輸出管線870。在某些實(shí)施例中,圖形處理器800是包括一個(gè)或多個(gè)通用處理核的多核處理系統(tǒng)內(nèi)的圖形處理器。通過寄存器寫到一個(gè)或多個(gè)控制寄存器(未示出)或者借助于經(jīng)由環(huán)形互連802發(fā)出到圖形處理器800的命令來控制圖形處理器。在某些實(shí)施例中,環(huán)形互連802將圖形處理器800耦合至其它處理部件,諸如其它圖形處理器或通用處理器。通過將指令供應(yīng)給圖形管線820或者媒體管線830的單獨(dú)的部件的命令流化器803來解釋來自環(huán)形互連802的命令。
在某些實(shí)施例中,命令流化器803指導(dǎo)從存儲(chǔ)器讀取頂點(diǎn)數(shù)據(jù)并且執(zhí)行由命令流化器803提供的頂點(diǎn)處理命令的頂點(diǎn)讀取器805的操作。在某些實(shí)施例中,頂點(diǎn)讀取器805將頂點(diǎn)數(shù)據(jù)提供給執(zhí)行坐標(biāo)空間轉(zhuǎn)換和點(diǎn)亮操作到每個(gè)頂點(diǎn)的頂點(diǎn)著色器807。在某些實(shí)施例中,頂點(diǎn)讀取器805和頂點(diǎn)著色器807通過經(jīng)由線程分派器831將執(zhí)行線程分派到執(zhí)行單元852a、852b來執(zhí)行頂點(diǎn)處理指令。
在某些實(shí)施例中,執(zhí)行單元852a、852b是具有用于執(zhí)行圖形和媒體操作的指令集的向量處理器的陣列。在某些實(shí)施例中,執(zhí)行單元852a、852b具有專用于每個(gè)陣列或者在陣列之間共享的附加的l1高速緩沖存儲(chǔ)器851。高速緩沖存儲(chǔ)器可以被配置為數(shù)據(jù)高速緩沖存儲(chǔ)器、指令高速緩沖存儲(chǔ)器或者被分區(qū)成包含不同分區(qū)中的數(shù)據(jù)和指令的單個(gè)高速緩沖存儲(chǔ)器。
在某些實(shí)施例中,圖形管線820包括用來執(zhí)行3d對(duì)象的硬件加速的鑲嵌的鑲嵌部件。在某些實(shí)施例中,可編程外殼著色器811配置鑲嵌操作。可編程域著色器817提供鑲嵌輸出的后端評(píng)估。鑲嵌器813在外殼著色器811的指導(dǎo)下操作并且包含專用邏輯以基于作為到圖形管線820的輸入而被提供的粗幾何模型來生成詳細(xì)的幾何對(duì)象的集合。在某些實(shí)施例中,如果未使用鑲嵌,可以繞過鑲嵌部件811、813、817。
在某些實(shí)施例中,可以通過幾何著色器819借助于被分派到執(zhí)行單元852a、852b的一個(gè)或多個(gè)線程來處理全部幾何對(duì)象,或者全部幾何對(duì)象可以直接進(jìn)入限幅器829。在某些實(shí)施例中,如在圖形管線的先前級(jí)中那樣,幾何著色器在整個(gè)幾何對(duì)象上操作,而不是頂點(diǎn)或者頂點(diǎn)的補(bǔ)片。如果鑲嵌被停用,則幾何著色器819從頂點(diǎn)著色器807接收輸入。在某些實(shí)施例中,如果鑲嵌單元被停用,則幾何著色器819通過幾何著色器程序是可編程的以執(zhí)行幾何鑲嵌。
在光柵化之前,限幅器829處理頂點(diǎn)數(shù)據(jù)。限幅器829可以是具有限幅和幾何著色器功能的可編程限幅器或者固定功能限幅器。在某些實(shí)施例中,渲染輸出管線870中的光柵化器/深度873分派像素著色器以將幾何對(duì)象轉(zhuǎn)換成它們的每像素表示。在某些實(shí)施例中,像素著色器邏輯被包括在線程執(zhí)行邏輯850中。在某些實(shí)施例中,應(yīng)用可以繞過光柵化器873并且經(jīng)由流輸出單元823來訪問未光柵化的頂點(diǎn)數(shù)據(jù)。
圖形處理器800具有互連總線、互連結(jié)構(gòu)或者允許數(shù)據(jù)和消息在處理器的主要部件之間傳遞的某個(gè)其它互連機(jī)制。在某些實(shí)施例中,執(zhí)行單元852a、852b和一個(gè)或多個(gè)關(guān)聯(lián)的高速緩沖存儲(chǔ)器851、紋理和媒體采樣器854以及紋理/采樣器高速緩沖存儲(chǔ)器858經(jīng)由數(shù)據(jù)端口856互連以執(zhí)行存儲(chǔ)器訪問并且與處理器的渲染輸出管線部件通信。在某些實(shí)施例中,采樣器854、高速緩沖存儲(chǔ)器851、858以及執(zhí)行單元852a、852b各自具有單獨(dú)的存儲(chǔ)器訪問路徑。
在某些實(shí)施例中,渲染輸出管線870包含將基于頂點(diǎn)的對(duì)象轉(zhuǎn)換成關(guān)聯(lián)的基于像素的表示的光柵化器和深度測(cè)試部件873。在某些實(shí)施例中,光柵化器邏輯包括窗口器/掩蔽器單元以執(zhí)行固定功能三角形和線光柵化。在某些實(shí)施例中,關(guān)聯(lián)的渲染高速緩沖存儲(chǔ)器878和深度高速緩沖存儲(chǔ)器879也是可用的。像素操作部件877對(duì)數(shù)據(jù)執(zhí)行基于像素的操作,雖然在某些實(shí)例中,與2d操作相關(guān)聯(lián)的像素操作(例如利用混合的位塊圖像傳送)通過2d引擎841來執(zhí)行,或者使用疊加顯示平面通過顯示器控制器843在顯示時(shí)間被替代。在某些實(shí)施例中,共享的l3高速緩沖存儲(chǔ)器875可用于所有圖形部件,允許數(shù)據(jù)共享而不使用主系統(tǒng)存儲(chǔ)器。
在某些實(shí)施例中,圖形處理器媒體管線830包括媒體引擎837和視頻前端834。在某些實(shí)施例中,視頻前端834從命令流化器803接收管線命令。在某些實(shí)施例中,媒體管線830包括單獨(dú)的命令流化器。在某些實(shí)施例中,在將命令發(fā)送到媒體引擎837之前,視頻前端834處理媒體命令。在某些實(shí)施例中,媒體引擎337包括線程產(chǎn)生功能性以產(chǎn)生用于經(jīng)由線程分派器831分派到線程執(zhí)行邏輯850的線程。
在某些實(shí)施例中,圖形處理器800包括顯示器引擎840。在某些實(shí)施例中,顯示器引擎840在處理器800的外部并且經(jīng)由環(huán)形互連802或者某個(gè)其它互連總線或結(jié)構(gòu)與圖形處理器耦合。在某些實(shí)施例中,顯示器引擎840包括2d引擎841和顯示器控制器843。在某些實(shí)施例中,顯示器引擎840包含能夠獨(dú)立于3d管線來操作的專用邏輯。在某些實(shí)施例中,顯示器控制器843與顯示器設(shè)備(未示出)耦合,所述顯示設(shè)備可以是如在膝上型計(jì)算機(jī)中的系統(tǒng)集成的顯示器設(shè)備,或者是經(jīng)由顯示器設(shè)備連接器附接的外部顯示器設(shè)備。
在某些實(shí)施例中,圖形管線820和媒體管線830是可配置的以便基于多個(gè)圖形和媒體編程接口來執(zhí)行操作并且不是專用于任何一個(gè)應(yīng)用編程接口(api)的。在某些實(shí)施例中,用于圖形處理器的驅(qū)動(dòng)器軟件將專用于特定圖形或媒體庫的api調(diào)用翻譯成可以被圖形處理器處理的命令。在某些實(shí)施例中,為來自khronos組的公開圖形庫(opengl)和公開計(jì)算語言(opencl)、來自microsoft公司的direct3d庫提供支持,或者可以向opengl和d3d兩者提供支持。還可以為開源計(jì)算機(jī)視覺庫(opencv)提供支持。如果可以進(jìn)行從未來api的管線到圖形處理器的管線的映射,則還將支持具有兼容的3d管線的未來api。
圖18a是說明根據(jù)某些實(shí)施例的圖形處理器命令格式900的框圖。圖18b是說明根據(jù)實(shí)施例的圖形處理器命令序列910的框圖。圖18a中的實(shí)線盒子說明了通常被包括在圖形命令中的部件,而虛線包括是可選的或者僅僅被包括在圖形命令的子集中的部件。圖18a的示范的圖形處理器命令格式900包括數(shù)據(jù)字段以識(shí)別命令的目標(biāo)客戶902、命令操作碼(操作碼)904以及用于命令的相關(guān)數(shù)據(jù)906。子操作碼905和命令大小908也被包括在某些命令中。
在某些實(shí)施例中,客戶902指定處理命令數(shù)據(jù)的圖形設(shè)備的客戶單元。在某些實(shí)施例中,圖形處理器命令解析器檢查每個(gè)命令的客戶字段以調(diào)節(jié)命令的進(jìn)一步處理并且將命令數(shù)據(jù)路由到適當(dāng)?shù)目蛻魡卧?。在某些?shí)施例中,圖形處理器客戶單元包括存儲(chǔ)器接口單元、渲染單元、2d單元、3d單元和媒體單元。每個(gè)客戶單元具有處理命令的對(duì)應(yīng)處理管線。一旦由客戶單元接收到命令,客戶單元讀取操作碼904和子操作碼905(如果存在的話)以確定要執(zhí)行的操作??蛻魡卧褂脭?shù)據(jù)字段906中的信息來執(zhí)行命令。對(duì)于某些命令,預(yù)期顯式的命令大小908以指定命令的大小。在某些實(shí)施例中,命令解析器基于命令操作碼來自動(dòng)確定至少某些命令的大小。在某些實(shí)施例中,借助于雙字的倍數(shù)來對(duì)準(zhǔn)命令。
圖18b中的流程圖示出了示范的圖形處理器命令序列910。在某些實(shí)施例中,以圖形處理器的實(shí)施例為特色的數(shù)據(jù)處理系統(tǒng)的軟件或者固件使用示出的命令序列的版本來建立、執(zhí)行和終止圖形操作的集合。僅僅為了示例的目的來示出和描述采樣命令序列,因?yàn)閷?shí)施例不限于這些特定的命令或者不限于這個(gè)命令序列。此外,命令可以作為命令序列中的批量的命令被發(fā)出,使得圖形處理器將至少部分同時(shí)處理命令的序列。
某些實(shí)施例中,圖形處理器命令序列910可以始于管線沖洗命令912以促使任何活動(dòng)的圖形管線為管線完成當(dāng)前未決的命令。在某些實(shí)施例中,3d管線922和媒體管線924不會(huì)同時(shí)操作。執(zhí)行管線沖洗以促使活動(dòng)的圖形管線完成任何未決的命令。響應(yīng)于管線沖洗,用于圖形處理器的命令解析器將暫停命令處理直到活動(dòng)的繪圖引擎完成未決的操作并且使相關(guān)的讀取高速緩沖存儲(chǔ)器無效??蛇x地,可以將渲染高速緩沖存儲(chǔ)器中的被標(biāo)記‘臟’的任何數(shù)據(jù)沖洗到存儲(chǔ)器。在某些實(shí)施例中,管線沖洗命令912可以被用于管線同步或者在將圖形處理器置于低功率狀態(tài)之前可以使用管線沖洗命令912。
某些實(shí)施例中,當(dāng)命令序列要求圖形處理器顯式地在管線之間切換時(shí),使用管線選擇命令913。在某些實(shí)施例中,在發(fā)出管線命令之前,在執(zhí)行上下文內(nèi)僅要求管線選擇命令913一次,除非上下文是為兩個(gè)管線發(fā)出命令。在某些實(shí)施例中,在借助于管線選擇命令913的管線切換之前立即要求管線沖洗命令912。
在某些實(shí)施例中,管線控制命令914配置用于操作的圖形管線并且被用來編程3d管線922和媒體管線924。在某些實(shí)施例中,管線控制命令914為活動(dòng)的管線配置管線狀態(tài)。在一個(gè)實(shí)施例中,管線控制命令914被用于管線同步并且被用來在處理批量的命令之前從活動(dòng)的管線內(nèi)的一個(gè)或多個(gè)高速緩沖存儲(chǔ)器清除數(shù)據(jù)。
在某些實(shí)施例中,返回緩沖器狀態(tài)命令916被用來為相應(yīng)的管線配置返回緩沖器的集合以寫入數(shù)據(jù)。某些管線操作要求分配、選擇或者配置在處理期間操作將中間數(shù)據(jù)寫入的一個(gè)或多個(gè)返回緩沖器。在某些實(shí)施例中,圖形處理器還使用一個(gè)或多個(gè)返回緩沖器來存儲(chǔ)輸出的數(shù)據(jù)并且執(zhí)行交叉線程通信。在某些實(shí)施例中,返回緩沖器狀態(tài)916包括選擇返回緩沖器的大小和數(shù)量以用于管線操作的集合。
命令序列中的剩余命令基于用于操作的活動(dòng)的管線而不同?;诠芫€確定920,命令序列適應(yīng)始于3d管線狀態(tài)930的3d管線922,或者始于媒體管線狀態(tài)940的媒體管線924。
用于3d管線狀態(tài)930的命令包括3d狀態(tài)設(shè)置命令以用于頂點(diǎn)緩沖器狀態(tài)、頂點(diǎn)元素狀態(tài)、恒定顏色狀態(tài)、深度緩沖器狀態(tài)以及在處理3d圖元命令之前將要被配置的其它狀態(tài)變量。至少部分地基于在使用中的特定3dapi來確定這些命令的值。在某些實(shí)施例中,如果將不會(huì)使用某些管線元件的話,3d管線狀態(tài)930命令還能夠選擇性地停用或者繞過那些元件。
某些實(shí)施例中,3d圖元932命令被用來提交將要被3d管線處理的3d圖元。將借助于3d圖元932命令被傳遞到圖形處理器的命令和關(guān)聯(lián)的參數(shù)轉(zhuǎn)發(fā)到圖形管線中的頂點(diǎn)讀取功能。頂點(diǎn)讀取功能使用3d圖元932命令數(shù)據(jù)來生成頂點(diǎn)數(shù)據(jù)結(jié)構(gòu)。在一個(gè)或多個(gè)返回緩沖器中存儲(chǔ)頂點(diǎn)數(shù)據(jù)結(jié)構(gòu)。在某些實(shí)施例中,3d圖元932命令被用來借助于頂點(diǎn)著色器在3d圖元上執(zhí)行頂點(diǎn)操作。為了處理頂點(diǎn)著色器,3d管線922將著色器執(zhí)行線程分派到圖形處理器執(zhí)行單元。
在某些實(shí)施例中,借助于執(zhí)行934命令或事件來觸發(fā)3d管線922。在某些實(shí)施例中,寄存器寫入觸發(fā)命令執(zhí)行。在某些實(shí)施例中,借助于命令序列中的‘go’或‘kick’命令來觸發(fā)執(zhí)行。在一個(gè)實(shí)施例中,使用管線同步命令來觸發(fā)命令執(zhí)行以通過圖形管線來沖洗命令序列。3d管線將為3d圖元執(zhí)行幾何處理。一旦操作完成,光柵化所得到的幾何對(duì)象并且像素引擎給所得到的像素上色??刂葡袼刂拖袼睾蠖瞬僮鞯母郊用钜部梢詾榱四切┎僮鞫话ㄔ趦?nèi)。
在某些實(shí)施例中,當(dāng)執(zhí)行媒體操作時(shí),圖形處理器命令序列910沿媒體管線924路徑而行。通常,用于媒體管線924的編程的特定使用和方式取決于將要被執(zhí)行的媒體或計(jì)算操作。在媒體解碼期間,可以將特定媒體解碼操作推卸給媒體管線。在某些實(shí)施例中,還可以繞過媒體管線并且可以使用由一個(gè)或多個(gè)通用處理核提供的資源來完全或者部分地執(zhí)行媒體解碼。在一個(gè)實(shí)施例中,媒體管線還包括用于通用圖形處理器單元(gpgpu)操作的元件,其中圖形處理器被用來使用不是顯式地與圖形圖元的渲染有關(guān)的計(jì)算著色器程序來執(zhí)行simd向量操作。
在某些實(shí)施例中,以與3d管線922類似的方式來配置媒體管線924。在媒體對(duì)象命令942之前,將媒體管線狀態(tài)命令940的集合分派或者置于命令序列中。在某些實(shí)施例中,媒體管線狀態(tài)命令940包括配置將被用來處理媒體對(duì)象的媒體管線元件的數(shù)據(jù)。這包括配置媒體管線內(nèi)的視頻解碼和視頻編碼邏輯的數(shù)據(jù),諸如編碼或解碼格式。在某些實(shí)施例中,媒體管線狀態(tài)命令940還支持使用到包含批量的狀態(tài)設(shè)置的“間接”狀態(tài)元件的一個(gè)或多個(gè)指針。
在某些實(shí)施例中,媒體對(duì)象命令942將指針供應(yīng)給媒體對(duì)象以用于由媒體管線處理。媒體對(duì)象包括包含有將要被處理的視頻數(shù)據(jù)的存儲(chǔ)器緩沖器。在某些實(shí)施例中,在發(fā)出媒體對(duì)象命令942之前,所有媒體管線狀態(tài)必須是有效的。一旦配置了管線狀態(tài)并且使媒體對(duì)象命令942排隊(duì),就借助于執(zhí)行命令944或等同的執(zhí)行事件(例如,寄存器寫入)來觸發(fā)媒體管線924。接著可以通過由3d管線922或媒體管線924提供的操作來后處理來自媒體管線924的輸出。在某些實(shí)施例中,以與媒體操作類似的方式配置和執(zhí)行g(shù)pgpu操作。
圖19說明了根據(jù)某些實(shí)施例的數(shù)據(jù)處理系統(tǒng)1000的示范的圖形軟件體系結(jié)構(gòu)。在某些實(shí)施例中,軟件體系結(jié)構(gòu)包括3d圖形應(yīng)用1010、操作系統(tǒng)1020和至少一個(gè)處理器1030。在某些實(shí)施例中,處理器1030包括圖形處理器1032和一個(gè)或多個(gè)通用處理器核1034。圖形應(yīng)用1010和操作系統(tǒng)1020各自在數(shù)據(jù)處理系統(tǒng)的系統(tǒng)存儲(chǔ)器1050中執(zhí)行。
在某些實(shí)施例中,3d圖形應(yīng)用1010包含包括有著色器指令1012的一個(gè)或多個(gè)著色器程序。著色器語言指令可以是以高級(jí)著色器語言,諸如高級(jí)著色器語言(hlsl)或opengl著色器語言(glsl)。應(yīng)用還包括適合于由通用處理器核1034執(zhí)行的機(jī)器語言中的可執(zhí)行指令1014。應(yīng)用還包括通過頂點(diǎn)數(shù)據(jù)定義的圖形對(duì)象1016。
在某些實(shí)施例中,操作系統(tǒng)1020是來自microsoft公司的microsoft?windows?操作系統(tǒng)、私有的類unix操作系統(tǒng)、或者使用linux內(nèi)核的變體的開源類unix操作系統(tǒng)。當(dāng)direct3dapi在使用中時(shí),操作系統(tǒng)1020使用前端著色器編譯器1024來將hlsl中的任何著色器指令1012編譯成更低級(jí)著色器語言。編譯可以是即時(shí)(jit)編譯或者應(yīng)用可以執(zhí)行著色器預(yù)編譯。在某些實(shí)施例中,在3d圖形應(yīng)用1010的編譯期間,將高級(jí)著色器編譯成低級(jí)著色器。
在某些實(shí)施例中,用戶模式圖形驅(qū)動(dòng)器1026包含將著色器指令1012轉(zhuǎn)換成硬件特定的表示的后端著色器編譯器1027。當(dāng)openglapi在使用中時(shí),將以glsl高級(jí)語言的著色器指令1012傳遞到用戶模式圖形驅(qū)動(dòng)器1026以用于編譯。在某些實(shí)施例中,用戶模式圖形驅(qū)動(dòng)器1026使用操作系統(tǒng)內(nèi)核模式功能1028來與內(nèi)核模式圖形驅(qū)動(dòng)器1029通信。在某些實(shí)施例中,內(nèi)核模式圖形驅(qū)動(dòng)器1029與圖形處理器1032通信以分派命令和指令。
可以通過存儲(chǔ)在機(jī)器可讀介質(zhì)上的表示和/或定義集成電路(諸如處理器)內(nèi)的邏輯的代表性代碼來實(shí)現(xiàn)至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面。例如,機(jī)器可讀介質(zhì)可以包括表示處理器內(nèi)的各種邏輯的指令。當(dāng)通過機(jī)器讀取時(shí),指令可以促使機(jī)器制作執(zhí)行本文描述的技術(shù)的邏輯。被稱為“ip核”的這樣的表示是用于集成電路的邏輯的可重復(fù)使用單元,其可以作為描述集成電路的結(jié)構(gòu)的硬件模型被存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上。可以將硬件模型供應(yīng)給將硬件模型加載到制造集成電路的制作機(jī)器上的各種顧客或制造設(shè)施??梢灾谱骷呻娐肥沟秒娐穲?zhí)行與本文描述的實(shí)施例中的任何實(shí)施例相關(guān)聯(lián)而描述的操作。
圖20是說明可以被用來制造執(zhí)行根據(jù)實(shí)施例的操作的集成電路的ip核開發(fā)系統(tǒng)1100的框圖。ip核開發(fā)系統(tǒng)1100可以被用來生成可以被并入更大設(shè)計(jì)的模塊化的可重復(fù)使用設(shè)計(jì)或者被用來建造整個(gè)集成電路(例如,soc集成電路)。設(shè)計(jì)設(shè)施1130可以以高級(jí)編程語言(例如,c/c++)生成ip核設(shè)計(jì)的軟件模擬1110。軟件模擬1110可被用來設(shè)計(jì)、測(cè)試和驗(yàn)證ip核的行為。接著可以由模擬模型1100創(chuàng)建或者合成寄存器傳送級(jí)(rtl)設(shè)計(jì)。rtl設(shè)計(jì)1115是對(duì)硬件寄存器之間的數(shù)字信號(hào)流建模的集成電路的行為的抽象,包括使用建模的數(shù)字信號(hào)執(zhí)行的關(guān)聯(lián)的邏輯。除了rtl設(shè)計(jì)1115之外,還可以創(chuàng)建、設(shè)計(jì)或者合成邏輯級(jí)或者晶體管級(jí)的更低級(jí)設(shè)計(jì)。因此,初始設(shè)計(jì)和模擬的特定細(xì)節(jié)可以變化。
可以通過設(shè)計(jì)設(shè)施來將rtl設(shè)計(jì)1115或者等同物進(jìn)一步合成為可以是以硬件描述語言(hdl)或者物理設(shè)計(jì)數(shù)據(jù)的某個(gè)其它表示的硬件模型1120??梢赃M(jìn)一步模擬或者測(cè)試hdl以驗(yàn)證ip核設(shè)計(jì)??梢允褂梅且资源鎯?chǔ)器1140(例如,硬盤、閃速存儲(chǔ)器或者任何非易失性存儲(chǔ)介質(zhì))來存儲(chǔ)ip核設(shè)計(jì)以用于傳遞到第3方制作設(shè)施1165。備選地,可以通過有線連接1150或者無線連接1160傳輸(例如,經(jīng)由互聯(lián)網(wǎng))ip核設(shè)計(jì)。制作設(shè)施1165可以接著制作至少部分基于ip核設(shè)計(jì)的集成電路。制作的集成電路可以被配置成執(zhí)行根據(jù)本文描述的至少一個(gè)實(shí)施例的操作。
圖21是說明根據(jù)實(shí)施例的可以使用一個(gè)或多個(gè)ip核來制作的示范的片上系統(tǒng)集成電路1200的框圖。示范的集成電路包括一個(gè)或多個(gè)應(yīng)用處理器1205(例如,cpu)、至少一個(gè)圖形處理器1210并且可以另外地包括圖像處理器1215和/或視頻處理器1220,其中的任何一個(gè)可以是來自相同或者多個(gè)不同設(shè)計(jì)設(shè)施的模塊化ip核。集成電路包括外圍設(shè)備或者總線邏輯,其包括usb控制器1225、uart控制器1230、spi/sdio控制器1235和i2s/i2c控制器1240。另外,集成電路可以包括耦合至移動(dòng)行業(yè)處理器接口(mipi)顯示器接口1255和高清多媒體接口(hdmi)控制器1250中的一個(gè)或多個(gè)的顯示器設(shè)備1245??梢酝ㄟ^包括閃速存儲(chǔ)器和閃速存儲(chǔ)器控制器的閃速存儲(chǔ)器子系統(tǒng)1260來提供存儲(chǔ)??梢越?jīng)由存儲(chǔ)器控制器1265來提供存儲(chǔ)器接口以用于訪問sdram或sram存儲(chǔ)器設(shè)備。某些集成電路另外地包括嵌入式安全引擎1270。
另外,其它邏輯和電路可以被包括在集成電路1200的處理器中,包括附加的圖形處理器/核、外圍接口控制器或者通用處理器核。
下面的條款和/或示例屬于另外的實(shí)施例:
一個(gè)示例實(shí)施例可以是一種方法,包括提供耦合至處理器的近存儲(chǔ)器和遠(yuǎn)存儲(chǔ)器,其中所述近存儲(chǔ)器比所述遠(yuǎn)存儲(chǔ)器更快并且所述近存儲(chǔ)器被所述遠(yuǎn)存儲(chǔ)器支持,使用編解碼器壓縮將要被存儲(chǔ)在所述近存儲(chǔ)器中的數(shù)據(jù),壓實(shí)所述壓縮的數(shù)據(jù),以及存儲(chǔ)所述壓實(shí)的數(shù)據(jù)使得所述壓縮且壓實(shí)的數(shù)據(jù)的占用比壓實(shí)之前的壓縮的數(shù)據(jù)的占用更少。所述方法還可以包括在將壓縮的數(shù)據(jù)存入近存儲(chǔ)器之前壓實(shí)。所述方法還可以包括將多個(gè)高速緩沖存儲(chǔ)器線路的塊一起壓實(shí)為可尋址組。所述方法還可以包括在所述編解碼器和所述近存儲(chǔ)器之間提供緩沖器,所述緩沖器用來為所述編解碼器存儲(chǔ)壓縮的數(shù)據(jù),使得所述緩沖器中的所述壓縮的數(shù)據(jù)與來自編解碼器的壓縮的數(shù)據(jù)相比具有更小的占用。所述方法還可以包括確定是否可以將多個(gè)高速緩沖存儲(chǔ)器線路作為連續(xù)塊來存儲(chǔ),并且如果是這樣的話,在近存儲(chǔ)器中連續(xù)存儲(chǔ)所述塊。所述方法還可以包括將所述塊作為高速緩沖存儲(chǔ)器線路大小的整數(shù)倍存儲(chǔ)在近存儲(chǔ)器中。所述方法還可以包括提供如存儲(chǔ)的所述塊被壓實(shí)的指示。所述方法還可以包括通過下列操作來從所述近存儲(chǔ)器中讀取數(shù)據(jù):由所述指示來確定所述塊是否被壓實(shí)并且如果是這樣的話,解壓實(shí)所述塊并且將所述解壓實(shí)的組塊作為高速緩沖存儲(chǔ)器線路大小的整數(shù)倍存儲(chǔ)在所述緩沖器中。所述方法還可以包括在近存儲(chǔ)器中壓實(shí)所述數(shù)據(jù)。所述方法還可以包括響應(yīng)于需要空閑的存儲(chǔ)器的指示而壓實(shí)。所述方法還可以包括壓實(shí)所選擇的范圍的存儲(chǔ)頁面。所述方法還可以包括將壓實(shí)的范圍的頁面地址存儲(chǔ)在地址翻譯表中。所述方法還可以包括存儲(chǔ)所述范圍的頁面已經(jīng)被壓實(shí)的指示。所述方法還可以包括使用可以在任意時(shí)間點(diǎn)運(yùn)行的獨(dú)立軟件來壓實(shí)。所述方法還可以包括將壓實(shí)的和未壓實(shí)的壓縮的數(shù)據(jù)兩者存儲(chǔ)在近存儲(chǔ)器中。所述方法還可以包括在寫到所述近存儲(chǔ)器時(shí)壓縮接著解壓實(shí)以及通過解壓實(shí)接著解壓縮來讀取數(shù)據(jù)。
另一個(gè)示例實(shí)施例可以是存儲(chǔ)被處理器執(zhí)行來執(zhí)行序列的指令的一個(gè)或多個(gè)非暫時(shí)性計(jì)算機(jī)可讀媒體,所述序列包括提供耦合至處理器的近存儲(chǔ)器和遠(yuǎn)存儲(chǔ)器,其中所述近存儲(chǔ)器比所述遠(yuǎn)存儲(chǔ)器更快并且所述近存儲(chǔ)器被所述遠(yuǎn)存儲(chǔ)器支持,使用編解碼器壓縮將要被存儲(chǔ)在所述近存儲(chǔ)器中的數(shù)據(jù),壓實(shí)所述壓縮的數(shù)據(jù),以及存儲(chǔ)所述壓實(shí)的數(shù)據(jù)使得所述壓縮且壓實(shí)的數(shù)據(jù)的占用比壓實(shí)之前的壓縮的數(shù)據(jù)的占用更少。所述媒體可以包括所述序列,所述序列包括在將壓縮的數(shù)據(jù)存儲(chǔ)在近存儲(chǔ)器中之前壓實(shí)。所述媒體可以包括所述序列,所述序列包括將多個(gè)高速緩沖存儲(chǔ)器線路的塊一起壓實(shí)為可尋址組。所述媒體可以包括所述序列,所述序列包括在所述編解碼器和所述近存儲(chǔ)器之間提供緩沖器,所述緩沖器用來為所述編解碼器存儲(chǔ)壓縮的數(shù)據(jù),使得所述緩沖器中的所述壓縮的數(shù)據(jù)與來自編解碼器的壓縮的數(shù)據(jù)相比具有更小的占用。所述媒體可以包括確定是否可以將多個(gè)高速緩沖存儲(chǔ)器線路作為連續(xù)塊來存儲(chǔ),并且如果是這樣的話,將所述塊連續(xù)存儲(chǔ)在近存儲(chǔ)器中。所述媒體可以包括所述序列,所述序列包括將所述塊作為高速緩沖存儲(chǔ)器線路大小的整數(shù)倍存儲(chǔ)在近存儲(chǔ)器中。所述媒體可以包括所述序列,所述序列包括提供如存儲(chǔ)的所述塊被壓實(shí)的指示。所述媒體可以包括所述序列,所述序列包括通過下列操作來從所述近存儲(chǔ)器讀取數(shù)據(jù):由所述指示來確定所述塊是否被壓實(shí)并且如果是這樣的話,解壓實(shí)所述塊并且將所述解壓實(shí)的組塊作為高速緩沖存儲(chǔ)器線路大小的整數(shù)倍存儲(chǔ)在所述緩沖器中。
在另一個(gè)示例實(shí)施例中可以是一種裝置,所述裝置包括處理器、耦合至處理器的近存儲(chǔ)器和遠(yuǎn)存儲(chǔ)器,其中所述近存儲(chǔ)器比所述遠(yuǎn)存儲(chǔ)器更快并且所述近存儲(chǔ)器被所述遠(yuǎn)存儲(chǔ)器支持,所述裝置包括編解碼器,所述編解碼器用來壓縮將要被存儲(chǔ)在所述近存儲(chǔ)器中的數(shù)據(jù),并且所述處理器用來壓實(shí)所述壓縮的數(shù)據(jù)并且存儲(chǔ)所述壓實(shí)的數(shù)據(jù),使得所述壓縮且壓實(shí)的數(shù)據(jù)的占用比壓實(shí)之前的壓縮的數(shù)據(jù)的占用更少。所述裝置可以包括所述編解碼器以在將壓縮的數(shù)據(jù)存儲(chǔ)在近存儲(chǔ)器中之前壓實(shí)。所述裝置可以包括所述編解碼器以將多個(gè)高速緩沖存儲(chǔ)器線路的塊一起壓實(shí)為可尋址組。所述裝置可以包括所述編解碼器和所述近存儲(chǔ)器之間的緩沖器,所述緩沖器為所述編解碼器存儲(chǔ)壓縮的數(shù)據(jù),使得所述緩沖器中的所述壓縮的數(shù)據(jù)與來自編解碼器的壓縮的數(shù)據(jù)相比具有更小的占用。所述裝置可以包括所述處理器以確定是否可以將多個(gè)高速緩沖存儲(chǔ)器線路作為連續(xù)塊來存儲(chǔ),并且如果是這樣的話,將所述塊連續(xù)存儲(chǔ)在近存儲(chǔ)器中。所述裝置可以包括所述處理器以將所述塊作為高速緩沖存儲(chǔ)器線路大小的整數(shù)倍存儲(chǔ)在近存儲(chǔ)器中。
可以在各種硬件體系結(jié)構(gòu)中實(shí)現(xiàn)本文描述的圖形處理技術(shù)。例如,可以將圖形功能性集成到芯片集內(nèi)。備選地,可以使用離散的圖形處理器。作為又一個(gè)實(shí)施例,可以通過包括多核處理器的通用處理器來實(shí)現(xiàn)圖形功能。
整個(gè)本說明書提及“一個(gè)實(shí)施例”或者“實(shí)施例”意味著與實(shí)施例有關(guān)地描述的特定特征、結(jié)構(gòu)或特性被包括在本公開內(nèi)包含的至少一個(gè)實(shí)現(xiàn)中。因此,短語“一個(gè)實(shí)施例”或者“在實(shí)施例中”的出現(xiàn)不必指相同的實(shí)施例。此外,可以以除所說明的特定實(shí)施例之外的其它合適的形式來設(shè)立特定的特征、結(jié)構(gòu)或特性并且所有這樣的形式可以被包含在本申請(qǐng)的權(quán)利要求內(nèi)。
雖然已經(jīng)描述了有限數(shù)量的實(shí)施例,但是本領(lǐng)域技術(shù)人員將會(huì)從中意識(shí)到許多的修改和變化。意圖是所附的權(quán)利要求覆蓋了屬于本公開的真實(shí)精神和范圍的所有這樣的修改和變化。