本發(fā)明涉及圖形處理系統(tǒng),更具體地涉及當(dāng)執(zhí)行圖形著色器時將線程映射到寄存器。
背景技術(shù):
圖形處理通常是以流水線的方式來執(zhí)行的,具有對數(shù)據(jù)進(jìn)行操作以生成最終渲染輸出(例如顯示的幀)的一個或更多個流水線階段?,F(xiàn)在,很多圖形處理流水線包括一個或更多個可編程處理階段,通常被稱為“著色器(shader)”。例如,圖形處理流水線可以包括幾何著色器、頂點著色器和片段(fragment)(像素)著色器中的一個或更多個,并且通常為全部的上述著色器。這些著色器是這樣的可編程處理階段:其對輸入數(shù)據(jù)值執(zhí)行著色器程序以生成期望的一組輸出數(shù)據(jù)(例如,在片段著色的情況下適當(dāng)?shù)剡M(jìn)行著色(shade)和渲染的片段數(shù)據(jù)),用于通過圖形流水線的其余部分進(jìn)行的處理和/或用于輸出。圖形處理流水線的著色器可以共享可編程處理電路,或者它們各自可以是不同的可編程處理單元。
因此,圖形處理單元(GPU)著色器核心是這樣的處理單元:其通過運行針對要生成的圖形輸出中的每個圖形項目的小程序來執(zhí)行圖形處理,上述圖形輸出諸如是渲染目標(biāo),例如,幀(“項目”在這方面通常是頂點或采樣位置(例如,在片段著色器的情況下))。這通常使得具有高并行度,這是由于典型的渲染輸出(例如,幀)特征在于具有相當(dāng)大數(shù)量的頂點和片段,這些頂點和片段中的每一個可以獨立地進(jìn)行處理。
在圖形著色操作中,每個“項目”將借助于執(zhí)行線程來進(jìn)行處理,該執(zhí)行線程將執(zhí)行針對討論中的圖形“項目”的討論中的著色器。
通過圖形處理流水線的著色階段執(zhí)行的圖形著色器程序通常將執(zhí)行從相應(yīng)寄存器讀取數(shù)據(jù)以及向相應(yīng)寄存器寫入數(shù)據(jù)的一系列指令。執(zhí)行著色器程序的每個執(zhí)行線程通常將具有其將從中讀取并向其寫入其相應(yīng)數(shù)據(jù)的被分配的寄存器或一組寄存器。用于此目的的寄存器通常將被組織成一個或更多個組的寄存器,并且相應(yīng)線程將是來自寄存器組中的相應(yīng)一個或多個組中的被分配的寄存器,供其使用。
通常將存在將一個或多個寄存器組中的寄存器映射到相應(yīng)執(zhí)行線程的預(yù)定義的寄存器文件映射,并且然后當(dāng)執(zhí)行線程執(zhí)行所討論的著色器程序時,這些執(zhí)行線程將使用已經(jīng)根據(jù)寄存器文件映射被分配的寄存器。
申請人相信,仍有改進(jìn)當(dāng)在圖形處理系統(tǒng)中執(zhí)行著色器程序時將執(zhí)行線程映射到寄存器的空間。
技術(shù)實現(xiàn)要素:
根據(jù)本發(fā)明的第一方面,提供了一種操作圖形處理單元的方法,該圖形處理單元包括執(zhí)行程序指令以進(jìn)行圖形著色操作的可編程執(zhí)行單元,以及遍及至少兩個寄存器組分布的多個寄存器,所述多個寄存器用于由所述可編程執(zhí)行單元執(zhí)行的執(zhí)行線程使用;并且其中:
所述圖形處理單元能夠?qū)⒅辽賰蓚€不同的寄存器文件映射配置用于將所述寄存器映射到執(zhí)行線程;
所述方法包括以下步驟:
針對對于所述圖形處理單元的所述可編程執(zhí)行單元中的一組線程要執(zhí)行的一組指令,確定要將所述至少兩個不同的寄存器文件映射配置中的哪一個用于對于所述一組線程的所述一組指令;以及
當(dāng)執(zhí)行對于所述一組線程的所述一組指令時,根據(jù)所確定的寄存器文件映射配置來使用所述寄存器。
根據(jù)本發(fā)明的第二方面,提供了一種圖形處理系統(tǒng),該圖形處理系統(tǒng)包括:
圖形處理單元,該圖形處理單元包括:
可編程執(zhí)行單元,所述可編程執(zhí)行單元執(zhí)行程序指令以進(jìn)行圖形著色操作;以及
多個寄存器,所述多個寄存器遍及至少兩個寄存器組進(jìn)行分布,用于由所述可編程執(zhí)行單元執(zhí)行的執(zhí)行線程使用;
其中:
所述圖形處理單元能夠?qū)⒅辽賰蓚€不同的寄存器文件映射配置用于將所述寄存器映射到執(zhí)行線程;并且
所述圖形處理系統(tǒng)被配置為:
針對對于所述圖形處理單元的所述可編程執(zhí)行單元中的一組線程要執(zhí)行的一組指令,確定要將所述至少兩個不同的寄存器文件映射配置中的哪一個用于對于所述一組線程的所述一組指令;以及
當(dāng)執(zhí)行對于所述一組線程的所述一組指令時,使得所述圖形處理單元根據(jù)所確定的寄存器文件映射配置來使用所述寄存器。
本發(fā)明涉及當(dāng)在圖形處理單元中執(zhí)行著色器程序時將寄存器分配到執(zhí)行線程。在本發(fā)明中,能夠使用兩個或更多個不同的寄存器文件映射配置,并且然后選擇這些可用寄存器文件映射中的一個,以供針對要執(zhí)行的一個或多個給定線程的一個或多個給定指令使用。
如下文中將要進(jìn)一步論述的,申請人已經(jīng)意識到,特定寄存器文件映射對于特定形式的數(shù)據(jù)接入來說可以是有利的。本發(fā)明通過在使用中使得寄存器文件映射能夠在逐個指令、逐個線程和/或逐個著色器程序等的基礎(chǔ)上有效地進(jìn)行配置來利用該優(yōu)勢。然后這將意味著更優(yōu)化的寄存器文件映射配置能夠被用于要執(zhí)行的指令和/或著色器程序。然后這導(dǎo)致在由圖形處理單元執(zhí)行著色器程序期間更高效地(例如,在電力使用方面)訪問寄存器。
可編程執(zhí)行單元能夠是圖形處理單元可以包含的任何合適的且需要的可編程執(zhí)行單元。應(yīng)當(dāng)可以進(jìn)行操作來執(zhí)行圖形著色程序,以進(jìn)行圖形處理操作。因此,可編程執(zhí)行單元將接收要執(zhí)行的圖形線程,并且執(zhí)行針對這些線程的合適的圖形著色程序以生成需要的圖形輸出。
可編程執(zhí)行單元能夠執(zhí)行任何合適的且需要的著色器程序。在一個優(yōu)選實施方式中,可編程執(zhí)行單元執(zhí)行片段著色器程序(用于執(zhí)行片段著色操作的程序)。
可以存在單個或多個可編程執(zhí)行單元。在存在多個可編程執(zhí)行單元的情況下,每個執(zhí)行單元能夠優(yōu)選地按照本發(fā)明的方式進(jìn)行操作。
在優(yōu)選實施方式中,在本發(fā)明中執(zhí)行的線程被組織成線程組,其中,分組的線程以一致步調(diào)、一次一個指令地來執(zhí)行。(用于這種線程組的其它術(shù)語包括“warp”和“wavefront”。為了方便起見,將在本文中使用術(shù)語“線程組”,但是除非另有說明,該術(shù)語旨在包含全部的等同術(shù)語和結(jié)構(gòu)。)
本發(fā)明所使用的線程組可以是任何合適且需要的尺寸。在優(yōu)選實施方式中,每個線程組包含四個線程(即,存在為四的組寬度)。在這種情況下,每個線程組(warp)優(yōu)選地對應(yīng)于2x2采樣位置“四元組”。然而,如果需要的話,諸如使用更寬的線程組(warp)的其它安排將是可能的。
寄存器可以按照任何合適的且需要的方式來提供,并且可以存在任何合適且需要數(shù)量的寄存器。寄存器被組織成至少兩個寄存器組。在一個優(yōu)選實施方式中,僅存在兩個寄存器組,但是在其它實施方式中,可以存在超過兩個的寄存器組。每個寄存器組可以包括與需要一樣多的寄存器。優(yōu)選地每個寄存器組實際上被組織為寄存器的陣列,優(yōu)選地能夠指派(映射)陣列中的多組寄存器,以供相應(yīng)的執(zhí)行線程使用。
在優(yōu)選實施方式中,在執(zhí)行線程能夠被組織成一組線程以一致步調(diào)、一次一個指令地運行的線程組的情況下,每個寄存器組優(yōu)選地包含針對線程組能夠包含的每個線程的一組寄存器。因此,例如,在可編程執(zhí)行單元能夠處理包括四個執(zhí)行線程的線程組的情況下,則優(yōu)選地每個寄存器組包含四組寄存器,使得一組能夠被分配到線程組中的每個線程(如有需要)。
能夠根據(jù)需要選擇能夠在本發(fā)明之間進(jìn)行選擇的不同的寄存器文件映射配置。在一個優(yōu)選實施方式中,存在能夠在其之間進(jìn)行選擇的兩個不同的寄存器文件映射配置。在其它配置中,存在超過兩個的不同的寄存器文件映射配置(例如,三個寄存器文件映射配置)。
優(yōu)選地預(yù)先限定不同的寄存器文件映射配置,即,使得系統(tǒng)在使用中選擇多個預(yù)定的寄存器文件映射配置中的一個來使用。
每個寄存器文件映射配置優(yōu)選地進(jìn)行配置,以便針對特定類型的數(shù)據(jù)訪問來說更加優(yōu)化,并且最優(yōu)選地以供利用具有特定的、優(yōu)選已選大小(精確度)的數(shù)據(jù)值來使用。因此,優(yōu)選地存在用于第一大小的數(shù)據(jù)值使用的一個寄存器文件映射配置,以及用于與第二不同大小的數(shù)據(jù)值一起使用的另一個寄存器文件映射配置。
數(shù)據(jù)值大小在這方面可以根據(jù)需要進(jìn)行選擇,但是優(yōu)選地對應(yīng)于有可能用在圖形處理系統(tǒng)中的數(shù)據(jù)值大小(例如,數(shù)據(jù)值精確度)。因此,在優(yōu)選實施方式中,數(shù)據(jù)值大小是以下各項中的至少兩個:16位數(shù)據(jù)值、32位數(shù)據(jù)值和64位數(shù)據(jù)值。在特定優(yōu)選實施方式中,存在用于與32位數(shù)據(jù)值一起使用的一個寄存器文件映射配置,以及用于與64位數(shù)據(jù)值一起使用的第二寄存器文件映射配置。
寄存器文件映射配置能夠被制作得更加優(yōu)化,用于以任何合適的且需要的方式與例如和這些寄存器文件映射配置相關(guān)的特定數(shù)據(jù)值大小一起使用。在優(yōu)選實施方式中,寄存器文件映射進(jìn)行配置以便減少將需要被針對所述大小的數(shù)據(jù)值的線程或線程組訪問的寄存器組的數(shù)量,并且優(yōu)選地使得針對所述大小的數(shù)據(jù)值的寄存器訪問將訪問最小數(shù)量的寄存器組(鑒于寄存器組的寄存器的大小)。最優(yōu)選地,寄存器文件映射進(jìn)行配置使得針對所述大小的數(shù)據(jù)值的寄存器訪問將僅需要訪問一個寄存器組(而其它大小的數(shù)據(jù)值可能需要訪問兩個或更多個寄存器組,以讀取或?qū)懭脒@些數(shù)據(jù)值)。
寄存器文件映射配置能夠在這方面按照任何合適的且需要的方式來組織。這例如可能取決于寄存器組中的每個單獨的寄存器能夠支持的數(shù)據(jù)值的大小。
在特別優(yōu)選實施方式中,在寄存器存儲特定大小的數(shù)據(jù)值,例如并且優(yōu)選地32位數(shù)據(jù)值的情況下,則存在用于該大小的數(shù)據(jù)值(例如并且優(yōu)選地32位數(shù)據(jù)值)使用的一個寄存器文件映射配置,在該配置中,寄存器文件映射將來自同一組的相應(yīng)寄存器映射到可以在可編程執(zhí)行單元中作為線程組進(jìn)行處理的一組線程中的每個線程,以及用于與兩倍大小的數(shù)據(jù)值(例如并且優(yōu)選地,64位數(shù)據(jù)值)一起使用的第二寄存器文件映射配置,在該配置中,來自同一寄存器組的各個成對的寄存器被分配以供給定執(zhí)行線程使用(即,從而實際上針對執(zhí)行線程提供同一寄存器組中的一對寄存器,使得執(zhí)行線程當(dāng)讀取或?qū)懭敫蟮?例如64位)數(shù)據(jù)值時不必訪問兩個或更多個寄存器組)。這使得線程組中的全部線程通過當(dāng)使用較小數(shù)據(jù)值時僅訪問一個組的寄存器來并行地進(jìn)行寄存器訪問,并且具有如下效果:能夠減少針對使用“更大”數(shù)據(jù)值的線程需要進(jìn)行訪問的寄存器組的數(shù)量。
所選擇的寄存器文件映射配置能夠以任何合適且需要等級的粒度(分辨率)應(yīng)用于全部寄存器組。因此,例如,能夠是這樣的情況:全部的寄存器和寄存器組都針對所選擇的寄存器文件映射配置來進(jìn)行設(shè)置(并且在一個優(yōu)選實施方式中這就是在做的)。在這種情況下,全部的寄存器組因此將根據(jù)所選擇的寄存器文件映射配置來進(jìn)行映射。
另選地,如有需要,將寄存器組中的一個子集的寄存器映射到其中一個寄存器文件映射配置將是有可能的,寄存器組中的其它寄存器被映射到不同的一個(例如另一個)寄存器文件映射配置(并且在優(yōu)選實施方式中,這是在做的)。換句話說,不同的寄存器文件映射配置能夠被用于寄存器文件的不同部分。
例如,第一子集的寄存器能夠被配置為使用其中一個寄存器文件映射配置(例如,針對64位數(shù)據(jù)值被優(yōu)化),其余寄存器根據(jù)(或者其它)寄存器文件映射配置(例如并且優(yōu)選地,用于與32位數(shù)據(jù)值一起使用的配置)進(jìn)行配置。這可以在著色器程序包含32位操作和64位操作的混合的情況下更加合適。
在這種情況下,如下面將進(jìn)一步討論的,有可能在一個或多個指令的基礎(chǔ)上來選擇要使用哪一個文件映射配置,而在全部寄存器都被配置為其中一個寄存器文件映射配置的情況下,可以優(yōu)選地在逐個線程或者線程組和/或逐個著色器程序的基礎(chǔ)上選擇要使用的寄存器文件映射配置。
在寄存器組中的特定寄存器根據(jù)其中一個寄存器文件映射來進(jìn)行配置、其它寄存器根據(jù)其它寄存器文件映射進(jìn)行配置的情況下,能夠根據(jù)需要(例如基于不同寄存器文件映射的期望使用等級)來選擇根據(jù)不同的寄存器文件映射來進(jìn)行配置的大量寄存器。相應(yīng)地,取決于使用不同的文件映射配置的期望的或者實際的使用或需要,將寄存器劃分成其相應(yīng)的寄存器文件映射配置子集在使用中能夠是固定的或者能夠例如發(fā)生改變。
能夠依照指令、線程等以任何合適且需要等級的粒度(分辨率)來做出要使用哪一個文件映射配置的確定和選擇。因此,針對其選擇要使用的寄存器文件映射配置的一組指令能夠包含單個指令或者多個指令。相應(yīng)地,針對其選擇要使用的寄存器文件映射配置的一組線程能夠包含單個線程或者多個線程。這可以例如取決于所選擇的寄存器文件映射配置是否要被應(yīng)用于要使用的全部寄存器,或者如上述所討論的,不同子集的寄存器是否可以使用不同的寄存器文件映射配置。
在一個優(yōu)選實施方式中,在逐個指令或者逐組多個指令的基礎(chǔ)上做出要使用的寄存器文件映射配置的確定和選擇。因此,要執(zhí)行的著色器程序中的相應(yīng)各個指令或者多組多個指令將確定并選擇針對這些指令要使用的寄存器文件映射配置(然后指令根據(jù)所選擇的寄存器文件映射配置來使用寄存器)。這適合以下的情況下,并且優(yōu)選地是在以下的情況下所做的,即不同的寄存器文件映射配置被用于不同子集的可用寄存器(然后其將有利于使用寄存器的不同指令被配置到不同的寄存器文件映射)。
因此在這種情況下,所執(zhí)行的著色器程序中的指令或者多組多個指令優(yōu)選地被指示為使用具有針對所討論的指令的形式的合適的寄存器文件映射配置的寄存器。因此,例如并且優(yōu)選地,使用32位數(shù)據(jù)值的指令被設(shè)置為使用根據(jù)“32位數(shù)據(jù)值”文件映射配置來進(jìn)行配置的寄存器,而使用64位數(shù)據(jù)值的指令被設(shè)置為使用具有被預(yù)期用于64位數(shù)據(jù)值的寄存器文件映射配置的寄存器。
在另一優(yōu)選實施方式中,針對要執(zhí)行所述的著色器程序的相應(yīng)各個線程或者多組多個線程(例如,線程組)來進(jìn)行寄存器文件映射配置的確定和選擇。(在這種情況下,使用寄存器文件映射配置的一組指令可以是并且優(yōu)選地是所討論的著色器程序中的全部指令)。這可以在全局應(yīng)用(即,應(yīng)用于全部的可用寄存器)寄存器文件映射配置的情況下是合適的。
在這種情況下,優(yōu)選地至少針對要執(zhí)行的給定線程組(warp)來確定并選擇(然后進(jìn)行固定)寄存器文件映射配置。寄存器文件映射配置還可以或者替代地針對比單獨的線程組更高等級的分辨率,諸如整體上針對著色器程序,針對要執(zhí)行著色器程序的相應(yīng)的繪制調(diào)用,針對所生成的各個渲染輸出等來確定和選擇(然后固定)(并且在其它優(yōu)選實施方式中這是在做的)。
因此,在優(yōu)選實施方式中,針對要執(zhí)行著色器程序的線程或者針對要執(zhí)行著色器程序的僅一個子集的線程來選擇寄存器文件映射配置(下降到將以一致步調(diào)執(zhí)行的單獨的線程組的等級)。
能夠以任何合適且需要的方式,例如取決于正在選擇并設(shè)置寄存器文件映射配置的等級,來指示要用于給定著色器程序、執(zhí)行線程或一組多個執(zhí)行線程或者指令或一組多個指令的所確定(選擇)的寄存器文件映射配置。
因此,例如,針對各個指令或者多組多個指令而選擇的寄存器文件映射配置,要被用于給定指令或者一組多個指令的配置能夠并且優(yōu)選地通過將指令配置(設(shè)置)為使用具有合適配置的寄存器(例如,具有需要的寄存器文件映射配置的寄存器子集中的寄存器)來進(jìn)行指示和設(shè)置。
在針對執(zhí)行線程或者多組多個執(zhí)行線程或者以更高的等級(例如整體上針對著色器程序)進(jìn)行寄存器文件映射配置的確定和選擇的情況下,要使用的配置優(yōu)選地使用合適的狀態(tài)信息來進(jìn)行指示和設(shè)置。因此,寄存器文件映射配置可以并且優(yōu)選地被指示并設(shè)置為針對執(zhí)行線程或者一組執(zhí)行線程的一部分狀態(tài)(例如,作為一部分線程組執(zhí)行狀態(tài)),或者被指示并設(shè)置為用于繪制調(diào)用、著色器程序和/或要生成的渲染輸出的一部分渲染狀態(tài),或者被指示并設(shè)置為整個圖形處理單元(流水線)狀態(tài)(配置)的一部分。
通常來說,寄存器文件映射配置應(yīng)當(dāng)被指示并設(shè)置為以正在確定并選擇寄存器文件映射配置的合適等級的狀態(tài)配置。
能夠在并且通過圖形處理單元是其一部分的整個數(shù)據(jù)處理系統(tǒng)的任何合適且需要的組件或元件來進(jìn)行針對給定的指令或者一組多個指令、線程或者一組線程、著色器程序等要使用哪個寄存器文件映射配置的確定。
在一個特定優(yōu)選實施方式中,該確定和選擇是基于所討論的一個或多個指令、一個或多個線程和/或著色器程序?qū)拇嫫鞯钠谕暮?或預(yù)期的使用來進(jìn)行的,例如并且優(yōu)選地是基于期望和/或能夠預(yù)測相關(guān)的一個或多個指令、一個或多個線程、著色器程序等將使用何種形式(大小)的數(shù)據(jù)值來進(jìn)行的。
在這種布置中,例如在預(yù)期著色器程序?qū)⒕哂袑⑹褂锰囟ㄐ问?精確度)的數(shù)據(jù)值的更多指令的情況下,因此優(yōu)選地選擇要使用的寄存器文件映射配置。相應(yīng)地,如果指令或者一組多個指令將使用特定形式(例如,精確度等級)的數(shù)據(jù)值,則再次指令或者一組多個指令優(yōu)選且優(yōu)先地被設(shè)置為使用具有針對所討論的數(shù)據(jù)值的相應(yīng)的或合適的寄存器文件映射配置的寄存器。
在本發(fā)明的這些布置的特定優(yōu)選實施方式中,用于可編程著色階段的編譯器進(jìn)行操作以確定并選擇要使用的寄存器映射配置。編譯器是整個數(shù)據(jù)處理系統(tǒng)的要進(jìn)行該寄存器映射配置的合適元件,由于其例如能夠?qū)χ鞒绦蚝?或著色器程序指令進(jìn)行分析以確定例如正在使用(或者將更主要地使用)哪種形式(例如精確度)的數(shù)據(jù)值,并且因此選擇并設(shè)置寄存器文件映射配置。
因此,在特定優(yōu)選實施方式中,編譯器對例如通過需要圖形處理的主處理器上的應(yīng)用來提供的著色器程序代碼進(jìn)行分析,并且從中確定使要使用哪個寄存器文件映射配置。
編譯器能夠進(jìn)行寄存器文件映射配置的確定和選擇,以整體上用于著色器程序(并且在一個優(yōu)選實施方式中這是在做的)。在這種布置中,編譯器將并且優(yōu)選地對著色器程序?qū)⑹褂玫闹噶畹臄?shù)據(jù)值精確度進(jìn)行評估,并且因此選擇并設(shè)置寄存器文件映射配置。因此,在優(yōu)選實施方式中,編譯器將考慮要執(zhí)行的著色器程序是具有大多數(shù)的32位指令還是64位指令,然后因此設(shè)置要用于著色器程序的寄存器文件映射配置。
在另一優(yōu)選實施方式中,編譯器還能夠或者代替地考慮各個指令或者多組多個指令,然后因此設(shè)置針對所討論的指令或者一組多個指令的寄存器文件映射配置。在這種情況下,編譯器優(yōu)選地考慮指令或者一組多個指令將使用的數(shù)據(jù)值的精確度,并且因此選擇并設(shè)置針對指令或者一組多個指令的寄存器配置。因此,在特定優(yōu)選實施方式中,編譯器將確定要執(zhí)行的著色器程序中的指令是32位指令還是64位指令(使用32位數(shù)據(jù)值還是64位數(shù)據(jù)值),并且然后例如并且優(yōu)選地通過設(shè)置指令使用具有合適寄存器文件映射配置的寄存器來相應(yīng)地設(shè)置寄存器文件映射配置用于這些指令。
編譯器可以例如,并且在優(yōu)選實施方式中確實可以在包括圖形處理流水線的整體數(shù)據(jù)處理系統(tǒng)的主處理器上運行(圖形處理流水線然后在諸如圖形處理器的與主處理器相關(guān)聯(lián)的另一處理器上(使得編譯器和編譯代碼在整體數(shù)據(jù)圖形處理系統(tǒng)內(nèi)部的單獨的處理器上運行))。然而,其它安排將是可能的,諸如編譯器在與編譯代碼相同的處理器上運行,或者編譯器(完全)在單獨的處理器上運行,諸如程序在單獨的系統(tǒng)上進(jìn)行預(yù)編譯并且以編譯的形式分布。
本發(fā)明還延伸至編譯器本身。
因此,根據(jù)本發(fā)明的另一方面,提供有一種編譯器,該編譯器對程序進(jìn)行編譯以生成用于圖形處理流水線的可編程執(zhí)行單元的指令,所述可編程執(zhí)行單元執(zhí)行指令以進(jìn)行圖形著色操作;
其中,所述編譯器被配置為針對要由圖形處理單元的執(zhí)行單元執(zhí)行的著色器程序中的一組至少一個指令,執(zhí)行以下步驟:
確定要將所述圖形處理單元能夠使用的至少兩個不同的寄存器文件映射配置中的哪一個寄存器文件映射配置用于所述一組指令;以及
當(dāng)執(zhí)行所述一組指令時,使得所述執(zhí)行單元根據(jù)所確定的寄存器文件映射配置來使用所述寄存器。
根據(jù)本發(fā)明的另一方面,提供有一種編譯方法,該編譯方法對程序進(jìn)行編譯以生成用于圖形處理流水線的可編程執(zhí)行單元的指令,所述可編程執(zhí)行單元執(zhí)行指令以進(jìn)行圖形著色操作;
所述方法包括以下步驟:
針對要由圖形處理單元的可編程執(zhí)行單元執(zhí)行的著色器程序中的一組至少一個指令,確定要將所述圖形處理單元能夠使用的至少兩個不同的寄存器文件映射配置中的哪一個寄存器文件映射配置用于所述一組指令;以及
當(dāng)執(zhí)行所述一組指令時,使得所述執(zhí)行單元根據(jù)所確定的寄存器文件映射配置來使用所述寄存器。
如本領(lǐng)域技術(shù)人員所理解的,本發(fā)明的這些方面能夠并且優(yōu)選地確實包括本文酌情所公開的本發(fā)明的優(yōu)選和可選特征的任何一個或多個或者全部。因此,例如,要使用哪個寄存器文件映射配置的確定和使得所述執(zhí)行單元使用該配置優(yōu)選是按照上述的其中一種方式來進(jìn)行的。
在另一優(yōu)選實施方式中,要使用的寄存器文件映射是基于對當(dāng)執(zhí)行著色器程序時正在由執(zhí)行線程進(jìn)行的實際寄存器使用的分析來確定并選擇的。除了或者代替確定并選擇要使用的寄存器文件映射配置以外,可以是基于著色器程序?qū)⑷绾问褂眉拇嫫鞯摹邦A(yù)測”。例如,在執(zhí)行著色器程序之前,能夠基于例如通過編譯器對著色器程序的評估來選擇寄存器文件映射配置,由此基于當(dāng)正在執(zhí)行著色器程序的同時對實際的寄存器使用的分析,寄存器文件映射配置然后能夠(并且優(yōu)選地)進(jìn)行變化和/或調(diào)整(如果需要)。
因此,在優(yōu)選實施方式中,正在執(zhí)行著色器程序的線程對寄存器的使用被監(jiān)測和/或跟蹤,然后被用來確定(并且如有需要的話,設(shè)置(改變))用于執(zhí)行著色器程序的后期線程或多組線程的寄存器文件映射配置。然后,這將使得寄存器文件映射配置在使用中當(dāng)正在執(zhí)行著色器程序時基于動態(tài)行為和寄存器使用的測量來動態(tài)地進(jìn)行調(diào)整。
在這種情況下,能夠使用任何適當(dāng)?shù)?、合適且需要的運行時間統(tǒng)計和性能計數(shù)器措施來控制當(dāng)正在執(zhí)行著色器程序時使用的寄存器文件映射配置。(寄存器文件映射配置優(yōu)選地針對正在進(jìn)行處理的給定線程組保持靜態(tài)(即,僅能夠在各個線程組之間進(jìn)行調(diào)整,而不是在針對給定線程組正在執(zhí)行著色器程序時進(jìn)行調(diào)整)。)
按照本發(fā)明的方式確定要使用的寄存器文件映射配置的操作能夠針對部分但不是全部的例如所選擇的著色器程序來進(jìn)行,但是優(yōu)選地針對要由圖形處理單元執(zhí)行的每一個著色器程序來進(jìn)行。
如本領(lǐng)域技術(shù)人員將要理解的,本發(fā)明的圖形處理單元將是整個圖形處理系統(tǒng)的一部分,該圖形處理系統(tǒng)將包括(例如,并且優(yōu)選地)主處理器,該主處理器例如執(zhí)行需要由圖形處理單元進(jìn)行圖形處理的應(yīng)用。主處理器將向圖形處理單元發(fā)送合適的命令和數(shù)據(jù),以控制該圖形處理單元執(zhí)行圖形處理操作并且產(chǎn)生在主處理器上執(zhí)行的應(yīng)用所需要的圖形處理(渲染)輸出。為了促進(jìn)上述過程,主處理器應(yīng)當(dāng)(并且優(yōu)選地確實)還執(zhí)行用于圖形處理單元的驅(qū)動器和用于對要由圖形處理單元的可編程執(zhí)行單元執(zhí)行的著色器程序進(jìn)行編譯的一個或多個編譯器。
圖形處理單元還可以包括存儲本文中所描述的數(shù)據(jù)和/或由圖形處理單元生成的輸出數(shù)據(jù),和/或存儲用于執(zhí)行本文中所描述的處理的軟件的一個或更多個存儲器和/或存儲設(shè)備,和/或與這些存儲器和/或存儲設(shè)備進(jìn)行通信。圖形處理單元還可以與主微處理器進(jìn)行通信,和/或與用于基于由圖形處理單元生成的數(shù)據(jù)來顯示圖像的顯示器進(jìn)行通信。
圖形處理單元的(多個)可編程執(zhí)行單元可以,并且優(yōu)選地確實,作為(圖形處理流水線可以包括)任何合適且需要的圖形處理著色器階段(著色器)起作用(操作),諸如頂點著色器、幾何著色器、片段著色器等。在優(yōu)選實施方式中,其能夠作為這些著色器中的每一個進(jìn)行操作。
圖形處理單元的該或者每個可編程執(zhí)行單元可以包括任何合適的可編程硬件元件,諸如可編程處理電路。每個可編程處理階段可以作為單獨的電路元件被提供到處理流水線的其它可編程階段,或者可編程處理階段可以共享其部分或全部的可編程處理電路(然后不同地進(jìn)行編程以用作所需的可編程處理階段)。
和任何可編程處理(著色器)階段一樣,圖形處理流水線還可以包含任何其它的合適且需要的處理階段,在這些處理階段中,圖形處理流水線可以包含諸如柵格化器、早期深度(或者早期深度和模板)測試儀、后期深度(或深度和模板)測試儀、混合器、塊元緩存、寫出單元等。
本發(fā)明能夠被用于圖形處理流水線可以被用來生成的全部形式的輸出,例如用于顯示的幀、渲染到紋理輸出等。來自圖形處理的輸出(例如,片段著色的數(shù)據(jù)值)優(yōu)選被導(dǎo)出到外部(例如,主)存儲器用于存儲和使用,諸如被導(dǎo)出到顯示器的幀緩存。
本發(fā)明適用于任何合適的形式或配置的圖形處理器。其特別適用于基于塊元的圖形處理器和圖形處理系統(tǒng)。因此在優(yōu)選實施方式中,圖形處理系統(tǒng)和圖形處理流水線分別是基于塊元的系統(tǒng)和流水線。
在特別優(yōu)選的實施方式中,本發(fā)明的各種功能在生成并輸出例如被寫出到用于顯示設(shè)備的幀緩存的經(jīng)渲染的片段數(shù)據(jù)的單個圖形處理平臺上執(zhí)行。
本發(fā)明能夠在任何合適的系統(tǒng),例如合適配置的基于微處理器的系統(tǒng)中實現(xiàn)。在優(yōu)選實施方式中,本發(fā)明在計算機(jī)和/或基于微處理器的系統(tǒng)中實現(xiàn)。
本發(fā)明的各種功能能夠以任何合適且期望的方式來執(zhí)行。例如,如所期望的,本發(fā)明的功能能夠在硬件或軟件中實現(xiàn)。因此,例如,除非另有說明,本發(fā)明的各種功能元件、階段和“手段”可以包括能夠被操作為執(zhí)行各種功能等的合適的處理器或多個處理器、控制器或多個控制器、功能單元、電路、處理邏輯器、微處理器裝置等,例如能夠被編程為以期望的方式運行的適當(dāng)專用的硬件元件和/或可編程硬件元件。
這里應(yīng)當(dāng)注意的是,如本領(lǐng)域技術(shù)人員將要理解的,本發(fā)明的各種功能等可以在給定的處理器上重復(fù)和/或執(zhí)行。同樣地,如果需要的話,各種處理階段可以共享處理電路等。
關(guān)于執(zhí)行上述的特定功能所需的任何硬件,數(shù)據(jù)處理系統(tǒng)和流水線另外能夠包括數(shù)據(jù)處理流水線所包括的通常的功能單元中的任何一個或更多個或者全部等。
本領(lǐng)域技術(shù)人員還將理解,視情況而定,本發(fā)明的全部所述的方面和實施方式都能夠并且優(yōu)選地確實包括本文所述的優(yōu)選的和可選的特征中的任何一個或多個或者全部。
根據(jù)本發(fā)明的方法可以至少部分地利用軟件,例如計算機(jī)程序,來實現(xiàn)。因此可見,當(dāng)從其他方面來看時,本發(fā)明提供:計算機(jī)軟件,當(dāng)安裝在數(shù)據(jù)處理裝置上時,該計算機(jī)軟件具體適用于執(zhí)行本文所述的方法的;計算機(jī)程序元件,其包括當(dāng)該程序元件在數(shù)據(jù)處理裝置上運行時用于執(zhí)行本文所述的方法的計算機(jī)軟件代碼部分;以及計算機(jī)程序,當(dāng)該程序在數(shù)據(jù)處理系統(tǒng)上運行時,該計算機(jī)程序包括適用于執(zhí)行本文所述的方法或多種方法的全部步驟的代碼裝置。數(shù)據(jù)處理器可以是微處理器系統(tǒng)、可編程FPGA(現(xiàn)場可編程門陣列)等。
本發(fā)明還延伸至包括如下軟件的計算機(jī)軟件載體,即,當(dāng)該軟件被用來操作圖形處理器時,包括數(shù)據(jù)處理裝置的渲染器或微處理器系統(tǒng)促進(jìn)與所述數(shù)據(jù)處理裝置和所述處理器、渲染器或系統(tǒng)的連接,以執(zhí)行本發(fā)明的方法的步驟。這種計算機(jī)軟件載體可以是諸如ROM芯片、CD ROM、RAM、閃速存儲器或磁盤的物理存儲介質(zhì),或者可以是諸如通過電線的電子信號、光學(xué)信號或例如對衛(wèi)星等的無線電信號這樣的信號。
將要進(jìn)一步理解的是,并非本發(fā)明的方法的全部步驟都需要由計算機(jī)軟件來執(zhí)行,因此從更寬泛的方面來看,本發(fā)明提供用于執(zhí)行本文所列出的方法的步驟中的至少一個的計算機(jī)軟件和安裝在計算機(jī)軟件載體上的這種軟件。
因此本發(fā)明可以被合適地體現(xiàn)為計算機(jī)程序產(chǎn)品,與計算機(jī)系統(tǒng)一起使用。這種實施可以包括要么是固定在有形非瞬時性介質(zhì)上的一系列計算機(jī)可讀指令,該有形非瞬時性介質(zhì)例如有計算機(jī)可讀介質(zhì),例如磁盤、CD-ROM、ROM、RAM、閃速存儲器或硬盤。這種實施還可以包括通過有形介質(zhì)或者無形地利用無線技術(shù)經(jīng)由調(diào)制解調(diào)器或其它接口裝置可以向計算機(jī)系統(tǒng)傳輸?shù)囊幌到y(tǒng)計算機(jī)可讀指令,該有形介質(zhì)包括但不限制于光學(xué)或模擬通信線路,該無線技術(shù)包括但不限制于微波、紅外或其它傳輸技術(shù)。一系列的計算機(jī)可讀指令體現(xiàn)本文之前所述的全部或部分的功能。
本領(lǐng)域技術(shù)人員將理解,這種計算機(jī)可讀指令能夠以許多編程語言的形式來編寫,與很多計算機(jī)架構(gòu)或操作系統(tǒng)一起使用。進(jìn)一步地,這種指令可以利用當(dāng)前或未來的包括但不限制于半導(dǎo)體、磁性的或光學(xué)的任何存儲技術(shù)來存儲,或者可以利用當(dāng)前或未來包括但不限制于光學(xué)、紅外或微波的任何通信技術(shù)來進(jìn)行發(fā)送??梢韵氲?,這種計算機(jī)程序產(chǎn)品可以利用另外的印刷或電子文檔,例如利用計算機(jī)系統(tǒng)在例如系統(tǒng)ROM或固定磁盤上預(yù)加載的壓縮打包軟件,作為可去除介質(zhì)進(jìn)行分發(fā),或者通過網(wǎng)絡(luò)例如因特網(wǎng)或萬維網(wǎng)從服務(wù)器或電子公告板進(jìn)行分發(fā)。
附圖說明
將通過僅示例的方式并參照附圖描述本發(fā)明的多個優(yōu)選實施方式,在附圖中:
圖1示出示例性計算機(jī)圖形處理系統(tǒng);
圖2示意性地示出能夠按照本發(fā)明的方式進(jìn)行操作的圖形處理流水線;
圖3示意性地示出圖形處理單元;
圖4示意性地示出本發(fā)明的實施方式的第一寄存器文件映射配置;
圖5示意性地示出本發(fā)明的實施方式的第二寄存器文件映射配置;
圖6示意性地示出在本發(fā)明的一個實施方式中編譯器的操作;
圖7示意性地示出本發(fā)明的實施方式的第三寄存器文件映射配置;以及
圖8示意性地示出在本發(fā)明的另一實施方式中編譯器的操作。
具體實施方式
相同的參考標(biāo)記在附圖中合適的地方被用于相同的部件。
下面將在用于顯示的計算機(jī)圖形的處理的上下文中來描述本發(fā)明的多個優(yōu)選實施方式。
圖1示出典型的計算機(jī)圖形處理系統(tǒng)。
應(yīng)用2(諸如在主處理器1上執(zhí)行的游戲)將要求圖形處理操作由關(guān)聯(lián)圖形處理單元(圖形處理流水線)3來執(zhí)行。為此,該應(yīng)用將生成被用于圖形處理流水線3的正在主處理器1上運行的驅(qū)動器4解讀的API(應(yīng)用編程接口)調(diào)用,以對圖形處理器3生成合適的命令以生成應(yīng)用2所需的圖形輸出。為了促進(jìn)這一過程,將響應(yīng)于來自在主系統(tǒng)1上運行的應(yīng)用2的命令向圖形處理器3提供一組“命令”,用于圖形輸出(例如,以生成要進(jìn)行顯示的幀)。
圖2更加詳細(xì)地示出該實施方式的圖形處理流水線3。
圖2中所示的圖形處理流水線3是基于塊元的渲染器,并且將因此產(chǎn)生渲染輸出數(shù)據(jù)陣列的塊元,諸如要生成的輸出幀。
(在基于塊元的渲染中,渲染輸出(例如要顯示的幀)被劃分成多個更小的子區(qū)域,通常被稱為“塊元”,而不是整個渲染輸出(例如,如在即時模式渲染中一氣呵成地有效地進(jìn)行處理的幀)。每個塊元(子區(qū)域)被分別(通常一個接著一個地)渲染,然后經(jīng)渲染的塊元(子區(qū)域)被重新組合以提供完整的渲染輸出,例如用于顯示的幀。在這種設(shè)置中,渲染輸出通常被劃分成規(guī)則大小和形狀的子區(qū)域(塊元)(其例如通常是正方形或長方形),但是這不是最重要的。)
如本領(lǐng)域中已知的,渲染輸出數(shù)據(jù)陣列通??梢允怯糜谠谥T如屏幕或打印機(jī)的顯示設(shè)備上顯示的輸出幀,但是例如還可以包括用于在后面的渲染中使用的中間數(shù)據(jù)(還被已知為“渲染到紋理(render to texture)”輸出)等。
(當(dāng)要顯示計算機(jī)圖形圖像時,其通常首先被限定為一系列基元(多邊形),然后所述基元被劃分(被柵格化)成圖形片段,接下來用于圖形渲染。在正常的圖形渲染操作中,渲染器將修改與每個片段相關(guān)聯(lián)的(例如)顏色(紅色、綠色和藍(lán)色,RGB)和透明度(阿爾法,α)數(shù)據(jù),使得能夠正確地顯示片段。一旦片段已經(jīng)完全遍歷了渲染器,則其關(guān)聯(lián)數(shù)據(jù)值就被存儲在存儲器中,準(zhǔn)備用于輸出例如用于顯示。)
圖2示出與本實施方式的操作相關(guān)的圖形處理流水線3的主要元件和流水線階段。如本領(lǐng)域技術(shù)人員將要理解的,可以存在未在圖2中例示的圖形處理流水線的其它元件。這里還應(yīng)當(dāng)注意,圖2僅僅是示意性的,并且例如實際上所述的功能單元和流水線階段可以共享重要的硬件電路,即使在圖2中它們被示意性地示出為單獨的階段。還將理解,如圖2中所示的圖形處理流水線的階段、元件和單元等中的每個階段、元件和單元可以根據(jù)需要來實現(xiàn),并且因此將包括例如合適的電路和/或處理邏輯等,用于執(zhí)行必要的操作和功能。
如圖2中所示,圖形處理流水線3包括多個階段,該多個階段包括頂點著色器20、外殼著色器21、曲面細(xì)分器22、域著色器23、幾何著色器24、柵格化階段25、早期Z(深度)和模板測試階段26、以片段著色階段的形式的渲染器27、后期Z(深度)和模板測試階段28、混合階段29、塊元緩存30以及降采樣和寫出(多重采樣分辨)階段31。
頂點著色器20采用針對要生成的輸出而限定的與頂點相關(guān)聯(lián)的輸入數(shù)據(jù)值等,并且對這些數(shù)據(jù)值進(jìn)行處理以生成一組相應(yīng)的“頂點著色的”輸出數(shù)據(jù)值,以供圖形處理流水線3的后續(xù)階段使用。頂點著色例如對輸入數(shù)據(jù)進(jìn)行修改,以將要進(jìn)行渲染的圖像的照明效果考慮在內(nèi)。
外殼著色器21執(zhí)行對多組補丁控制點的操作并且生成已知為補丁常數(shù)的附加數(shù)據(jù),曲面細(xì)分階段22將幾何圖形細(xì)分以創(chuàng)建外殼的更高階的表示,域著色器23執(zhí)行對通過曲面細(xì)分階段輸出的頂點的操作(與頂點著色器相似),并且?guī)缀沃?4處理諸如三角形、點或線的全部基元。響應(yīng)于向圖形處理流水線3提供的命令和頂點數(shù)據(jù),這些階段和頂點著色器21一起有效地執(zhí)行全部的必要片段前端操作,諸如轉(zhuǎn)換操作和照明操作,并且執(zhí)行基元設(shè)置來設(shè)置要進(jìn)行渲染的基元。
圖形處理流水線3的柵格化階段25進(jìn)行操作以將組成渲染輸出(例如要進(jìn)行顯示的圖像)的基元柵格化成各個圖形片段以用于處理。為此,柵格化器25接收圖形基元以用于渲染,將基元柵格化成采樣點并且生成具有合適位置(代表合適的采樣位置)的圖形片段,用于對基元進(jìn)行渲染。
由柵格化器生成的片段然后進(jìn)一步被發(fā)送到流水線的其余部分用于處理。
早期Z/模板測試階段26對其從柵格化器25接收的片段執(zhí)行Z(深度)測試,以看看在這個階段是否能夠丟棄(剔除)任何片段。為此,早期Z/模板測試階段26將從柵格化器25發(fā)出的片段的(與片段相關(guān)聯(lián)的)深度值與已經(jīng)進(jìn)行渲染的片段的深度值進(jìn)行比較(這些深度值被存儲在作為塊元緩存30的一部分的深度(Z)緩存中),以確定新片段是否將被已經(jīng)進(jìn)行渲染的片段排除在外。同時,執(zhí)行早期模板測試。
經(jīng)過片段早期Z和模板測試階段26的片段然后被發(fā)送到片段著色階段27。片段著色階段27對經(jīng)過早期Z和模板測試的片段執(zhí)行合適的片段處理操作,以便處理片段以生成合適的經(jīng)渲染的片段數(shù)據(jù)。
該片段處理可以包括任何合適的且需要的片段著色處理,諸如對片段執(zhí)行片段著色器程序、向片段施加紋理、向片段施加霧化操作或其它操作等,以生成合適的片段數(shù)據(jù)。在該實施方式中,片段著色階段27是著色器流水線的形式(可編程片段著色器)。
然后還存在“后期”片段Z和模板測試階段28,其尤其是對經(jīng)著色的片段執(zhí)行流水線末端深度測試,以確定在最終的圖像中實際上是否能看到經(jīng)渲染的片段。該深度測試使用針對存儲在塊元緩存30中的Z緩存中的片段的位置的Z緩存值,以如本領(lǐng)域中已知的,通過將從片段著色階段27發(fā)出的片段的(與片段相關(guān)聯(lián)的)深度值與已經(jīng)進(jìn)行渲染的片段的深度值(如存儲在深度緩存中的)進(jìn)行比較,確定針對新片段的片段數(shù)據(jù)是否應(yīng)當(dāng)替換已經(jīng)進(jìn)行渲染的片段的片段數(shù)據(jù)。該后期片段深度和模板測試階段28還對片段執(zhí)行任何必要的“后期”阿爾法和/或模板測試。
如有需要,經(jīng)過后期片段測試階段28的片段然后利用已經(jīng)被存儲在混合器29中的塊元緩存30中的片段來進(jìn)行任何必要的混合操作。對片段來說必要的任何其它剩余操作,諸如抖動等(未示出),也在這個階段執(zhí)行。
最后,(經(jīng)混合的)輸出片段數(shù)據(jù)(值)被寫入到塊元緩存30,這些輸出片段數(shù)據(jù)(值)能夠從該塊元緩存30例如被輸出到幀緩存用于顯示。針對輸出片段的深度值也被恰當(dāng)?shù)貙懭雺K元緩存30內(nèi)部的Z緩存。(塊元緩存存儲顏色緩存和深度緩存,所述顏色緩存和深度緩存針對這些緩存所代表的每個采樣點(實質(zhì)上針對正在進(jìn)行處理的塊元的每個采樣點)分別存儲合適的顏色等或者Z值。這些緩存存儲代表整體渲染輸出(例如,要顯示的圖像)的一部分(塊元)的片段數(shù)據(jù)的陣列,緩存中的相應(yīng)組的樣本值對應(yīng)于整體渲染輸出的相應(yīng)的像素(例如,每個2x2組的樣本值可以對應(yīng)于輸出像素,其中4x多重采樣正在被使用)。
提供塊元緩存作為被定位在圖形處理流水線(芯片)上(對圖形處理流水線來說是本地的)的RAM的一部分。
來自塊元緩存30的數(shù)據(jù)被輸入到降采樣(多重采樣分辨)寫出單元31,并且從其輸出(寫回)到外部存儲器輸出緩存,諸如顯示設(shè)備的幀緩存(未示出)。(顯示設(shè)備能夠包括例如包括像素的陣列的顯示器,諸如計算機(jī)監(jiān)控器或打印機(jī)。)
降采樣和寫出單元31將存儲在塊元緩存30中的片段數(shù)據(jù)降采樣成針對輸出緩存(設(shè)備)的合適的分辨率(即,使得生成與輸出設(shè)備的像素相對應(yīng)的像素數(shù)據(jù)的陣列),以生成輸出值(像素)用于輸出到輸出緩存。
一旦渲染輸出的塊元已經(jīng)進(jìn)行處理并且其數(shù)據(jù)被導(dǎo)出到主存儲器(例如,被導(dǎo)出到主存儲器中的幀緩存(未示出))用于存儲,則下一個塊元接著進(jìn)行處理,諸如此類,直至足夠的塊元已經(jīng)進(jìn)行處理以生成全部渲染輸出(例如,要顯示的幀(圖像))。然后重復(fù)該處理用于下一渲染輸出(例如幀)等。
每個著色階段20、21、23、24、27具有與其相關(guān)聯(lián)的能夠從中讀取針對相應(yīng)著色階段20、21、23、24、27的數(shù)據(jù)的一組寄存器32。
針對圖形處理流水線3的其它布置也將當(dāng)然是可能的。
上文描述了圖1中所示的圖形處理系統(tǒng)的操作的某些特征。下面將描述根據(jù)本發(fā)明的實施方式的圖1中所示的圖形處理系統(tǒng)的操作的其它特征。
如從圖2中可以看出的,圖形處理流水線3包括多個可編程處理或“著色器”階段,即頂點著色器20、外殼著色器21、域著色器23、幾何著色器24和片段著色器27。這些可編程著色器階段執(zhí)行相應(yīng)的著色器程序,所述著色器程序具有一個或更多個輸入變量、生成多組輸出變量并且通過應(yīng)用來提供。
為此,應(yīng)用2提供使用諸如GLSL、HLSL、OpenCL等的高級著色器可編程語言來實現(xiàn)的著色器程序。然后,這些著色器程序通過著色器語言編譯器被轉(zhuǎn)化成二進(jìn)制代碼,用于目標(biāo)圖形處理流水線3。如本領(lǐng)域中已知的,這可以包括創(chuàng)建編譯器內(nèi)部的程序的一個或更多個中間表示。(編譯器例如可以是驅(qū)動器4的一部分,存在特殊API調(diào)用以使得該編譯器運行。因此,編譯器執(zhí)行能夠被看作是響應(yīng)于由應(yīng)用生成的API調(diào)用通過驅(qū)動器來完成的繪制調(diào)用準(zhǔn)備的一部分。)
圖2示意性地示出了圖形處理單元3的操作階段。
圖3示出了圖形處理單元3的被用來執(zhí)行(并因此用作)圖2中所示的圖形處理流水線的各種處理操作和階段的相應(yīng)的功能單元。(在圖形處理單元3中存在其它功能單元。僅為了簡單起見,圖3示出與按照本發(fā)明的方式的操作相關(guān)的這些功能單元。)
如圖3中所示,圖形處理單元3包括柵格化器40、線程產(chǎn)生器41、可編程執(zhí)行單元42、變化內(nèi)插器43、紋理映射器44、混合器45以及一組寄存器46。
線程產(chǎn)生器41可以進(jìn)行操作以產(chǎn)生用于由可編程執(zhí)行單元42執(zhí)行的執(zhí)行線程,例如用于其從柵格化器40接收的片段。
可編程執(zhí)行單元42進(jìn)行操作以執(zhí)行著色器程序以進(jìn)行圖形處理流水線的著色器操作,諸如外殼著色器、頂點著色器和片段著色器。為此,可編程執(zhí)行單元42從線程產(chǎn)生器41接收執(zhí)行線程并且執(zhí)行針對這些執(zhí)行線程的相關(guān)著色器程序。
作為該處理的一部分,并且如圖3中所示,可編程執(zhí)行單元42能夠調(diào)用變化內(nèi)插器43、紋理映射器44和混合器45來進(jìn)行特定圖形處理操作。為了,可編程執(zhí)行單元將例如響應(yīng)于著色器程序中的其正在執(zhí)行的特定指令,將合適的消息發(fā)送到相關(guān)加速器(并且從其接收合適的響應(yīng))。
變化內(nèi)插器43進(jìn)行操作以在圖形基元上內(nèi)插值,并且作為該操作的一部分,經(jīng)常產(chǎn)生紋理坐標(biāo)以用于對圖形紋理進(jìn)行采樣。
紋理映射器44進(jìn)行操作以利用例如由變化內(nèi)插器43生成的紋理坐標(biāo)來對圖形紋理進(jìn)行采樣,并且從其產(chǎn)生經(jīng)過濾的紋理樣本結(jié)果(然后紋理映射器44能夠?qū)⒃摷y理樣本結(jié)果返回至可編程執(zhí)行單元42,以供例如當(dāng)對采樣點進(jìn)行著色時使用)。
混合器45進(jìn)行操作以將例如由可編程執(zhí)行單元42生成的片段著色器結(jié)果與之前生成的片段著色器結(jié)果(諸如已經(jīng)被存儲在塊元緩存和/或幀緩存中的結(jié)果)進(jìn)行混合。
如上所述,可編程執(zhí)行單元42將處理并執(zhí)行要針對其從線程產(chǎn)生器41接收的執(zhí)行線程來執(zhí)行的給定著色器程序,以進(jìn)行圖形處理操作。作為該操作的一部分,并且如圖3中所示,執(zhí)行線程將從相應(yīng)寄存器46讀取數(shù)據(jù)并且向相應(yīng)寄存器46寫入數(shù)據(jù)。
下面將參照圖4至圖7描述用于將執(zhí)行線程映射到寄存器46的優(yōu)選實施方式。圖4和圖5示出在本發(fā)明的實施方式中使用的兩個寄存器文件映射配置。圖6和圖7示出設(shè)置當(dāng)正在執(zhí)行著色器程序時將要使用的寄存器文件映射配置的編譯器的操作的實施方式。
在這些實施方式中,假設(shè)可編程執(zhí)行單元42執(zhí)行四個線程一組的多組線程中的執(zhí)行線程。其他結(jié)構(gòu)當(dāng)然將是可能的。
如圖4的(a)中所示,在該實施方式中,寄存器46被劃分成兩個子組(sub-bank),一個組用于偶數(shù)寄存器50,另一個組用于奇數(shù)寄存器51。在當(dāng)前實施方式中,每個寄存器都能夠存儲32位數(shù)據(jù)值。
圖4示出用于并且被制作得更加優(yōu)化用于與32位數(shù)據(jù)值一起使用的第一預(yù)定義的寄存器文件映射配置。
在該配置中,如圖4中所示,每個寄存器組50、51的寄存器被劃分成四個子集,每一個子集用于將作為可編程執(zhí)行單元42將進(jìn)行處理的四線程線程組的一部分的每一個線程。(在圖4和圖5中,注釋tjri表示線程j的寄存器i(例如,t0r1表示線程0的寄存器1)。
從圖4的(a)中可以看出,利用這個寄存器文件映射配置,線程組的四個線程能夠通過訪問寄存器組中的僅一個寄存器組來并行地進(jìn)行到寄存器的32位訪問。
圖4的(b)和(c)示出了該訪問,并且例示了用于訪問線程t0、t1、t2和t3的32位寄存器r1、r0所需要的數(shù)據(jù)。
圖4的(d)為了比較目的示出了使用該寄存器文件映射配置將如何訪問64位數(shù)據(jù)值。在這種情況下,使用奇數(shù)和偶數(shù)寄存器(例如,r0和r1)來存儲64位數(shù)據(jù)值以形成64位寄存器。然后這具有如下影響:為了使用圖4的寄存器文件映射配置來訪問針對線程的64位數(shù)據(jù)值,將需要并行地訪問寄存器組50、51兩者(如圖4的(d)中所示)。
圖5示出該實施方式中使用的第二寄存器文件映射配置,與圖4的寄存器文件映射配置相反,該第二寄存器文件映射配置用于(并且被制作得更加優(yōu)化用于)訪問64位數(shù)據(jù)值。
圖5的(a)為了比較目的再次示出64位數(shù)據(jù)值將被存儲在全部兩個寄存器組中的圖4中所示的布置。圖5的(b)則示出被優(yōu)化用于與64位數(shù)據(jù)值一起使用(用于64位模式(cfg64=1))的第二寄存器文件映射配置。
在該配置中,如圖5的(b)中所示,一個寄存器組50的字[127:64]實際上與另一寄存器組51的字[63:0]相交叉。這意味著需要針對正在執(zhí)行的給定的64位線程來訪問寄存器組中的僅一個寄存器組,而不是需要訪問兩個組(如將是利用圖4中所示的寄存器文件映射配置的情況)。這使得對寄存器組的訪問更加節(jié)能高效。
在圖5的(c)和(d)中對此進(jìn)行了例示。圖5的(c)示出針對線程t0、t1的對64位寄存器(r1、r0)的訪問,圖5的(d)示出針對線程t2、t3的相應(yīng)訪問。如可以看出的,在每種情況下,針對正在執(zhí)行的兩個64位線程來訪問僅一個組。
圖5的(e)為了比較目的示出了32位線程將如何使用圖5的寄存器文件映射配置來訪問寄存器。在這種情況下,如圖5的(e)中所示,對于當(dāng)使用32位指令進(jìn)行操作時要訪問全部數(shù)據(jù)值的給定線程組,將需要訪問兩個寄存器組。
因此,圖4示出更加適合用于32位數(shù)據(jù)訪問的第一寄存器文件映射配置,而圖5示出更加適合用于64位數(shù)據(jù)值訪問的寄存器文件映射配置。本發(fā)明的實施方式進(jìn)行操作以在任何給定時間選擇要使用這兩個寄存器文件映射配置中的哪一種,以便提高當(dāng)正在執(zhí)行著色器程序時寄存器使用的能效。
圖6示出用于選擇要使用哪個寄存器文件映射配置的第一實施方式。在該實施方式中,作為整體,針對著色器程序來選擇要使用的寄存器文件映射。
如圖6中所示,編譯器將對著色器程序進(jìn)行編譯(步驟60),并且作為該處理的一部分將考慮著色器程序?qū)⑷绾问褂眉拇嫫?步驟61)。在該實施方式中,為實現(xiàn)上述步驟,編譯器簡單地確定在著色器程序中是否存在更多的32位還是64位指令。其他結(jié)構(gòu)當(dāng)然將是可能的。
然后,編譯器基于其對于著色器程序?qū)拇嫫鞯氖褂玫脑u估來選擇寄存器文件映射配置,以用于著色器程序(步驟62)。在該實施方式中,如果編譯器確定著色器程序具有更多的32位指令,則其選擇32位寄存器文件映射配置(即,圖4中所示的配置)以用于著色器程序,反之亦然。
然后,編譯器設(shè)置合適的狀態(tài)信息,諸如針對著色器程序的GPU狀態(tài)和/或渲染狀態(tài),以指示當(dāng)執(zhí)行著色器程序時應(yīng)當(dāng)使用哪個寄存器文件映射配置。最后,經(jīng)編譯的程序和狀態(tài)信息被輸出到圖形處理單元(步驟64)。
響應(yīng)于此,當(dāng)執(zhí)行著色器程序時,狀態(tài)信息將使得由可編程執(zhí)行單元執(zhí)行的線程根據(jù)所選擇的寄存器文件映射配置來使用寄存器。
圖4和圖5整體上示出其中針對寄存器46來設(shè)置寄存器文件映射配置的布置。然而,將有可能使用圖4和圖5中所示的配置中的不同配置用于寄存器文件的不同部分。例如,第一子集的寄存器(例如寄存器r0-r3將使用32位模式配置,其余寄存器使用64位模式配置(反之亦然)。在著色器程序包含32位操作和64位操作的混合的情況下這將是有益的,因為這然后可以允許使用“64位”寄存器子集以保持fp64臨時變量,其余寄存器則優(yōu)先被用來保持fp16/32臨時變量、存儲器地址和其它非fp64數(shù)據(jù)。
圖7示出這種“劃分的”寄存器組布置80的示例。在該布置中,第一子集的寄存器81使用32位模式配置,第二子集的寄存器82使用64位模式配置)。第一組寄存器81包含寄存器r0至r3,第二組寄存器82包含寄存器r4至r7。對于64位模式配置,布置與32位配置不同的子寄存器83、84被著色成灰色。
圖8示出其中寄存器組中的不同子集的寄存器使用圖4和圖5中的不同配置的編譯器操作的實施方式。
如圖8中所示,再一次編譯器將對著色器程序進(jìn)行編譯(步驟70),但是作為該處理的一部分將考慮將通過著色器程序中的每個指令進(jìn)行的寄存器使用(步驟71)。為此,編譯器將考慮討論中的指令是否執(zhí)行64位操作(使用64位數(shù)據(jù)值)或者不執(zhí)行64位操作(例如,執(zhí)行16位或32位操作)。
然后,編譯器將設(shè)置指令以使用具有如下配置的寄存器,即,該配置適于該指令(對該指令使用的數(shù)據(jù)值)執(zhí)行的操作(步驟72)。因此,例如,在確定指令要執(zhí)行64位操作的情況下,編譯器設(shè)置該指令要使用的針對該指令的寄存器將(優(yōu)先地)是根據(jù)64位寄存器文件映射配置進(jìn)行配置的寄存器。
然后,針對每個指令重復(fù)該過程(步驟73),然后輸出最終經(jīng)編譯的程序(步驟74)。
然后,當(dāng)可編程執(zhí)行單元42執(zhí)行著色器程序時,隨著每個指令被執(zhí)行,該指令將使用已經(jīng)被設(shè)置為由編譯器使用的寄存器。
申請人已經(jīng)意識到,可以是如下的情況:在這些布置中,取決于著色器程序,可能存在不足夠的寄存器以將優(yōu)選寄存器分配給著色器程序中的全部指令。在這種情況下,一旦已經(jīng)使用優(yōu)選配置的全部寄存器,將優(yōu)先使用這些寄存器的任何進(jìn)一步指令都代替地被配置使用其它寄存器。這應(yīng)當(dāng)還具有如下優(yōu)點:對于至少部分的指令來說,將執(zhí)行更加高效的寄存器訪問。
如有需要,將可能對上述實施方式進(jìn)行各種替代修改和/或添加。例如,要使用的寄存器配置能夠針對各個組的指令和/或要執(zhí)行的各個組的線程組進(jìn)行設(shè)置,而不是整體上針對著色器程序進(jìn)行設(shè)置。
另外,連同或者代替編譯器確定要使用哪個寄存器文件映射配置,還將可能跟蹤當(dāng)正在執(zhí)行著色器程序時寄存器的使用,然后使用該信息來設(shè)置寄存器文件映射配置以用于正在執(zhí)行著色器程序的后期的線程或線程組。在這方面能夠使用任何合適的運行時間統(tǒng)計。
從上文中可以看出,本發(fā)明在其優(yōu)選實施方式中至少有利于當(dāng)執(zhí)行著色器程序時對寄存器的更加節(jié)能高效的訪問。在本發(fā)明的優(yōu)選實施方式中,至少通過基于著色器程序、線程組和/或指令將進(jìn)行的對寄存器使用的評估而選擇合適的寄存器文件映射配置以用于著色器程序、線程組和/或指令來實現(xiàn)上述目的。