用于集群多級寄存器堆的寄存器分配的制作方法
【專利摘要】公開了用于集群多級寄存器堆的寄存器分配。一種用于分配處理單元內的寄存器的方法。編譯器將多個指令指派到多個處理集群。每個指令配置為在有效范圍內訪問第一虛擬寄存器。編譯器在有效范圍內確定多個處理集群中哪個處理集群是用于第一虛擬寄存器的屬主集群。編譯器將包括在多個指令中的第一指令配置為訪問第一全局虛擬寄存器。
【專利說明】用于集群多級寄存器堆的寄存器分配
【技術領域】
[0001]本發(fā)明總地涉及并行計算,并且更具體地,涉及用于集群多級寄存器堆的寄存器分配。
【背景技術】
[0002]計算機處理器常常利用寄存器堆作為用于實施計算的暫存空間。寄存器堆典型地針對速度進行配置并且典型地物理上靠近實施計算的功能單元的集群。具有功能單元的多個集群的一些并行處理系統(tǒng)利用多級層次的寄存器堆。
[0003]多級層次提供物理上靠近功能單元的、在層次的底部的一些寄存器堆(“低級寄存器堆”)以及物理上離功能單元較遠的、在層次的頂部的其他寄存器堆(“高級寄存器堆”)。低級寄存器堆中的值比高級寄存器堆中的值要求較少時間和能量來進行訪問。為了設計的簡單以及為了速度,低級寄存器堆可僅對于功能單元的單個集群是可訪問的,而高級寄存器堆可對于功能單元的大量集群是可訪問的。
[0004]雖然值可以存儲在低級寄存器堆中以降低能量消耗并且用于速度,但是對值存儲在其中的低級寄存器堆不一定具有直接訪問權的多個集群可能需要存儲在低級寄存器堆中的值。因此,一般使用技術來確保功能單元的多個集群所需要的值實際上對功能單元的所有那些多個集群可用。
[0005]用于使值對于功能單元的多于一個集群可用的一些當前技術確保由功能單元的多個集群所利用的所有值被存儲在高級寄存器堆中,以允許功能單元的多于一個集群對值進行訪問。雖然將由多個功能單元所利用的值存儲在高級寄存器堆中有助于確保功能單元的多個集群所需要的值對于功能單元的那些多個集群是可訪問的,但是訪問高級寄存器堆比訪問低級寄存器堆要求更多的時間和能量。進一步地,由功能單元的多個集群所使用的一些值主要由功能單元的單個集群使用,功能單元的其他集群進行一些輔助訪問。
[0006]因此,其中由功能單元的多個集群所利用的所有值被存儲在高級寄存器堆中的技術的一個缺點在于,盡管主要由功能單元的單個集群所利用的值可能僅具有由其他功能單元的少許輔助訪問,但是主要由單個功能單元所使用的值被存儲在高級寄存器堆中。因為高級寄存器堆比低級寄存器堆具有較高訪問能量和較高訪問時間,所以采用其中由功能單元的多個集群所利用的所有值被存儲在高級寄存器堆中的技術可能錯失在降低訪問時間和訪問能量方面優(yōu)化的機會。
[0007]如前述所示,本領域需要的是用于改進功能單元的多個集群對多級寄存器堆層次的利用的技術。
【發(fā)明內容】
[0008]本發(fā)明的一個實施例闡述了用于分配處理單元內的寄存器的方法。編譯器將多個指令指派到多個處理集群。每個指令配置為在有效范圍(live range)內訪問第一虛擬寄存器。編譯器在有效范圍內確定多個處理集群中哪個處理集群是用于第一虛擬寄存器的屬主(owner)集群。編譯器將包括在多個指令中的第一指令配置為訪問第一全局虛擬寄存器。
[0009]所公開的技術的一個優(yōu)勢在于,所公開的技術可以對訪問多級寄存器堆層次中的寄存器的指令進行配置,使得常被訪問的寄存器能夠被分配到本地寄存器堆中的物理寄存器。
【專利附圖】
【附圖說明】
[0010]因此,可以詳細地理解本發(fā)明的上述特征,并且可以參考實施例得到對如上面所簡要概括的本發(fā)明更具體的描述,其中一些實施例在附圖中示出。然而,應當注意的是,附圖僅示出了本發(fā)明的典型實施例,因此不應被認為是對其范圍的限制,本發(fā)明可以具有其他等效的實施例。
[0011]圖1是示出了配置為實現本發(fā)明的一個或多個方面的計算機系統(tǒng)的框圖;
[0012]圖2是根據本發(fā)明的一個實施例的、用于圖1的計算機系統(tǒng)的并行處理子系統(tǒng)的框圖;
[0013]圖3是根據本發(fā)明的一個實施例的、圖2的通用處理集群內的流多處理器的一部分的框圖;
[0014]圖4是根據本發(fā)明的一個實施例的多級寄存器堆層次的框圖;
[0015]圖5闡述了根據本發(fā)明的一個實施例的、用于將由虛擬指令集中的指令所引用的虛擬寄存器分配到物理寄存器的方法步驟的流程圖;
[0016]圖6闡述了根據本發(fā)明的一個實施例的、用于實施虛擬寄存器分區(qū)的方法步驟的流程圖;
[0017]圖7闡述了根據本發(fā)明的一個實施例的、用于指派屬主集群的方法步驟的流程圖。
[0018]圖8闡述了根據本發(fā)明的一個實施例的、用于變換屬主集群寫操作的方法步驟的流程圖;
[0019]圖9闡述了根據本發(fā)明的一個實施例的、用于變換非屬主集群讀操作的方法步驟的流程圖;
[0020]圖10闡述了根據本發(fā)明的一個實施例的、用于變換非屬主集群寫操作的方法步驟的流程圖;
[0021]圖11是根據本發(fā)明的一個實施例的、描繪了在虛擬寄存器分區(qū)之前和之后的示范性代碼段的框圖;
[0022]圖12是根據本發(fā)明的一個實施例的多級寄存器堆層次的框圖;
[0023]圖13是根據本發(fā)明的一個實施例的、描繪了在虛擬寄存器分區(qū)之前和之后的示范性代碼段的框圖;以及
[0024]圖14是根據本發(fā)明的一個實施例的多級寄存器堆層次的框圖。
【具體實施方式】
[0025]在下面的描述中,將闡述大量的具體細節(jié)以提供對本發(fā)明更透徹的理解。然而,本領域的技術人員應該清楚,本發(fā)明可以在沒有一個或多個這些具體細節(jié)的情況下得以實踐。[0026]系統(tǒng)概述
[0027]圖1是示出了配置為實現本發(fā)明的一個或多個方面的計算機系統(tǒng)100的框圖。計算機系統(tǒng)100包括經由可以包括存儲器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個或多個用戶輸入設備108 (例如鍵盤、鼠標)接收用戶輸入并且經由通信路徑106和存儲器橋105將該輸入轉發(fā)到CPU102。并行處理子系統(tǒng)112經由總線或第二通信路徑113 (例如外圍部件互連(PCI)Express、加速圖形端口或超傳輸鏈路)耦連到存儲器橋105 ;在一個實施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設備110的圖形子系統(tǒng),所述顯示設備110可以是任何常規(guī)的陰極射線管、液晶顯示器、發(fā)光二極管顯示器等等。系統(tǒng)盤114也連接到I/O橋107并且可配置為存儲用于由CPU102和并行處理子系統(tǒng)112使用的內容、應用和數據。系統(tǒng)盤114為應用和數據提供非易失性存儲并且可以包括固定的或可移動的硬盤驅動器、閃存設備以及CD-ROM (壓縮光盤只讀存儲器)、DVD-R0M (數字多用光盤-ROM)、藍光、HD-DVD (高清晰度DVD)或其他磁性、光學或固態(tài)存儲設備。
[0028]交換器116提供I/O橋107與諸如網絡適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮光盤(⑶)驅動器、數字多用光盤(DVD)驅動器、膠片錄制設備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實現,諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點到點通信協(xié)議,并且如本領域已知的,不同設備間的連接可使用不同協(xié)議。
[0029]在一個實施例中,并行處理子系統(tǒng)112包含經優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構成圖形處理單元(GPU)。在另一個實施例中,并行處理子系統(tǒng)112包含經優(yōu)化用于通用處理的電路,同時保留底層(underlying)的計算架構,本文將更詳細地進行描述。在又一個實施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)元件集成在單個子系統(tǒng)中,諸如結合存儲器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。
[0030]編譯器101可以嵌入到設備驅動程序103內。編譯器101按照需要來編譯程序指令用于由并行處理子系統(tǒng)112執(zhí)行。在這類編譯期間,編譯器101可以在編譯的各階段對程序指令施加變換。在本發(fā)明的另一個實施例中,編譯器101可以是獨立的應用。
[0031]應該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓撲,包括橋的數目和布置、CPU102的數目以及并行處理子系統(tǒng)112的數目,可根據需要修改。例如,在一些實施例中,系統(tǒng)存儲器104直接連接到CPU102而不是通過橋,并且其他設備經由存儲器橋105和CPU102與系統(tǒng)存儲器104通信。在其他替代性拓撲中,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU102,而不是連接到存儲器橋105。而在其他實施例中,I/O橋107和存儲器橋105可能被集成到單個芯片上而不是作為一個或多個分立設備存在。大型實施例可以包括兩個或更多個CPU102以及兩個或更多個并行處理子系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數目的插卡或外圍設備都可能得到支持。在一些實施例中,交換器116被去掉,網絡適配器118和插卡120、121直接連接到I/O橋107。
[0032]圖2示出了根據本發(fā)明的一個實施例的并行處理子系統(tǒng)112。如所示的,并行處理子系統(tǒng)112包括一個或多個并行處理單元(PI3U) 202,每個并行處理單元202都耦連到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U≥1。(本文中,類似對象的多個實例需要時以標識對象的參考數字和標識實例的括號中的數字來表示。)PPU202和并行處理存儲器204可使用一個或多個集成電路設備來實現,諸如可編程處理器、專用集成電路(ASIC)或存儲器設備,或者以任何其他技術可行的方式來實現。
[0033]再參考圖1以及圖2,在一些實施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器,其可以配置為實施與下述相關的各種操作:經由存儲器橋105和第二通信路徑113從CPU102和/或系統(tǒng)存儲器104所供應的圖形數據生成像素數據,與本地并行處理存儲器204 (可被用作圖形存儲器,包括例如常規(guī)幀緩沖區(qū)(buffer))交互以存儲和更新像素數據,傳遞像素數據到顯示設備110等等。在一些實施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器而操作的PPU202以及一個或多個用于通用計算的其他PPU202。這些PPU202可以是同樣的或不同的,并且每個PPU202可具有一個或多個專用并行處理存儲器設備或不具有專用并行處理存儲器設備。并行處理子系統(tǒng)112中的一個或多個PPU202可輸出數據到顯示設備110,或者并行處理子系統(tǒng)112中的每個PPU202可輸出數據到一個或多個顯示設備110。[0034]在操作中,CPU102是計算機系統(tǒng)100的主處理器,控制和協(xié)調其他系統(tǒng)部件的操作。具體地,CPU102發(fā)出控制PPU202的操作的命令。在一些實施例中,CPU102寫入用于每個PPU202的命令流到數據結構中(在圖1或圖2中未明確示出),該數據結構可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU102和PPU202都可訪問的其他存儲位置中。將指向每個數據結構的指針寫到入棧緩沖區(qū)(pushbuffer)以發(fā)起對數據結構中的命令流的處理。PPU202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU102的操作異步地執(zhí)行命令??梢越浻稍O備驅動程序103由應用程序為每個入棧緩沖區(qū)指定執(zhí)行優(yōu)先級以控制對不同入棧緩沖區(qū)的調度。
[0035]現在返回參考圖2和圖1,每個PPU202包括經由連接到存儲器橋105 (或者,在一個替代性實施例中,直接連接到CPU102)的通信路徑113與計算機系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU202到計算機系統(tǒng)100的其余部分的連接也可以變化。在一些實施例中,并行處理子系統(tǒng)112可實現為可插入到計算機系統(tǒng)100的擴展槽中的插卡。在其他實施例中,PPU202可以和諸如存儲器橋105或I/O橋107的總線橋集成在單個芯片上。而在其他實施例中,PPU202的一些或所有元件可以和CPU102集成在單個芯片上。
[0036]在一個實施例中,通信路徑113是PCI Express鏈路,如本領域已知的,其中專用通道被分配到每個PPU202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳送的包(或其他信號),并且還從通信路徑113接收所有傳入的包(或其他信號),將傳入的包引導到PPU202的適當部件。例如,可將與處理任務相關的命令引導到主機接口206,而將與存儲器操作相關的命令(例如,對并行處理存儲器204的讀取或寫入)引導到存儲器交叉開關單元210。主機接口 206讀取每個入棧緩沖區(qū),并且將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。
[0037]有利地,每個PPU202都實現高度并行處理架構。如詳細示出的,PPU202 (O)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC)208,其中C≥1。每個GPC208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程是程序的實例(instance)。在各種應用中,可分配不同的GPC208用于處理不同類型的程序或用于實施不同類型的計算。GPC208的分配可以取決于因每種類型的程序或計算所產生的工作量而變化。
[0038]GPC208從任務/工作單元207內的工作分布單元接收所要執(zhí)行的處理任務。工作分布單元接收指向編碼為任務元數據(TMD)(未示出)并存儲在存儲器中的處理任務的指針。指向TMD的指針包括在存儲為入棧緩沖區(qū)并由前端單元212從主機接口 206接收的命令流中??梢跃幋a為TMD的處理任務包括所要處理的數據的索引,以及定義數據將被如何處理(例如,什么程序將被執(zhí)行)的狀態(tài)參數和命令。任務/工作單元207從前端212接收任務并確保在每一個TMD所指定的處理發(fā)起前,將GPC208配置為有效狀態(tài)??梢詾槊總€TMD指定用來調度處理任務的執(zhí)行的優(yōu)先級。還可從處理集群陣列230接收處理任務??蛇x地,TMD可包括控制將TMD添加到處理任務列表(或指向處理任務的指針的列表)的頭部還是尾部的參數,從而提供除優(yōu)先級以外的另一級別的控制。
[0039]存儲器接口 214包括D個分區(qū)單元215,每個分區(qū)單元215直接耦連到并行處理存儲器204的一部分,其中D > I。如所示的,分區(qū)單元215的數目一般等于動態(tài)隨機存取存儲器(DRAM) 220的數目。在其他實施例中,分區(qū)單元215的數目也可以不等于存儲器設備的數目。本領域的普通技術人員應該理解DRAM220可以用其他合適的存儲設備來替代并且可以是一般常規(guī)的設計。因此省略了詳細描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標可以跨DRAM220加以存儲,這允許分區(qū)單元215并行寫入每個渲染目標的各部分以有效地使用并行處理存儲器204的可用帶寬。
[0040]任何一個GPC208都可以處理要被寫到并行處理存儲器204內的任何DRAM220的數據。交叉開關單元210配置為路由每個GPC208的輸出到任何分區(qū)單元215的輸入或到另一個GPC208用于進一步處理。GPC208通過交叉開關單元210與存儲器接口 214通信,以對各種外部存儲器設備進行讀取或寫入。在一個實施例中,交叉開關單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲器204的連接,從而使得在不同GPC208內的處理內核能夠與系統(tǒng)存儲器104或對于PPU202而言非本地的其他存儲器通信。在圖2所示的實施例中,交叉開關單元210直接與I/O單元205連接。交叉開關單元210可使用虛擬信道來分開GPC208與分區(qū)單元215之間的業(yè)務流。
[0041]另外,GPC208可被編程以執(zhí)行與種類繁多的應用相關的處理任務,包括但不限于,線性和非線性數據變換、視頻和/或音頻數據過濾、建模操作(例如,應用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細分(tessellation)著色器、頂點著色器、幾何著色器、和/或像素著色器程序)等等。PPU202可將數據從系統(tǒng)存儲器104和/或本地并行處理存儲器204轉移到內部(片上)存儲器中,處理該數據,并且將結果數據寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,其中這樣的數據可以由其他系統(tǒng)部件訪問,所述其他系統(tǒng)部件包括CPU102或另一個并行處理子系統(tǒng)112。
[0042]PPU202可配備有任何容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任何組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(UMA)實施例中,PPU202可以是圖形處理器。在這樣的實施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實施例中,PPU202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCI Express)的分立芯片提供,所述高速鏈路經由橋式芯片或其他通信手段將PPU202連接到系統(tǒng)存儲器。
[0043]如上所示,在并行處理子系統(tǒng)112中可以包括任何數目的PPU202。例如,可在單個插卡上提供多個PPU202、或可將多個插卡連接到通信路徑113、或可將一個或多個PPU202集成到橋式芯片中。在多PPU系統(tǒng)中的PPU202可以彼此同樣或不同。例如,不同的PPU202可能具有不同數目的處理內核、不同容量的本地并行處理存儲器等等。在存在多個PPU202的情況下,可并行操作那些PI3U從而以高于單個PPU202所可能達到的吞吐量來處理數據。包含一個或多個PPU202的系統(tǒng)可以以各種配置和形式因素來實現,包括臺式電腦、筆記本電腦或手持式個人計算機、服務器、工作站、游戲控制臺、嵌入式系統(tǒng)等等。
[0044]可以在GPC208上并發(fā)執(zhí)行多個處理任務并且處理任務在執(zhí)行期間可以生成一個或多個“子”處理任務。任務/工作單元207接收任務并動態(tài)調度處理任務和子處理任務用于由GPC208執(zhí)行。
[0045]圖3是根據本發(fā)明的一個實施例的、圖2的GPC208內的流多處理器(SM)310的框圖。每個GPC208可配置為并行執(zhí)行大量線程,其中術語“線程”是指在特定輸入數據集上執(zhí)行的特定程序的實例。在一些實施例中,單指令、多數據(SIMD)指令發(fā)出技術用于在不提供多個獨立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實施例中,單指令、多線程(SMT)技術用于使用配置為向GPC208中的每一個內的處理引擎集發(fā)出指令的公共指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領域普通技術人員應該理解SMD處理機制代表SMT處理機制的功能子集。
[0046]經由將處理任務分布到一個或多個流多處理器(SM) 310的管線管理器(未示出)來有利地控制GPC208的操作,其中每個SM310配置為處理一個或多個線程組。每個SM310包括配置為經由GPC208內的L1.5高速緩存(未示出)從存儲器接收指令和常量的指令LI高速緩存370。線程束調度器和指令單元312從指令LI高速緩存370接收指令和常量,并且根據指令和常量來控制本地寄存器堆304和SM310功能單元。SM310功能單元包括N個exec (執(zhí)行或處理)單元302和P個加載-存儲單元(LSU)303。SM功能單元可以是管線化的,如本領域已知的,其允許在前一個指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任何組合。在一個實施例中,功能單元支持各種各樣的操作,包括整數和浮點運算(例如加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、移位和各種代數函數的計算(例如平面插值、三角函數、指數函數和對數函數等等);以及相同功能單元硬件可均衡地用來實施不同的操作。
[0047]如本文之前所定義的,傳送到特定GPC208的一系列指令構成線程,并且跨SM310內的并行處理引擎(未示出)的某一數目的并發(fā)執(zhí)行線程的集合在本文中稱為“線程束(warp)”或“線程組”。如本文所使用的,“線程組”是指對不同輸入數據并發(fā)執(zhí)行相同程序的一組線程,所述組的一個線程被指派到SM310內的不同處理引擎。線程組可以包括比SM310內的處理引擎數目少的線程,在這種情況下一些處理引擎將在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比SM310內的處理引擎數目多的線程,在這種情況下處理將在連續(xù)的時鐘周期內發(fā)生。因為每個SM310可以并發(fā)支持多達G個線程組,所以結果是其中在任何給定時間在包括M個流多處理器310的GPC208中可以執(zhí)行多達G*M個線程組的系統(tǒng)。[0048]此外,多個相關線程組可以在SM310內同時活動(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數目并且通常是SM310內的并行處理引擎數目的整數倍,以及m是SM310內同時活動的線程組的數目。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲器或寄存器的容量來確定。
[0049]在本發(fā)明的實施例中,使用計算系統(tǒng)的PPU202或其他處理器來使用線程陣列執(zhí)行通用計算是可取的。為線程陣列中的每個線程指派在線程的執(zhí)行期間對于線程可訪問的唯一的線程標識符(“線程ID”)??杀欢x為一維或多維數值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數據集的哪部分和/或確定線程將要產生或寫輸出數據集的哪部分。
[0050]每線程指令序列可包括定義線程陣列的代表性線程和一個或多個其他線程之間的協(xié)作行為的至少一個指令。例如,每線程指令序列可能包括在序列中的特定點處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個或多個到達該特定點的時間為止的指令、用于代表性線程將數據存儲在其他線程的一個或多個有權訪問的共享存儲器中的指令、用于代表性線程原子地讀取和更新存儲在其他線程的一個或多個基于它們的線程ID有權訪問的共享存儲器中的數據的指令等等。CTA程序還可以包括計算數據將從其讀取的共享存儲器中的地址的指令,該地址是線程ID的函數。通過定義合適的函數并提供同步技術,可以以可預測的方式由CTA的一個線程將數據寫入共享存儲器中的給定位置并由同一個CTA的不同線程從該位置讀取數據。因此,數據在線程之間共享的任何期望模式可以得到支持,以及CTA中的任何線程可以與同一個CTA中的任何其他線程共享數據。如果存在數據在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應該理解的是,在使用CTA的特定應用中,CTA的線程可能會或可能不會真正互相共享數據,這取決于CTA程序,術語“CTA”和“線程陣列”在本文作為同義詞使用。
[0051]SM310提供具有不同級別的可訪問性的片上(內部)數據存儲。特殊寄存器(未示出)對于LSU303可讀但不可寫并且用于存儲定義每個線程的“位置”的參數。在一個實施例中,特殊寄存器包括每線程(或SM310內的每exec單元302) —個的存儲線程ID的寄存器;每個線程ID寄存器僅由各自的exec單元302可訪問。特殊寄存器還可以包括附加寄存器,其對于執(zhí)行由TMD所代表的同一個處理任務的所有線程(或由所有LSU303)可讀,其存儲CTA標識符、CTA維數、CTA所屬網格(grid)的維數(或隊列位置,如果TMD編碼隊列任務而不是網格任務的話)、以及CTA被指派到的TMD的標識符。
[0052]如果TMD是網格TMD,則TMD的執(zhí)行會啟動和執(zhí)行固定數目的CTA以處理存儲在隊列中的固定量的數據。將CTA的數目指定為網格寬度、高度和深度的乘積??梢詫⒐潭康臄祿鎯υ赥MD中或TMD可以存儲指向將由CTA所處理的數據的指針。TMD還存儲由CTA所執(zhí)行的程序的開始地址。
[0053]如果TMD是隊列TMD,那么使用TMD的隊列特征,這意味著將要被處理的數據量不一定是固定的。隊列條目存儲用于由指派到TMD的CTA所處理的數據。隊列條目還可以代表在線程執(zhí)行期間由另一個TMD所生成的子任務,從而提供嵌套并行性。通常線程或包括線程的CTA的執(zhí)行被掛起直到子任務的執(zhí)行完成??梢詫㈥犃写鎯υ赥MD中或與TMD分開存儲,在該情況下TMD存儲指向該隊列的隊列指針。有利地,當代表子任務的TMD正在執(zhí)行時可以將由子任務所生成的數據寫到隊列。隊列可以實現為循環(huán)隊列以使得數據的總量不限于隊列的大小。
[0054]屬于網格的CTA具有指示網格內各自CTA的位置的隱含網格寬度、高度和深度參數。在初始化期間響應于經由前端212從設備驅動程序103所接收的命令來寫特殊寄存器并且在處理任務的執(zhí)行期間特殊寄存器不改變。前端212調度每個處理任務用于執(zhí)行。每個CTA與具體TMD相關聯用于一個或多個任務的并發(fā)執(zhí)行。此外,單個GPC208可以并發(fā)執(zhí)行多個任務。
[0055]參數存儲器(未示出)存儲可由同一個CTA內的任何線程(或任何LSU303)讀取但不可由其寫入的運行時間參數(常量)。在一個實施例中,設備驅動程序103在引導SM310開始執(zhí)行使用參數的任務之前將這些參數提供給參數存儲器。任何CTA內的任何線程(或SM310內的任何exec單元302)可以通過存儲器接口 214訪問全局存儲器??梢詫⑷执鎯ζ鞯母鞑糠执鎯υ贚I高速緩存320中。
[0056]每個線程將本地寄存器堆304用作暫存空間;每個寄存器被分配以專用于一個線程,并且在本地寄存器堆304的任何部分中的數據僅對于寄存器被分配到的線程可訪問。本地寄存器堆304可以實現為物理上或邏輯上分為P個通道的寄存器堆,每個通道具有一定數目的條目(其中每個條目可以存儲例如32位字)。將一個通道指派到N個exec單元302和P個下載-存儲單元LSU303的每一個,并且利用用于執(zhí)行同一個程序的不同線程的數據來填充不同通道中的相應條目以幫助SIMD執(zhí)行??梢詫⑼ǖ赖牟煌糠址峙涞紾個并發(fā)線程組中的不同線程組,以使得本地寄存器堆304中的給定條目僅對于特定線程可訪問。在一個實施例中,保留本地寄存器堆304內的某些條目用于存儲線程標識符,實現特殊寄存器之一。此外,一致LI高速緩存320存儲用于N個exec單元302和P個下載-存儲單元LSU303的每個通道的一致值或常量值。
[0057]共享存儲器306對于單個CTA內的線程可訪問;換言之,共享存儲器306中的任何位置對于同一個CTA內的任何線程(或對于SM310內的任何處理引擎)可訪問。共享存儲器306可以實現為具有允許任何處理引擎對共享存儲器中的任何位置讀取或寫入的互連的共享寄存器堆或共享片上高速緩存存儲器。在其他實施例中,共享狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)上并被高速緩存在LI高速緩存320中。參數存儲器可以實現為在實現共享存儲器306的同一個共享寄存器堆或共享高速緩存存儲器內的指定部分,或者實現為LSU303對其具有只讀訪問權限的分開的共享寄存器堆或片上高速緩存存儲器。在一個實施例中,實現參數存儲器的區(qū)域還用于存儲CTA ID和任務ID,以及CTA和網格維數或隊列位置,實現特殊寄存器的各部分。SM310中的每個LSU303耦連到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲器空間中所指定的加載和存儲指令所提供的地址轉換為每個各異存儲器空間中的地址。因此,指令可以用于通過指定統(tǒng)一存儲器空間中的地址來訪問本地、共享或全局存儲器空間中的任何一個。
[0058]每個SM310中的LI高速緩存320可以用于高速緩存私有的每線程本地數據還有每應用全局數據。在一些實施例中,可以將每CTA共享數據高速緩存在LI高速緩存320中。LSU303經由存儲器和高速緩存互連380耦連到共享存儲器306和LI高速緩存320。
[0059]應該理解本文所述的內核架構是示例性的并且變化和修改是可能的。任何數目的處理單元例如SM310可以包括在GPC208內。進一步地,如圖2所示,PPU202可以包括任何數目的GPC208,所述GPC208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個GPC208接收特定處理任務。進一步地,每個GPC208有利地使用分開并且各異的處理單元、LI高速緩存來獨立于其他GPC208操作以為一個或多個應用程序執(zhí)行任務。
[0060]本領域普通技術人員應該理解圖1-3所描述的架構決不限制本發(fā)明的范圍并且在不脫離本發(fā)明的范圍的情況下本文所教導的技術可以在任何經適當配置的處理單元上實現,所述處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU202、一個或多個GPC208、一個或多個圖形或專用處理單元等等。
[0061]用于集群多級寄存器堆的全局寄存器分配
[0062]圖4是根據本發(fā)明的一個實施例的多級寄存器堆層次400的框圖。多級寄存器堆層次400由集群405和主寄存器堆406實現。集群405和主寄存器堆406可以包括在SM310中并且可以替換以下各項的所有或一部分:本地寄存器堆304、執(zhí)行單元302、加載-存儲單元403以及共享存儲器306。
[0063]每個集群405包括專用本地寄存器堆404、一個或多個執(zhí)行單元402,并且可以包括加載-存儲單元403。多級寄存器堆層次400包括X個專用本地寄存器堆404、Y個exec(執(zhí)行或處理)單元402和Z個加載-存儲單元(LSU) 403。執(zhí)行單元402可以是管線化的,如本領域已知的,其允許在前一個指令完成之前發(fā)出新指令。可以提供執(zhí)行單元402的任何組合。在一個實施例中,執(zhí)行單元402支持各種各樣的操作,包括整數和浮點運算(例如加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、移位和各種代數函數的計算(例如平面插值、三角函數、指數函數和對數函數等等);以及相同執(zhí)行單元402硬件可均衡地用來實施不同的操作。
[0064]集群中的所有執(zhí)行單元402對集群405中的專用本地寄存器堆404內的寄存器具有直接訪問權,并且對其他集群405中的專用本地寄存器堆404內的寄存器不具有直接訪問權。因此,圖4中示出的多級寄存器堆層次400,執(zhí)行單元402 (O)和402 (I)對本地寄存器堆404 (O)中的寄存器具有直接訪問權,但是對本地寄存器堆404 (I)中的寄存器不具有直接訪問權。
[0065]優(yōu)選地,專用本地寄存器堆404具有為專用本地寄存器堆404中的寄存器提供低訪問時間和低訪問能量的特征。一個提供低訪問時間和低訪問能量的特征是小容量。此外,專用本地寄存器堆404可以位于物理上靠近集群內的執(zhí)行單元402和/或加載-存儲單元403,以降低訪問專用本地寄存器堆404內的寄存器所要求的線能量(wire energy)。
[0066]主寄存器堆406存在并且不包括在任何集群405中。主寄存器堆406包括對于所有集群405中的所有執(zhí)行單元402是可訪問的的寄存器。進一步地,主寄存器堆406具有比專用本地寄存器堆404提供更大容量的特征。
[0067]主寄存器堆406和專用本地寄存器堆404 —起實現多級寄存器堆層次400,其中高級寄存器堆與主寄存器堆406相對應,并且低級寄存器堆與專用本地寄存器堆404相對應。由于專用本地寄存器堆404的低訪問時間和低訪問能量,頻繁被使用的值有利地存儲在專用本地寄存器堆404中。被使用但不頻繁的附加的值可以存儲在主寄存器堆406中。更不頻繁被使用的值可以存儲在多級寄存器堆層次400外部的存儲器中,諸如LI高速緩存320。
[0068]可以在集群405中的專用本地寄存器堆404之間通過主寄存器堆406來間接地傳達值。為了將值從第一集群405中的第一專用本地寄存器堆404傳達到第二集群中的第二專用本地寄存器堆404,將值從第一本地寄存器堆404中的寄存器拷貝到主寄存器堆406中的寄存器中,并且隨后將其從主寄存器堆406中的寄存器拷貝到第二本地寄存器堆404中的寄存器。由于利用多個指令在集群405中的專用本地寄存器堆404之間傳達值,所以限制從一個專用寄存器堆404到另一個專用寄存器堆404傳達值的次數是有益的。
[0069]執(zhí)行單元402配置為執(zhí)行機器代碼中的指令。機器代碼包括用于由執(zhí)行單元402執(zhí)行的指令集,其中指令可以訪問但不限于位于本地寄存器堆404或主寄存器堆406中的物理寄存器。編譯器101 (在圖1中)接受虛擬指令集中的指令并且將虛擬指令集中的指令轉譯成機器代碼中的指令。虛擬指令集包括可以訪問虛擬寄存器的指令集。虛擬寄存器不一定與本地寄存器堆404或主寄存器堆406中的任何特定物理寄存器相對應。相反,在轉譯期間,編譯器101實施一系列步驟用于將虛擬寄存器分配到本地寄存器堆404或主寄存器堆406中的物理寄存器。
[0070]圖5闡述了根據本發(fā)明的一個實施例的、用于將由虛擬指令集中的指令所引用的虛擬寄存器分配到物理寄存器的方法步驟的流程圖。盡管結合圖1-4描述了方法步驟,但是本領域的技術人員將理解的是,配置為以任何次序實施方法步驟的任何系統(tǒng)均落在本發(fā)明的范圍內。
[0071]如所示,方法500開始于步驟505,此處編譯器101實施集群指派。在集群指派中,編譯器101將虛擬指令集中的指令指派到物理集群405。如已知的,編譯器101通過其可以實施集群指派的算法的一個示例是被稱為“自底向上貪婪”(BUG)算法的算法。在步驟510中,編譯器101實施指令調度。如已知的,在指令調度中,編譯器101調度在步驟505中被指派的虛擬指令。用于實施指令調度的算法的示例是“列表調度”。
[0072]在步驟515中,編譯器101實施虛擬寄存器分區(qū)。在虛擬寄存器分區(qū)中,編譯器101實施一系列變換,所述一系列變換對訪問虛擬寄存器的虛擬指令集中的原始指令進行修改。步驟515的結果是虛擬指令集中的經修改的指令,其可以引用與原始指令中所引用的那些虛擬寄存器不同的虛擬寄存器。編譯器101修改訪問虛擬寄存器的指令,使得虛擬寄存器可被分配到本地寄存器堆404和主寄存器堆406中的物理寄存器。經修改的指令中的不同虛擬寄存器包括兩種不同類型的虛擬寄存器一本地虛擬寄存器和全局虛擬寄存器。本地虛擬寄存器與集群405中的本地寄存器堆404中的物理寄存器相對應,并且全局虛擬寄存器與主寄存器堆406中的物理寄存器相對應。因為一個集群405中的本地寄存器堆404對于另一個集群405是不可以直接訪問的,所以編譯器101還插入指令用于在與不同集群405中的不同本地寄存器堆404相對應的本地虛擬寄存器之間拷貝值。下文關于圖6-14更詳細地描述步驟515。
[0073]在步驟520中,編譯器101實施本地寄存器堆分配。在本地寄存器堆分配中,編譯器101將本地虛擬寄存器指派到本地寄存器堆404中的物理寄存器。為了將本地虛擬寄存器指派到本地寄存器堆404中的物理寄存器,編譯器101可以利用如已知的被稱為“圖著色”的算法。如果本地寄存器堆404中沒有足夠的物理寄存器,那么編譯器101可以將一些虛擬寄存器“溢出”到主寄存器堆406中。
[0074]在步驟525中,編譯器101實施主寄存器堆分配。在主寄存器堆分配中,編譯器101將全局虛擬寄存器指派到主寄存器堆406中的物理寄存器。如已知的,為了將全局虛擬寄存器指派到主寄存器堆406中的物理寄存器,編譯器101可以再次利用圖著色算法。
[0075]下文圖6-10的描述包含對“新虛擬寄存器”的引用?!靶绿摂M寄存器”旨在作為非屬主集群中的本地虛擬寄存器。如果虛擬寄存器屬于集群,那么來自該虛擬寄存器的值可以被拷貝到新虛擬寄存器使得非屬主集群能夠對它進行本地訪問。圖6-14引用符號“VRn”,其指示“新虛擬寄存器”。
[0076]下文圖6-10的描述包含對“非屬主集群”的引用?!胺菍僦骷骸笔窃L問(讀取到或寫入自)虛擬寄存器的指令被指派到的集群,但它不是虛擬寄存器的屬主集群。
[0077]下文圖6-10的描述包含對“相應的全局虛擬寄存器”的引用?!跋鄳娜痔摂M寄存器”用來在集群之間傳達值。圖6-14引用符號“MVR”,其指示“相應的全局虛擬寄存器”。
[0078]下文圖6-10的描述還描述了其中編譯器101在指令“之前”或“之后” “插入”指令的步驟。術語“插入”描述了其中編譯器101通過在特定位置添加附加的指令來修改連續(xù)的指令集的步驟。因此,當編譯器101在第二指令之后插入第一指令時,編譯器101創(chuàng)建第一指令并且將第一指令放置在連續(xù)的指令集中的第二指令之后。類似地,當編譯器101在第二指令之前插入第一指令時,編譯器101創(chuàng)建第一指令并且將第一指令放置在連續(xù)的指令集中的第二指令之前。
[0079]圖6闡述了根據本發(fā)明的一個實施例的、用于實施圖5的步驟515中所描述的虛擬寄存器分區(qū)的方法步驟的流程圖。盡管結合圖1-4描述了方法步驟,但是本領域的技術人員將理解的是,配置為以任何次序實施方法步驟的任何系統(tǒng)均落在本發(fā)明的范圍內。
[0080]如所示,方法600開始于步驟602,此處編譯器101將原始指令中的虛擬寄存器的有效范圍指派到屬主集群。如已知的,有效范圍包括對虛擬寄存器的訪問的范圍,其以對虛擬寄存器寫值為開始并且以在對該虛擬寄存器進行下一個寫之前從虛擬寄存器最后讀值為結束。屬主集群是所述“擁有(own)”虛擬寄存器的特定有效范圍的集群405。步驟602的結果是所有虛擬寄存器有效范圍和相應的屬主集群的列表。
[0081]在步驟604、606和608中,編譯器101變換寫入到虛擬寄存器和從虛擬寄存器讀取的原始指令。從虛擬寄存器讀取或寫入到虛擬寄存器的指令包括但不限于將值指派(寫)到虛擬寄存器或從虛擬寄存器讀取(讀)值的任何指令,并且可包括例如將結果指派(寫)到虛擬寄存器以及從虛擬寄存器讀取(讀)結果的運算指令。單個指令可以既寫入到虛擬寄存器又從虛擬寄存器讀取。這類指令被分析多次,一次針對每個是讀或寫的主體的虛擬寄存器。
[0082]在步驟604中,編譯器101變換被指派到集群的寫指令,所述集群也是寫指令寫到的虛擬寄存器的屬主集群。在步驟606中,編譯器101變換被指派到集群的讀指令,所述集群不是讀指令從其中讀取的虛擬寄存器的屬主集群。在步驟608中,編譯器101變換被指派到集群的寫指令,所述集群不是寫指令寫到的虛擬寄存器的屬主集群。
[0083]圖7闡述了根據本發(fā)明的一個實施例的、圖6的步驟602中所描述的用于指派屬主集群的方法步驟的流程圖。盡管結合圖1-4描述了方法步驟,但是本領域的技術人員將理解的是,配置為以任何次序實施方法步驟的任何系統(tǒng)均落在本發(fā)明的范圍內。
[0084]如所示,方法700開始于步驟702,此處編譯器101獲取下一個虛擬寄存器有效范圍。如所知的,有效范圍包括對虛擬寄存器的訪問的范圍,其以對虛擬寄存器與值為開始并且以在對該虛擬寄存器進行下一個寫之前從虛擬寄存器的最后讀值為結束。虛擬寄存器有效范圍因此包括被指派到任何集群405的、在特定有效范圍中訪問虛擬寄存器的所有指令。虛擬寄存器可以具有多個有效范圍。因此,因為圖7中的流程圖循環(huán),所以可針對任何給定的虛擬寄存器多次實施步驟702。
[0085]在步驟704中,編譯器101對被指派到每個集群405的指令針對虛擬寄存器有效范圍的訪問的數目進行計數。在步驟706中,編譯器101將屬主集群指派到虛擬寄存器有效范圍作為訪問虛擬寄存器有效范圍的最多指令被指派到的集群405。在步驟708中,編譯器101檢查看是否存在任何剩下的虛擬寄存器有效范圍。如果存在剩下的虛擬寄存器有效范圍,那么方法700再次循環(huán)回到步驟702。如果不存在剩下的虛擬寄存器有效范圍,那么方法700前進到步驟604。
[0086]圖8闡述了根據本發(fā)明的一個實施例的、圖6的步驟604中所描述的用于變換屬主集群寫操作的方法步驟的流程圖。盡管結合圖1-4描述了方法步驟,但是本領域的技術人員將理解的是,配置為以任何次序實施方法步驟的任何系統(tǒng)均落在本發(fā)明的范圍內。
[0087]如所示,方法800開始于步驟802,此處編譯器101獲取被指派到集群的下一個寫指令,所述集群也是寫指令在特定有效范圍中所寫的虛擬寄存器的屬主集群。在步驟804中,編譯器101檢查在有效范圍中是否存在虛擬寄存器的任何非屬主集群讀。換句話說,編譯器101檢查是否存在被指派到虛擬寄存器有效范圍的非屬主集群的任何指令,其從虛擬寄存器在有效范圍中進行讀取。如果在有效范圍中存在虛擬寄存器的非屬主集群讀,那么方法600前進到步驟806。如果在有效范圍中不存在虛擬寄存器的非屬主集群讀,那么方法600循環(huán)回到步驟802。
[0088]在步驟806中,編譯器101在寫指令之后插入指令以將虛擬寄存器中的值拷貝到全局虛擬寄存器。全局虛擬寄存器用來使虛擬寄存器中的值對不是虛擬寄存器有效范圍的屬主的集群可用。
[0089]在步驟808中,編譯器101檢查是否還存在剩下的屬主集群寫。換句話說,編譯器101檢查是否還存在被指派到集群的指令,所述集群也是寫指令在特定有效范圍中所寫的虛擬寄存器的屬主集群。如果存在任何剩下的屬主集群寫,那么方法800循環(huán)回到步驟802。如果不再存在剩下的屬主集群寫,那么方法800進行到步驟606。
[0090]圖9闡述了根據本發(fā)明的一個實施例的、圖6的步驟606中所描述的用于變換非屬主集群讀操作的方法步驟的流程圖。盡管結合圖1-4描述了方法步驟,但是本領域的技術人員將理解的是,配置為以任何次序實施方法步驟的任何系統(tǒng)均落在本發(fā)明的范圍內。
[0091]如所示,方法900開始于步驟902,此處編譯器101獲取被指派到集群的下一個讀指令,所述集群不是讀指令從其中特定有效范圍中讀取的虛擬寄存器的屬主集群。
[0092]在步驟904中,編譯器101檢查在有效范圍中是否存在虛擬寄存器的多個非屬主集群讀。換句話說,編譯器101檢查在有效范圍中是否存在虛擬寄存器的多個讀指令,其也被指派到步驟902中所獲取的讀指令被指派到的集群。如果在有效范圍中不存在虛擬寄存器的多個非屬主集群讀,那么方法900進行到步驟906。如果在有效范圍中存在虛擬寄存器的多個非屬主集群讀,那么方法900進行到步驟908。
[0093]在步驟906中,編譯器101更改步驟902中所獲取的讀指令,使得取代從虛擬寄存器中進行讀取,讀指令反而從相應的全局寄存器進行讀取。相應的全局寄存器是作為在步驟806中由編譯器101所插入的指令的目標的寄存器。如上文關于步驟806所述,相應的全局寄存器用來使步驟806中所涉及的虛擬寄存器中的值對不是該虛擬寄存器的屬主的集群可用,諸如步驟902中所涉及的非屬主集群。
[0094]在步驟908中,編譯器101檢查步驟902中所獲取的讀指令是否是被指派到它的集群的第一讀指令。如果步驟902中所獲取的讀指令是被指派到它的集群的第一讀指令,那么編譯器101實施步驟910。如果讀指令不是被指派的它的集群的第一讀指令,那么編譯器101實施步驟912。
[0095]在步驟910中,編譯器101在讀指令之前插入指令以將值從相應的全局寄存器拷貝到新虛擬寄存器中。編譯器101還更改讀指令,以取代讀指令原始從其中讀取的虛擬寄存器,從新虛擬寄存器中進行讀取。相應的全局寄存器是作為在步驟806中由編譯器101所插入的指令的目標的寄存器。如上文關于步驟806所述,全局寄存器用來使步驟806中所涉及的虛擬寄存器中的值對不是該虛擬寄存器的屬主的集群可用,諸如步驟902中所涉及的非屬主集群。總而言之,在步驟910中,編譯器101插入指令以將值從步驟806中所涉及的全局虛擬寄存器帶到新本地虛擬寄存器中,并且更改讀指令以從該本地虛擬寄存器中進行讀取。
[0096]在步驟912中,編譯器101更改步驟902中所獲取的讀指令,以取代讀指令原始從其中讀取的虛擬寄存器,從新虛擬寄存器進行讀取。新虛擬寄存器是上文關于步驟910所涉及的新本地虛擬寄存器。因為對包括非屬主集群中的第一讀指令的所有讀指令實施步驟606,所以編譯器101對非屬主集群中的第一讀指令實施步驟910,并且如上文關于步驟910所描述的插入指令以將值從全局虛擬寄存器拷貝到新虛擬寄存器。該新虛擬寄存器也是步驟912中所涉及的虛擬寄存器。
[0097]在編譯器101實施步驟906、910或912之后,方法前進到步驟914。在步驟914中,編譯器101檢查是否存在任何剩下的非屬主集群讀。換句話說,編譯器101檢查是否存在任何剩下的被指派到集群的讀指令,所述集群不是指令從其中讀取的虛擬寄存器的屬主。如果存在任何剩下的非屬主集群讀,那么方法900循環(huán)回到步驟902。如果不存在剩下的非屬主集群讀,那么方法900前進到步驟608。
[0098]圖10闡述了根據本發(fā)明的一個實施例的、圖6中的步驟608中所描述的用于變換非屬主集群寫操作的方法步驟的流程圖。盡管結合圖1-4描述了方法步驟,但是本領域的技術人員將理解的是,配置為以任何次序實施方法步驟的任何系統(tǒng)均落在本發(fā)明的范圍內。
[0099]如所示,方法步驟1000開始于步驟1002,此處編譯器101獲取被指派到集群的下一個寫指令,所述集群不是寫指令在特定有效范圍中所寫的虛擬寄存器的屬主。
[0100]在步驟1003中,編譯器101檢查是否存在從虛擬寄存器有效范圍中進行讀取的、被指派到同一非屬主集群的任何讀指令。如果存在從虛擬寄存器有效范圍中進行讀取的、被指派到同一非屬主集群的讀,那么方法進行到步驟1004。如果不存在從虛擬寄存器有效范圍中進行讀取的、被指派到同一非屬主集群的讀,那么方法進行到步驟1005。
[0101]在步驟1004中,編譯器101更改寫指令使得它寫到新虛擬寄存器而不是它原始寫到的虛擬寄存器。在步驟1006中,編譯器101在寫指令之后插入第一拷貝指令,其將值從新虛擬寄存器拷貝到相應的全局虛擬寄存器。在步驟1008中,編譯器101在第一拷貝指令之后插入第二拷貝指令,以將值從相應的全局虛擬寄存器拷貝到在步驟1002中所獲取的寫指令原始寫到的虛擬寄存器。
[0102]在步驟1005中,編譯器101更改寫指令以寫到相應的全局虛擬寄存器。然后,在步驟1007中,編譯器101在寫指令之后插入拷貝指令,以將值從相應的全局虛擬寄存器拷貝到虛擬寄存器。通過實施步驟1005和1007,編譯器將由非屬主集群所寫入的值拷貝回到屬主集群中的虛擬寄存器。在實施步驟1008或1007之后,編譯器101實施步驟1010。
[0103]在步驟1010中,編譯器101檢查是否還存在剩下的非屬主集群寫。換句話說,編譯器101檢查是否存在被指派到集群的任何寫指令,所述集群不擁有寫指令寫到的虛擬寄存器。如果存在剩下的非屬主集群寫,那么方法循環(huán)回到步驟1002。如果不存在剩下的非屬主集群寫,那么方法前進到步驟520。
[0104]如下文所闡述的,圖11-12示出了可以如何應用上文結合圖5-10所提出的技術的第一示例。圖13-14隨后示出了可以如何應用上文結合圖5-10所提出的技術的第二示例。
[0105]圖11是根據本發(fā)明的一個實施例的、描繪了在虛擬寄存器分區(qū)之前和之后的示范性代碼段的框圖。圖11描繪了具有虛擬指令集中的指令的代碼段,所述指令已被指派到三個不同集群C1、C2以及C3。圖11描繪了在虛擬寄存器分區(qū)之前在單個有效范圍1104內訪問的虛擬寄存器VRl的指令。所示出的指令是利用符號“W”所描繪的寫或利用符號“R”所描繪的讀。寫包括將值寫入到VRl的任何指令。讀包括從VRl讀取值的任何指令。其他指令可以存在,但不對其進行描述,并且利用符號“.”來描繪。
[0106]代碼段1102-1、1102-2以及1102-3包括尚未被虛擬寄存器分區(qū)修改的指令。指令1106被指派到集群Cl,指令1108和1110被指派到集群C2,并且指令1112被指派到集群C3。所有指令1106、1108、1110以及1112訪問同一虛擬寄存器,寄存器VR1。此外,示出了用于虛擬寄存器VRl的有效范圍1104。有效范圍1104從指令1108延伸到指令1110,其中指令1108為VRl的第一寫,指令1110為VRl的最后的讀。
[0107]代碼段1122-1、1122-2以及1122-3包括已被虛擬寄存器分區(qū)修改的指令。指令1126被指派到集群Cl,指令1128和1130被指派到集群C2,并且指令1132被指派到集群C3。指令1126,1128,1130以及1132分別與指令1106、1108、1110以及1112相對應。
[0108]屬主集群是集群Cl。在代碼段1102-1中,在有效范圍1104中存在三個對VRl的訪問。在代碼段1102-2中,在有效范圍1104中存在兩個對VRl的訪問。在代碼段1102-3中,在有效范圍1104中存在一個對VRl的訪問。代碼段1102-1中的、被指派到Cl的指令具有在有效范圍1104中對VRl的最多訪問。因此,集群Cl是VRl有效范圍1104的屬主集群。
[0109]代碼段1102-1包括讀指令1106。因為集群Cl是屬主集群,所以包括從VRl讀取的指令1106的、被指派到集群Cl的讀不被修改。VRl是用于它的屬主集群的本地虛擬寄存器,所述屬主集群為集群Cl。因此,讀指令1126與讀指令1106相同。
[0110]代碼段1102-2包括寫指令1108和讀指令1110。寫指令1128是寫指令1108的經修改的版本。寫指令1128將值寫到新本地虛擬寄存器VR2。VR2是本地于集群C2的本地虛擬寄存器。寫指令1128還將寫到VR2的值拷貝到VRl中,所述VRl針對集群Cl是本地虛擬寄存器。將值從VR2拷貝到VRl不直接完成,而是通過使用全局虛擬寄存器MVRO來完成。因此,寫指令1128首先通過指令“MOV MVR0,VR2”將值拷貝到全局虛擬寄存器MVR0,隨后通過指令“MOV VRl,MVRO”將其拷貝到虛擬寄存器VRl。讀指令1130從新虛擬寄存器進行讀取,所述新虛擬寄存器為寄存器VR2,所述寄存器VR2針對集群C2是本地虛擬寄存器。
[0111]代碼段1102-3僅包括一個指令一讀指令1112。因為代碼段1102-3中沒有其他指令在有效范圍1104中利用VR1,所以讀指令1132直接從全局虛擬寄存器MVRO進行讀取。
[0112]圖12是根據本發(fā)明的一個實施例的多級寄存器堆層次1200的框圖。圖12參考圖11進行討論。集群Cl具有本地寄存器堆1206-1,集群C2具有本地寄存器堆1206-2,并且集群C3具有本地寄存器堆1206-3。主寄存器堆1210也存在并可由集群Cl、C2以及C3訪問。本地虛擬寄存器VRl被指派到集群Cl中的物理寄存器1208-1,本地虛擬寄存器VR2被指派到集群C2中的物理寄存器1208-2,并且全局虛擬寄存器MVRO被指派到主寄存器堆1210中的物理寄存器1212。箭頭1214、1216以及1218指示由被指派到集群C1、C2以及C3的(圖11中的)指令1126、1128、1130以及1132對物理寄存器中的值的訪問。
[0113]箭頭1214-1與指令1126相對應,其讀取存儲在物理寄存器1208-1中的值。箭頭1216-1與指令1128和1130相對應。值在1128中被寫到物理寄存器1208-2并且在1130中被從物理寄存器1208-2中讀取。箭頭1216-2與指令1128中的拷貝指令(“MOV”)相對應,其將值從物理寄存器1208-2拷貝到物理寄存器1212。箭頭1216-3與指令1128中的第一拷貝指令相對應,其將物理寄存器1212中的值拷貝到物理寄存器1208-1。箭頭1218與讀指令1132相對應,其從物理寄存器1212進行讀取。
[0114]圖13是根據本發(fā)明的一個實施例的、描繪了在虛擬寄存器分區(qū)之前和之后的示范性代碼段的框圖。圖13描繪了具有虛擬指令集中的指令的代碼段,所述指令已被指派到三個不同集群C1、C2以及C3。圖13集中于在虛擬寄存器分區(qū)之前在兩個不同有效范圍1304-1和1304-2內訪問單個虛擬存儲器VRl的指令。所示出的指令是利用符號“W”所描繪的寫或利用符號“R”所描繪的讀。寫包括將值寫到VRl的任何指令。讀包括從VRl讀取值的任何指令。其他指令可以存在,但不對其進行描述,并且利用符號“.”來描繪。
[0115]代碼段1302-1、1302-2以及1302-3包括尚未被虛擬寄存器分區(qū)修改的指令。指令1306和1308被指派到集群Cl,指令1310、1312以及1314被指派到集群C2,并且指令1316和1318被指派到集群C3。所有指令1306、1308、1310、1312、1314、1316以及1318訪問同一虛擬寄存器,寄存器VRl。然而,指令1306、1310以及1316在第一有效范圍1304-1中,而指令1308、1314和1318在第二有效范圍1304-2中。因為對虛擬寄存器VRl存在兩個不同的寫——指令1310是第一寫并且1318是第二寫,所以針對虛擬寄存器VRl存在兩個有效范圍1304-1、1304-2。第一有效范圍1304-1從第一寫1310延伸直到在下一個寫1318之前的最后的讀1312,第二有效范圍1304-2從第二寫1318延伸直到最后的讀1308。
[0116]代碼段1322-1、1322-2以及1322-3包括已被虛擬寄存器分區(qū)修改的指令。指令1326和1328被指派到集群Cl,指令1330、1332和1334被指派到集群C2,并且指令1336和1338 被指派到集群 C3。指令 1326、1328、1330、1332、1334、1336 和 1338 分別與指令 1306、1308、1310、1312、1314、1316 和 1318 相對應。
[0117]對于第一有效范圍1304-1,屬主集群是集群C2。在代碼段1302-1中,有效范圍1304-1中存在一個對VRl的訪問。在代碼段1302-2中,有效范圍1304-1中存在兩個對VRl的訪問。在代碼段1302-3中,有效范圍1304-1中存在一個對VRl的訪問。有效范圍1304-1中的被指派到集群C2的指令具有有效范圍1304-1中的對VRl的最多訪問。因此,集群C2是VRl有效范圍1304-1的屬主集群。在有效范圍1304-1中,僅存在一個訪問VRl的被指派到集群Cl的指令。因此,指令1326直接從全局虛擬寄存器MVRO進行讀取。在有效范圍1304-1中,集群C2中的第一指令是寫指令1310。因此,指令1330包括拷貝指令以將值從VRl拷貝到全局虛擬寄存器MVRO。因為C2是VRl有效范圍1324-1的屬主集群,所以1330中的寫指令和讀指令1332 二者都不被修改。在有效范圍1304-1中,被指派到C3的僅有的指令是讀指令。因此,指令1336直接從全局虛擬寄存器MVRO進行讀取。
[0118]對于第二有效范圍1304-2,屬主集群是集群C2。在代碼段1302-1中,有效范圍1304-2中存在一個對VRl的訪問。在代碼段1302-2中,有效范圍的1304-2中存在兩個對VRl的訪問。在代碼段1302-3中,有效范圍1304-2中存在一個對VRl的訪問。有效范圍1304-2中的被指派到集群C2的指令具有有效范圍1304-1中的對VRl的最多訪問。因此,集群C2是VRl有效范圍1304-2的屬主集群。在有效范圍1304-2中時,僅存在一個訪問VRl的被指派到集群Cl的指令。因此,指令1328直接從全局虛擬寄存器MVRO進行讀取。在有效范圍1304-2中,集群C2中的指令二者都是讀指令。因為C2是VRl有效范圍1324-2的屬主集群,所以指令1334與指令1314是同樣的。在有效范圍1304-2中,被指派到集群C3的僅有的指令是寫指令。因此,指令1338直接寫到全局虛擬寄存器MVR0,并且隨后將MVRO中的值拷貝到VRl用于屬主集群,集群C2。
[0119]圖14是根據本發(fā)明的一個實施例的多級寄存器堆層次1400的框圖。圖14參考圖13進行討論。集群Cl具有本地寄存器堆1406-1,集群C2具有本地寄存器堆1406-2,并且集群C3具有本地寄存器堆1406-3。主寄存器堆1410也存在并可由集群C1、C2和C3訪問。本地虛擬寄存器VRl被指派到集群Cl中的物理寄存器1408,并且全局虛擬寄存器MVRO被指派到主寄存器堆1410中的物理寄存器1412。因為有效范圍1304-1和1304-2不重疊,所以集群C2中的同一物理寄存器1408可以在有效范圍1304-1和1304-2 二者中用于VRl。類似地,因為有效范圍1304-1和1304-2不重疊,所以主寄存器堆1410中的同一物理寄存器1412可以在有效范圍1304-1和1304-2 二者中用于MVR0。箭頭1414,1416和1418指示由被指派到集群Cl、C2和C3的(圖13中的)指令1326、1328、1330、1332、1334、1336和1338對物理寄存器中的值的訪問。
[0120]箭頭1414與指令1326和1328相對應,這二者讀取存儲在物理寄存器1412中的值。箭頭1416-1與指令1330和1338相對應,在1330中值從VRl被拷貝到MVR0,并且在1338中值從MVRO被拷貝到VRl。箭頭1416-2與指令1330、指令1332和1334和相對應,指令1330將值寫到VRl,并且指令1332和1334從VRl讀取該值。箭頭1418與指令1336和1338相對應,指令1336和指令1338從MVRO讀取值并且將值寫入到MVR0。
[0121]總而言之,依據本文所提出的教導,編譯器修改包含從虛擬寄存器讀取數據以及將數據寫到虛擬寄存器的指令的程序代碼,來有利地將虛擬寄存器分配到多級寄存器堆層次中的物理寄存器。多級寄存器堆層次包括物理寄存器并且可以在具有多個集群的流多處理器中以硬件實現。每個集群具有用于處理指令的一個或多個功能單元。進一步地,每個集群具有僅可由處理集群中的功能單元直接訪問的低級寄存器堆。高級寄存器堆存在于流多處理器中,并且可由所有集群直接訪問。
[0122]編譯器分析具有從虛擬寄存器讀取或者寫到虛擬寄存器的指令的程序代碼,并且將這些指令中的每一個分配到相應的集群。編譯器隨后確定虛擬寄存器有效范圍,并且基于每個集群針對每個虛擬寄存器有效范圍的虛擬寄存器訪問(讀或寫)的數目來將屬主集群指派到每個虛擬寄存器有效范圍。編譯器隨后修改訪問虛擬寄存器的程序代碼中的指令,使得虛擬寄存器中的值可被存儲在屬主集群的低級寄存器堆中。編譯器修改被指派到屬主集群的指令以及被指派到非屬主集群的指令。
[0123]編譯器修改被指派到屬主集群的指令,使得被分配到屬主集群的虛擬寄存器中的值被存儲在本地于屬主集群的“本地虛擬寄存器”中。對于被指派到屬主集群的將值寫到本地虛擬寄存器的指令,編譯器插入附加的指令以將值從本地虛擬寄存器拷貝到相應的“全局虛擬寄存器”,使得本地虛擬寄存器中的值對非屬主集群可訪問。
[0124]編譯器還修改被指派到非屬主集群并且訪問被分配到屬主集群的虛擬寄存器中的值的指令。特別地,編譯器修改被指派到非屬主集群的、讀取或寫入被分配到屬主集群的本地虛擬寄存器中的值的指令,使得被指派到非屬主集群的指令反而從相應的全局虛擬寄存器讀取或寫入值。
[0125]本地虛擬寄存器隨后被分配到低級寄存器堆中的物理寄存器,而全局虛擬寄存器隨后被分配到高級寄存器堆中的物理寄存器。
[0126]本文所提供的技術的一個優(yōu)勢在于,所公開的技術可以對訪問多級寄存器堆層次中的寄存器的指令進行配置,使得常常被訪問的寄存器可以被分配到本地寄存器堆中的物
理寄存器。
[0127]本發(fā)明的一個實施例可被實施為與計算機系統(tǒng)一起使用的程序產品。該程序產品的程序定義實施例的各功能(包括本文中描述的方法)并且可以被包含在各種計算機可讀存儲介質上。示例性計算機可讀存儲介質包括但不限于:(i)不可寫的存儲介質(例如,計算機內的只讀存儲器設備,諸如可由CD-ROM驅動器讀取的壓縮光盤只讀存儲器(CD-ROM)盤、閃存、只讀存儲器(ROM)芯片或任何類型的固態(tài)非易失性半導體存儲器),在其上存儲永久性信息jP(ii)可寫的存儲介質(例如,磁盤驅動器或硬盤驅動器內的軟盤或者任何類型的固態(tài)隨機存取半導體存儲器),在其上存儲可更改的信息。
[0128]以上已參照具體實施例對本發(fā)明進行了描述。然而,本領域普通技術人員將理解的是,可對此做出各種修改和變化而不脫離如隨附權利要求書中所闡述的本發(fā)明的較寬精神和范圍。因此,前面的描述以及附圖應被視為是例示性而非限制性的意義。
[0129]因此,本發(fā)明的實施例的范圍在下面的權利要求中進行闡述。
【權利要求】
1.一種分配處理單元內的寄存器的方法,所述方法包括: 將多個指令指派到多個處理集群,其中每個指令配置為在有效范圍內訪問第一虛擬寄存器; 在所述有效范圍內,確定所述多個處理集群中哪個處理集群是用于所述第一虛擬寄存器的屬主集群;以及 將包括在所述多個指令中的第一指令配置為訪問第一全局虛擬寄存器。
2.根據權利要求1所述的方法,其中所述第一指令配置為對所述虛擬寄存器實現寫操作并且被指派到所述屬主集群。
3.根據權利要求2所述的方法,其中: 所述第一指令在程序控制流中具有相應的位置;以及 配置所述第一指令包括:確定被指派到非屬主集群的指令配置為實現從所述第一虛擬寄存器的讀操作;以及在所述第一指令在所述程序控制流中的相應的位置之后插入拷貝指令,其中所述拷貝指令配置為實現將所述第一虛擬寄存器中的值拷貝到所述第一全局虛擬寄存器的拷貝操作。
4.根據權利要求1所述的方法,其中所述第一指令配置為對所述第一虛擬寄存器實現寫操作并且被指派到非屬主集群。
5.根據權利要求4所述的方法,其中:` 所述第一指令在程序控制流中具有相應的位置;以及 配置所述第一指令包括: 將所述第一指令配置為對第二虛擬寄存器實現寫操作; 在所述第一指令在所述程序控制流中的相應的位置之后插入第一拷貝指令,其中所述第一拷貝指令配置為實現將所述第二虛擬寄存器中的值拷貝到所述第一全局虛擬寄存器的拷貝操作;以及 在所述第一拷貝指令之后插入第二拷貝指令,其中所述第二拷貝指令配置為實現將所述第一全局虛擬寄存器中的值拷貝到所述第一虛擬寄存器的拷貝操作。
6.根據權利要求1所述的方法,其中所述第一指令配置為實現從所述第一虛擬寄存器的讀操作并且被指派到非屬主集群。
7.根據權利要求6所述的方法,其中配置所述第一指令包括: 在所述有效范圍內,確定僅存在配置為實現從所述第一虛擬寄存器的讀操作并且被指派到所述非屬主集群的一個讀指令;以及 將所述第一指令配置為實現從所述第一全局虛擬寄存器的讀操作。
8.根據權利要求6所述的方法,其中: 所述第一指令在程序控制流中具有相應的位置;以及 配置所述第一指令包括: 確定在所述有效范圍存在配置為從所述第一虛擬寄存器進行讀取并且被指派到所述非屬主集群的多個讀指令; 在所述第一指令在所述程序控制流中的相應的位置之前插入第一拷貝指令,其中所述第一拷貝指令配置為將所述第一全局寄存器中的值拷貝到第二虛擬寄存器;以及將所述多個讀指令配置為實現從所述第二虛擬寄存器的讀操作。
9.一種用于分配處理單元內的寄存器的計算設備,所述計算設備包括: 處理器;以及 耦連到所述處理器的存儲器,其中所述存儲器包括具有指令的編譯器,所述指令當由所述處理器執(zhí)行時使所述處理器: 將多個指令指派到多個處理集群,其中每個指令配置為在有效范圍內訪問第一虛擬寄存器; 在所述有效范圍內,確定所述多個處理集群中哪個處理集群是用于所述第一虛擬寄存器的屬主集群;以及 將包括在所述多個指令中的第一指令配置為訪問第一全局虛擬寄存器。
10.根據權利要求9所述的計算設備,其中: 所述第一指令配置為對所述虛擬寄存器實現寫操作并且被指派到所述屬主集群; 所述第一指令在程序控制流中具有相應的位置;以及 配置所述第一指令包括:確定被指派到非屬主集群的指令配置為實現從所述第一虛擬寄存器的讀操作;以及在所述第一指令在所述程序控制流中的相應的位置之后插入拷貝指令,其中所述拷貝指令配置為實現將所述第一虛擬寄存器中的值拷貝到所述第一全局虛擬寄存器的拷貝操作。`
【文檔編號】G06F9/45GK103870309SQ201310675182
【公開日】2014年6月18日 申請日期:2013年12月11日 優(yōu)先權日:2012年12月11日
【發(fā)明者】穆杰塔巴·梅哈拉, 格雷戈里·迪亞蒙斯 申請人:輝達公司