欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)處理系統(tǒng)的制作方法

文檔序號(hào):6548229閱讀:145來源:國知局
數(shù)據(jù)處理系統(tǒng)的制作方法
【專利摘要】數(shù)據(jù)處理系統(tǒng)。一種數(shù)據(jù)處理系統(tǒng)針對(duì)要執(zhí)行的指令的流來確定指令流中是否存在能夠被重新排序的任何指令,并且將每條這樣的指令分配給指令完成跟蹤器,并且在對(duì)所述指令的編碼中包括該指令被分配到的所述指令完成跟蹤器的指示。針對(duì)所述指令流中的每條指令,還提供了所述指令依賴于哪些指令完成跟蹤器(若有的話)的指示。當(dāng)被指示為依賴于指令完成跟蹤器的指令將被執(zhí)行時(shí),在執(zhí)行所述指令之前檢查有關(guān)指令完成跟蹤器的狀態(tài)。
【專利說明】數(shù)據(jù)處理系統(tǒng)

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),具體地,涉及包括一個(gè)或更多個(gè)可編程處理級(jí)("著色 器(shader)")的圖形處理系統(tǒng)的操作。

【背景技術(shù)】
[0002] 如本領(lǐng)域中已知的那樣,圖形處理通常以流水線方式執(zhí)行,其中一個(gè)或更多個(gè)流 水線級(jí)對(duì)數(shù)據(jù)進(jìn)行操作以生成最后的渲染輸出,例如被顯示的幀。許多圖形處理流水線現(xiàn) 包括一個(gè)或更多個(gè)可編程處理級(jí),通常被稱為"著色器"。例如,圖形處理流水線可以包括幾 何形狀著色器、頂點(diǎn)著色器以及片段(像素)著色器中的一個(gè)或更多個(gè),并且通常包括全部 這些著色器。這些著色器是可編程處理級(jí),其對(duì)輸入的數(shù)據(jù)值執(zhí)行著色器程序以生成期望 的一組輸出數(shù)據(jù)(例如,在頂點(diǎn)著色器的情況下為適當(dāng)?shù)刈儞Q且照亮的頂點(diǎn)數(shù)據(jù))以供由 圖形流水線的其余部分處理和/或以供輸出。圖形處理流水線的著色器可以共享可編程處 理電路,或者它們每個(gè)都可以是不同的可編程處理單元。
[0003] 圖形處理單元(GPU)著色器核心因此是通過為諸如渲染目標(biāo)(例如幀)的要生成 的圖形輸出中的每個(gè)圖形項(xiàng)目運(yùn)行小程序來執(zhí)行圖形處理的處理單元("項(xiàng)目"在這點(diǎn)上通 常是頂點(diǎn)或片段(像素))。這一般地使得能實(shí)現(xiàn)高度的并行性,因?yàn)榈湫偷匿秩据敵觯ɡ?如幀)的特征在于相當(dāng)大量的頂點(diǎn)和片段,其中的每一個(gè)都能夠被獨(dú)立地處理。
[0004] 如本領(lǐng)域中已知的那樣,要被圖形處理流水線的給定"著色器"執(zhí)行的著色器程序 將由要求使用高級(jí)著色器編程語言(諸如GLSL、HLSL、OpenCL等)的圖形處理的應(yīng)用來提 供。這種著色器程序?qū)ㄖ甘居糜嘘P(guān)語言標(biāo)準(zhǔn)(規(guī)范)所定義的期望的編程步驟的"表 達(dá)"。高級(jí)著色器程序然后被著色器語言編譯器轉(zhuǎn)化為用于目標(biāo)圖形處理流水線的二進(jìn)制 代碼。這種二進(jìn)制代碼將包括"指令",所述"指令"在用于給定目標(biāo)圖形處理流水線的指令 集規(guī)范中被指定。如本領(lǐng)域中已知的那樣,用于將著色器語言表達(dá)轉(zhuǎn)換成二進(jìn)制代碼指令 的編譯過程可以經(jīng)由程序在編譯器內(nèi)的許多中間表示而發(fā)生。因此用高級(jí)著色器語言編寫 的程序可以被譯成編譯器特定的中間表示(以及在編譯器內(nèi)可以存在若千連續(xù)的中間表 示),同時(shí)最后的中間表示被譯成目標(biāo)圖形處理流水線的二進(jìn)制代碼指令。
[0005] 用來改進(jìn)著色器執(zhí)行效率的已知方式是將執(zhí)行線程(其中每個(gè)線程都對(duì)應(yīng)于一 個(gè)頂點(diǎn)或一個(gè)片段(像素))組合成線程"組"或"束",其中一個(gè)組的線程被一次一條指令 地鎖步(lockst?。┻\(yùn)行。這樣,有可能在該組中的所有線程之間共享取指令和資源調(diào)度。 (用于這樣的線程組的其它術(shù)語包括"扭曲(warp)"和"波前(wavefront)"。除非另外指 示,否則出于方便將在本文中使用術(shù)語線程組,但這不旨在包含所有等效術(shù)語和布置)。
[0006] 線程組架構(gòu)中的執(zhí)行單元是典型地強(qiáng)流水線的。它們通過在每時(shí)鐘周期基礎(chǔ)上在 多個(gè)線程組之間交替執(zhí)行而被通常保持高利用率。
[0007] 在現(xiàn)有的線程組架構(gòu)中,組中指令的執(zhí)行以嚴(yán)格有序的方式完成:一旦線程組已 開始執(zhí)行指令,它就不能夠繼續(xù)執(zhí)行下一條指令直至當(dāng)前指令已完成為止。
[0008] 這對(duì)于算術(shù)指令來說通常不是問題,因?yàn)檫@些典型地具有非常短的等待時(shí)間。GPU 通常具有足夠多處于飛行狀態(tài)(inflight)的線程組以相當(dāng)好地保持僅算術(shù)代碼的利用。
[0009] 然而,它對(duì)于具有不確定的等待時(shí)間的指令來說可能是一個(gè)相當(dāng)大的問題。這樣 的指令的示例包括:存儲(chǔ)器存取(加載、存儲(chǔ)以及原子學(xué))和紋理查找。存儲(chǔ)器存取在高 速緩存命中情況下可以具有低的等待時(shí)間,但在高速緩存未命中情況下往往展示相當(dāng)高的 等待時(shí)間。對(duì)于加載和原子學(xué)來說情況尤其如此(對(duì)于存儲(chǔ),常常有可能通過執(zhí)行寫采集 (write gathering)來掩蓋等待時(shí)間)。紋理查找往往使存儲(chǔ)器存取具有相對(duì)高的高速緩存 未命中率、以及在存儲(chǔ)器存取之前和之后兩者具有大量固定功能的處理級(jí)的特征。
[0010] 在基于有序線程組的架構(gòu)中,幾個(gè)高速緩存未命中能夠容易使大多數(shù)或甚至所有 的線程組在等待高速緩存未命中得以解決時(shí)被阻塞。這有時(shí)還因多個(gè)線程組對(duì)于相同的存 儲(chǔ)器區(qū)產(chǎn)生高速緩存未命中而加劇。
[0011] 并且,由于線程的鎖步執(zhí)行,單個(gè)線程組指令有可能得到多個(gè)高速緩存未命中。這 在組中的各個(gè)線程在不同的高速緩存線中得到高速緩存未命中時(shí)發(fā)生。在這種情況下,組 不能夠繼續(xù)直到所有高速緩存未命中都已被解決為止,這可能花費(fèi)很長時(shí)間。
[0012] 有時(shí)還出現(xiàn)"聚束"現(xiàn)象,其中大批的線程組形成"束"。這種"束"然后往往總體 上在不同類型的執(zhí)行單元之間移動(dòng),其結(jié)果是由"束"當(dāng)前所占有的執(zhí)行單元正以全速率執(zhí) 行然而其它執(zhí)行單元閑置著。閑置著的實(shí)際執(zhí)行單元然后在"束"執(zhí)行時(shí)來回轉(zhuǎn)換。這給 出相當(dāng)差的執(zhí)行單元利用率。
[0013] 本 申請(qǐng)人:因此相信,例如在包括一個(gè)或更多個(gè)著色器級(jí)的圖形處理流水線中,對(duì) 于線程組的處理而言仍有改進(jìn)的余地。


【發(fā)明內(nèi)容】

[0014] 根據(jù)本發(fā)明的第一方面,提供了一種操作包括執(zhí)行流水線的數(shù)據(jù)處理系統(tǒng)的方 法,所述執(zhí)行流水線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),所 述方法包括以下步驟:
[0015] 針對(duì)要由執(zhí)行級(jí)執(zhí)行的指令的流,確定該指令流中是否存在能夠被重新排序的任 何指令;
[0016] 將指令流中已被確定為能夠被重新排序的每條指令分配給指令完成跟蹤器,并且 在對(duì)指令的編碼中包括所述指令已被分配到的指令完成跟蹤器的指示;
[0017] 針對(duì)指令流中依賴于已被分配到指令完成跟蹤器的指令的每條指令,在指令流中 提供指示,該指示指出依賴于已被分配到指令完成跟蹤器的指令依賴于哪一個(gè)或哪些指令 完成跟蹤器;
[0018] 將指令流中的指令發(fā)送到執(zhí)行級(jí)以供執(zhí)行;并且
[0019] 在執(zhí)行指令流中的指令時(shí):
[0020] 使用所分配的指令完成跟蹤器來跟蹤指令的完成;以及
[0021] 針對(duì)被指示為依賴于指令完成跟蹤器的任何指令,在執(zhí)行該指令之前檢查該指令 完成跟蹤器的狀態(tài)。
[0022] 根據(jù)本發(fā)明的第二方面,提供了一種數(shù)據(jù)處理系統(tǒng),該數(shù)據(jù)處理系統(tǒng)包括:
[0023] 執(zhí)行流水線,其包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行 級(jí);以及
[0024] 編譯器,其對(duì)用于執(zhí)行流水線的程序進(jìn)行編譯以生成針對(duì)執(zhí)行流水線的執(zhí)行級(jí)的 指令;
[0025] 其中:
[0026] 所述編譯器被配置成:
[0027] 針對(duì)要由執(zhí)行流水線的執(zhí)行級(jí)執(zhí)行的指令的流,確定指令流中是否存在能夠被重 新排序的任何指令;
[0028] 將指令流中已被確定為能夠被重新排序的每條指令分配給指令完成跟蹤器,并且 在對(duì)指令的編碼中包括所述指令已被分配到的指令完成跟蹤器的指示;以及
[0029] 針對(duì)指令流中依賴于已被分配到指令完成跟蹤器的指令的每條指令,在指令流中 提供指示,所述指示指出依賴于已被分配到指令完成跟蹤器的指令依賴于哪一個(gè)或哪些指 令完成跟蹤器;
[0030] 并且其中:
[0031] 執(zhí)行流水線的至少一個(gè)執(zhí)行級(jí)被配置成在執(zhí)行來自編譯器的指令流中的指令 時(shí):
[0032] 使用所分配的指令完成跟蹤器來跟蹤指令的完成;以及
[0033] 針對(duì)被指示為依賴于指令完成跟蹤器的任何指令,在執(zhí)行指令之前檢查該指令完 成跟蹤器的狀態(tài)。
[0034] 本發(fā)明涉及在數(shù)據(jù)處理流水線中執(zhí)行指令流(序列)。然而,在本發(fā)明中,能夠在 指令流中被重新排序的用于執(zhí)行級(jí)的指令流中的指令(即,將被允許亂序執(zhí)行的指令)被 標(biāo)識(shí)并且它們的完成被跟蹤,并且指令流中的指令(若有的話)對(duì)所標(biāo)識(shí)的指令的依賴性 被編碼在指令流中。如將在下面進(jìn)一步討論的那樣,這有助于給定指令序列(流)中的指 令被亂序執(zhí)行(在可能的情況下),同時(shí)仍然確保能夠?qū)嵤┤魏我蟮闹噶钜蕾囆?。這能夠 避免或者至少減少上面所標(biāo)識(shí)的問題,例如涉及以嚴(yán)格有序的方式執(zhí)行線程組中的指令。
[0035] 如上面所討論的那樣,我們相信本發(fā)明將在圖形處理系統(tǒng)中具有特定應(yīng)用。因此, 數(shù)據(jù)處理系統(tǒng)優(yōu)選地包括圖形處理系統(tǒng),執(zhí)行流水線優(yōu)選地包括圖形處理流水線,并且執(zhí) 行級(jí)優(yōu)選地包括執(zhí)行圖形著色器程序以執(zhí)行圖形處理操作的一個(gè)或更多個(gè)可編程圖形著 色級(jí)(著色器)。然而,本發(fā)明同樣地適用于其中可能出現(xiàn)類似問題的其它形式的數(shù)據(jù)處理 系統(tǒng),諸如在CPU中,諸如在標(biāo)量或超標(biāo)量CPU流水線中。
[0036] 類似地,如上面所討論的那樣,我們相信本發(fā)明將在其中執(zhí)行線程可以被一起分 組成線程組的數(shù)據(jù)處理系統(tǒng)中具有特定應(yīng)用,在所述線程組中該組的線程被一次一條指令 地鎖步執(zhí)行。因此,數(shù)據(jù)處理系統(tǒng)(例如圖形處理系統(tǒng))優(yōu)選地是其中執(zhí)行線程可以被一 起組合成線程組的系統(tǒng),其中在所述線程組中該組的線程被一次一條指令地鎖步執(zhí)行,并 且要被執(zhí)行級(jí)執(zhí)行的指令的流優(yōu)選地是要被線程組執(zhí)行的指令的流(序列)。
[0037] 指令流中能夠被重新排序的指令可以是任何適合且期望的指令。在優(yōu)選實(shí)施方式 中,存在能夠被重新排序的一組特定選擇的指令類型(并且所以確定了一個(gè)或更多個(gè)特定 類型的任何指令是否存在于指令流中)。在優(yōu)選實(shí)施方式中,"可重新排序的"指令(即被 允許亂序執(zhí)行的指令)包括以下項(xiàng)中的一個(gè)或更多個(gè),并且優(yōu)選地包括以下項(xiàng)的全部:存 儲(chǔ)器加載、存儲(chǔ)器存儲(chǔ)、存儲(chǔ)器原子、屬性插值以及紋理查找。
[0038] 能夠以任何期望且適合的方式來實(shí)現(xiàn)指令完成跟蹤器。在優(yōu)選實(shí)施方式中,每個(gè) 跟蹤器都包括被用來跟蹤指令的完成的計(jì)數(shù)器。優(yōu)選地,計(jì)數(shù)器在正被該計(jì)數(shù)器跟蹤的指 令被發(fā)送到適當(dāng)?shù)膱?zhí)行單元時(shí)遞增,并且在該指令實(shí)際完成時(shí)遞減。在這種情況下,計(jì)數(shù) "〇"將指示當(dāng)前正被所述的計(jì)數(shù)器跟蹤的所有指令已完成(并且大于零的計(jì)數(shù)將指示對(duì)于 該跟蹤器而言未完成操作的數(shù)目)。
[0039] 指令跟蹤器可以具有它能夠在任何時(shí)候跟蹤到的設(shè)定數(shù)目的指令(例如最大計(jì) 數(shù)值)。這能夠小至一條指令,并且對(duì)于不同的跟蹤器可以是不同的。如果已達(dá)到跟蹤器的 指令的最大數(shù)目,則將使用該跟蹤器的任何新的指令優(yōu)選地使線程組停止(直到跟蹤器能 夠跟蹤新的指令為止)。
[0040] 能夠按照需要來選擇指令完成跟蹤器的數(shù)目。例如,對(duì)于執(zhí)行單元和/或線程組 可存在僅一個(gè)指令完成跟蹤器,但在優(yōu)選實(shí)施方式中,對(duì)于執(zhí)行級(jí)和/或線程組存在多個(gè) 指令完成跟蹤器,例如2、4或8個(gè)指令完成跟蹤器。例如,可以存在用于加載操作的一個(gè)跟 蹤器和用于存儲(chǔ)操作的一個(gè)跟蹤器,或用于加載和存儲(chǔ)操作中的每一個(gè)的多個(gè)跟蹤器等。
[0041] 因此,例如對(duì)于一個(gè)(并且對(duì)于每個(gè))線程組,優(yōu)選地存在一組指令完成跟蹤器, 包括用于例如該線程組的一組計(jì)數(shù)器。因此,這有效地提供了能夠用來實(shí)施和跟蹤指令 流中的指令的依賴性的"記分板",其中每個(gè)跟蹤器(計(jì)數(shù)器)都是記分板中的一個(gè)"位置 (slot)"或"條目(entry)"。
[0042] 有關(guān)數(shù)據(jù)(記分板的數(shù)據(jù)結(jié)構(gòu))(計(jì)數(shù)值)能夠按照需要存儲(chǔ)例如在流水線存儲(chǔ) 器的適當(dāng)區(qū)中。
[0043] 當(dāng)能夠重新排序的指令被標(biāo)識(shí)出時(shí),所述指令被分配給指令完成跟蹤器。這種分 配優(yōu)選地以與寄存器分配類似的方式來完成。例如,在存在彼此獨(dú)立的兩個(gè)或更多個(gè)加載 的情況下,可能期望將每個(gè)加載分配給不同的完成跟蹤器,以便無需在能夠執(zhí)行依賴于兩 個(gè)加載中的僅一個(gè)的指令之前等待兩個(gè)加載完成。一般而言,系統(tǒng)能夠按照需要將指令分 配給完成跟蹤器以促進(jìn)更高效的操作。
[0044] 被分配了指令的指令完成跟蹤器被在指令編碼自身中指出(包括在其中)。優(yōu)選 地,在指令編碼中存在指定指令已被分配給哪一個(gè)指令跟蹤器的字段。這個(gè)指示然后被用 來在指令被發(fā)送和執(zhí)行時(shí)更新指令完成跟蹤器(例如計(jì)數(shù)器)。
[0045]除了標(biāo)識(shí)指令流中的可重新排序的指令,還針對(duì)指令流中的每條指令提供了該指 令依賴于(即實(shí)際上指令對(duì)指令流中的其它指令的依賴性)哪些指令完成跟蹤器(若有的 話)的指示。這個(gè)指示與指令流包括在一起,優(yōu)選地作為指令編碼的一部分(例如在指令 的字段中)。這個(gè)指示能夠用它所涉及(即依賴于所述的指令(操作))的指令來編碼,但 在優(yōu)選實(shí)施方式中它在指令流中的前一條指令中被指示。這可以允許基于指令完成跟蹤信 息來阻止相關(guān)指令的取指令(instruction fetch)。這能夠有助于減少功率消耗。
[0046]當(dāng)指令將被執(zhí)行時(shí),首先檢查所指示的對(duì)該指令的指令完成跟蹤器依賴性。優(yōu)選 地,如果所有有關(guān)指令完成跟蹤器都指示它們正在跟蹤的所有指令已完成(例如具有計(jì)數(shù) 值"〇"),則指令被執(zhí)行,但是如果有關(guān)指令完成跟蹤器中的任一個(gè)指示存在未完成的指令 (例如,具有大于零的計(jì)數(shù)值),則該指令的操作被阻止,直到所有有關(guān)指令完成跟蹤器指 示它們正在跟蹤的所有指令已完成為止。能夠視需要而定停止指令,使得流水線例如替代 地執(zhí)行不相干的線程組。
[0047]這種安排允許其中它們真正地存在于指令流中的數(shù)據(jù)依賴性被實(shí)施,同時(shí)在可能 的情況下仍然促進(jìn)指令的亂序執(zhí)行。
[0048] 將從上文了解的是,本發(fā)明有效地提供了用于跟蹤和實(shí)施指令流中的依賴性的 "記分板"方法。然而,不像常規(guī)的記分板系統(tǒng),本發(fā)明中的記分板是"顯式的(explicit) ", 因?yàn)橛浄职宓拇嬖诤凸δ鼙槐┞对谥噶罹幋a中(依賴性等用實(shí)際的可執(zhí)行代碼來標(biāo)記)。 這例如去除了執(zhí)行級(jí)(單元)自身執(zhí)行任何依賴性確定的任何需要,從而例如減少功率消 耗,并且允許例如編譯器設(shè)置具有依賴性的指令。
[0049] 在優(yōu)選實(shí)施方式中,"屏障(fence) "指令能夠被包括在(添加到)指令流中,所述 "屏障"指令迫使指令流中位于該"屏障"指令前的具有給定類型或更多個(gè)給定類型的所有 指令在位于"屏障"指令之后的任何指令被執(zhí)行之前完成。這能夠被用來確保在該指令流 內(nèi)的指令組被有序地執(zhí)行。在這種情況下,"屏障"指令例如能夠僅涉及一種類型的指令,例 如涉及加載指令或涉及存儲(chǔ)指令,或者涉及超過一個(gè)類型的指令,例如涉及加載指令和存 儲(chǔ)指令兩者。這樣的"屏障"指令能夠借助于被指示為依賴于所有指令完成跟蹤器(用于 加載和存儲(chǔ)"屏障")的加載指令和存儲(chǔ)指令、被指示為依賴于正被用來跟蹤先前的加載指 令的所有指令完成跟蹤器的加載指令(針對(duì)加載"屏障")等來實(shí)現(xiàn)。
[0050] 在優(yōu)選實(shí)施方式中,例如對(duì)于從相同的線程組所發(fā)出的每個(gè)加載/存儲(chǔ),執(zhí)行流 水線同樣或替代地有可能隱式地插入這樣的"屏障"指令。
[0051] 在優(yōu)選實(shí)施方式中分支(branch) "指令能夠被包括在(添加到)具有相關(guān)聯(lián)的 兩個(gè)(或更多個(gè))不同的指令跟蹤器依賴性集合的指令流中,其中當(dāng)滿足指令跟蹤器依賴 性的集合中的一個(gè)時(shí)選擇適當(dāng)?shù)姆种А_@能夠提供在指令流中的依賴性的多個(gè)不同集合中 的第一個(gè)被滿足時(shí)觸發(fā)的條件分支機(jī)制。這在例如可能存在兩條或更多條指令等待不同的 未完成指令完成的情況下可能是所希望的,但等候的指令能夠以相對(duì)于彼此的任何次序來 執(zhí)行。在這種情況下,分支指令能夠被用來確定等待指令中的哪一個(gè)被首先滿足(并且然 后分支到該指令,同時(shí)其它指令隨后被執(zhí)行)。在優(yōu)選實(shí)施方式中,如果在檢查分支指令時(shí) 分支條件中的任一個(gè)都不被滿足,則分支指令被停止直到分支條件中的一個(gè)被滿足為止。
[0052] 我們相信,這樣的分支指令本身可能是新的和創(chuàng)造性的。
[0053] 因此,根據(jù)本發(fā)明的另一方面,提供了一種操作包括執(zhí)行流水線的數(shù)據(jù)處理系統(tǒng) 的方法,所述執(zhí)行流水線包括執(zhí)行程序指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí) 行級(jí),并且其中所述指令的執(zhí)行可依賴于其它指令的完成,指令的完成被跟蹤,并且自身的 執(zhí)行依賴于其它指令的完成的指令的依賴性能夠與相關(guān)指令相關(guān)聯(lián);
[0054] 所述方法包括以下步驟:
[0055] 在要執(zhí)行的指令的流中包括條件分支指令,該條件分支指令具有與它關(guān)聯(lián)的兩個(gè) 或更多個(gè)不同的指令依賴性集合,其中指令依賴性的每個(gè)不同集合關(guān)聯(lián)有指令流中要遵循 的給定路徑;
[0056] 將指令流中的指令發(fā)送到執(zhí)行級(jí)以供執(zhí)行;并且
[0057] 在執(zhí)行指令流中的條件分支指令時(shí),檢查與指令相關(guān)聯(lián)的指令依賴性組的狀態(tài), 并且在檢查的基礎(chǔ)上遵循指令流中的路徑。
[0058] 根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)處理系統(tǒng),該數(shù)據(jù)處理系統(tǒng)包括:
[0059] 執(zhí)行流水線,其包括執(zhí)行程序指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí) 行級(jí),并且其中,指令的執(zhí)行可以依賴于其它指令的完成,指令的完成被跟蹤,并且自身的 執(zhí)行依賴于其它指令的完成的指令的依賴性能夠與相關(guān)指令相關(guān)聯(lián);
[0060] 以及
[0061] 處理電路,其被配置成:
[0062] 在要執(zhí)行的指令的流中包括條件分支指令,條件分支指令兩個(gè)或更多個(gè)不同的指 令依賴性集合,其中指令依賴性的每個(gè)不同集合關(guān)聯(lián)有指令流中要遵循的給定路徑;以及 [0063] 將指令流中的指令發(fā)送到執(zhí)行流水線以供執(zhí)行,并且
[0064] 其中,所述執(zhí)行流水線被配置成,在執(zhí)行指令流中的條件分支指令時(shí),檢查與該指 令相關(guān)聯(lián)的指令依賴性集合的狀態(tài),并且在該檢查的基礎(chǔ)上遵循指令流中的路徑。
[0065] 如本領(lǐng)域的技術(shù)人員將了解的那樣,本發(fā)明的這些方面和實(shí)施方式能夠酌情包括 本文中所描述的本發(fā)明的優(yōu)選和可選特征中的任何一個(gè)或更多個(gè)或全部。
[0066]由用于執(zhí)行流水線的編譯器來執(zhí)行對(duì)能夠在指令流中被重新排序的指令進(jìn)行標(biāo) 識(shí)、對(duì)指令完成跟蹤器進(jìn)行分配(并且將分配結(jié)果包括在指令的編碼中)以及在指令流中 提供每條指令依賴于哪指令完成跟蹤器(若有的話)的指示。因此,在圖形處理系統(tǒng)的情 況下,用于圖形處理流水線的著色器編譯器優(yōu)選地執(zhí)行這種操作。編譯器例如并且在優(yōu)選 實(shí)施方式中確實(shí)可以在包括執(zhí)行流水線的數(shù)據(jù)處理系統(tǒng)的主機(jī)處理器上運(yùn)行(其中執(zhí)行 流水線在與主機(jī)處理器相關(guān)聯(lián)的另一處理器(諸如圖形處理器)上(使得該編譯器和經(jīng)編 譯的代碼將在整個(gè)數(shù)據(jù)處理系統(tǒng)例如圖形處理系統(tǒng)內(nèi)的單獨(dú)的處理器上運(yùn)行))。然而,其 它布置將是可能的,諸如編譯器與經(jīng)編譯的代碼在相同的處理器上運(yùn)行,或者編譯器在單 獨(dú)的處理器上運(yùn)行,諸如程序在單獨(dú)的系統(tǒng)上被預(yù)編譯并且被以編譯的形式發(fā)布。
[0067] 本發(fā)明同樣擴(kuò)展到編譯器本身。因此,根據(jù)本發(fā)明的另一方面,提供了一種編譯 器,該編譯器對(duì)程序進(jìn)行編譯以生成用于執(zhí)行流水線的執(zhí)行級(jí)的指令,所述執(zhí)行流水線包 括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),其中所述編譯器被配置 成:
[0068] 針對(duì)要由執(zhí)行流水線的執(zhí)行級(jí)執(zhí)行的指令的流,確定指令流中是否存在能夠重新 排序的任何指令;
[0069] 將指令流中被確定為能夠重新排序的每條指令分配給指令完成跟蹤器,并且在對(duì) 指令的編碼中包括對(duì)該指令被分配到的指令完成跟蹤器的指示;以及
[0070] 針對(duì)指令流中依賴于已被分配到指令完成跟蹤器的指令的每條指令,在指令流中 提供依賴于已被分配到指令完成跟蹤器的指令的指令依賴于哪一個(gè)或哪些指令完成跟蹤 器的指示。 ^ ^
[0071] 因此,根據(jù)本發(fā)明的另一方面,提供了 一種對(duì)程序進(jìn)行編譯以生成用于執(zhí)行流水 線的執(zhí)行級(jí)的指令的方法,所述執(zhí)行流水線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更 多個(gè)可編程執(zhí)行級(jí),所述方法包括以下步驟:
[0072] 針對(duì)要由執(zhí)行流水線的執(zhí)行級(jí)執(zhí)行的指令的流,確定指令流中是否存在能夠被重 新排序的任何指令; 、
[0073] 將指令流中被確定為能夠被重新排序的每條指令分配給指令完成跟蹤器,并且在 對(duì)指令的編碼中包括該指令被分配到的指令完成跟蹤器的指'示;以及
[0074] 針對(duì)指令流中依賴于已被分配到指令完成跟蹤器的_曰令的每條指令,在指令流中 提供依賴于已被分配到指令完成跟蹤器的指令的指令依賴于哪一個(gè)或哪些指令完成跟蹤 器的指示。 ^
[0075] 本發(fā)明同樣擴(kuò)展到具有能夠響應(yīng)于(并且使用)本發(fā)明的指令執(zhí)行亂序處理的執(zhí) 行級(jí)的執(zhí)行流水線(即在無需或沒有電路來檢測能夠被重新排序的指令的情況下)。
[0076] 因此,根據(jù)本發(fā)明的另一方面,提供了一種用于數(shù)據(jù)處理系統(tǒng)的執(zhí)行流水線,所述 執(zhí)行流水線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),其中:
[0077] 執(zhí)行流水線的至少一個(gè)執(zhí)行級(jí)被配置成,在執(zhí)行指令流中的指令時(shí):
[0078] 響應(yīng)于指令的編碼中由用于該執(zhí)行級(jí)的編譯器提供的指令已被分配給指令完成 跟蹤器的指示,使用所指示分配的指令完成跟蹤器來跟蹤指令的完成;并且
[0079] 響應(yīng)于指令的編碼中由用于該執(zhí)行級(jí)的編譯器提供的指令流中的指令依賴于指 令完成跟蹤器的指示,在執(zhí)行被指示為依賴于指令完成跟蹤器的指令之前檢查所指示的指 令完成跟蹤器的狀態(tài)。
[0080] 根據(jù)本發(fā)明的另一方面,提供了一種操作用于數(shù)據(jù)處理系統(tǒng)的執(zhí)行流水線的方 法,所述執(zhí)行流水線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),所 述方法包括以下步驟:
[0081] 執(zhí)行流水線的至少一個(gè)執(zhí)行級(jí)在執(zhí)行指令流中的指令時(shí):
[0082] 響應(yīng)于指令的編碼中由用于該執(zhí)行級(jí)的編譯器提供的指令已被分配給指令完成 跟蹤器的指示,使用所指示分配的指令完成跟蹤器來跟蹤指令的完成;并且 [0083] 響應(yīng)于指令的編碼中由用于該執(zhí)行級(jí)的編譯器提供的指令流中的指令依賴于指 令完成跟蹤器的指示,在執(zhí)行被指示為依賴于指令完成跟蹤器的指令之前檢查所指示的指 令完成跟蹤器的狀態(tài)。
[0084] 如由本領(lǐng)域的技術(shù)人員將了解的那樣,本發(fā)明的這些方面能夠并且優(yōu)選地酌情包 括本文中所描述的本發(fā)明的優(yōu)選和可選特征中的任何一個(gè)或更多個(gè)或全部。
[0085] 在圖形處理流水線的情況下,執(zhí)行單元(級(jí))優(yōu)選地包括圖形處理流水線的可編 程著色級(jí),諸如頂點(diǎn)著色器、片段著色器等。這些級(jí)能夠被按照期望且適合的方式實(shí)現(xiàn),并 且能夠分別酌情執(zhí)行任何期望的且適合的著色(例如頂點(diǎn)著色、片段著色等)功能。在片 段著色器的情況下,例如,該片段著色器可以渲染一個(gè)或更多個(gè)圖元(primitive)以生成 一組渲染輸出值,例如表示用于顯示的幀。這些輸出值可以被導(dǎo)出到外部存儲(chǔ)器以供存儲(chǔ) 和使用,諸如導(dǎo)出到幀緩沖器以供顯示。
[0086] 優(yōu)選地,執(zhí)行流水線的所有執(zhí)行級(jí)(每個(gè)執(zhí)行級(jí))都能夠以本發(fā)明的方式操作。
[0087] 每個(gè)可編程處理級(jí)(執(zhí)行單元)都可以包括諸如可編程處理電路的任何適合的可 編程硬件元件。每個(gè)可編程處理級(jí)都可以被提供為對(duì)于處理流水線的其它可編程級(jí)而言單 獨(dú)的電路元件,或者可編程處理級(jí)可以共享它們的可編程處理電路(其被不同地編程以用 作所期望的可編程處理級(jí))中的一些或全部。
[0088]除了可編程處理(著色器)級(jí),圖形處理流水線還可以包含圖形處理流水線可以 包含的任何其它適合的且期望的處理級(jí),諸如光柵化器、早期深度(或早期深度和模板)測 試器、后期深度(或深度和模板)測試器、混合器、拼貼(tile)緩沖器、寫出單元等。
[0089]本發(fā)明能夠被用于所有形式的輸出,圖形處理流水線可以被用來生成諸如用于顯 示的幀、渲染為紋理輸出等。所輸出的(例如片段著色的)來自圖形處理的數(shù)據(jù)值被優(yōu)選 地導(dǎo)出到外部例如主存儲(chǔ)器以供存儲(chǔ)和使用,諸如導(dǎo)出到幀緩沖器以供顯示。
[0090]本發(fā)明適用于圖形處理器的任何適合的形式或配置。它特別適用于基于拼貼 (tile)的圖形處理器和圖形處理系統(tǒng)。因此在優(yōu)選實(shí)施方式中,圖形處理系統(tǒng)和圖形處理 流水線分別是基于拼貼的系統(tǒng)和流水線。
[0091]在特別優(yōu)選的實(shí)施方式中,本發(fā)明的各種功能在生成和輸出例如被寫入顯示設(shè)備 的幀緩沖器的渲染片段數(shù)據(jù)的單個(gè)圖形處理平臺(tái)上被執(zhí)行。
[0092]能夠在任何適合的系統(tǒng)(諸如基于適當(dāng)?shù)嘏渲玫奈⑻幚砥鞯南到y(tǒng))中實(shí)現(xiàn)本發(fā) 明。在優(yōu)選實(shí)施方式中,本發(fā)明被實(shí)現(xiàn)在基于計(jì)算機(jī)和/或微處理器的系統(tǒng)中。
[0093]能夠以任何期望的且適合的方式來執(zhí)行本發(fā)明的各種功能。例如,視需要而定, 本發(fā)明的功能能夠用硬件或軟件加以實(shí)現(xiàn)。因此,例如,除非另外指示,否則本發(fā)明的各種 功能元件和"裝置"可以包括可操作來執(zhí)行各種功能等的一個(gè)或更多個(gè)適合的處理器、控制 器、功能單元、電路、處理邏輯、微處理器布置等,諸如能夠被編程為以所期望的方式操作的 適當(dāng)?shù)貙S玫挠布?或可編程硬件元件。
[0094]在這里還應(yīng)注意到,如由本領(lǐng)域的技術(shù)人員將了解的那樣,可以在給定處理器上 復(fù)制和/或并行地執(zhí)行本發(fā)明的各種功能等。同樣地,視需要,各種處理級(jí)可以共享處理電 路等。
[0095] 受執(zhí)行上面所討論的特定功能所必需的任何硬件的影響,數(shù)據(jù)處理系統(tǒng)和流水線 能夠另外包括數(shù)據(jù)處理流水線所包括的常見功能單元等中的任何一個(gè)或更多個(gè)或全部。 [0096] 本領(lǐng)域的技術(shù)人員還將了解的是,所描述的本發(fā)明的方面和實(shí)施方式中的全部能 夠并且優(yōu)選地確實(shí)視情況而定包括本文中所描述的優(yōu)選和可選特征中的任何一個(gè)或更多 個(gè)或全部。
[0097] 依照本發(fā)明的方法可以至少部分地使用軟件(例如計(jì)算機(jī)程序)來實(shí)現(xiàn)。因此將 看到當(dāng)從另外的方面查看時(shí),本發(fā)明提供了被具體地適配成在被安裝在數(shù)據(jù)處理裝置上時(shí) 執(zhí)行本文中所描述的方法的計(jì)算機(jī)軟件、包括用于在程序元件在數(shù)據(jù)處理裝置上被運(yùn)行時(shí) 執(zhí)行本文中所描述的方法的計(jì)算機(jī)軟件代碼部分的計(jì)算機(jī)程序元件、以及包括被適配成在 程序在數(shù)據(jù)處理系統(tǒng)上被運(yùn)行時(shí)執(zhí)行本文中所描述的一個(gè)或更多個(gè)方法的所有步驟的代 碼裝置的計(jì)算機(jī)程序。數(shù)據(jù)處理器可以是微處理器系統(tǒng)、可編程FPGA(現(xiàn)場可編程門陣列) 等。
[0098] 本發(fā)明同樣擴(kuò)展到包括這樣的軟件的計(jì)算機(jī)軟件載體,所述軟件在被用于操作圖 形處理器、渲染器或包括數(shù)據(jù)處理裝置的微處理器系統(tǒng)時(shí),與所述數(shù)據(jù)處理裝置相結(jié)合地 使所述處理器、渲染器或系統(tǒng)執(zhí)行本發(fā)明的方法的步驟。這樣的計(jì)算機(jī)軟件載體能夠是諸 如ROM芯片、⑶ROM、RAM、閃速存儲(chǔ)器或磁盤的物理存儲(chǔ)媒體,或者能夠是諸如在電線之上 的電子信號(hào)、諸如到衛(wèi)星的光學(xué)信號(hào)或無線電信號(hào)或類似物的信號(hào)。
[0099] 將進(jìn)一步了解的是,并非本發(fā)明的方法的所有步驟都需要被計(jì)算機(jī)軟件執(zhí)行,并 且因此從更廣泛的方面本發(fā)明提供了計(jì)算機(jī)軟件,并且這樣的軟件被安裝在計(jì)算機(jī)軟件載 體上以用于執(zhí)行本文中所闡述的方法的步驟中的至少一個(gè)。
[0100] 本發(fā)明可以相應(yīng)適當(dāng)?shù)乇惑w現(xiàn)為用于與計(jì)算機(jī)系統(tǒng)一起使用的計(jì)算機(jī)程序產(chǎn)品。 這樣的實(shí)施方式可以包括被固定在有形的非暫時(shí)性介質(zhì)上的一系列計(jì)算機(jī)可讀指令,所述 有形的非暫時(shí)性介質(zhì)諸如計(jì)算機(jī)可讀介質(zhì),例如,磁盤、 CD_R0M、R0M、_、閃速存儲(chǔ)器或硬 盤。它還能夠包括通過有形介質(zhì)(包括但不限于光學(xué)或模擬通信線路)或者無形地使用無 線技術(shù)(包括但不限于微波、紅外線或其它傳輸技術(shù))經(jīng)由調(diào)制解調(diào)器或其它接口設(shè)備可 傳輸?shù)接?jì)算機(jī)系統(tǒng)的一系列計(jì)算機(jī)可讀指令。該系列計(jì)算機(jī)可讀指令體現(xiàn)了本文中先前描 述的功能性中的全部或一部分。
[0101] 本領(lǐng)域的技術(shù)人員將了解,能夠用用于與許多計(jì)算機(jī)架構(gòu)或操作系統(tǒng)一起使用的 許多編程語言來編寫這樣的計(jì)算機(jī)可讀指令。進(jìn)一步地,這樣的指令可以使用目前的或?qū)?來的、包括但不限于半導(dǎo)體、磁、或光學(xué)的任何存儲(chǔ)器技術(shù)來存儲(chǔ),或者使用目前的或?qū)?的、包括但不限于光學(xué)、紅外線或微波的任何通信技術(shù)來傳送。設(shè)想了這樣的計(jì)算機(jī)程序產(chǎn) 品可以被作為可移動(dòng)介質(zhì)與附帶的印刷或電子文檔(例如,緊縮套裝軟件)一起分發(fā),被 與計(jì)算機(jī)系統(tǒng)一起例如預(yù)加載在系統(tǒng)ROM或固定盤上,或者通過網(wǎng)絡(luò)(例如,因特網(wǎng)或萬維 網(wǎng))從服務(wù)器或電子公告板被分發(fā)。

【專利附圖】

【附圖說明】
[0102] 現(xiàn)將僅通過示例的方式并且參考附圖來描述本發(fā)明的許多優(yōu)選實(shí)施例,在附圖 中:
[0103] 圖1示出了示例性計(jì)算機(jī)圖形處理系統(tǒng);
[0104] 圖2示意性地示出了能夠被以本發(fā)明的方式操作的圖形處理流水線;
[0105] 圖3A和圖3B示意性地示出了圖1的圖形處理系統(tǒng)的操作的優(yōu)選實(shí)施方式;以及 [0106]圖4至圖7進(jìn)一步圖示了本發(fā)明的優(yōu)選實(shí)施方式的操作。
[0107] 在圖中在適當(dāng)?shù)那闆r下同樣的附圖標(biāo)記被用于同樣的組件。

【具體實(shí)施方式】
[0108]現(xiàn)將在用于顯示的計(jì)算機(jī)圖形的處理的上下文中描述本發(fā)明的優(yōu)選實(shí)施方式。 [0109]圖1示出了典型的計(jì)算機(jī)圖形處理系統(tǒng)。
[0110]在主機(jī)處理器1上執(zhí)行的應(yīng)用2(諸如游戲)將要求圖形處理操作由關(guān)聯(lián)的圖形 處理單元(圖形處理流水線)3執(zhí)行。為此,該應(yīng)用將生成API (應(yīng)用編程接口)調(diào)用,正在 主機(jī)處理器1上運(yùn)行的圖形處理流水線3的驅(qū)動(dòng)程序4將解釋該API調(diào)用以向圖形處理器 3生成適當(dāng)?shù)拿?,以生成?yīng)用2所要求的圖形輸出。為此,響應(yīng)于來自在主機(jī)系統(tǒng)1上運(yùn) 行的應(yīng)用2的命令,一組"命令"將被提供給圖形處理器3以進(jìn)行圖形輸出(例如,生成要 被顯示的幀)。
[0111]圖2更詳細(xì)地示出了本實(shí)施例的圖形處理流水線3。
[0112]圖2中所示出的圖形處理流水線3是基于拼貼的渲染器,并且因此將如本領(lǐng)域中 已知的那樣產(chǎn)生渲染輸出數(shù)據(jù)數(shù)組的拼貼,諸如要被生成的輸出幀。
[0113](如本領(lǐng)域中已知的那樣,在基于拼貼的渲染中,不是像在立即模式下那樣一次性 地有效地處理整個(gè)渲染輸出(例如,幀),而是將渲染輸出(例如,要被顯示的幀)劃分成 多個(gè)較小的子區(qū),通常稱為"拼貼"。分別渲染每個(gè)拼貼(子區(qū))(通常是一個(gè)接一個(gè)地渲 染),然后將渲染的拼貼(子區(qū))重新組合以提供完整的渲染輸出,例如用于顯示的幀。在 這樣的方案中,渲染輸出通常劃分成尺寸和形狀規(guī)則的子區(qū)(拼貼)(通常是例如正方形或 矩形),但這不是必要的。)
[0114]如本領(lǐng)域中已知的那樣,渲染輸出數(shù)據(jù)數(shù)組通??梢允怯糜谠陲@示設(shè)備(諸如屏 幕或打印機(jī))上顯示的輸出幀,但還可以例如包括意在供在以后的渲染通道中使用的中間 數(shù)據(jù)(還被稱為"渲染到紋理"輸出)等。
[0115](如本領(lǐng)域中已知的那樣,在計(jì)算機(jī)圖形圖像要被顯示時(shí),它通常首先被定義為一 系列圖元(多邊形),所述圖元然后被劃分(光柵化)成圖形片段以進(jìn)行圖形渲染。在正 常的圖形渲染操作期間,渲染器將修改與每個(gè)片段相關(guān)聯(lián)的(例如)色彩(紅、綠以及藍(lán), RGB)和透明度(阿爾法,a)數(shù)據(jù)以使得所述片段能夠被正確地顯示。一旦片段已完全地遍 歷了渲染器,那么它們關(guān)聯(lián)的數(shù)據(jù)值就被存儲(chǔ)在存儲(chǔ)器中,準(zhǔn)備好輸出,例如以供顯示。) [0 116]圖2示出了與本實(shí)施方式的操作有關(guān)的圖形處理流水線3的主要元件和流水線 級(jí)。如本領(lǐng)域的技術(shù)人員將了解的那樣,可以存在圖2中未被圖示的圖形處理流水線的其 它元件。在這里還應(yīng)注意到,圖2僅是示意的,并且例如,在實(shí)踐中所示出的功能單元和流 水線級(jí)可以共享有效的硬件電路,即使它們在圖 2中被示意性地示出為單獨(dú)的級(jí)。還將了 解的是,如圖2中所示出的圖形處理流水線的級(jí)、元件以及單元等的每一個(gè)都可以視需要 而定被實(shí)現(xiàn),并且將相應(yīng)地包括例如適當(dāng)?shù)碾娐泛?或處理邏輯等,以用于執(zhí)行所必要的 操作和功能。
[0117] 如圖2中所示,圖形處理流水線3包括多個(gè)級(jí),所述級(jí)包括頂點(diǎn)著色器20、外殼著 色器(hull shader)2l、細(xì)分器(tesselator)22、域著色器23、幾何形狀著色器24、光柵化級(jí) 25、早期Z (深度)和模板測試級(jí)26、形式為片段著色級(jí)的渲染器27、后期Z (深度)和模板 測試級(jí)28、混合級(jí)四、拼貼緩沖器3〇以及下采樣和寫出(多重采樣解析)級(jí)31。
[0118] 如本領(lǐng)域中已知的那樣,頂點(diǎn)渲染器20取得與頂點(diǎn)等相關(guān)聯(lián)的輸入數(shù)據(jù)值(針對(duì) 要被生成的輸出所定義的),并且處理這些數(shù)據(jù)值以生成一組對(duì)應(yīng)的"頂點(diǎn)著色的"輸出數(shù) 據(jù)值以供由圖形處理流水線3的后續(xù)級(jí)使用。頂點(diǎn)著色例如修改輸入數(shù)據(jù)以考慮要被渲染 的圖像中的照明的效果。
[0119] 如本領(lǐng)域中已知的那樣,外殼著色器21對(duì)補(bǔ)片控制點(diǎn)的組執(zhí)行操作并且生成被 稱為補(bǔ)片常數(shù)的附加數(shù)據(jù),細(xì)分級(jí)22對(duì)幾何形狀進(jìn)行細(xì)分以創(chuàng)建外殼的高階表示,域著色 器23對(duì)由細(xì)分級(jí)(與頂點(diǎn)著色器類似)輸出的頂點(diǎn)執(zhí)行操作,并且?guī)缀涡螤钪?4處 理諸如三角形、點(diǎn)或線的整個(gè)圖元。這些級(jí)連同頂點(diǎn)著色器21 -起響應(yīng)于提供給圖形處 理流水線3的命令和頂點(diǎn)數(shù)據(jù)而有效地執(zhí)行所有必要的片段前端操作,諸如變換和照明操 作,并且執(zhí)行圖元設(shè)置以便設(shè)置要被渲染的圖元。
[0120]圖形處理流水線3的光柵化級(jí)25像本領(lǐng)域中已知的那樣操作,以便使組成渲染輸 出(例如要顯示的圖像)的圖元光柵化成單個(gè)圖形片段以供處理。為了做到這一點(diǎn),光柵 化器25接收用于渲染的圖形圖元,使圖元光柵化成采樣點(diǎn)并且生成具有適當(dāng)?shù)奈恢茫ū硎?適當(dāng)?shù)牟蓸游恢茫┑膱D形片段以對(duì)圖元進(jìn)行渲染。
[0121]由光柵化器所生成的片段被繼續(xù)發(fā)送到流水線的其余部分以供處理。
[0122]早期Z/模板級(jí)26對(duì)從光柵化器2δ接收到的片段執(zhí)行Z (深度)測試(在本領(lǐng)域 內(nèi)是已知的),以便查看是否能夠在這個(gè)級(jí)丟棄(剔除)任何片段。為了做到這一點(diǎn),它將 從光柵化器25發(fā)出的片段(相關(guān)聯(lián))的深度值與已渲染的片段的深度值(這些深度值被 存儲(chǔ)在作為拼貼緩沖器30的一部分的深度(Z)緩沖器中)相比較以確定新的片段將被已 經(jīng)被渲染的片段封閉(與否)。同時(shí),執(zhí)行早期模板測試。
[0123]如本領(lǐng)域中已知的那樣,通過片段早期Z和模板測試級(jí)26的片段然后被發(fā)送到片 段著色級(jí)27。片段著色級(jí)27對(duì)通過早期z和模板測試的片段執(zhí)行適當(dāng)?shù)钠翁幚聿僮?,?便處理片段來生成被適當(dāng)渲染的片段數(shù)據(jù)。
[0124]如本領(lǐng)域中已知的那樣,這種片段處理可以包括任何適合的且期望的片段著色處 理,諸如對(duì)片段執(zhí)行片段著色器程序、對(duì)片段應(yīng)用紋理、對(duì)片段應(yīng)用霧化或其它操作,以便 生成適當(dāng)?shù)钠螖?shù)據(jù)。在本實(shí)施方式中,片段著色級(jí)27具有著色器流水線(可編程片段著 色器)的形式。
[0125]然后,存在"后期"片段Z和模板測試級(jí)2S,其尤其對(duì)經(jīng)過著色的片段執(zhí)行流水線 深度測試的末期以確定渲染的片段是否將實(shí)際上在最后的圖像中被看到。這種深度測試對(duì) 于存儲(chǔ)在拼貼緩沖器3〇中的z-緩沖器中的片段的位置使用Z-緩沖器值以通過如本領(lǐng)域 中已知的那樣將從片段著色級(jí)27發(fā)出的(相關(guān)聯(lián)的)片段的深度值與已經(jīng)被渲染的(如 存儲(chǔ)在深度緩沖器中的)片段的深度值相比較來確定新的片段的片段數(shù)據(jù)是否應(yīng)該替換 已經(jīng)被這染的片段的片段值。這種后期片段深度和模板測試級(jí)28同樣對(duì)片段執(zhí)行任何必 要的"后期"阿爾法和/或模板測試。
[0126]如果需要,通過后期片段測試級(jí)28的片段在混合器29中經(jīng)歷與已存儲(chǔ)在拼貼緩 沖器30中的片段的任何必要的混合操作。在這個(gè)級(jí)還執(zhí)行對(duì)片段所必需的任何其它剩余 的操作,諸如抖動(dòng)等(未示出)。
[0127]最后,(混合的)輸出片段數(shù)據(jù)(值)被寫入拼貼緩沖器30,片段數(shù)據(jù)值可以從拼 貼緩沖器30例如輸出到幀緩沖器以供顯示。輸出片段的深度值還被適當(dāng)?shù)貙懭朐谄促N緩 沖器30內(nèi)的Z緩沖器。(如本領(lǐng)域中已知的那樣,拼貼緩沖器將存儲(chǔ)色彩和深度緩沖器,分 別為緩沖器所表示的每個(gè)采樣點(diǎn)(本質(zhì)上為正被處理的拼貼的每個(gè)采樣點(diǎn))存儲(chǔ)適當(dāng)?shù)纳?彩等,或Z-值。)如本領(lǐng)域中已知的那樣,這些緩沖器存儲(chǔ)表示總體渲染輸出(例如要被顯 示的圖像)的一部分(拼貼)的片段數(shù)據(jù)的數(shù)組,其中在緩沖器中的樣本數(shù)據(jù)的相應(yīng)的集 合對(duì)應(yīng)于總體渲染輸出的相應(yīng)的像素(例如,樣本值的每個(gè)2x2集合可以對(duì)應(yīng)于輸出像素, 其中4x多重采樣正被使用)。
[0128]拼貼緩沖器被提供為位于圖形處理流水線(芯片)上(本地)的RAM的一部分。 [0129]來自拼貼緩沖器30的數(shù)據(jù)被輸入到下采樣(多重采樣解析)寫出單元31,并且從 那里被輸出(寫回)到外部存儲(chǔ)器輸出緩沖器,諸如顯示設(shè)備的幀緩沖器(未示出)。(顯 示設(shè)備能夠包括例如包括像素的陣列的顯示器,諸如計(jì)算機(jī)監(jiān)視器或打印機(jī)。)
[0130]下采樣和寫出單元31將存儲(chǔ)在拼貼緩沖器30中的片段數(shù)據(jù)下采樣為對(duì)于輸出緩 沖器(設(shè)備)適當(dāng)?shù)姆直媛剩矗沟蒙膳c輸出設(shè)備的像素相對(duì)應(yīng)的像素?cái)?shù)據(jù)的陣列), 以便生成輸出值(像素)以用于輸出到輸出緩沖器。
[0131] >-旦渲染輸出的拼貼已被處理并且它的數(shù)據(jù)被導(dǎo)出到主存儲(chǔ)器(例如主存儲(chǔ)器 中的幀緩沖器(未示出))以供存儲(chǔ),下一個(gè)拼貼被處理,并且以此類推,直到足夠的拼貼被 處理以生成整個(gè)渲染輸出(例如要顯示的幀(圖像))為止。然后針對(duì)下一個(gè)渲染輸出(例 如幀)重復(fù)該過程,并且以此類推。
[0132]用于圖形處理流水線3的其它方案當(dāng)然將是可能的。
[0133] 上文討論了圖1中所示出的圖形處理系統(tǒng)的操作的特定特征?,F(xiàn)將描述依照本發(fā) 明的實(shí)施方式的圖1中所示出的圖形處理系統(tǒng)的操作的另外的特征。
[0134] 如能夠從圖2所看到的,圖形處理流水線3包括多個(gè)可編程處理或"著色器"級(jí), 即頂點(diǎn)著色器2〇、外殼著色器21、域著色器23、幾何形狀著色器24以及片段著色器27。這 些可編程著色器級(jí)執(zhí)行相應(yīng)的著色器程序,這些著色器程序具有一個(gè)或更多個(gè)輸入變量并 且生成輸出變量的集合,并且由應(yīng)用來提供。為了做到這一點(diǎn),應(yīng)用2提供了使用高級(jí)著色 器編程語言(諸如GLSL、HLSL、OpenCL等)所實(shí)現(xiàn)的著色器程序。這些著色器程序被著色 器語言編譯器轉(zhuǎn)化為用于目標(biāo)圖形處理流水線3的二進(jìn)制代碼。如本領(lǐng)域中已知的那樣, 這可以包括在編譯器內(nèi)創(chuàng)建程序的一個(gè)或更多個(gè)中間表示。(編譯器例如可以是驅(qū)動(dòng)程序 4的一部分,其中存在用來使編譯器運(yùn)行的特殊API調(diào)用。編譯器執(zhí)行因此能夠被視為由驅(qū) 動(dòng)程序響應(yīng)于由應(yīng)用所生成的API調(diào)用而完成的繪圖調(diào)用準(zhǔn)備的一部分)。
[0135] 如上面所討論的那樣,圖形處理流水線中的每個(gè)著色器都是通過針對(duì)要生成的圖 形輸出中的每個(gè)圖形項(xiàng)目運(yùn)行小程序來執(zhí)行圖形處理的處理單元("項(xiàng)目"在這點(diǎn)上通常 是頂點(diǎn)、片段或像素)。本實(shí)施方式涉及其中要被著色器執(zhí)行的執(zhí)行線程(其中每個(gè)線程都 對(duì)應(yīng)于一個(gè)圖形項(xiàng)目)已被組織成將被一次一條指令地鎖步執(zhí)行的線程"組"或"束"的情 形。
[0136] 在本實(shí)施方式中,"記分板"方案被用來跟蹤線程組的指令的依賴性,并且用來允 許線程組中的指令的亂序執(zhí)行。這被如下實(shí)現(xiàn)。
[0137] 本實(shí)施方式使用支持八個(gè)指令完成跟蹤器(對(duì)于每個(gè)相應(yīng)的線程組具有八個(gè)"記 分板"位置(slot)或條目(entry))的記分板。視需要其它數(shù)目的記分板條目(位置(指 令完成跟蹤器))將是可能的。
[0138] 記分板條目(指令完成跟蹤器)中的每一個(gè)都具有與它相關(guān)聯(lián)的計(jì)數(shù)器。計(jì)數(shù)器 具有有限的寬度,并且如果計(jì)數(shù)器已達(dá)到其最大值,則使用該記分板位置(計(jì)數(shù)器)來執(zhí)行 可重新排序的指令的嘗試使所關(guān)聯(lián)的線程組停止(直到計(jì)數(shù)器已減少為止)。計(jì)數(shù)器寬度 可以小至一比特。對(duì)于不同的位置還將有可能具有不同的寬度。
[0139] 記分板的數(shù)據(jù)(位置計(jì)數(shù)器值)能夠以任何適合的方式實(shí)現(xiàn),例如被存儲(chǔ)在適合 的流水線存儲(chǔ)器中。
[0140]當(dāng)在主機(jī)處理器1上執(zhí)行的圖形處理流水線著色器編譯器處理著色器程序的指 令流時(shí),它標(biāo)識(shí)指令流中被允許亂序執(zhí)行的指令("可重新排序的"指令)。在本實(shí)施方式 中,被標(biāo)識(shí)的"可重新排序的"指令(如果存在的話)是:存儲(chǔ)器加載和存儲(chǔ)、屬性插值以及 紋理查找。其它方案當(dāng)然將是可能的。
[0141]如果編譯器標(biāo)識(shí)了指令流中的可重新排序的指令,則它將所述指令分配給記分板 位置(條目)(指令完成跟蹤器)中的一個(gè),并且在指令的字段中編碼指定所述指令被分配 到記分板位置中的哪一個(gè)的數(shù)據(jù)。能夠視需要而定(例如,依賴于指令的性質(zhì)和記分板位 置的當(dāng)前使用)來完成這種分配。
[0142]當(dāng)可重新排序的指令被發(fā)送到適當(dāng)?shù)闹饕怨﹫?zhí)行時(shí),所指示的記分板位置 (條目)使其計(jì)數(shù)器遞增(以指示現(xiàn)存在與該位置相關(guān)聯(lián)的未完成操作(指令))。當(dāng)指令 實(shí)際地完成時(shí),該位置的計(jì)數(shù)器相應(yīng)地遞減。
[0143]除了標(biāo)識(shí)指令流中的可重新排序的指令,編譯器還為指令流中的每條指令(無論 可重新排序與否)提供指示該指令依賴于哪些記分板位置(指令完成跟蹤器)(若有的話) 的注解。這種注解被用來在它們真正地存在于著色器程序中時(shí)實(shí)施數(shù)據(jù)依賴性。
[0144]在本實(shí)施方式中,這種注解未被實(shí)際地放置在需要相關(guān)指令完成的指令上,相反 地,它被放置(編碼)在前一條指令上。這有利于阻止依賴性尚未被滿足的相關(guān)指令的取 指令。
[0145] 指令然后被發(fā)送到著色器以供執(zhí)行。在著色器中,在取出每條指令之前,檢查所指 示的關(guān)聯(lián)的(一個(gè)或更多個(gè))依賴性位置(指令完成跟蹤器)的計(jì)數(shù)器值。如果所有關(guān)聯(lián) 的位置都全部都具有計(jì)數(shù)器值〇 (從而指示當(dāng)前指令所依賴的所有指令己完成),則指令被 取出并且執(zhí)行。如果所有關(guān)聯(lián)的位置不具有計(jì)數(shù)器值〇 (從而指示當(dāng)前指令所依賴的指令 中的至少一些仍然尚未完成),則指令的取出(以及因此執(zhí)行)被阻止(使用任何適合的機(jī) 制)直到所有關(guān)聯(lián)的位置的計(jì)數(shù)器都達(dá)到〇為止。
[0146] 圖3A和圖3B例示了這個(gè)過程。在到達(dá)指令流中的一指令時(shí)(步驟40),編譯器確 定該指令是否是可重新排序的指令(步驟41)。如果是,則編譯器將記分板位置分配給該指 令并且將所述分配編碼在指令中(步驟42)。如果不是,則不分配記分板位置。
[0147] 然后,編譯器確定該指令是否依賴于任何較早的指令(步驟43),并且用所確定的 當(dāng)前指令的依賴性(若有的話)的有關(guān)記分板位置給前一條指令作注解(步驟44)。
[0148] 然后,指令被發(fā)送到著色器(步驟45)。當(dāng)可重新排序的指令被發(fā)送時(shí),用于它關(guān) 聯(lián)的插槽的計(jì)數(shù)器遞增(步驟46、47)。相應(yīng)地,當(dāng)該指令完成時(shí),計(jì)數(shù)器被遞減(步驟51)。
[0149] 當(dāng)指令將被執(zhí)行時(shí),檢查被指示為與該指令相關(guān)聯(lián)的(一個(gè)或更多個(gè))依賴性位 置的計(jì)數(shù)器值(步驟48)。如果所有關(guān)聯(lián)的位置全部都具有計(jì)數(shù)器值0,則執(zhí)行指令(步驟 49)。如果所有關(guān)聯(lián)的位置不具有計(jì)數(shù)器值0,則阻止指令的執(zhí)行直到所有關(guān)聯(lián)的位置的計(jì) 數(shù)器到達(dá)0為止(步驟50)。
[0150] 圖4例示了在本發(fā)明的實(shí)施方式中使用的針對(duì)包括三條指令的短指令序列的記 分板方案,第一指令將值從存儲(chǔ)器加載到寄存器R0中,第二指令將常數(shù)值移入寄存器R1, 并且第三指令將寄存器R0和R1的內(nèi)容相加從而將結(jié)果放在寄存器R2中。
[0151] 在這種情況下,如圖4所示,編譯器將把第一指令標(biāo)識(shí)為可重新排序的指令,并且 因此在這個(gè)示例中將第一指令分配到記分板位置(條目)0。編譯器還將第三指令標(biāo)識(shí)為 依賴于第一指令(加載指令)的完成,并且所以將第三指令注解為依賴于記分板條目(位 置)〇。
[0152] 然后,指令被發(fā)送到流水線。如圖4中所示,當(dāng)?shù)谝恢噶畋话l(fā)送時(shí),記分板位置〇 的計(jì)數(shù)器遞增以表明加載指令是未決的。在這種情況下,假定加載指令由于高速緩存未命 中而花費(fèi)很長時(shí)間完成。
[0153] 然后,處理移至第二指令,因?yàn)榈诙噶畈灰蕾囉谌魏斡浄职逦恢?,所述第二指?能夠執(zhí)行。然后,執(zhí)行單元試圖執(zhí)行第三指令,但根據(jù)記分板條目0而確定第三指令所依賴 的加載操作仍然未完成。因此,這個(gè)階段不能夠執(zhí)行第三ADD指令。最后,當(dāng)記分板條目0 的計(jì)數(shù)是0時(shí),第三ADD指令能夠執(zhí)行,加載完成并且能夠發(fā)出ADD。
[0154]圖5示出了對(duì)應(yīng)的操作,但第三ADD指令的依賴性在對(duì)第二移動(dòng)指令的編碼中指 示(如圖5中所示)。在這種情況下,標(biāo)識(shí)了在執(zhí)行移動(dòng)指令時(shí)下一條指令依賴于記分板條 目〇,所以第三ADD指令的取出被推遲直至第一加載指令已完成為止。
[0155] 圖6示出了用來實(shí)施相關(guān)的存儲(chǔ)操作的本發(fā)明的示例性操作。在這種情況下,存 在四個(gè)存儲(chǔ)指令的序列,其中假定第四存儲(chǔ)指令依賴于第二和第三存儲(chǔ)指令的完成。為此, 如圖6中所示,第二和第三存儲(chǔ)指令被分配給相同的記分板位置(條目)(在這種情況下是 記分板條目1),并且第四相關(guān)存儲(chǔ)指令被指示為依賴于該記分板條目,使得僅在第二和第 三存儲(chǔ)指令已完成時(shí)執(zhí)行該第四存儲(chǔ)指令。(然而,如圖6中所示,第四存儲(chǔ)指令不依賴于 第一存儲(chǔ)指令,因此即使第一存儲(chǔ)指令仍然尚未完成也能夠執(zhí)行第四存儲(chǔ)指令)。
[0156] 視需要,上述實(shí)施方式的各種另選和添加將是可能的。
[0157] 例如,在上述實(shí)施方式中,未執(zhí)行除顯式記分板所提供的依賴性跟蹤以外的其它 依賴性跟蹤。這意味著在存在顯式記分板的情況下,來自線程的測試、讀、寫以及原子以相 對(duì)于彼此的任意次序執(zhí)行。情況是這樣的,如果編譯器不能夠證明存儲(chǔ)器寫不與前一個(gè)讀 或?qū)懼丿B,則編譯器將寫標(biāo)記為依賴于所述前一個(gè)讀或?qū)?。類似地,如果編譯器不能夠證明 存儲(chǔ)器讀不與前一個(gè)寫重疊,則編譯器將讀標(biāo)記為依賴于所有受影響先前的寫。
[0158] 作為對(duì)此的替代方案,在另一個(gè)實(shí)施方式中,編譯器能夠在指令流中插入"存儲(chǔ)器 屏障(memory fence)"指令。該指令是告訴執(zhí)行單元(例如,加載/存儲(chǔ)單元)對(duì)例如來自 線程組的指令實(shí)施排序的指令。例如,在屏障指令之前發(fā)出的所有加載/存儲(chǔ)指令都被要 求在屏障之后的加載/存儲(chǔ)指令中的任一個(gè)之前完成。這能夠例如通過使用被指示為依賴 于所有記分板"位置"的指令來實(shí)現(xiàn)。還將有可能具有僅阻塞加載的重新排序的"加載屏障 (load fence) "指令,以及僅阻塞存儲(chǔ)的重新排序的"存儲(chǔ)屏障(store fence) "指令。
[0159] 另一可能性將是具有針對(duì)從相同的線程組發(fā)出的每個(gè)加載/存儲(chǔ)隱式地插入這 樣的存儲(chǔ)器屏障的加載/存儲(chǔ)流水線。
[0160] 本 申請(qǐng)人:已經(jīng)認(rèn)識(shí)到,在一些情況下,執(zhí)行單元可能正等待兩個(gè)或更多個(gè)未完成 的項(xiàng)目,但它們能夠被以任意次序處理。對(duì)于這種情況,為了使執(zhí)行效率最大化,能夠使用 記分板"branch"指令(在編譯器識(shí)別到這種情況時(shí)被編譯器插入指令流中)。這種指令是 測試記分板位置(條目)的子集的條件分支:如果要被測試的一個(gè)子集的所有記分板位置 都具有等于零的計(jì)數(shù)器值,則分支被采取,如果要被測試的另一個(gè)子集的所有記分板位置 都具有等于零的計(jì)數(shù)器值,則另一分支(路徑)被采取,否則分支指令被停止。要測試的記 分板位置的集合被編碼在該分支指令中。應(yīng)該用兩個(gè)不同的依賴性集合給這樣的記分板分 支指令作注解,使得只要兩個(gè)集合中的至少一個(gè)滿足,指令就被執(zhí)行。分支對(duì)于線程組中的 所有線程總是取相同的方向,使得它不能夠引起線程組發(fā)散。
[0161] 圖7示意性地示出了記分板分支指令的操作。在這個(gè)示例中,分支指令是序列中 的第三指令,并且依賴于正被完成的記分板條目〇 (在這種情況下,它分支到序列中的指令 7),并且具有依賴于記分板條目0或1的第二依賴性子集(在這種情況下,執(zhí)行繼續(xù)序列中 的下一條指令(在這種情況下是指令4))。如果分支條件都不滿足,則分支指令的執(zhí)行被停 止。
[0162] 從上文可以看到,本發(fā)明至少在其優(yōu)選實(shí)施方式中提供了用于在例如基于線程組 的GPU著色器核心中促進(jìn)線程組的指令的亂序執(zhí)行的機(jī)制。這有助于增加能夠被用給定數(shù) 量的硬件資源利用的并行性的數(shù)量,并且因此有助于改進(jìn)執(zhí)行單元利用率。
[0163] 這至少在本發(fā)明的優(yōu)選實(shí)施例中通過使用"顯式"記分板機(jī)制來實(shí)現(xiàn),其中指令依 賴性被編碼在指令本身中。
【權(quán)利要求】
1. 一種操作數(shù)據(jù)處理系統(tǒng)的方法,所述數(shù)據(jù)處理系統(tǒng)包括執(zhí)行流水線,所述執(zhí)行流水 線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),所述方法包括以下步 驟: 針對(duì)要由執(zhí)行級(jí)執(zhí)行的指令的流,確定所述指令流中是否存在能夠被重新排序的任何 指令; 將所述指令流中被確定為能夠被重新排序的每條指令分配給指令完成跟蹤器,并且在 對(duì)所述指令的編碼中包括所述指令被分配到的所述指令完成跟蹤器的指示; 針對(duì)所述指令流中依賴于已被分配給指令完成跟蹤器的指令的每條指令,在所述指令 流中提供依賴于已被分配給指令完成跟蹤器的指令的所述指令依賴于哪一個(gè)或哪些指令 跟蹤器的指示; 將所述指令流中的指令發(fā)送到所述執(zhí)行級(jí)以供執(zhí)行;以及 當(dāng)執(zhí)行所述指令流中的所述指令時(shí): 使用所分配的指令完成跟蹤器來跟蹤所述指令的完成;以及 針對(duì)被指示為依賴于指令完成跟蹤器的任何指令,在執(zhí)行所述指令之前檢查 所述指令完成跟蹤器的狀態(tài)。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述指令流中能夠被重新排序的所述指令包括: 存儲(chǔ)器加載、存儲(chǔ)器存儲(chǔ)、存儲(chǔ)器原子、屬性插值以及紋理查找。
3. 根據(jù)權(quán)利要求1或2所述的方法,其中,每個(gè)指令完成跟蹤器都包括用于跟蹤所述指 令的完成的計(jì)數(shù)器。
4. 根據(jù)前述權(quán)利要求中任一項(xiàng)所述的方法,其中,指令已被分配到的所述指令完成跟 蹤器在指定所述指令已被分配給哪一個(gè)指令跟蹤器的指令編碼中的字段中被指示。
5. 根據(jù)前述權(quán)利要求中任一項(xiàng)所述的方法,其中,如果所述指令流中的指令依賴于指 令完成跟蹤器,則針對(duì)所述指令流中的所述指令而提供的所述指令依賴于哪些指令完成跟 蹤器的指示在所述指令流中的前一條指令中被指出。
6. 根據(jù)前述權(quán)利要求中任一項(xiàng)所述的方法,所述方法還包括以下步驟:在所述指令流 中包括屏障指令,所述屏障指令迫使所述指令流中位于所述屏障指令之前的具有一個(gè)或更 多個(gè)給定類型的所有指令在位于所述屏障指令之后的指令被執(zhí)行之前完成。
7. 根據(jù)前述權(quán)利要求中任一項(xiàng)所述的方法,該方法還包括以下步驟:在所述指令流中 包括分支指令,所述分支指令具有與它相關(guān)聯(lián)的兩個(gè)或更多個(gè)不同的指令跟蹤器依賴性集 合,當(dāng)滿足指令跟蹤器依賴性的所述集合中的一個(gè)集合時(shí)選擇分支。
8. 根據(jù)前述權(quán)利要求中任一項(xiàng)所述的方法,其中,所述數(shù)據(jù)處理系統(tǒng)包括圖形處理系 統(tǒng),所述圖形處理系統(tǒng)包括圖形處理流水線,所述圖形處理流水線包括執(zhí)行圖形著色器程 序以執(zhí)行圖形處理操作的一個(gè)或更多個(gè)可編程著色器級(jí)。
9. 一種操作數(shù)據(jù)處理系統(tǒng)的方法,所述數(shù)據(jù)處理系統(tǒng)包括執(zhí)行流水線,所述執(zhí)行流水 線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),并且其中,指令的執(zhí) 行可能依賴于其它指令的完成,指令的完成被跟蹤,并且自身的執(zhí)行依賴于其它指令的完 成的指令的依賴性能夠與相關(guān)指令相關(guān)聯(lián); 所述方法包括以下步驟: 在要執(zhí)行的指令的流中包括條件分支指令,所述條件分支指令具有與它相關(guān) 聯(lián)的兩個(gè)或更多個(gè)不同的指令依賴性集合,其中,指令依賴性的每個(gè)不同集合關(guān) 聯(lián)有所述指令流中要遵循的給定路徑; 將所述指令流中的指令發(fā)送到執(zhí)行級(jí)以供執(zhí)行;以及 當(dāng)執(zhí)行所述指令流中的所述條件分支指令時(shí),檢查與所述指令相關(guān)聯(lián)的指令 依賴性的所述集合的狀態(tài),并且在所述檢查的基礎(chǔ)上遵循所述指令流中的路徑。
10. -種數(shù)據(jù)處理系統(tǒng),該數(shù)據(jù)處理系統(tǒng)包括: 執(zhí)行流水線,其包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí);以 及 編譯器,其對(duì)用于所述執(zhí)行流水線的程序進(jìn)行編譯以生成針對(duì)所述執(zhí)行流水線的執(zhí)行 級(jí)的指令的流; 其中: 所述編譯器被配置成: 針對(duì)要被執(zhí)行級(jí)執(zhí)行的指令的流,確定所述指令流中是否存在能夠被重新排序的任何 指令; 將所述指令流中被確定為能夠被重新排序的每條指令分配給指令完成跟蹤器,并且在 對(duì)所述指令的編碼中包括所述指令被分配到的所述指令完成跟蹤器的指示;以及 針對(duì)所述指令流中依賴于已被分配給指令完成跟蹤器的指令的每條指令,在所述指令 流中提供依賴于已被分配給指令完成跟蹤器的指令的所述指令依賴于哪一個(gè)或哪些指令 跟蹤器的指示; 并且其中: 所述執(zhí)行流水線的至少一個(gè)執(zhí)行級(jí)被配置成在執(zhí)行所述指令流中的指令時(shí): 使用所分配的指令完成跟蹤器來跟蹤所述指令的完成;以及 針對(duì)被指示為依賴于指令完成跟蹤器的任何指令,在執(zhí)行所述指令之前檢查所述指令 完成跟蹤器的狀態(tài)。
11. 根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),其中,所述指令流中能夠被重新排序的所 述指令包括:存儲(chǔ)器加載、存儲(chǔ)器存儲(chǔ)、存儲(chǔ)器原子、屬性插值以及紋理查找。
12. 根據(jù)權(quán)利要求10或11所述的數(shù)據(jù)處理系統(tǒng),其中,每個(gè)指令完成跟蹤器都包括用 于跟蹤所述指令的完成的計(jì)數(shù)器。
13. 根據(jù)權(quán)利要求10至12中任一項(xiàng)所述的數(shù)據(jù)處理系統(tǒng),其中,指令已被分配到的所 述指令完成跟蹤器在指定所述指令已被分配給哪一個(gè)指令跟蹤器的指令編碼中的字段中 被指示。
14. 根據(jù)權(quán)利要求10至13中任一項(xiàng)所述的數(shù)據(jù)處理系統(tǒng),其中,如果所述指令流中的 指令依賴于指令完成跟蹤器,則針對(duì)所述指令流中的所述指令而提供的所述指令依賴于哪 些指令完成跟蹤器的指示在所述指令流中的前一條指令中被指出。
15. 根據(jù)權(quán)利要求10至14中任一項(xiàng)所述的數(shù)據(jù)處理系統(tǒng),其中,所述編譯器被進(jìn)一步 配置成在所述指令流中包括屏障指令,所述屏障指令迫使所述指令流中位于所述屏障指令 之前的具有一個(gè)或更多個(gè)給定類型的所有指令在位于所述屏障指令之后的指令被執(zhí)行之 iu完成。
16. 根據(jù)權(quán)利要求10至15中任一項(xiàng)所述的數(shù)據(jù)處理系統(tǒng),其中,所述編譯器被進(jìn)一 步配置成在所述指令流中包括分支指令,所述分支指令具有與它相關(guān)聯(lián)的兩個(gè)或更多個(gè)不 同的指令跟蹤器依賴性集合,當(dāng)滿足指令跟蹤器依賴性的所述集合中的一個(gè)集合時(shí)選擇分 支。
17. 根據(jù)權(quán)利要求10至16中任一項(xiàng)所述的數(shù)據(jù)處理系統(tǒng),其中,所述數(shù)據(jù)處理系統(tǒng)包 括圖形處理系統(tǒng),所述圖形處理系統(tǒng)包括圖形處理流水線,所述圖形處理流水線包括執(zhí)行 圖形著色器程序以執(zhí)行圖形處理操作的一個(gè)或更多個(gè)可編程著色器級(jí)。
18. -種編譯器,所述編譯器對(duì)程序進(jìn)行編譯以生成針對(duì)執(zhí)行流水線的執(zhí)行級(jí)的指令, 所述執(zhí)行流水線包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),其中, 所述編譯器被配置成: 針對(duì)要由所述執(zhí)行流水線的執(zhí)行級(jí)執(zhí)行的指令的流,確定所述指令流中是否存在能夠 被重新排序的任何指令; 將所述指令流中被確定為能夠被重新排序的每條指令分配給指令完成跟蹤器,并且在 對(duì)所述指令的編碼中包括所述指令被分配到的所述指令完成跟蹤器的指示;以及 針對(duì)所述指令流中依賴于已被分配給指令完成跟蹤器的指令的每條指令,在所述指令 流中提供依賴于己被分配給指令完成跟蹤器的指令的所述指令依賴于哪一個(gè)或哪些指令 跟蹤器的指示。
19. 一種用于數(shù)據(jù)處理系統(tǒng)的執(zhí)行流水線,所述執(zhí)行流水線包括: 執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),并且其中: 所述執(zhí)行流水線的至少一個(gè)執(zhí)行級(jí)被配置成在執(zhí)行指令流中的指令時(shí): 響應(yīng)于編譯器針對(duì)所述執(zhí)行級(jí)在指令的編碼中提供的所述指令已被分配給指令完成 跟蹤器的指示,使用所指示分配的指令完成跟蹤器來跟蹤所述指令的完成;并且 響應(yīng)于編譯器針對(duì)所述執(zhí)行級(jí)在指令的編碼中提供的所述指令流中的指令依賴于指 令完成跟蹤器的指示,在執(zhí)行被指示為依賴于所述指令完成跟蹤器的所述指令之前檢查所 指示的指令完成跟蹤器的狀態(tài)。
20. -種數(shù)據(jù)處理系統(tǒng),所述數(shù)據(jù)處理系統(tǒng)包括: 執(zhí)行流水線,其包括執(zhí)行指令以執(zhí)行數(shù)據(jù)處理操作的一個(gè)或更多個(gè)可編程執(zhí)行級(jí),并 且其中,指令的執(zhí)行可能依賴于其它指令的完成,指令的完成被跟蹤,并且自身的執(zhí)行依賴 于其它指令的完成的指令的依賴性能夠與相關(guān)指令相關(guān)聯(lián);以及 處理電路,其被配置成: 在要執(zhí)行的指令的流中包括條件分支指令,所述條件分支指令具有與它相關(guān)聯(lián)的兩個(gè) 或更多個(gè)不同的指令依賴性集合,其中,指令依賴性的每個(gè)不同集合關(guān)聯(lián)有所述指令流中 要遵循的給定路徑;以及 將所述指令流中的指令發(fā)送到所述執(zhí)行流水線以供執(zhí)行,并且 其中,所述執(zhí)行流水線被配置成,當(dāng)執(zhí)行所述指令流中的所述條件分支指令時(shí),檢查與 所述指令相關(guān)聯(lián)的指令依賴性的所述集合的狀態(tài),并且在所述檢查的基礎(chǔ)上遵循所述指令 流中的路徑。
21. -種計(jì)算機(jī)程序,所述計(jì)算機(jī)程序包括適于在所述程序在數(shù)據(jù)處理系統(tǒng)上被運(yùn)行 時(shí)執(zhí)行根據(jù)權(quán)利要求1至9中任一項(xiàng)所述的方法的所有步驟。
22. -種操作大體上如本文中參考附圖中的任一個(gè)所描述的數(shù)據(jù)處理系統(tǒng)的方法。
23. -種大體上如本文中參考附圖中的任一個(gè)在描述的數(shù)據(jù)處理系統(tǒng)。
24. -種大體上如本文中參考附圖中的任一個(gè)所描述的用于數(shù)據(jù)處理系統(tǒng)的編譯器。
25. -種大體上如本文中參考附圖中的任一個(gè)所描述的用于數(shù)據(jù)處理系統(tǒng)的執(zhí)行流水 線。
【文檔編號(hào)】G06T1/20GK104217393SQ201410239143
【公開日】2014年12月17日 申請(qǐng)日期:2014年5月30日 優(yōu)先權(quán)日:2013年5月31日
【發(fā)明者】J·尼斯塔德 申請(qǐng)人:Arm有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宝清县| 奉新县| 河池市| 习水县| 酉阳| 阳江市| 共和县| 阿坝县| 伊川县| 辰溪县| 阳江市| 乐亭县| 大理市| 佛山市| 上犹县| 丰镇市| 英吉沙县| 余江县| 象州县| 都江堰市| 牡丹江市| 广元市| 甘德县| 兰州市| 长治市| 巴彦淖尔市| 呈贡县| 西安市| 吉木萨尔县| 萍乡市| 唐山市| 临漳县| 米易县| 无为县| 和林格尔县| 墨竹工卡县| 岳普湖县| 新建县| 浦城县| 宜阳县| 皮山县|