專利名稱:用于解決線程發(fā)散的方法和系統(tǒng)的制作方法
用于解決線程發(fā)散的方法和系統(tǒng)技術領域
本發(fā)明總地涉及多線程處理,并且,更具體地,涉及一種用于解決線程發(fā)散的方法和系統(tǒng)。
背景技術:
“線程組”是以單指令多線程(SMT)或單指令多數(shù)據(jù)(SMD)方式來共同執(zhí)行相同的指令的并行線程的集合。為了實施各種不同的處理任務,并行處理單元(PPU)可以同時發(fā)出和執(zhí)行許多并行線程。當執(zhí)行給定的線程時,該線程可以從特定存儲器位置讀取數(shù)據(jù)或?qū)憯?shù)據(jù)至特定存儲器位置,諸如寄存器堆。通常,線程組中的各種線程均以相同的存儲器位置為目標。然而,某些類型的指令可能導致出現(xiàn)分支,從而導致一些線程以一個存儲器位置為目標,而其他線程以其他存儲器位置為目標。本領域稱之為“線程發(fā)散(divergence)”。采用常規(guī)的PPU,線程發(fā)散可以導致系統(tǒng)范圍的PPU故障。
因此,本領域需要的是用于解決線程組內(nèi)的線程之間的發(fā)散的技術。
為了詳細地理解本發(fā)明的上述特征,對于以上簡要概括的發(fā)明,可以參照實施例進行更為具體的描述,其中一些實施例示出于附圖中。然而,應注意的是,附圖中示出的只是本發(fā)明的代表性實施例,因此不應被認為是對本發(fā)明的范圍的限制,本發(fā)明可以適用于其他同等有效的實施例。
圖1是示出了配置為實現(xiàn)本發(fā)明的一個或多個方面的計算機系統(tǒng)的框圖2是根據(jù)本發(fā)明一個實施例的、用于圖1的計算機系統(tǒng)的并行處理子系統(tǒng)的框圖3A是根據(jù)本發(fā)明一個實施例的、圖2的前端的框圖3B是根據(jù)本發(fā)明一個實施例的、圖2的并行處理單元之一內(nèi)的通用處理集群的框圖3C是根據(jù)本發(fā)明一個實施例的、圖3B的流多處理器的一部分的框圖4是根據(jù)本發(fā)明一個實施例的、更詳細地示出圖3C的卷繞包(warp)調(diào)度器和指令單元的框圖;以及
圖5是根據(jù)本發(fā)明一個實施例的、用于解決線程組內(nèi)的線程之間發(fā)散的方法步驟的流程圖。
具體實施方式
在下面的描述中,將闡述大量的詳細內(nèi)容以提供對本發(fā)明更深入的理解。然而,本技術領域的技術人員應該清楚,本發(fā)明可以在沒有一個或多個這些具體細節(jié)的情況下得以實施。
總而言之,并行處理單元內(nèi)的地址發(fā)散單元將線程組內(nèi)的線程分為非發(fā)散線程子集和發(fā)散線程子集。地址發(fā)散單元導致發(fā)出非發(fā)散線程子集用于在并行處理單元上執(zhí)行,同時導致重新獲取和重新發(fā)出與發(fā)散線程子集相關聯(lián)的指令。
系統(tǒng)概述
圖1是示出了配置為實現(xiàn)本發(fā)明的一個或多個方面的計算機系統(tǒng)100的框圖。計算機系統(tǒng)100包括中央處理單元(CPU) 102和系統(tǒng)存儲器104,兩者經(jīng)由可包括存儲器橋105的互連路徑通信。存儲器橋105例如可以是北橋芯片,經(jīng)由總線或其他通信路徑106(例如,超傳輸鏈接)連接到I/O (輸入/輸出)橋107。I/O橋107例如可以是南橋芯片,從一個或多個用戶輸入設備108 (例如,鍵盤、鼠標)接收用戶輸入,并將該輸入經(jīng)由通信路徑106和存儲器橋105轉(zhuǎn)發(fā)至CPU102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113(例如,外圍部件互連(PCI) Express、加速圖形端口或超傳輸鏈接)耦合至存儲器橋105 ;在一個實施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設備110 (例如,常規(guī)的基于陰極射線管或液晶顯示器的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關116為I/O橋107和諸如網(wǎng)絡適配器118以及各種插卡(add-1n card) 120和121的其他部件之間提供了連接。其他部件(未明確示出)也可以連接到I/O橋107,包括通用串行總線USB或其他端口連接、光盤(⑶)驅(qū)動器、數(shù)字視頻光盤(DVD)驅(qū)動器、膠片記錄設備等。圖1中所示的包括具體命名為通信路徑106和113的各種通信路徑可以使用任何合適的協(xié)議來實現(xiàn),諸如PCI Express, AGP (加速圖形端口)、超傳輸或任何其他總線或點對點通信協(xié)議,并且不同設備之間的連接可以使用本領域已知的不同協(xié)議。
在一個實施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于圖形和視頻處理的電路,例如包括視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個實施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于通用處理的電路,同時保留底層的(underlying)計算架構(gòu),本文將進行更為詳細的描述。在又一個實施例中,并行處理子系統(tǒng)112可與單個子系統(tǒng)中的一個或多個其他系統(tǒng)元件集成,諸如結(jié)合存儲器橋105、CPU 102和I/O橋107以形成片上系統(tǒng)(SoC)。
應理解的是,本文所示系統(tǒng)是例示性的,可以對其進行變形和修改??筛鶕?jù)需要修改連接拓撲結(jié)構(gòu),包括橋的數(shù)目和布置、CPU 102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目。例如,在一些實施例中,系統(tǒng)存儲器104直接連接到CPU 102而非通過橋連接,并且其他設備經(jīng)由存儲器橋105和CPU 102與系統(tǒng)存儲器104通信。在其他替代拓撲結(jié)構(gòu)中,并行處理子系統(tǒng)112連接到I/O橋107或者直接連接到CPU 102,而非連接到存儲器橋105。在又一些實施例中,I/O橋107和存儲器橋105可能被集成到單個芯片中而不是作為一個或多個分立的設備存在。大型實施例可包括兩個或更多CPU 102以及包括兩個或更多并行處理子系統(tǒng)112。本文所示特定部件是可選的;例如,任何數(shù)目的插卡或外圍設備都可能得到支持。在一些實施例中,開關116被省去,并且網(wǎng)絡適配器118和插卡120、121直接連接到I/0 橋 107。
圖2示出了根據(jù)本發(fā)明一個實施例的并行處理子系統(tǒng)112。如圖所示,并行處理子系統(tǒng)112包括一個或多個并行處理單元(Pro)202,其每一個均耦合至本地并行處理(PP)存儲器204。一般來講,并行處理子系統(tǒng)包括U個PPU,其中US I。(本文中,相似對象的多個實例用標識該對象的參考數(shù)字并根據(jù)需要結(jié)合標識該實體的帶括號的數(shù)字加以表示)。PPU202和并行處理存儲器204可用一個或多個諸如可編程處理器、專用集成電路(ASIC)或存儲器設備這類集成電路設備來實現(xiàn),或者以任何其他在技術上可行的方式來實現(xiàn)。
再次參照圖1以及圖2,在一些實施例中,并行處理子系統(tǒng)112中的一些或所有PPU 202是具有渲染管線的圖形處理器,可以配置為實施與下述各項相關的各種操作:由圖形數(shù)據(jù)生成像素數(shù)據(jù),所述圖形數(shù)據(jù)是由CPU 102和/或系統(tǒng)存儲器104經(jīng)由存儲器橋105和第二通信路徑113而供給的;與本地并行處理存儲器204 (可以作為圖形存儲器加以使用,包括例如常規(guī)的幀緩沖區(qū))交互,以存儲和更新像素數(shù)據(jù);將像素數(shù)據(jù)傳遞到顯示設備110 ;等等。在一些實施例中,并行處理子系統(tǒng)112可包括作為圖形處理器而操作的一個或多個PPU 202以及供通用計算使用的一個或多個其他PPU 202。這些PPU可相同或不同,并且每個PTO均可具有其專用的并行處理存儲器設備或非專用的并行處理存儲器設備。并行處理子系統(tǒng)112中的一個或多個PPU 202可向顯示設備110輸出數(shù)據(jù),或者并行處理子系統(tǒng)112中的每個PPU 202均可向一個或多個顯示設備110輸出數(shù)據(jù)。
操作中,CPU 102是計算機系統(tǒng)100的主處理器,控制并協(xié)調(diào)其他系統(tǒng)部件的操作。特別是,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實施例中,CPU 102將針對每個PPU 202的命令流寫入到數(shù)據(jù)結(jié)構(gòu)(圖1和圖2中均未明確示出)中,所述數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲器104、并行處理存儲器204或者CPU 102和PPU 202均可訪問的另一個存儲位置中。對入棧緩沖區(qū)(pushbuffer)寫入指向每個數(shù)據(jù)結(jié)構(gòu)的指針來開始數(shù)據(jù)結(jié)構(gòu)中命令流的處理。PPU 202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令。可經(jīng)由設備驅(qū)動程序103由應用程序為每個入棧緩沖區(qū)指定執(zhí)行優(yōu)先級,以控制不同入棧緩沖區(qū)的調(diào)度。
現(xiàn)在返回參考圖2以及圖1,每個PPU 202均包括I/O (輸入/輸出)單元205,該I/O單元205經(jīng)由通信路徑113與計算機系統(tǒng)100的其余部分通信,其連接到存儲器橋105(或者,在一個替代實施例中,直接連接到CPU 102)。PPU 202到計算機系統(tǒng)100的其余部分的連接也可以變化。在一些實施例中,并行處理子系統(tǒng)112實現(xiàn)為可以被插入到計算機系統(tǒng)100的擴展槽中的插卡。在另一些實施例中,PPU 202可以集成在具有諸如存儲器橋105或I/O橋107這類總線橋的單個芯片上。在又一些實施例中,PI3U 202中的一些或全部元件可集成在具有CPU 102的單個芯片上。
在一個實施例中,通信路徑113是PCI Express鏈接,其中給每個PPU202分配有專用通道(lane),如本領域已知的。也可使用其他通信路徑。I/O單元205生成數(shù)據(jù)包(或其他信號)用于在通信路徑 113上傳輸,并且也從通信路徑113接收所有進入的數(shù)據(jù)包(或其他信號),將傳入的數(shù)據(jù)包引向PPU 202的適當部件。例如,可將與處理任務相關的命令引向主機接口 206,而可將與存儲器操作相關的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引向存儲器交叉開關(crossbar)單元210。主機接口 206對每個入棧緩沖區(qū)進行讀取并將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。
每個PPU 202均有利地實現(xiàn)高度并行的處理架構(gòu)。如圖中詳細所示,PPU 202(0)包括處理集群陣列230,該陣列包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC208均能夠并發(fā)執(zhí)行大量(例如,數(shù)百個或數(shù)千個)線程,其中每個線程均為程序的實例(instance)。在各種應用中,可分配不同的GPC 208,用于處理不同類型的程序或用于實施不同類型的計算。GPC 208的分配可依據(jù)每個類型的程序或計算發(fā)生的工作量而變化。
GPC 208從在任務/工作單元207內(nèi)的工作分布單元接收將要執(zhí)行的處理任務。工作分布單元接收指向被編碼為任務元數(shù)據(jù)(TMD)并存儲在存儲器中的處理任務的指針。指向TMD的指針包括在命令流中,所述命令流被存儲為入棧緩沖區(qū)并由前端單元212從主機接口 206接收??删幋a為TMD的處理任務包括將要處理的數(shù)據(jù)的索引以及定義將如何處理數(shù)據(jù)(例如,將執(zhí)行什么程序)的命令和狀態(tài)參數(shù)。任務/工作單元207從前端212接收任務并保證GPC 208在由每一個TMD所指定的處理開始前被配置為有效狀態(tài)。可為每個用于調(diào)度處理任務的執(zhí)行的TMD指定優(yōu)先級。也可以從處理集群陣列230接收處理任務??蛇x地,TMD可包括控制是否將TMD添加到處理任務列表(或者指向處理任務的指針列表)的頭部或尾部的參數(shù),從而提供對于優(yōu)先級的另一個級別的控制。
存儲器接口 214包括D個分區(qū)單元215,這些分區(qū)單元每一個均直接耦合至并行處理存儲器204的一部分,其中D > I。如圖所示,分區(qū)單元215的數(shù)目通常等于動態(tài)隨機存取存儲器(DRAM) 220的數(shù)目。在另一些實施例中,分區(qū)單元215的數(shù)目可以不等于存儲器設備的數(shù)目。本領域的技術人員將認識到,DRAM 220可用其他合適的存儲設備代替,并且可以采用一般常規(guī)設計。因此省略詳細描述??煽鏒RAM 220來存儲諸如幀緩沖區(qū)或紋理映射這樣的渲染目標,允許分區(qū)單元215并行地寫入每個渲染目標的各部分,以高效地使用并行處理存儲器204的可用帶寬。
GPC 208中的任何一個都可處理將被寫入并行處理存儲器204內(nèi)任何DRAM 220的數(shù)據(jù)。交叉開關單元210配置為將每個GPC 208的輸出路由(route)至任何分區(qū)單元215的輸入或路由至另一 GPC 208,用于進一步處理。GPC 208通過交叉開關單元210與存儲器接口 214通信,以對各種外部存儲器設備進行讀寫。在一個實施例中,交叉開關單元210具有至存儲器接口 214的連接以與I/O單元205通信,以及具有至本地并行處理存儲器204的連接從而使不同GPC 208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或相對于PPU 202來講非本地的其他存儲器通信。在圖2所示實施例中,交叉開關單元210與I/O單元205直接連接。交叉開關單元210可使用虛擬信道來分離GPC 208和分區(qū)單元215之間的業(yè)務(traffic)流。
再者,GPC 208可以編程為執(zhí)行與種類繁多的應用相關的處理任務,包括但不限于線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)的過濾、建模操作(例如,運用物理定律確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細分著色、頂點著色、幾何著色和/或像素著色程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204轉(zhuǎn)移到內(nèi)部(片上)存儲器中,對數(shù)據(jù)進行處理,并將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,在這里這類數(shù)據(jù)可以由其他系統(tǒng)部件訪問,包括CPU 102或另一并行處理子系統(tǒng)112。
可為PPU 202提供任何容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以任何組合方式來使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實施例中,PPU 202可以是圖形處理器。在這樣的實施例中,將會提供極少的甚至不提供專用圖形(并行處理)存儲器,并且PPU 202將以排他的方式或者幾乎以排他的方式使用系統(tǒng)存儲器。在UMA實施例中,PPU 202可集成到橋式芯片或處理器芯片中,或者可被提供作為具有高速鏈接(例如,PCI Express)的分立芯片,所述高速鏈接經(jīng)由橋式芯片或其他通信手段將PPU 202連接到系統(tǒng)存儲器。
如上所述,并行處理子系統(tǒng)112中可以包括有任何數(shù)目的PPU 202。例如,可以在單個插卡上提供多個PPU 202,或者多個插卡可以連接到通信路徑113,或者PPU 202中的一個或多個可以集成到橋式芯片中。多PPU系統(tǒng)中的PPU 202可彼此相同或不同。例如,不同的PPU 202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲器等。在存在有多個PPU202的情況下,可以并行地操作這些PI3U從而以高于單個PPU 202可能達到的吞吐量來處理數(shù)據(jù)。包含一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來加以實現(xiàn),包括桌上型電腦、膝上型電腦或者手持式個人計算機、服務器、工作站、游戲控制臺、嵌入式系統(tǒng)等。
多個并發(fā)任務調(diào)度
可在GPC 208上并發(fā)執(zhí)行多個處理任務,并且處理任務可在執(zhí)行期間生成一個或多個“子”處理任務。任務/工作單元207接收任務并動態(tài)調(diào)度處理任務和子處理任務用于由GPC 208執(zhí)行。
圖3A是根據(jù)本發(fā)明的一個實施例的、圖2的任務/工作單元207的框圖。任務/工作單元207包括任務管理單元300和工作分布單元340。任務管理單元300基于執(zhí)行優(yōu)先級級別來組織將要調(diào)度的任務。對于每個優(yōu)先級級別,任務管理單元300存儲指向與在調(diào)度器表321中的任務相對應的TMD 322的指針的列表,其中列表可實現(xiàn)為鏈接列表。TMD322可存儲在PP存儲器204或系統(tǒng)存儲器104中。任務管理單元300接受任務和將任務存儲在調(diào)度器表321中的速率與任務管理單元300調(diào)度任務用于執(zhí)行的速率解耦。因此,任務管理單元300可以在調(diào)度任務之前收集若干個任務。然后,所收集的任務可以基于優(yōu)先級信息或使用諸如輪叫調(diào)度的其他技術來調(diào)度。
工作分布單元340包括具有槽的任務表345,每個所述槽可被TMD322占用,用于正在執(zhí)行的任務。當任務表345中存在空閑槽時,任務管理單元300可調(diào)度任務用于執(zhí)行。當沒有空閑槽時,未占用槽的較高優(yōu)先級任務可驅(qū)逐占用槽的較低優(yōu)先級任務。當任務被驅(qū)逐時,該任務停止,并且如果該任務的執(zhí)行未完成,那么將指向該任務的指針添加到將要被調(diào)度的任務指針的列表,使得稍后恢復該任務的執(zhí)行。當在任務的執(zhí)行期間生成子處理任務時,將指向子任務的指針添加到將要調(diào)度的任務指針的列表??梢杂稍谔幚砑宏嚵?30中執(zhí)行的TMD 322來生成子任務。
與由任務/工作單元207從前端212處所接收的任務不同,子任務是從處理集群陣列230處接收的。子任務不插入入棧緩沖區(qū)中或者傳輸?shù)角岸恕.斏勺尤蝿栈蛘邔⒂糜谧尤蝿盏臄?shù)據(jù)存儲在存儲器中時,不通知CPU102。通過入棧緩沖區(qū)所提供的任務和子任務之間的另一個不同之處在于,通過入棧緩沖區(qū)所提供的任務由應用程序定義,而子任務在任務執(zhí)行期間動態(tài)生成。
任務處理概述
圖3B是根據(jù)本發(fā)明一個實施例的、圖2的一個PPU 202內(nèi)的GPC 208的框圖。每個GPC 208均可配置為并行地執(zhí)行大量線程,其中術語“線程”是指對特定的一組輸入數(shù)據(jù)執(zhí)行的特定程序的實例。在一些實施例中,使用單指令多數(shù)據(jù)(SIMD)指令發(fā)送技術來支持大量線程的并行執(zhí)行,而無需提供多個獨立指令單元。在另一些實施例中,使用單指令多線程(SMT)技術,使用配置為發(fā)送指令到每一個GPC 208內(nèi)一組處理引擎的公共指令單元,來支持大量通常同步化的線程的并行執(zhí)行。不同于其中所有處理引擎一般都執(zhí)行相同指令的SMD執(zhí)行機制,SIMT執(zhí)行允許不同的線程更容易跟隨(follow)通過給定線程程序的發(fā)散的執(zhí)行路徑。本領域的普通技術人員將理解的是,SMD處理機制代表SMT處理機制的功能子集。
經(jīng)由管線管理器305來有利地控制GPC 208的操作,所述管線管理器305將處理任務分布到流多處理器(SM) 310。管線管理器305也可配置為通過為由SM 310輸出的經(jīng)處理的數(shù)據(jù)指定目的地來控制工作分布交叉開關330。
在一個實施例中,每個GPC 208均包括M個SM310,其中M彡1,每個SM 310均配置為處理一個或多個線程組。而且,每個SM 310還最好包括同樣的一組可被管線化的功能執(zhí)行單元(例如,執(zhí)行單元和加載-存儲單元一如圖3C中所示的執(zhí)行單元302和LSU 303),從而允許在前一個指令結(jié)束之前發(fā)送新的指令,如本領域所已公知的??商峁┕δ軋?zhí)行單元的任何組合。在一個實施例中,這些功能單元支持各種操作,包括整數(shù)和浮點算法(例如,加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、位移以及各種代數(shù)函數(shù)的計算(例如,平面插值、三角、指數(shù)和對數(shù)函數(shù)等);并且相同的功能單元硬件可均衡地用于(be leveragedto)實施不同操作。
如本文前面所定義的,傳輸?shù)教囟℅PC 208的一系列指令構(gòu)成線程,并且跨SM310內(nèi)并行處理引擎(未示出)的一定數(shù)目并發(fā)執(zhí)行的線程的集合在本文中被稱為“卷繞包(warp)”或“線程組”。如本文所使用的,“線程組”是指對不同的輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,且該組中有一個線程被指派給SM 310內(nèi)不同的處理引擎。線程組可包括比SM 310內(nèi)處理引擎的數(shù)量少的線程,在此情況下,在正在處理該線程組的周期內(nèi),一些處理引擎將處于閑置狀態(tài)。線程組也可包括比SM 310內(nèi)處理引擎的數(shù)量多的線程,在此情況下,處理將在連續(xù)的時鐘周期上進行。由于每個SM310均可以并發(fā)地支持多達G個線程組,結(jié)果是在任意給定時間在GPC 208中可以執(zhí)行多達G*M個線程組。
此外,在SM 310內(nèi),幾個相關的線程組可同時處于激活狀態(tài)(處于不同執(zhí)行階段)。這種線程組的集合在本文中被稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于mXk,其中k是 線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SM 310內(nèi)并行處理引擎的數(shù)量的整數(shù)倍,m是SM 310內(nèi)同時處于激活狀態(tài)的線程組的數(shù)量。CTA的大小通常由編程人員和CTA可用的硬件資源例如存儲器或寄存器的容量決定。
每個SM 310均含有一級(LI)高速緩存(圖3C中示出),或使用在SM 310之外的相應LI高速緩存中用以實施加載和存儲操作的空間。每個SM 310也均有權(quán)訪問二級(L2)高速緩存,所述二級高速緩存在所有GPC208之間共享并且可用于在線程之間轉(zhuǎn)移數(shù)據(jù)。最后,SM 310也有權(quán)訪問片外“全局”存儲器,該存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應予以理解的是,PPU 202外部的任何存儲器都可用作全局存儲器。此外,一點五級(L1.5)高速緩存335可包括在GPC 208之內(nèi),配置為經(jīng)由存儲器接口 214來接收和保持從存儲器中所獲取的、SM 310所請求的數(shù)據(jù),包括指令、標準(uniform)數(shù)據(jù)以及常數(shù)數(shù)據(jù),以及向SM310提供所請求的數(shù)據(jù)。在GPC 208中具有多個SM 310的實施例有益地共享被高速緩存于L1.5高速緩存335中的公共指令和數(shù)據(jù)。
每個GPC 208可包括存儲器管理單元(MMU) 328,該單元配置為將虛擬地址映射到物理地址。在其他實施例中,MMU 328可駐留在存儲器接口 214內(nèi)。MMU 328包括頁表條目(PTE)集合以及可選地包括高速緩存線索引,該PTE集合用于將虛擬地址映射到像素塊(tile)的物理地址。MMU 328可包括地址轉(zhuǎn)譯后備緩沖區(qū)(translation lookasidebuffer, TLB)或高速緩存,其可駐留在多處理器SM 310或LI高速緩存或GPC 208內(nèi)。處理物理地址以分布表面數(shù)據(jù)訪問位置,從而允許分區(qū)單元215之間交錯的高效請求。高速緩存線索引可用于確定對于高速緩存線的請求是否命中或未命中。
在圖形和計算應用中,GPC 208可配置為使得每個SM 310均耦合至紋理單元315,用于實施紋理映射操作,例如,確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。紋理數(shù)據(jù)是從內(nèi)部紋理LI高速緩存(未示出)讀取的,或者在一些實施例中是從SM 310內(nèi)的LI高速緩存讀取的,并且根據(jù)需要從在所有GPC 208之間共享的L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104所獲取。每個SM 310均將處理后的任務輸出到工作分布交叉開關330,以便將處理后的任務提供到另一 GPC 208用于進一步處理,或者經(jīng)由交叉開關單元210將處理后的任務存儲到L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中。preROP(pre-raster operations,預光柵操作)325配置為從SM 310接收數(shù)據(jù),將數(shù)據(jù)引向分區(qū)單元215內(nèi)的ROP單元,并實施對色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)以及實施地址轉(zhuǎn)譯。
應予以理解的是,本文所描述的內(nèi)核架構(gòu)是例示性的,可以對其進行各種變形和修改。GPC 208內(nèi)可包括任何數(shù)量的處理單元,例如,SM 310或紋理單元315、preR0P 325。此外,如圖2所示,但PPU 202可包括任何數(shù)量的GPC 208,這些GPC 208最好在功能上彼此相似,以使執(zhí)行行為不依賴于接收特定處理任務的GPC 208。此外,每個GPC 208最好使用單獨的且各異的處理單元、LI高速緩存,相對于其他GPC 208獨立地操作,來執(zhí)行用于一個或多個應用程序的任務。
本領域的普通技術人員應該理解,圖1、2、3A和3B中描述的架構(gòu)不以任何方式來限制本發(fā)明的范圍,并且本文教導的技術可以在任意經(jīng)適當配置的處理單元上實現(xiàn),包括但不限于一個或多個CPU、一個或多個多內(nèi)核CPU、一個或多個PPU 202、一個或多個GPC208、一個或多個圖形或?qū)S锰幚韱卧鹊?,而不脫離本發(fā)明的范圍。
在本發(fā)明的實施例中,所期望的是,使用PPU 202或計算系統(tǒng)的其他處理器使用線程陣列來執(zhí)行通用計算。給線程陣列中的每個線程都指派唯一的線程標識符(“threadID”),所述線程標識符在該線程執(zhí)行期間可由該線程訪問。線程ID可被定義為一維或多維數(shù)值,其控制線程處理行為的各個方面。例如,線程ID可用于確定線程將處理哪部分輸入數(shù)據(jù)集和/或確定線程將產(chǎn)生或?qū)懭肽牟糠州敵鰯?shù)據(jù)集。
每線程的指令序列可包括至少一個指令,所述指令定義了代表線程與線程陣列中一個或多個其他線程之間的協(xié)作行為。例如,每線程的指令序列均可包括以下指令:在序列中的特定點將對于代表線程的操作執(zhí)行掛起直到一個或多個其他線程到達該特定點時的指令;指示代表線程在一個或多個其他線程有權(quán)訪問的共享存儲器中存儲數(shù)據(jù)的指令;指示代表線程自動地讀取和更新存儲在一個或多個其他線程基于其線程ID有權(quán)訪問的共享存儲器中的數(shù)據(jù)的指令等等。CTA程序也可包括計算從其中讀取數(shù)據(jù)的共享存儲器中的地址的指令,該地址為線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術,數(shù)據(jù)可以以可預測的方式由CTA的一個線程寫入共享存儲器中給定的位置,并且由相同CTA的不同線程從該位置讀取。因此,可以支持以任意所希望的模式將數(shù)據(jù)在線程中共享,并且CTA中的任意線程都可以和相同CTA中的任意其他線程共享數(shù)據(jù)。如果在CTA的線程中間共享有數(shù)據(jù),則數(shù)據(jù)共享的程度由CTA程序確定;因此,應該理解在使用CTA的特定應用中,CTA的線程實際上可能相互共享數(shù)據(jù)或者可能不相互共享數(shù)據(jù),這取決于該CTA程序,并且術語“CTA”和“線程陣列”在本文中同義使用。
圖3C為根據(jù)本發(fā)明的一個實施例的、圖3B的SM 310的框圖。該SM310包括指令LI高速緩存370,其配置為經(jīng)由L1.5高速緩存335從存儲器接收指令和常數(shù)。warp調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常數(shù),并且根據(jù)該指令和常數(shù)來控制本地寄存器堆304和SM 310功能單元。SM 310功能單元包括N個exec (執(zhí)行或處理)單元302以及P個加載-存儲單元(LSU) 303。
如以下結(jié)合圖4-5更詳細的描述,warp調(diào)度器和指令單元312配置為發(fā)出線程組中的線程以在包括在SM 310中的功能單元上來執(zhí)行。又如下所述,warp調(diào)度器和指令單元312配置為檢查并且解決在線程組中的線程之間可能出現(xiàn)的發(fā)散。
SM 310提供具有不同可訪問級別的片上(內(nèi)部)數(shù)據(jù)存儲。專用寄存器(未示出)對于LSU 303可讀但不可寫,并用于存儲定義每個線程的“位置”的參數(shù)。在一個實施例中,專用寄存器包括每線程(或SM 310內(nèi)每exec單元302)—個的存儲線程ID的寄存器;每個線程ID寄存器均僅可由各自的一個exec單元302所訪問。專用寄存器還可以包括附加寄存器,其對于執(zhí)行由TMD 322所代表的相同的處理任務的所有線程(或由所有LSU 303)可讀,所述附加寄存器存儲CTA標識符、CTA維度、CTA所屬的柵格(grid)的維度(或隊列位置,如果TMD 322編碼隊列任務而不是柵格任務)以及將CTA分配給其的TMD 322的標識符。
如果TMD 322是柵格TMD,那么TMD 322的執(zhí)行致使將要啟動和執(zhí)行的固定數(shù)目的CTA來處理被存儲在隊列525中的固定容量的數(shù)據(jù)。CTA的數(shù)目被指定為柵格寬度、高度和深度的乘積。固定容量的數(shù)據(jù)可存儲在TMD 322中或者TMD 322可存儲將通過CTA處理的指向數(shù)據(jù)的指針。TMD 322也存儲由CTA執(zhí)行的程序的起始地址。
如果TMD 322是隊列TMD,那么TMD 322的隊列特征被使用,意味著將要處理的數(shù)據(jù)的容量不必是固定的。隊列條目存儲數(shù)據(jù),用于由指派給TMD 322的CTA處理。隊列條目還可代表在線程執(zhí)行期間由另一個TMD 322生成的子任務,從而提供嵌套的并行性。一般地,線程或包括線程的CTA的執(zhí)行被掛起,直到子任務的執(zhí)行完成。隊列可存儲在TMD 322中或脫離TMD 322單獨存儲,在這種情況下TMD 322存儲指向隊列的隊列指針。有利地,當代表子任務的TMD 322正在執(zhí)行時,由子任務生成的數(shù)據(jù)可寫入隊列。隊列可被實現(xiàn)為循環(huán)隊列以便于數(shù)據(jù)的總?cè)萘坎槐魂犃械拇笮∷拗啤?br>
屬于柵格的CTA具有指示在柵格內(nèi)的各自CTA的位置的隱性柵格寬度、高度和深度參數(shù)。專用寄存器在初始化期間響應經(jīng)由前端212從設備驅(qū)動程序103接收的命令被寫入,并且在處理任務的執(zhí)行期間不改變。前端212調(diào)度每個處理任務用于執(zhí)行。每個CTA都與用于一個或多個任務的并發(fā)執(zhí)行的特定TMD 322相關聯(lián)。此外,單個GPC 208可并發(fā)執(zhí)行多個任務。
參數(shù)存儲器(未示出)存儲運行時間參數(shù)(常數(shù)),這些參數(shù)可由在相同CTA內(nèi)的任意線程(或任意LSU 303)讀取但不可由其寫入。在一個實施例中,設備驅(qū)動程序103在指引SM 310開始執(zhí)行使用這些參數(shù)的任務之前將這些參數(shù)提供給參數(shù)存儲器。任意CTA內(nèi)的任意線程(或者SM310內(nèi)的任意exec單元302)均可以通過存儲器接口 214訪問全局存儲器。該全局存儲器的一部分可存儲在LI高速緩存320中。
每個線程均可使用本地寄存器堆304作為暫存空間(scratch space);每個寄存器均被分配用于一個線程的排他性使用,并且任何本地寄存器堆304中的數(shù)據(jù)均只可由其被分配給的線程所訪問。本地寄存器堆304可實現(xiàn)為在物理上或邏輯上劃分為P個通路(lane)的寄存器堆,每個通路均具有某一數(shù)量的條目(其中每個條目可能存儲例如32比特字)。給N個exec單元302和P個加載-存儲單元LSU 303中的每一個指派一個通路,并且不同通路中對應的條目可以填充有供執(zhí)行相同程序的不同線程使用的數(shù)據(jù),以利于SMD執(zhí)行。可以將這些通路的不同部分分配給G個并發(fā)線程組中的不同的線程組,以使本地寄存器堆304中的給定條目只可由特定線程訪問。在一個實施例中,本地寄存器堆304內(nèi)的某些條目被保留用于存儲線程標識符,實現(xiàn)專用寄存器之一。另外,標準LI高速緩存375為N個exec單元302和P個加載-存儲單元LSU 303的每個通路存儲標準或常數(shù)值。
在單個CTA內(nèi)的線程可訪問共享存儲器306 ;換句話說,共享存儲器306中的任意位置均可由相同的CTA內(nèi)的任意線程(或由SM 310內(nèi)任意處理引擎)所訪問。共享存儲器306可實現(xiàn)為具有互連的共享片上高速緩存存儲器或共享寄存器堆,所述互連允許任意處理引擎對該共享存儲器中任意位置進行讀寫。在其他一些實施例中,共享的狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)域上,并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以實現(xiàn)為在相同的共享寄存器堆內(nèi)或者在實現(xiàn)了共享存儲器306的共享高速緩存存儲器內(nèi)的指定區(qū)段(section),或者實現(xiàn)為LSU 303只能以只讀方式訪問的單獨的共享寄存器堆或片上高速緩存存儲器。在一個實施例中,也可使用實現(xiàn)參數(shù)存儲器的區(qū)域來存儲CTA ID和任務ID,以及CTA和柵格維度或隊列位置,從而實現(xiàn)專用寄存器的一部分。在SM 310中的每個LSU 303都耦合到統(tǒng)一地址映射單元352,其將為在統(tǒng)一存儲器空間中指定的加載和存儲指令所提供的地址轉(zhuǎn)換為在每個各異的存儲器空間中的地址。因此,指令可用來通過在統(tǒng)一存儲器空間中指定地址來訪問任意本地、共享或全局存儲器空間。
可以使用每個SM 310中的LI高速緩存320來高速緩存私有的每線程的本地數(shù)據(jù)以及每應用程序的全局數(shù)據(jù)。在一些實施例中,每CTA的共享數(shù)據(jù)可以被高速緩存在LI高速緩存320中。LSU 303經(jīng)由存儲器和高速緩存互連380耦合到共享存儲器306以及LI高速緩存320。
解決線程發(fā)散
圖4是根據(jù)本發(fā)明一個實施例的、更詳細地示出圖3C的warp調(diào)度器和指令單元312的框圖。如上所述,warp調(diào)度器和指令單元312配置為,通過發(fā)出并使用SM 310內(nèi)的包括執(zhí)行單元302和LSU 303的功能單元執(zhí)行給定線程組內(nèi)的線程來處理那些線程。如所示,warp調(diào)度器和指令單元312包括指令獲取402、發(fā)出邏輯404、地址發(fā)散單元406、多發(fā)出隊列408和分支單元410。指令獲取402耦合至發(fā)出邏輯404。發(fā)出邏輯404耦合至本地寄存器堆304 (在此未示出)和地址發(fā)散單元406。地址發(fā)散單元406耦合至多發(fā)出隊列408和分支單元410。多發(fā)出隊列408具有至發(fā)出邏輯404的反饋連接,同時分支單元410具有至指令獲取402的反饋連接。
指令獲取402是配置為當處理給定線程組中的線程時從圖3C中所示的LI高速緩存370獲取指令的硬件單元。與線程組中的線程相對應的、從指令LI高速緩存370所獲取的指令可以由SM 310內(nèi)的功能單元以SMD或SMT的方式來執(zhí)行。那些指令可以是任意類型的指令,包括單發(fā)出指令類型以及多發(fā)出指令類型。指令獲取402緩沖進入的指令并且將那些指令饋送給發(fā)出邏輯404。
發(fā)出邏輯404是配置為確定從指令獲取402接收的指令是單發(fā)出指令還是多發(fā)出指令的硬件單元。當發(fā)出邏輯404確定所接收的指令是單發(fā)出指令時,發(fā)出邏輯404發(fā)出與那些指令相關聯(lián)的線程至本地寄存器堆304。隨后SM 310內(nèi)的功能單元可以讀取本地寄存器堆304并執(zhí)行那些線程。
當發(fā)出邏輯404識別所接收的指令是多發(fā)出指令時,發(fā)出邏輯404將多發(fā)出指令引導至地址發(fā)散單元406。地址發(fā)散單元406是配置為檢測與所接收的指令相關聯(lián)的線程之間的發(fā)散的硬件單元。在這樣做時,地址發(fā)散單元406實施“發(fā)現(xiàn)”過程,其揭示線程組內(nèi)的線程是發(fā)散的還是非發(fā)散的,如下面更詳細的描述。
在一個實施例中,當實施發(fā)現(xiàn)過程時,地址發(fā)散單元406 ( i )導致發(fā)出線程組內(nèi)的每個線程至本地寄存器堆304,并且隨后(ii )分析本地寄存器堆304以確定所有那些線程都以一個存儲器位置為目標還是以多于一個存儲器位置為目標。當線程組內(nèi)的線程僅以一個存儲器位置為目標時,地址發(fā)散單元406確定那些線程不是發(fā)散的。當那些線程以多于一個存儲器位置為目標時,地址發(fā)散單元406確定那些線程是發(fā)散的。本領域技術人員將理解,存儲器位置可能位于任意存儲器資源內(nèi),并且可能是例如寄存器堆本身中的條目。
在另一個實施例中,當實施發(fā)現(xiàn)過程時,地址發(fā)散單元406 ( i)導致發(fā)出線程組內(nèi)的每個線程至本地寄存器堆304,并且隨后(ii )分析本地寄存器堆304以確定與每個線程相關聯(lián)的屏障(barrier)的數(shù)目。當所有線程都具有相同數(shù)目的屏障時,則那些線程可能不是發(fā)散的。但是,當一些線程與其他線程相比具有不同數(shù)目的屏障時,則那些線程是發(fā)散的。
如果地址發(fā)散單元406確定線程組內(nèi)的線程不是發(fā)散的,那么地址發(fā)散單元406在多發(fā)出隊列408中對與線程相關聯(lián)的指令進行排隊。多發(fā)出隊列408是包括槽的集合的硬件單元,其中每個槽可以由與線程組內(nèi)的線程相對應的指令占用。在一個實施例中,存儲在多發(fā)出隊列408內(nèi)的槽中的低優(yōu)先級的指令可被進入的高優(yōu)先級的指令從該槽驅(qū)逐。當必要的功能單元可用時,發(fā)出邏輯404重新發(fā)出與在多發(fā)出隊列408中排隊的指令相關聯(lián)的線程用于執(zhí)行。
如果地址發(fā)散單元406確定線程組內(nèi)的線程是發(fā)散的,那么地址發(fā)散單元406將那些線程分為至少兩個線程子集。第一子集包括非發(fā)散線程,而第二子集包括剩余的發(fā)散線程。在一個實施例中,地址發(fā)散單元406將線程分為H個子集,其中H個子集的每個均包括相互不是發(fā)散的線程。在該實施例中,地址發(fā)散單元406可以在多發(fā)出隊列408中對H個子集的每個單獨進行排隊。
地址發(fā)散單元406可配置為使用各種不同的技術來將線程組內(nèi)的線程分為非發(fā)散子集和發(fā)散子集。在一個實施例中,地址發(fā)散單元406分析本地寄存器堆304并且識別由第一線程作為目標的存儲器位置,并且隨后收集以相同存儲器位置為目標的所有其他線程。第一線程和所收集的線程構(gòu)成非發(fā)散線程子集,同時剩余線程構(gòu)成發(fā)散線程子集。本領域技術人員將理解,可以實現(xiàn)用于將線程分為非發(fā)散和發(fā)散子集的任意技術上可行的方法。
一旦將線程組內(nèi)的線程分為非發(fā)散線程子集和發(fā)散線程子集,按上述類似的方式,地址發(fā)散單元406將與非發(fā)散線程子集相關聯(lián)的指令發(fā)送至多發(fā)出隊列408以排隊并隨后發(fā)出用于執(zhí)行。地址發(fā)散單元406還將與發(fā)散線程子集相關聯(lián)的指令發(fā)送至分支單元410。
分支單元410是配置為導致指令獲取402重新獲取和重新發(fā)出與由地址發(fā)散單元406所識別的發(fā)散線程子集相關聯(lián)的指令的硬件單元。在一個實施例中,分支單元410包括線程掩碼,其為每個線程記錄該線程屬于線程的非發(fā)散子集還是發(fā)散子集。分支單元410配置為響應于接收發(fā)散線程子集來更新線程掩碼。在一個實施例中,地址發(fā)散單元406在發(fā)現(xiàn)過程期間生成線程掩碼,并且隨后將線程掩碼存儲在分支單元410中。
當分支單元410導致指令獲取402重新獲取并重新發(fā)出與發(fā)散線程子集相關聯(lián)的指令時,地址發(fā)散單元406隨后采用所接收的發(fā)散線程子集來重復上述的發(fā)現(xiàn)過程。在這樣做時,地址發(fā)散單元406可以將發(fā)散線程子集分為線程的非發(fā)散亞子集和發(fā)散亞子集,并且隨后以與上述類似的方式來單獨處理那些亞子集。
通過任意次地重復發(fā)現(xiàn)過程,即通過將線程分為線程的非發(fā)散子集和發(fā)散子集,warp調(diào)度器和指令單元312可以過濾出所有非發(fā)散線程子集并且隨后單獨發(fā)出每個這樣的子集用于執(zhí)行。雖然本文所描述的技術是結(jié)合包括在warp調(diào)度器和指令單元312內(nèi)的特定硬件單元來論述的,本領域技術人員將理解,配置為使用上述通用方法來處理線程的任意計算設備均在本發(fā)明范圍內(nèi)。
圖5是根據(jù)本發(fā)明一個實施例的、用于解決線程組內(nèi)的線程之間的發(fā)散的方法步驟的流程圖。雖然結(jié)合圖1、2、3A、3B、3C和4的系統(tǒng)來描述方法步驟,本領域技術人員將理解配置為以任意順序?qū)嵤┓椒ú襟E的任意系統(tǒng)都在本發(fā)明的范圍內(nèi)。
如所示,方法500開始于步驟502,其中指令獲取402從圖3C中所示的指令LI高速緩存370獲取指令。與由SM 310所處理的線程組中的線程相對應的、從指令LI高速緩存370獲取的指令可以由SM 310內(nèi)的功能單元以SMD或SMT方式來執(zhí)行。那些指令可以是任意類型的指令,包括單發(fā)出指令類型以及多發(fā)出指令類型。
在步驟504,發(fā)出邏輯404確定從指令獲取402所接收的指令是單發(fā)出指令還是多發(fā)出指令。如果發(fā)出邏輯404確定所接收的指令是單發(fā)出指令,那么方法500進行到步驟506,其中發(fā)出邏輯404發(fā)出與那些指令相關聯(lián)的線程至本地寄存器堆304。隨后SM 310內(nèi)的功能單元可以訪問并且執(zhí)行那些線程。如果在步驟504,發(fā)出邏輯404確定所接收的指令是多發(fā)出指令,那么方法500進行到步驟508。
在步驟508,地址發(fā)散單元406確定與多發(fā)出指令相關聯(lián)的線程是否是發(fā)散的。在這樣做時,地址發(fā)散單元406實施“發(fā)現(xiàn)”過程,其揭示線程組中的線程是發(fā)散的還是非發(fā)散的。在一個實施例中,當執(zhí)行發(fā)現(xiàn)過程時,地址發(fā)散單元406 (i)導致發(fā)出線程組內(nèi)的每個線程至本地寄存器堆304,并且隨后(ii )分析本地寄存器堆304以確定所有那些線程都以一個存儲器位置為目標還是以多于一個存儲器位置為目標。當線程組內(nèi)的線程僅以一個存儲器位置為目標時,地址發(fā)散單元406確定那些線程不是發(fā)散的。當線程以多于一個的存儲器位置為目標時,地址發(fā)散單元406確定那些線程是發(fā)散的。
在另一個實施例中,當實施發(fā)現(xiàn)過程時,地址發(fā)散單元406 ( i)導致發(fā)出線程組內(nèi)的每個線程至本地寄存器堆304,并且隨后(ii )分析本地寄存器堆304以確定與每個線程相關聯(lián)的屏障的數(shù)目。當所有線程都具有相同數(shù)目的屏障時,則那些線程可能不是發(fā)散的。但是,當一些線程與其他線程相比具有不同數(shù)目的屏障時,則那些線程是發(fā)散的。
如果在步驟508,地址發(fā)散單元406確定線程不是發(fā)散的,那么方法500進行到步驟506并且可發(fā)出并執(zhí)行那些線程。如果在步驟508,地址發(fā)散單元406確定線程是發(fā)散的,那么方法500進行到步驟510。
在步驟510,地址發(fā)散單元406識別非發(fā)散線程子集和發(fā)散線程子集。在一個實施例中,地址發(fā)散單元406分析本地寄存器堆304并且識別由第一線程作為目標的存儲器位置,并且隨后收集以相同存儲器位置為目標的所有其他線程。第一線程和所收集的線程構(gòu)成非發(fā)散線程子集,同時剩余線程構(gòu)成發(fā)散線程子集。本領域技術人員將理解,可以實現(xiàn)用于將線程分為非發(fā)散子集和發(fā)散子集的任意技術上可行的方法。
在步驟512,地址發(fā)散單元406導致發(fā)出并執(zhí)行非發(fā)散線程子集中的線程。在這樣做時,地址發(fā)散單元406在多發(fā)出隊列408中對與那些線程相關聯(lián)的指令進行排隊。多發(fā)出隊列408存儲指令,直到發(fā)出邏輯404能夠發(fā)出對應的線程至本地寄存器堆304以由SM310內(nèi)的功能單元來執(zhí)行。
在步驟514,地址發(fā)散單元406發(fā)送與發(fā)散線程子集相關聯(lián)的指令至分支單元410。作為響應,分支單元410導致指令獲取402重新獲取并重新發(fā)出那些指令。隨后方法回到步驟502并且使用發(fā)散線程子集作為輸入進行重復。
在實踐中,warp調(diào)度器和指令單元312可以在多個經(jīng)過中多次實施方法500。每個經(jīng)過中,方法500可以接收在方法500的前一經(jīng)過期間所識別的發(fā)散線程子集作為輸入。以該方式,可重復地實現(xiàn)方法500以過濾出非發(fā)散線程的所有子集,并且發(fā)出每個這樣的子集用于單獨執(zhí)行。
有利地,warp調(diào)度器和指令單元312中的地址發(fā)散單元406緩解了線程發(fā)散的影響,從而避免并行處理單元的系統(tǒng)范圍的故障。雖然本文圍繞訪問本地寄存器堆304并且以多于一個存儲器位置為目標,或者作用于不同數(shù)目的屏障來描述線程發(fā)散,本領域技術人員將理解,本發(fā)明的實施例擴展至存在于計算機系統(tǒng)100內(nèi)的本地寄存器堆304之外的資源或資源的方面或部分。例如,舉幾個例子來說,當線程嘗試作用于不同的屏障(如上所述)、訪問諸如常數(shù)的不同的只讀變量、作用于多個屬性插值、訪問共享存儲器的相同列的多個行、訪問通用存儲器的多個行或?qū)嵤┛缇€程的數(shù)據(jù)寬度超過與存儲器子系統(tǒng)相關聯(lián)的物理總線寬度的存儲器訪問操作時,可能發(fā)生線程發(fā)散。
此外,本發(fā)明的一個實施例可被實施為與計算機系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實施例的各功能(包括本文中描述的方法)并且可以被包含在各種計算機可讀存儲介質(zhì)上。示例性的計算機可讀存儲介質(zhì)包括但不限于:(i)不可寫入的存儲介質(zhì)(例如,計算機內(nèi)的只讀存儲器設備,諸如可由CD-ROM驅(qū)動器讀取的光盤只讀存儲器(CD-ROM)盤、閃存、只讀存儲器(ROM)芯片或任何類型的固態(tài)非易失性半導體存儲器),在其上存儲永久性信息;和(ii)可寫入的存儲介質(zhì)(例如,磁盤驅(qū)動器或硬盤驅(qū)動器內(nèi)的軟盤或者任何類型的固態(tài)隨機存取半導體存儲器),在其上存儲可更改的信息。
以上已參照特定實施例對本發(fā)明進行了描述。然而,本領域技術人員將理解的是,在不脫離如隨附權(quán)利要求書中所闡釋的本發(fā)明的較寬精神和范圍的情況下,可對此做出各種修改和變化。因此,前面的描述以及附圖應被視為是示例性而非限制性的。
權(quán)利要求
1.一種用于解決在并行處理單元上執(zhí)行的線程組中的線程之間的發(fā)散的計算機實現(xiàn)的方法,所述方法包括: 獲取與所述線程相關聯(lián)的指令; 將所述線程分為非發(fā)散線程子集和至少一個發(fā)散線程子集;以及 導致發(fā)出所述非發(fā)散線程子集用于在所述并行處理單元上執(zhí)行。
2.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,其中將所述線程分為所述非發(fā)散線程子集和所述至少一個發(fā)散線程子集包括: 發(fā)出所述線程到耦合至配置為執(zhí)行線程的一個或多個功能單元的寄存器堆; 分析所述寄存器堆以確定所述線程配置為訪問多于一個存儲器位置; 識別一個或多個所述線程配置為訪問的第一存儲器位置; 將所述一個或多個線程組織到所述非發(fā)散線程子集;以及 將其他線程組織到所述至少一個發(fā)散線程子集。
3.根據(jù)權(quán)利要求2所述的計算機實現(xiàn)的方法,其中所述第一存儲器位置包括所述寄存器堆中的條目。
4.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,進一步包括: 將所述非發(fā)散線程子集存儲到多發(fā)出隊列中;以及 當所述并行處理單元可用時,從所述多發(fā)出隊列中檢索所述非發(fā)散線程子集。
5.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,其中所述線程分為一個發(fā)散線程子集,并且進一步包括: 導致重新獲取與所述一個發(fā)散線程子集相關聯(lián)的指令; 將所述一個發(fā)散線程子集中的所述線程分為非發(fā)散線程亞子集和發(fā)散線程亞子集;以及 導致發(fā)出所述非發(fā)散線程亞子集用于在所述并行處理單元上執(zhí)行。
6.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,對于所述線程組中的每個線程,進一步包括,更新與所述線程組相關聯(lián)的線程掩碼以反映所述線程屬于所述非發(fā)散線程子集還是所述至少一個發(fā)散線程子集。
7.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,其中將所述線程分為至少一個發(fā)散線程子集包括,將所述線程分為H個非發(fā)散線程子集,H是大于I的整數(shù),并且導致發(fā)出所述H個非發(fā)散線程子集的每一個用于在所述并行處理單元上單獨執(zhí)行。
8.根據(jù)權(quán)利要求7所述的計算機實現(xiàn)的方法,進一步包括,導致在已經(jīng)發(fā)出所述發(fā)散線程子集之后發(fā)出所述H個非發(fā)散線程子集的每一個用于在所述PTO上單獨執(zhí)行。
9.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,其中所述非發(fā)散線程子集包括訪問計算設備內(nèi)的公共資源或資源的公共方面或部分的一個或多個線程。
10.一種配置為解決在并行處理單元上執(zhí)行的線程組中的線程之間的發(fā)散的計算設備,包括: 處理單元,配置為: 獲取與所述線程相關聯(lián)的指令; 將所述線程分為非發(fā)散線程子集和至少一個發(fā)散線程子集;以及 導致發(fā)出所述非發(fā)散線程子集用于在所述并行處理單元上執(zhí)行。
全文摘要
地址發(fā)散單元檢測線程組中的線程之間的發(fā)散,并且隨后將那些線程分為非發(fā)散線程子集和發(fā)散線程子集。在一個實施例中,地址發(fā)散單元導致發(fā)出與非發(fā)散線程子集相關聯(lián)的指令用于在并行處理單元上執(zhí)行,同時導致重新獲取并重新發(fā)出與發(fā)散線程子集相關聯(lián)的指令用于執(zhí)行。
文檔編號G06F12/02GK103207774SQ201310012208
公開日2013年7月17日 申請日期2013年1月11日 優(yōu)先權(quán)日2012年1月11日
發(fā)明者杰克·肖凱特, 仇小鋼, 杰夫·塔基, 瀟耀明, 羅伯特·J·斯托爾, 奧利維爾·吉普 申請人:輝達公司