專利名稱:用于將執(zhí)行線程分組的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明的實施例大體上涉及多線程處理,且更確切地說,涉及一種用于將執(zhí)行線程分組以實現(xiàn)改進(jìn)的硬件利用率的系統(tǒng)和方法。
背景技術(shù):
一般來說,計算機指令需要執(zhí)行多個時鐘周期。為此原因,多線程處理器以連續(xù)的方式執(zhí)行若干并行指令線程,以使得可盡可能地將用于執(zhí)行指令的硬件保持繁忙。舉例來說,當(dāng)執(zhí)行具有以下所示的特征的指令線程時,多線程處理器可連續(xù)調(diào)度四個并行線程。通過以此方式調(diào)度線程,多線程處理器能夠在23個時鐘周期之后完成4個線程的執(zhí)行,其中在時鐘周期1-20期間執(zhí)行第一線程,在時鐘周期2-21期間執(zhí)行第二線程,在時鐘周期3-22期間執(zhí)行第三線程,且在時鐘周期4-23期間執(zhí)行第四線程。比較來說,如果處理器直到處理中的線程完成執(zhí)行時才調(diào)度一線程,那么會花費80個時鐘周期來完成4個線程的執(zhí)行,其中在時鐘周期1-20期間執(zhí)行第一線程,在時鐘周期21-40期間執(zhí)行第二線程,在時鐘周期41-60期間執(zhí)行第三線程,且在時鐘周期61-80期間執(zhí)行第四線程。
指令等待時間需要的資源1 4個時鐘周期3個寄存器2 4個時鐘周期4個寄存器3 4個時鐘周期3個寄存器4 4個時鐘周期5個寄存器5 4個時鐘周期3個寄存器然而,上述并行處理需要更大量的硬件資源,例如更大數(shù)目的寄存器。在上文給出的實例中,并行處理所需的寄存器數(shù)目為20,而相比之下,非并行處理需要5個。
在許多情況下,執(zhí)行的等待時間并不統(tǒng)一。舉例來說,在圖形處理的情況下,指令線程通常包括等待時間通常小于10個時鐘周期的數(shù)學(xué)操作和等待時間超過100個時鐘周期的存儲器存取操作。在此類情況下,對并行線程的執(zhí)行進(jìn)行連續(xù)調(diào)度并不能非常好地起作用。如果連續(xù)執(zhí)行的并行線程的數(shù)目過小,那么大部分執(zhí)行硬件會由于高等待時間的存儲器存取操作而變得利用不足。另一方面,如果連續(xù)執(zhí)行的并行線程的數(shù)目大到足以覆蓋存儲器存儲操作的高等待時間,那么支持現(xiàn)行線程所需的寄存器數(shù)目會顯著增加。
發(fā)明內(nèi)容
本發(fā)明提供一種用于將執(zhí)行線程分組以便更有效率地利用執(zhí)行硬件的方法。本發(fā)明還提供一種計算機系統(tǒng),其包括一經(jīng)配置以將執(zhí)行線程分組以便更有效率地利用執(zhí)行硬件的存儲器單元。
根據(jù)本發(fā)明的一實施例,將多個線程劃分成具有兩個或兩個以上線程的伙伴組,以使得每個線程被分配一個或一個以上伙伴線程。每個伙伴組中只有一個線程活動地執(zhí)行指令。當(dāng)活動線程遇到交換事件(例如交換指令)時,活動線程暫停執(zhí)行,且其伙伴線程中的一者開始執(zhí)行。
交換指令通常出現(xiàn)在高等待時間指令之后,且導(dǎo)致在活動執(zhí)行列表中當(dāng)前活動線程被交換為其伙伴線程中的一者。伙伴線程的執(zhí)行會一直繼續(xù),直到伙伴線程遇到交換指令為止,所述指令使得在活動執(zhí)行列表中伙伴線程被交換為其伙伴線程中的一者。如果一組中只有兩個伙伴,那么在活動執(zhí)行列表中伙伴線程就被交換為原來的線程,且重新開始原來的線程的執(zhí)行。如果一組中有兩個以上伙伴,那么根據(jù)某種預(yù)定次序伙伴線程被交換為所述組中的下一伙伴。
為了節(jié)約寄存器文件使用,每個伙伴線程將其寄存器分配劃分成兩組私用的和共用的。只有屬于私用組的寄存器才會在交換間保留其值。共用的寄存器始終歸伙伴組的當(dāng)前活動線程所有。
使用在加載程序以供執(zhí)行時由若干線程填充的表格來組織伙伴組。所述表格可保存在芯片上寄存器中。所述表格具有多個行,且是根據(jù)每個伙伴組中的線程數(shù)目來配置的。舉例來說,如果每個伙伴組中有兩個線程,那么所述表格配置有兩個列。如果每個伙伴組中有三個線程,那么所述表格配置有三個列。
根據(jù)本發(fā)明的實施例的計算機系統(tǒng)將上述表格存儲在存儲器中,且包含一配置有第一和第二執(zhí)行管線的處理單元。所述第一執(zhí)行管線用來執(zhí)行數(shù)學(xué)操作,且所述第二執(zhí)行管線用來執(zhí)行存儲器操作。
為了能詳細(xì)地了解本發(fā)明的上述特性,可參考實施例對以上簡要概括的本發(fā)明進(jìn)行更為具體的描述,附圖中說明了其中某些實施例。然而,應(yīng)注意,附圖僅說明本發(fā)明的典型實施例,且因此不應(yīng)認(rèn)為其限制本發(fā)明的范圍,因為本發(fā)明可涵蓋其它同樣有效的實施例。
圖1是其中可實施本發(fā)明的構(gòu)建一具有復(fù)數(shù)個處理單元的GPU的計算機系統(tǒng)的簡化方框圖。
圖2以更加詳細(xì)的形式說明圖1中的一處理單元。
圖3是圖2所示的指令分派單元的功能方框圖。
圖4是展示根據(jù)本發(fā)明第一實施例的線程庫和指令緩沖器的概念圖。
圖5是展示根據(jù)本發(fā)明第二實施例的線程庫和指令緩沖器的概念圖。
圖6是說明伙伴線程之間的活動執(zhí)行線程交換的時序圖。
圖7是說明處理單元在執(zhí)行伙伴線程時執(zhí)行的處理步驟的流程圖。
具體實施例方式
圖1是其中可實施本發(fā)明的構(gòu)建具有復(fù)數(shù)個處理單元的圖形處理單元(GPU)120的計算機系統(tǒng)100的簡化方框圖。GPU120包括一接口單元122,所述接口單元122耦合到復(fù)數(shù)個處理單元124-1、124-2、...、124-N,其中N是大于1的整數(shù)。所述處理單元124能通過存儲器控制器126存取本地圖形存儲器130。GPU120和本地圖形存儲器130代表圖形子系統(tǒng),計算機系統(tǒng)100的中央處理單元(CPU)110通過使用存儲在系統(tǒng)存儲器112中的驅(qū)動器來存取所述圖形子系統(tǒng)。
圖2以更加詳細(xì)的形式來說明所述處理單元124中的一者。圖2中所說明的處理單元(此處參考為200)代表圖1所示的處理單元124中的任一者。處理單元200包括指令分派單元212,其用于發(fā)布待由處理單元200執(zhí)行的指令;寄存器文件214,其存儲用于執(zhí)行指令的操作數(shù);和一對執(zhí)行管線222、224。所述第一執(zhí)行管線222經(jīng)配置以執(zhí)行數(shù)學(xué)操作,且所述第二執(zhí)行管線224經(jīng)配置以執(zhí)行存儲器存取操作。一般來說,在第二執(zhí)行管線224中執(zhí)行的指令的等待時間比在第一執(zhí)行管線222中執(zhí)行的指令的等待時間高得多。當(dāng)指令分派單元212發(fā)布指令時,指令分派單元212將管線配置信號發(fā)送到所述兩個執(zhí)行管線222、224中的一者。如果指令為數(shù)學(xué)類型,那么管線配置信號被發(fā)送到第一執(zhí)行管線222。如果指令為存儲器存取類型,那么管線配置信號被發(fā)送到第二執(zhí)行管線224。所述兩個執(zhí)行管線222、224的執(zhí)行結(jié)果被寫回到寄存器文件214中。
圖3是指令分派單元212的功能方框圖。指令分派單元212包括具有復(fù)數(shù)個插槽的指令緩沖器310。此示范性實施例中的插槽數(shù)目為12,且每個插槽可保持高達(dá)兩個指令。如果所述插槽中的任一者具有用于另一指令的空間,那么使取出(fetch)312從線程庫305進(jìn)入指令高速緩沖存儲器314。當(dāng)加載程序以供執(zhí)行時,所述線程庫305由若干線程填充。在將存儲在指令高速緩沖存儲器314中的指令添加到記分板322且放置在指令緩沖器310的空白空間中之前,指令經(jīng)歷解碼316,其中所述記分板322跟蹤運行中的指令,即已經(jīng)發(fā)布但尚未完成的指令。
指令分派單元212進(jìn)一步包括發(fā)布邏輯320。發(fā)布邏輯320檢查記分板322且從指令緩沖器310中將不依賴于運行中的指令中的任一者的指令發(fā)布出去。結(jié)合來自指令緩沖器310的發(fā)布,發(fā)布邏輯320將管線配置信號發(fā)送到適當(dāng)?shù)膱?zhí)行管線。
圖4說明根據(jù)本發(fā)明第一實施例的線程庫305的配置。線程庫305被配置為具有12個行和2個列的表格。表格的每個單元表示存儲線程的存儲器插槽。表格的每個行表示伙伴組。因此,表格的單元0A中的線程是表格的單元0B的線程的伙伴。根據(jù)本發(fā)明實施例,每次伙伴組中僅有一個線程為活動的。在指令取出期間,取出來自活動線程的指令。所取出的指令隨后經(jīng)歷解碼且被存儲在指令緩沖器310的相應(yīng)插槽中。在本文所說明的本發(fā)明實施例中,從線程庫305的單元0A或單元0B取出的指令被存儲在指令緩沖器310的插槽0中,且從線程庫305的單元1A或單元1B取出的指令被存儲在指令緩沖器310的插槽1中,等等。同樣,根據(jù)發(fā)布邏輯320在連續(xù)時鐘周期中發(fā)布存儲在指令緩沖器310中的指令。在圖6所示的簡化實例中,在連續(xù)時鐘周期中以行0中的指令開始且接著為行1中的指令等等來發(fā)布存儲在指令緩沖器310中的指令。
圖5說明根據(jù)本發(fā)明第二實施例的線程庫305的配置。線程庫305被配置為具有8個行和3個列的表格。表格的每個單元表示存儲線程的存儲器插槽。表格的每個行表示伙伴組。因此,表格的單元0A、0B和0C中的線程被認(rèn)為是伙伴線程。根據(jù)本發(fā)明實施例,每次伙伴組中僅有一個線程為活動的。在指令取出期間,取出來自活動線程的指令。所取出的指令隨后經(jīng)歷解碼且被存儲在指令緩沖器310的相應(yīng)插槽中。在本文所說明的本發(fā)明實施例中,從線程庫305的單元0A、單元0B或單元0C取出的指令被存儲在指令緩沖器310的插槽0中,且從線程庫305的單元1A、單元1B或單元1C取出的指令被存儲在指令緩沖器310的插槽1中,等等。同樣,根據(jù)發(fā)布邏輯320而在連續(xù)時鐘周期中發(fā)布存儲在指令緩沖器310中的指令。
當(dāng)線程庫305由若干線程填充時,其按以列為主的順序加載。首先加載單元0A,接著單元1A、單元2A等,直到填滿列A。接著,加載單元0B,接著單元1B、單元2B等,直到填滿列B。如果線程庫305配置有額外列,那么以相同方式繼續(xù)此線程加載過程,直到填滿所有列為止。通過按以列為主的順序來加載線程庫305,可將伙伴線程暫時彼此分離得盡可能的遠(yuǎn)。同樣,每個行的伙伴線程相當(dāng)獨立于其它行,以使得當(dāng)指令從指令緩沖器310處發(fā)布出去時行之間的順序由發(fā)布邏輯320在最小程度上強制執(zhí)行。
圖6是說明在每組具有兩個伙伴線程的情況下的活動執(zhí)行線程交換的時序圖。實線箭頭對應(yīng)于針對活動線程而執(zhí)行的一序列指令。所述時序圖展示首先起始線程庫305的單元0A中的線程且執(zhí)行來自所述線程的一序列指令,直到從所述線程發(fā)布交換指令為止。當(dāng)發(fā)布了交換指令時,線程庫305中的單元0A中的線程進(jìn)入睡眠(即,成為不活動的)且其伙伴線程(即,線程庫305的單元0B中的線程)成為活動的。此后,執(zhí)行來自線程庫305的單元0B中的線程的一序列指令,直到從所述線程發(fā)布交換指令為止。當(dāng)發(fā)布了此交換指令時,線程庫305中的單元0B中的線程進(jìn)入睡眠且其伙伴線程(即,線程庫305的單元0A中的線程)成為活動的。此持續(xù)到兩個線程都完成其執(zhí)行為止。還在一線程已完成了執(zhí)行但其伙伴線程尚未完成時進(jìn)行到伙伴線程的交換。
如圖6所示,在單元0A中的線程之后連續(xù)起始線程庫305的其它活動線程。與單元0A中的線程一樣,執(zhí)行其它活動線程中的每一者,直到從所述線程發(fā)布交換指令為止,在發(fā)布交換指令時所述線程進(jìn)入睡眠且其伙伴線程成為活動的?;顒訄?zhí)行接著在伙伴線程之間交替,直到兩個線程都完成其執(zhí)行為止。
圖7是說明當(dāng)執(zhí)行伙伴組中的線程(或簡言之,伙伴線程)時由處理單元執(zhí)行的處理步驟的流程圖。在步驟710中,分配用于伙伴線程的硬件資源(尤其是寄存器)。所分配的寄存器包括用于伙伴線程中每一者的私用寄存器和待由伙伴線程共用的共用寄存器。共用寄存器的分配節(jié)約了寄存器使用。舉例來說,如果有兩個伙伴線程且每個伙伴線程需要24個寄存器,那么會需要總共48個寄存器來執(zhí)行常規(guī)多處理方法。然而,在本發(fā)明實施例中,分配了共用寄存器。這些寄存器對應(yīng)于那些在線程活動時需要但在線程不活動時(例如當(dāng)線程正等待完成長等待時間的操作時)不需要的寄存器。分配私用寄存器以存儲需要在交換中間保留的任何信息。在其中所述兩個伙伴線程中的每一者需要24個寄存器的實例中,如果可將這些寄存器中的16個分配作為共用寄存器,那么會僅需要總共32個寄存器來執(zhí)行兩個伙伴線程。如果每個伙伴組具有三個伙伴線程,那么節(jié)約程度甚至更大。在此實例中,與使用常規(guī)多處理方法的總共72個寄存器相比,使用本發(fā)明會需要總共40個寄存器。
所述伙伴線程中的一者開始時作為活動線程,且檢索來自所述線程的指令以供執(zhí)行(步驟712)。在步驟714中,起始在步驟712中檢索到的指令的執(zhí)行。接著,在步驟716中,檢查檢索到的指令以判斷其是否為交換指令。如果其為交換指令,那么當(dāng)前活動線程成為不活動的,且所述伙伴組中的其它線程中的一者成為活動的(步驟717)。如果其不是交換指令,那么檢查在步驟714中起始的執(zhí)行是否完成(步驟718)。當(dāng)此執(zhí)行完成時,檢查當(dāng)前活動線程以判斷是否存在任何待執(zhí)行的剩余指令(步驟720)。如果存在,那么處理流程返回到步驟712,在步驟712處從當(dāng)前活動線程處檢索待執(zhí)行的下一個指令。如果不存在,那么進(jìn)行核對以判斷是否所有伙伴線程已完成了執(zhí)行(步驟722)。如果完成了,那么結(jié)束過程。如果沒有,那么處理流程返回到步驟717,在步驟717處交換到尚未完成的伙伴線程。
在上文所述的本發(fā)明實施例中,在編譯程序時插入交換指令。交換指令通常插入在緊跟高等待時間的指令之后,且優(yōu)選地插入在其中可分配大量共用寄存器(相對于私用寄存器的數(shù)目而言)的程序中的若干點處。舉例來說,在圖形處理中,交換指令可插入在緊跟紋理指令之后。在本發(fā)明的替代實施例中,交換事件可以不是交換指令,但其可以是硬件識別的某一事件。舉例來說,硬件可經(jīng)配置以識別指令執(zhí)行中的長等待時間。當(dāng)其識別到此時,其可導(dǎo)致發(fā)布導(dǎo)致長等待時間的指令的線程成為不活動且使得相同伙伴組中的另一線程活動。同樣,交換事件可為在長等待時間操作期間的某一可識別事件,例如在長等待時間操作期間發(fā)生的第一記分板停止。
以下指令序列說明交換指令可由編譯器插入在著色器程序中的何處。
Inst_00內(nèi)插 iwInst_01倒數(shù) wInst_02內(nèi)插 s,wInst_03內(nèi)插 t,wInst_04紋理 s,t//紋理返回r、g、b、a值Inst_05交換Inst_06乘法 r,r,wInst_07乘法 g,g,w交換指令(Inst_05)由編譯器插入在緊跟長等待時間紋理指令(Inst_04)之后。這樣,在執(zhí)行長等待時間紋理指令(Inst_04)的同時進(jìn)行到伙伴線程的交換。較不需要在乘法指令(Inst_06)之后插入交換指令,因為乘法指令(Inst_06)依賴于紋理指令(Inst_04)的結(jié)果,且直到長等待時間紋理指令(Inst_04)完成其執(zhí)行后才可進(jìn)行到伙伴線程的交換。
為說明簡單起見,本發(fā)明實施例的以上描述中所使用的線程表示單一線程的指令。然而,本發(fā)明還可應(yīng)用于其中類似線程被分組在一起且通過使用單一指令經(jīng)由多個并行數(shù)據(jù)路徑而處理來自此組(也被稱為隊)的相同指令的實施例。
盡管前文針對于本發(fā)明實施例,但可在不脫離本發(fā)明的基本范圍的情況下構(gòu)思本發(fā)明的其它和另外實施例。由所附權(quán)利要求書來確定本發(fā)明的范圍。
權(quán)利要求
1.一種在一處理單元中執(zhí)行多個指令線程的方法,其包含以下步驟將所述處理單元的第一、第二和共用組硬件資源分配給第一和第二指令線程;使用所述第一和共用組硬件資源來執(zhí)行所述第一指令線程,直到發(fā)生一預(yù)定事件為止;和響應(yīng)于所述預(yù)定事件的所述發(fā)生,暫停所述第一指令線程的執(zhí)行,并使用所述第二和共用組硬件資源來執(zhí)行所述第二指令線程。
2.根據(jù)權(quán)利要求1所述的方法,其中執(zhí)行所述第二指令線程,直到發(fā)生另一預(yù)定事件為止,且響應(yīng)于所述另一預(yù)定事件的所述發(fā)生,暫停所述第二指令線程的執(zhí)行,并重新開始所述第一指令線程的所述執(zhí)行。
3.根據(jù)權(quán)利要求2所述的方法,其中所述第一指令線程包含一交換指令,且當(dāng)執(zhí)行所述第一線程中的所述交換指令時發(fā)生所述預(yù)定事件,且其中所述第二指令線程包含一交換指令,且當(dāng)執(zhí)行所述第二線程中的所述交換指令時發(fā)生所述另一預(yù)定事件。
4.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含將一第三組硬件資源和所述共用組硬件資源分配給一第三指令線程的步驟,其中執(zhí)行所述第二指令線程,直到發(fā)生另一預(yù)定事件為止,且響應(yīng)于所述另一預(yù)定事件的所述發(fā)生,暫停所述第二指令線程的所述執(zhí)行,并執(zhí)行所述第三指令線程。
5.根據(jù)權(quán)利要求1所述的方法,其中當(dāng)執(zhí)行所述第一指令線程中的一高等待時間指令時,發(fā)生所述預(yù)定事件。
6.根據(jù)權(quán)利要求5所述的方法,其中所述高等待時間指令包含一存儲器存取指令。
7.根據(jù)權(quán)利要求1所述的方法,其中所述硬件資源包含寄存器。
8.根據(jù)權(quán)利要求7所述的方法,其中所述硬件資源進(jìn)一步包含一指令緩沖器。
9.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含將所述處理單元的第三、第四和第五組硬件資源分配給第三和第四指令線程;使用所述第三和第五組硬件資源來執(zhí)行所述第三指令線程,直到發(fā)生所述第三線程的一交換事件為止;和響應(yīng)于所述第三線程的所述交換事件的所述發(fā)生,暫停所述第三指令線程的執(zhí)行,并使用所述第四和第五組硬件資源來執(zhí)行所述第四指令線程。
10.根據(jù)權(quán)利要求9所述的方法,其中執(zhí)行所述第四指令線程,直到發(fā)生所述第四線程的一交換事件為止,且響應(yīng)于所述第四線程的所述交換事件的所述發(fā)生,暫停所述第四指令線程的執(zhí)行,并重新開始所述第三指令線程的所述執(zhí)行。
全文摘要
將多個線程劃分成具有兩個或兩個以上線程的伙伴組,以使得每個線程被指定給其一個或一個以上伙伴線程。每個伙伴組中只有一個線程活動地執(zhí)行指令,且這允許伙伴線程共用硬件資源,例如寄存器。當(dāng)一活動線程遇到一交換事件(例如一交換指令)時,所述活動線程暫停執(zhí)行,且其伙伴線程中的一者使用那個線程的私用硬件資源和所述伙伴組的共用硬件資源開始執(zhí)行。因此,可在不復(fù)制所有每個線程的硬件資源的情況下增加線程計數(shù)。
文檔編號G06F9/46GK1983196SQ200610168179
公開日2007年6月20日 申請日期2006年12月15日 優(yōu)先權(quán)日2005年12月16日
發(fā)明者布雷特·W·庫恩, 約翰·埃里克·林霍爾姆 申請人:輝達(dá)公司