專利名稱:推測執(zhí)行和回滾的制作方法
技術領域:
本發(fā)明總地涉及計算任務的執(zhí)行,并且更具體地涉及指令的推測執(zhí)行(speculative execution)和回滾(rollback)。
背景技術:
傳統(tǒng)的管線化處理器已經(jīng)執(zhí)行對條件分支指令的推測執(zhí)行,這是通過預測條件分支的哪一側將被執(zhí)行而實現(xiàn)的。當該預測不正確時,指令被回滾,使得可執(zhí)行條件分支的另一側。當指令被回滾時,處理管線的管線階段是空閑的,直到條件分支的另一側的指令到達那些管線階段。因此,本領域所需要的是一種允許處理管線在其他指令的回滾期間繼續(xù)處理一些指令的用于推測性地發(fā)送指令的系統(tǒng)和方法。重要的是,推測執(zhí)行不應該限于條件分支指令。
發(fā)明內容
一種用于推測性地發(fā)送指令的系統(tǒng)和方法,其允許處理管線在其他指令的回滾期間繼續(xù)處理一些指令。調度器電路發(fā)送指令以供多線程執(zhí)行單元執(zhí)行,假設幾個循環(huán)后,當指令到達多線程執(zhí)行單元時,指令之間的這種相關性將被解析,資源將可用,操作數(shù)數(shù)據(jù)將可用并且其他條件將不會阻止指令的執(zhí)行。當在特定線程組的指令的執(zhí)行點處存在回滾條件時,不把指令分派到多線程執(zhí)行單元。然而,由調度器電路發(fā)送以供不同線程組執(zhí)行的且不存在回滾條件的其他指令被多線程執(zhí)行單元執(zhí)行。在回滾條件不再存在后,重新發(fā)送引發(fā)回滾條件的指令。用于執(zhí)行推測發(fā)送的指令的回滾的本發(fā)明的方法的多個實施例包括發(fā)送第一線程組的第一指令集和發(fā)送第二線程組的第二指令集。在所述第一指令集中的指令的預執(zhí)行處理期間檢測所述第一線程組中的至少一個線程的回滾條件,并且停止發(fā)送所述第一線程組的附加指令。丟棄所述第一指令集中已經(jīng)發(fā)送的且尚未執(zhí)行的進行中(in-flight)指令,并且執(zhí)行所述第二線程組的所述第二指令集。本發(fā)明的多個實施例包括一種用于執(zhí)行推測發(fā)送的指令的回滾的系統(tǒng)。所述系統(tǒng)包括存儲器、調度器單元、分派單元和多個執(zhí)行單元。存儲器被配置成存儲第一線程組的第一指令集和第二線程組的第二指令集。調度器單元被配置成:發(fā)送第一線程組的第一指令集;發(fā)送第二線程組的第二指令集;并且當檢測到回滾條件時停止發(fā)送所述第一線程組的附加指令。分派單元被配置成:在所述第一指令集中的指令的預執(zhí)行處理期間檢測所述第一線程組中的至少一個線程的回滾條件;并且丟棄所述第一指令集中已經(jīng)發(fā)送的且尚未執(zhí)行的進行中指令。多個執(zhí)行單元被配置成執(zhí)行所述第二線程組的所述第二指令集。重要的是,指令的推測執(zhí)行不限于條件分支指令。調度器電路不解碼指令,因此不執(zhí)行預測操作。晚至在執(zhí)行點處,如果特定線程組的任何指令引發(fā)回滾條件,則不執(zhí)行指令并且針對該指令和已經(jīng)發(fā)送給特定線程組的其他指令執(zhí)行回滾。
因此,可以詳細地理解上述列舉的本發(fā)明的特征,并且可以參考實施例得到對如上面所概括的本發(fā)明更具體的描述,其中一些實施例在附圖中示出。然而,應該注意的是,附圖僅示出了本發(fā)明的典型實施例,因此不應被認為是對其范圍的限制,因為本發(fā)明可以承認其他等效的實施例。圖1是示出了經(jīng)配置以實現(xiàn)本發(fā)明一個或多個方面的計算機系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明一個實施例的用于圖1的計算機系統(tǒng)的并行處理子系統(tǒng)的框圖;圖3A是根據(jù)本發(fā)明一個實施例的圖2的前端的框圖;圖3B是根據(jù)本發(fā)明一個實施例的在圖2的一個并行處理單元內的通用處理集群的框圖;圖3C是根據(jù)本發(fā)明的一個實施例的圖3B的流多處理器(SM: streamingmultiprocessor)的一部分的框圖;圖4A示出了根據(jù)本發(fā)明的一個實施例的推測指令發(fā)送和指令回滾方法;以及圖4B示出了根據(jù)本發(fā)明的一個實施例的推測指令發(fā)送和部分指令回滾方法。
具體實施例方式在下面的描述中,將闡述大量的具體細節(jié)以提供對本發(fā)明更透徹的理解。然而,對本領域的技術人員顯而易見的是本發(fā)明可以在沒有一個或多個這些具體細節(jié)的情況下得以實施。在其他例子中,沒有描述公知的特征以避免對本發(fā)明造成混淆。系統(tǒng)概述圖1是示出了經(jīng)配置以實現(xiàn)本發(fā)明的一個或多個方面的計算機系統(tǒng)100的框圖。計算機系統(tǒng)100包括中央處理單元(CPU) 102和經(jīng)由可以包括存儲器橋105的互連路徑通信的系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106(例如超傳輸(HyperTransport)鏈路)連接至Ij I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個或多個用戶輸入設備108 (例如鍵盤、鼠標)接收用戶輸入并且經(jīng)由路徑106和存儲器橋105將所述輸入轉發(fā)到CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或其他通信路徑113 (例如PCI Express、加速圖形端口或超傳輸鏈路)耦合到存儲器橋105 ;在一個實施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設備110 (例如傳統(tǒng)的基于CRT或IXD的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關116提供I/O橋107與諸如網(wǎng)絡適配器118以及各種外插卡120和121的其他組件之間的連接。其他組件(未明確示出),包括USB或其他端口連接、CD驅動器、DVD驅動器、膠片錄制設備及類似組件,也可以連接到I/O橋107。使圖1中各種組件互連的通信路徑可以使用任何適合的協(xié)議實現(xiàn),諸如PCI (外圍組件互連)、PC1-Express、AGP (加速圖形端口)、超傳輸或者任何其他總線或點到點通信協(xié)議,并且不同設備間的連接可使用本領域已知的不同協(xié)議。在一個實施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構成圖形處理單元(GPU)。在另一個實施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時保留底層(underlying)的計算架構,本文將更詳細地進行描述。在又一個實施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)元件集成起來,諸如存儲器橋105、CPU 102以及I/O橋107,以形成片上系統(tǒng)(SoC)。應該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓撲,包括橋的數(shù)量和布置、CPU 102的數(shù)量以及并行處理子系統(tǒng)112的數(shù)量,可根據(jù)需要修改。例如,在一些實施例中,系統(tǒng)存儲器104直接連接到CPU 102而不是通過橋,并且其他設備經(jīng)由存儲器橋105和CPU 102與系統(tǒng)存儲器104通信。在其他替代性拓撲中,并行處理子系統(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/O橋107。圖2示出了根據(jù)本發(fā)明一個實施例的并行處理子系統(tǒng)112。如圖所示,并行處理子系統(tǒng)112包括一個或多個并行處理單元(PI3U) 202,每個并行處理單元202都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,類似對象的多個實體以標識該對象的附圖標記和需要時標識所述實體的括號中的數(shù)字來表示。)PPU 202和并行處理存儲器204可使用一個或多個集成電路設備來實現(xiàn),諸如可編程處理器、專用集成電路(ASIC)或存儲器設備,或者以任何其他技術可行的方式來實現(xiàn)。再參考圖1,在一些實施例中,并行處理子系統(tǒng)112的一些或所有PPU 202是具有渲染管線的圖形處理器,它可以經(jīng)配置以執(zhí)行與下述相關的各種操作:經(jīng)由存儲器橋105和總線113從CPU 102和/或系統(tǒng)存儲器104所提供的圖形數(shù)據(jù)生成像素數(shù)據(jù),與本地并行處理存儲器204 (可被用作圖形存儲器,包括例如常用幀緩沖區(qū)(buffer))交互以存儲和更新像素數(shù)據(jù),傳遞像素數(shù)據(jù)到顯示設備110等等。在一些實施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器而操作的PPU 202以及包括一個或多個用于通用計算的其他PPU 202。這些PI3U 可以是相同的或不同的,并且每個PPU均可具有其自己的專用并行處理存儲器設備或不具有專用的并行處理存儲器設備。一個或多個PPU 202可輸出數(shù)據(jù)到顯示設備110,或者每個PPU 202均可輸出數(shù)據(jù)到一個或多個顯示設備110。在操作中,CPU 102是計算機系統(tǒng)100的主處理器,控制和協(xié)調其他系統(tǒng)組件的操作。具體地,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實施例中,CPU 102為每個PPU 202寫入命令流到數(shù)據(jù)結構中(在圖1或圖2中未明確示出),所述數(shù)據(jù)結構可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU 102和PPU 202都可訪問的其他存儲位置中。將指向每個數(shù)據(jù)結構的指針寫到入棧緩沖區(qū)(pushbuffer)以啟動對數(shù)據(jù)結構中的命令流的處理。PPU202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令??梢詾槊總€入棧緩沖區(qū)指定執(zhí)行優(yōu)先權以控制對不同入棧緩沖區(qū)的調度。現(xiàn)在返回參考圖2B,每個PPU 202均包括經(jīng)由連接到存儲器橋105 (或者,在一個替代性實施例中,直接連接到CPU 102)的通信路徑113與計算機系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU 202到計算機系統(tǒng)100的其余部分的連接也可以變化。在一些實施例中,并行處理子系統(tǒng)112可作為外插卡來實現(xiàn),所述外插卡可被插入到計算機系統(tǒng)100的擴展槽中。在其他實施例中,PPU 202可以和諸如存儲器橋105或I/O橋107的總線橋一起集成在單個芯片上。而在其他實施例中,PI3U 202的一些或所有元件可以和CPU 102—起集成在單個芯片上。在一個實施例中,通信路徑113是PC1-EXPRESS鏈路,如本領域所知的,在PC1-EXPRESS鏈路中專用通道被分配到每個PPU 202。I/O單元205生成用于在通信路徑113上傳輸?shù)臄?shù)據(jù)包(或其他信號),并且還從通信路徑113接收所有傳入的數(shù)據(jù)包(或其他信號),將傳入的數(shù)據(jù)包引導到PPU 202的適當組件。例如,可將與處理任務有關的命令引導到主機接口 206,而可將與存儲器操作有關的命令(例如,對并行處理存儲器204的讀取或寫入)引導到存儲器交叉開關單元210。主機接口 206讀取每個入棧緩沖區(qū),并且將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。有利地,每個PPU 202都實現(xiàn)高度并行處理架構。如詳細示出的,PPU 202 (O)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC 208都能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程均是程序的實例(instance)。在各種應用中,可分配不同的GPC208用于處理不同類型的程序或用于執(zhí)行不同類型的計算。取決于因每種類型的程序或計算所產(chǎn)生的工作量,GPC 208的分配可以變化。GPC 208從任務/工作單元207內的工作分布單元來接收將要執(zhí)行的處理任務。所述工作分布單元接收指向被編碼為隊列元數(shù)據(jù)(QMD)并存儲在存儲器中的計算處理任務的指針。指向QMD的指針被包括在存儲為入棧緩沖區(qū)并由前端單元212從主機接口 206接收的命令流中??梢员痪幋a為QMD的處理任務包括將被處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序將被執(zhí)行)的狀態(tài)參數(shù)和命令。任務/工作單元207從前端212接收任務并確保在每一個QMD所指定的處理啟動前,將GPC 208配置為有效狀態(tài)??梢詾槊總€QMD指定用來調度處理任務的執(zhí)行的優(yōu)先權。存儲器接口 214包括D個分區(qū)單元215,每個分區(qū)單元215均直接耦合到一部分并行處理存儲器204,其中DS I。如所示的,分區(qū)單元215的數(shù)量一般等于DRAM 220的數(shù)量。在其他實施例中,分區(qū)單元215的數(shù)量也可以不等于存儲器設備的數(shù)量。本領域的技術人員應該理解DRAM 220可以用其他合適的存儲設備來替代并且可以是一般常規(guī)的設計。因此省略了詳細描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標可以跨DRAM 220加以存儲,這允許分區(qū)單元215并行寫入每個渲染目標的各部分以有效地使用并行處理存儲器204的可用帶寬。任意一個GPC 208都可以處理將要被寫到并行處理存儲器204內的任意DRAM 220的數(shù)據(jù)。交叉開關單元210經(jīng)配置以路由每個GPC 208的輸出到任意分區(qū)單元215的輸入或到另一個GPC 208用于進一步處理。GPC 208通過交叉開關單元210與存儲器接口 214通信,以對各種外部存儲器設備進行讀取或寫入。在一個實施例中,交叉開關單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲器204的連接,從而使得在不同GPC 208內的處理內核能夠與系統(tǒng)存儲器104或對于PPU 202而言非本地的其他存儲器通信。在圖2所示的實施例中,交叉開關單元210直接與I/O單元205連接。交叉開關單元210可使用虛擬信道來分開GPC 208與分區(qū)單元215之間的業(yè)務流。另外,GPC 208可被編程以執(zhí)行與種類繁多的應用相關的處理任務,包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應用物理定律以確定對象的位置、速率和其他屬性)、 圖像渲染操作(例如,曲面細分(tessellation)著色、頂點著色、幾何著色、和/或像素著色程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204傳送到內部(片上)存儲器中,處理所述數(shù)據(jù),并且將結果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)組件訪問,所述其他系統(tǒng)組件包括CPU 102或另一個并行處理子系統(tǒng)112。PPU 202可配備有任意容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任意組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(UMA)實施例中,PPU 202可以是圖形處理器。在這樣的實施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU 202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實施例中,PPU 202可被集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PC1-EXPRESS)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信方式將PPU202連接到系統(tǒng)存儲器。如上所述,并行處理子系統(tǒng)112可以包括任意數(shù)量的PPU 202。例如,可在單個外插卡上提供多個PPU 202、或可將多個外插卡連接到存儲路徑113、或可將一個或多個PPU202集成到橋式芯片中。在多PI3U系統(tǒng)中的PPU202可以彼此相同或不同。例如,不同的PPU202可能具有不同數(shù)量的處理內核、不同容量的本地并行處理存儲器等等。在出現(xiàn)多個PPU202的情況下,可并行操作那些PI3U從而以高于單個PPU 202所可能達到的吞吐量來處理數(shù)據(jù)。包含一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來實現(xiàn),包括臺式電腦、筆記本電腦或手持式個人計算機、服務器、工作站、游戲控制臺、嵌入式系統(tǒng)等等。多個并發(fā)任務調度可以在GPC 208上并發(fā)執(zhí)行多個處理任務并且處理任務在執(zhí)行期間可以生成一個或多個“子”處理任務。任務/工作單元207接收任務并動態(tài)調度處理任務和子處理任務以由GPC 208執(zhí)行。圖3A是根據(jù)本發(fā)明一個實施例的圖2的任務/工作單元207的框圖。任務/工作單元207包括任務管理單元300和工作分布單元340。任務管理單元300基于執(zhí)行優(yōu)先級來組織將要被調度的任務。對于每個優(yōu)先級,任務管理單元300將指向對應于任務的QMD322的指針鏈表存儲在調度器表321中??梢詫MD 322存儲在PP存儲器204或系統(tǒng)存儲器104中。任務管理單元300接受任務并將任務存儲在調度器表321中的速度與任務管理單元300調度任務以執(zhí)行的速度是解耦的,這使得任務管理單元300能夠基于優(yōu)先權信息或使用其他技術來調度任務。工作分布單元340包括具有槽的任務表345,每個槽均可以被正在被執(zhí)行的任務的QMD 322所占用。當任務表345中有空閑槽時,任務管理單元300可以調度任務以執(zhí)行。當沒有空閑槽時,沒有占用槽的較高優(yōu)先權任務可以驅逐占用槽的較低優(yōu)先權任務。當任務被驅逐時,該任務被停止,并且如果該任務的執(zhí)行沒有完成,則將該任務添加到調度器表321中的鏈表。當生成子處理任務時,將該子任務添加到調度器表321中的鏈表。當任務被驅逐時,從槽移除該任務。任務處理概述圖3B是根據(jù)本發(fā)明一個實施例的、圖2的一個PPU 202內的GPC 208的框圖。每個GPC 208可被配置為并行地執(zhí)行大量線程,其中術語“線程”是指對特定的一組輸入數(shù)據(jù)執(zhí)行的特定程序的實例。在一些實施例中,采用單指令多數(shù)據(jù)(SIMD)指令發(fā)送技術來支持大量線程的并行執(zhí)行,而無需提供多個獨立指令單元。在另一些實施例中,采用單指令多線程(SMT)技術,使用被配置為發(fā)送指令到每一個GPC 208內一組處理引擎的公共指令單元,來支持大量通常同步化的線程的并行執(zhí)行。不同于其中所有處理引擎一般都執(zhí)行相同指令的SMD執(zhí)行機制,SIMT執(zhí)行允許不同的線程更容易跟隨(follow)通過給定線程程序的發(fā)散的執(zhí)行路徑。本領域普通技術人員將理解的是,SMD處理機制代表SMT處理機制的功能子集。經(jīng)由管線管理器305來有利地控制GPC 208的操作,所述管線管理器305將處理任務分布到流多處理器(SM) 310。管線管理器305也可被配置為通過為由SM 310輸出的處理后的數(shù)據(jù)指定目的地來控制工作分布交叉開關330。在一個實施例中,每個GPC 208均包括M個SM 310,其中M彡I,每個SM 310均被配置為處理一個或多個線程組。而且,每個SM 310有利地還包括同樣的一組可被管線化的功能執(zhí)行單元(在圖3C中示為Exec單元302 ),從而允許在前一個指令結束之前發(fā)送新的指令,如本領域所已公知的??商峁┕δ軋?zhí)行單元的任何組合。在一個實施例中,這些功能單元支持多種運算,包括整數(shù)和浮點算法(例如,加法和乘法)、比較運算、布爾運算(AND、OR、X0R)、移位以及各種代數(shù)函數(shù)的計算(例如,平面插值、三角、指數(shù)和對數(shù)函數(shù)等);并且相同的功能單元硬件可均衡地用于(be leveraged to)執(zhí)行不同運算。傳送到特定GPC 208的指令序列構成線程,如本文前面所定義的,并且跨SM 310內并行處理引擎(未示出)的一定數(shù)量并發(fā)執(zhí)行的線程的集合在本文中被稱為“卷繞包(warp)”或“線程組”。如本文所使用的,“線程組”是指對不同的輸入數(shù)據(jù)并發(fā)執(zhí)行同一程序的一組線程,且該組中有一個線程被分配給SM 310內不同的處理引擎。線程組可包括比SM 310內處理引擎的數(shù)量少的線程,在此情況下,在正在處理該線程組的周期內,一些處理引擎將處于空閑狀態(tài)。線程組也可包括比SM 310內處理引擎的數(shù)量多的線程,在此情況下,處理將在連續(xù)的時鐘周期上進行。由于每個SM 310可以支持多達G個線程組并發(fā)執(zhí)行,所以在任一給定時間都可以允許多達GXM個線程組在GPC 208中執(zhí)行。另外,在SM 310內,多個相關的線程組可同時活動(處于不同執(zhí)行階段)。這種線程組的集合在本文中被稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于mXk,其中k是線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SM 310內處理引擎的數(shù)量的整數(shù)倍,m是SM 310內同時活動的線程組的數(shù)量。CTA的大小通常由編程人員和CTA可用的硬件資源例如存儲器或寄存器的容量決定。每個SM 310均包括一級(LI)高速緩存(在圖3C中示出),或使用在SM 310之外對應的LI高速緩存中用以執(zhí)行加載和存儲操作的空間。每個SM 310也有權訪問二級(L2)高速緩存,它們在所有GPC 208之間被共享并且可用于在線程之間傳送數(shù)據(jù)。最后,SM 310也有權訪問片外“全局”存儲器,該存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應予以理解的是,PPU 202外部的任何存儲器都可被用作全局存儲器。此外,一點五級(L1.5)高速緩存335可被包括在GPC 208之內,被配置為經(jīng)由存儲器接口 214來接收和保持從存儲器中獲取的、SM 310所請求的數(shù)據(jù),包括指令、一致性(uniform)數(shù)據(jù)以及常數(shù)數(shù)據(jù),以及向SM 310提供所請求的數(shù)據(jù)。在GPC 208中具有多個SM 310的實施例有利地共享被高速緩存于L1.5高速緩存335中的公共指令和數(shù)據(jù)。每個GPC 208可包括存儲器管理單元(MMU) 328,該單元被配置為將虛擬地址映射到物理地址。在另一些實施例中,MMU 328可處于存儲器接口 214內。MMU 328包括一組頁表條目(PTE)以及可選地包括高速緩存線索引(cache line index),該組PTE被用于將虛擬地址映射到像素塊(tile)的物理地址。MMU 328可包括地址轉譯后備緩沖區(qū)(translationlookaside buffer, TLB)或高速緩存,其可處于多處理器SM 310或LI高速緩存或GPC 208內。物理地址被處理為分布表面數(shù)據(jù)訪問位置以允許在分區(qū)單元之間交錯的高效請求。高速緩存線索引可用于確定對于高速緩存線的請求是否命中或未命中。在圖形和計算應用中,GPC 208可被配置為使得每個SM 310耦合至紋理單元315,用于執(zhí)行紋理映射操作,例如,確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。紋理數(shù)據(jù)是從內部紋理LI高速緩存(未示出)讀取的,或者在一些實施例中是從SM 310內的LI高速緩存讀取的,并且根據(jù)需要從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中的ROP單元,并執(zhí)行對色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)以及執(zhí)行地址轉譯。應予以理解的是,本文所描述的內核架構是例示性的,可以對其進行各種變形和修改。GPC 208內可包含有任何數(shù)量的處理單元,例如,SM 310或紋理單元315、preROP325。此外,雖然僅示出了一個GPC 208,但PPU202可包含任何數(shù)量的GPC 208,這些GPC 208最好在功能上彼此相似,以使執(zhí)行行為不依賴于接收具體處理任務的GPC 208。此外,每個GPC 208最好使用單獨的且各異的處理單元、LI高速緩存等,相對于其他GPC 208獨立地操作。本領域普通技術人員應理解的是,圖1、2、3A和3B中所描述的架構決非限制本發(fā)明的范圍,并且在不脫離本發(fā)明的范圍的情況下,本文所教導的技術可在任何適當配置的處理單元上實施,這些處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC 208、一個或多個圖形或專用處理單元等。在本發(fā)明的實施例中,所期望的是,用PPU 202或計算系統(tǒng)的其他處理器使用線程陣列來執(zhí)行通用計算。給線程陣列中的每個線程分配唯一的線程標識符(“線程ID”),所述線程標識符在線程執(zhí)行期間可由該線程訪問。線程ID可以被定義為一維或多維數(shù)值,控制線程的處理行為的各個方面。例如,線程ID可用于確定線程輸入數(shù)據(jù)集中將要處理的部分和/或確定線程輸出數(shù)據(jù)集中將要生成或寫入的部分。每線程的指令序列可包含至少一個指令,所述至少一個指令定義線程陣列中代表性線程和一個或多個其他線程之間的協(xié)作行為。例如,每線程的指令序列可能包含下列指令:指示在序列中的特定點處暫定執(zhí)行代表性線程的操作直至一個或多個其他線程到達該特定點時為止的指令;指示代表性線程將數(shù)據(jù)存儲在一個或多個其他線程有權訪問的共享存儲器中的指令;指示代表性線程自動讀取和更新存儲在共享存儲器中的數(shù)據(jù)的指令,一個或多個其他線程基于它們的線程ID有權訪問所述共享存儲器;等等。CTA程序也可以包含計算將從中讀取數(shù)據(jù)的共享存儲器中的地址的指令,其中地址為線程ID的函數(shù)。通過定義合適的功能并提供同步技術,可以以可預測的方式通過CTA的一個線程將數(shù)據(jù)寫入到共享存儲器中的給定位置,并且通過同一 CTA的不同線程從該位置讀取出來。因此,線程之間任何期望模式的數(shù)據(jù)共享都可以得到支持,并且CTA中的任何線程都可以與同一 CTA中的任何其他線程共享數(shù)據(jù)。CTA的線程之間如果存在數(shù)據(jù)共享,則數(shù)據(jù)共享的程度由CTA程序決定;因而,應予以理解的是,在使用CTA的具體應用中,取決于CTA程序,CTA的線程實際上可能彼此共享或者不共享數(shù)據(jù),并且術語“CTA”和“線程陣列”在本文中具有相同含義。推測指令發(fā)送和回滾圖3C為根據(jù)本發(fā)明的一個實施例的、圖3B的SM 310的框圖。該SM310包括指令LI高速緩存370,其被配置為經(jīng)由L1.5高速緩存335從存儲器接收指令。Warp調度器和指令單元312從指令LI高速緩存370接收指令并且把指令發(fā)送到指令管線324。指令發(fā)送過程是推測的,因為warp調度器和指令單元212被配置成執(zhí)行指令的任何解碼。因此,指令被推測性地發(fā)送而不確定關于該指令的任何內容,例如指令內容、源或目的地操作的數(shù)量
坐坐寸寸ο指令管線324執(zhí)行預執(zhí)行指令操作諸如指令解碼和數(shù)據(jù)驗證。指令管線324根據(jù)讀和寫操作數(shù)的指令來收集指令的操作數(shù),從而訪問本地寄存器文件304、存儲器和高速緩存互連380、共享存儲器306以及LI高速緩存320。在預執(zhí)行指令操作期間,指令管線324可確定發(fā)生了回滾條件。指令管線324指示回滾條件是否通過設置回滾標志而發(fā)生并且提供識別回滾條件起因的回滾代碼。指令管線324向分派單元326輸出經(jīng)處理的指令、回滾標志和回滾代碼。分派單元326為在N個exec (執(zhí)行或處理)單元302中執(zhí)行的線程和線程組維持資源計分板和狀態(tài)信息。分派單元326從指令管線324接收經(jīng)處理的指令、回滾標志和回滾代碼并且當指令管線324尚未識別回滾條件時,分派單元326可基于資源計分板和狀態(tài)信息來確定發(fā)生了回滾條件?;貪L狀態(tài)包括造成回滾的指令的地址。當回滾條件發(fā)生時,分派單元326向warp調度器和指令單元312輸出回滾標志和回滾代碼。否則,分派單元326分派供exec單元302執(zhí)行的經(jīng)處理的指令。在一個實施例中,當多個回滾條件發(fā)生時,向調度器312匯報的回滾條件指示兩個或更多回滾條件已發(fā)生。在另一個實施例中,針對不同的回滾條件指定優(yōu)先級并且向調度器匯報具有最高優(yōu)先級的回滾條件?;貪L可用來應對各種錯誤條件同時還實現(xiàn)指令的推測發(fā)送。當識別回滾條件時,發(fā)起回滾的線程組的所有進行中(in-flight)指令應該被無效。進行中指令包括線程組的已經(jīng)發(fā)送但是仍未分派(提交)供exec單元302執(zhí)行的任何指令。在回滾操作的第一操作中,線程組的指令發(fā)送停止并且線程組的新指令取出也停止。在線程組的進行中指令到達分派單元326時,進行中指令被丟棄。在替代實施例中,進行中指令被warp調度器和指令單元312、指令管線324以及分派單元326丟棄,使得進行中指令未經(jīng)過分派單元326。一旦回滾操作被去除或校正,回滾操作的第二階段就開始于warp調度器和指令單元312更新線程組的程序計數(shù)器。warp調度器和指令單元312然后從指令LI高速緩存370取出在程序計數(shù)器處開始的回滾指令并且發(fā)送回滾指令。SM 310提供具有不同可訪問級別的片上(內部)數(shù)據(jù)存儲。專用寄存器(未示出)對于分派單元326可讀但不可寫,并被用于存儲定義每個線程的“位置”的參數(shù)。在一個實施例中,專用寄存器包括每線程(或SM 310內每exec單元302)—個的存儲線程ID的寄存器;每個線程ID寄存器僅可由各自的exec單元302所訪問。專用寄存器還可以包括可由同一柵格(grid)或隊列中的所有線程讀取的附加寄存器,所述附加寄存器存儲CTA標識符、CTA維度、CTA所屬的柵格的維度(或者如果是隊列的話為隊列位置)以及CTA所屬的柵格或隊列的標識符。屬于柵格的CTA具有指示各個CTA在柵格內的位置的隱含X、y、z參數(shù)。在初始化期間,響應從設備驅動器103經(jīng)由前端212接收的命令對專用寄存器進行寫入,并且在處理任務的執(zhí)行期間不變。前端212把待執(zhí)行的每個處理任務調度作為柵格或隊列。每個CTA與用于并發(fā)執(zhí)行一個或多個任務的特定柵格或隊列關聯(lián)。另外,單個GPC 208可并發(fā)執(zhí)行多個任務。參數(shù)存儲器(未示出)存儲運行時間參數(shù)(常數(shù)),這些參數(shù)可由同一 CTA內的任一線程(或任一 LSU 303)讀取但不可由其寫入。在一個實施例中,設備驅動器103在指引SM310開始執(zhí)行使用這些參數(shù)的任務之前將這些參數(shù)提供給參數(shù)存儲器。任一 CTA (或者SM310內的任一 exec單元302)內的任一線程可以通過存儲器接口 214訪問全局存儲器。該全局存儲器的一部分可被存儲在LI高速緩存320中。每個線程均可使用本地寄存器文件304作為臨時空間(scratch space);每個寄存器均被分配用于一個線程的排他性使用,并且任何本地寄存器文件304中的數(shù)據(jù)均只可由寄存器被分配給的線程所訪問。通過在物理上或邏輯上將寄存器文件劃分為N個通道(lane)來實現(xiàn)本地寄存器文件,每個通道均具有某一數(shù)量的條目(其中每個條目可能存儲例如32位字)。給N個exec單元302中的每一個分配一個通道,并且不同通道中對應的條目可以填充有供執(zhí)行同一程序的不同線程使用的數(shù)據(jù),以利于SIMD執(zhí)行??梢詫⑦@些通道的不同部分分配給G個并發(fā)線程組中的不同的線程組,以使本地寄存器文件304中的給定條目只可由特定線程訪問。在一個實施例中,本地寄存器文件304內的某些條目被保留用于存儲線程標識符,實現(xiàn)專用寄存器之一。另外,一致性LI高速緩存可以被包括在SM 310內以存儲N個exec單元302的每一個通道的一致性或常數(shù)值。單個CTA內的線程可訪問共享存儲器306 ;換言之,共享存儲器306中的任一位置均可由同一 CTA內的任一線程(或由SM 310內任一處理引擎)所訪問。共享存儲器306也可被實現(xiàn)為具有互連的共享片上高速緩存存儲器或共享寄存器文件,允許任一處理引擎對該共享存儲器中任一位置進行讀寫。在其他一些實施例中,共享的狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)域上,并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以被實現(xiàn)為在同一共享寄存器文件內或者在實現(xiàn)了共享存儲器306的共享高速緩存存儲器內的指定扇區(qū)(section),或者被實現(xiàn)為LSU 303只能以只讀方式訪問的單獨的共享寄存器文件或片上高速緩存存儲器。在一個實施例中,也可使用實現(xiàn)參數(shù)存儲器的區(qū)域來存儲CTAID和任務ID,以及CTA和柵格維度或隊列位置,從而實現(xiàn)專用寄存器的一部分。SM 310還可包括統(tǒng)一地址映射單元352,該統(tǒng)一地址映射單元352將在統(tǒng)一的存儲器空間中提供給所指定的加載和存儲指令的地址轉換為在每個各異的存儲器空間中的地址。因此,通過指定在統(tǒng)一的存儲器空間中的地址,指令可用于訪問任何本地、共享或者全局存儲器空間。每個SM 310中的LI高速緩存320可以用來高速緩存私有每線程本地數(shù)據(jù)以及還有每應用全局數(shù)據(jù)。在一些實施例中,每CTA共享數(shù)據(jù)可高速緩存在LI高速緩存320中。指令管線324經(jīng)由存儲器和高速緩存互連380耦合到共享存儲器306和LI高速緩存320。指令管線324被配置成檢測各種回滾條件,包括由于高速緩存未命中或者因為操作數(shù)仍未存儲而不可用的操作數(shù)。例如,當在常數(shù)高速緩存中常數(shù)不可用,即發(fā)生高速緩存未命中時,指令管線324指示回滾條件存在。編譯器典型地組織指令,使得可通過確保相關指令所需要的任何操作數(shù)被(按需)計算并被較早指令存儲在相同或不同的線程組中而無延遲地執(zhí)行所述相關指令。然而,回滾條件可能造成一個或多個線程組的指令被延遲。因此,指令管線324可被配置成確定當源或目的地操作數(shù)在存儲器中不可用并且是相關指令所需要的時存在回滾條件。指令管線324還可被配置成當指令指定不能并行執(zhí)行的兩個操作時檢測無效的超標量對(super-scalar-pair)。當檢測到無效的超標量對時,回滾條件存在并且warp調度器和指令單元312將發(fā)送每個操作作為單獨的指令,即原始指令將被串行化。指令管線324還可被配置成通過使用錯誤校正碼(ECC)來檢測源操作數(shù)何時被損壞。在一個實施例中,指令管線324被配置成使用ECC來校正源操作數(shù)值。在其他實施例中,指令管線324通過相應地設置回滾標志和回滾代碼而指示回滾條件存在。分派單元326被配置成堅檢測各種回滾條件,包括由于資源競爭所致的指令計分板互鎖以及被用來同步不同線程組的同步屏障所阻擋的指令。同步屏障可能直到仍未發(fā)送的指令被執(zhí)行時才能被完成。因此,重要的是,如果需要的話允許那些未發(fā)送的指令執(zhí)行,從而旁路遇到回滾條件的指令。當條目在計分板中不可用或者不可用于存儲線程或線程組的狀態(tài)信息時,分派單元326還可確定回滾條件存在。另外,當計分板指示存儲器或處理資源競爭在未被分派的指令和正在執(zhí)行的指令之間存在時,分派單元326通過相應地設置回滾標志和回滾代碼而指示回滾條件存在。編譯器可被配置成組織每個線程組的指令,假設某些操作有預定的等待時間。當由于各種情形例如高速緩存未命中、回滾操作而超過預定的等待時間時,分派單元326基于計分板內容來確定回滾條件存在。不是拖延輸入的經(jīng)處理指令同時等待解析該情形,分派單元326確定回滾條件存在并且輸入的經(jīng)處理指令被無拖延地應對。因為warp調度器和指令單元312在向指令管線324發(fā)送指令之前不解碼指令,因此指令被發(fā)送而假設不采取分支,即經(jīng)過程序的“失敗(fal 1-thixmgh ) ”路徑的指令被推測性地發(fā)送。當不采取失敗路徑時,回滾條件存在。然而,每當分支或跳轉指令的失敗路徑有效,即線程組必須在某個時間在失敗路徑中執(zhí)行指令時,回滾直到在執(zhí)行失敗路徑中的指令之后才發(fā)生。換言之,回滾被推遲并且向失敗路徑給予優(yōu)先級。分派單元326通過把發(fā)散令牌推到用于線程組中的不采取失敗路徑且將執(zhí)行分支或跳轉指令的任何線程的執(zhí)行棧上而推遲該回滾。發(fā)散令牌包括用于分支或跳轉指令的程序計數(shù)器和指示線程組中的將執(zhí)行分支或跳轉路徑的線程的活動掩碼。用于正在執(zhí)行的每個線程組的活動掩碼被分派單元326維持并且被warp調度器和指令單元312與每個發(fā)送的指令一起輸出。當線程組開始執(zhí)行計算任務時并且當填充發(fā)散令牌時,初始化該活動掩碼。分派單元326可被配置成解析分支操作以及從執(zhí)行棧推入和取出條目。在一個實施例中,優(yōu)化失敗路徑的執(zhí)行以避免回滾從而針對特定情形采取非失敗路徑。例如,當非失敗路徑指令是使執(zhí)行非失敗路徑的線程作為采取失敗路徑(接著執(zhí)行失敗路徑)的線程在相同的指令處恢復執(zhí)行的“波普爾”指令時,無回滾發(fā)生。當檢測到觸發(fā)回滾條件的分支或跳轉指令時,不把發(fā)散令牌推到執(zhí)行棧上?!安ㄆ諣枴敝噶畹氖纠ㄍ顺觥⒎祷?、中斷、繼續(xù)、長跳轉以及具有指示線程組的所有活動線程在執(zhí)行繼續(xù)之前需要同步的S選項的指令。相比而言,包括相對調用(CAL)、絕對調用(JCAL)、斷點(BPT)或中斷、從捕獲返回(RTT)或從中斷返回、間接分支(BRX)以及間接跳轉(JMX)的無條件分支指令確實造成要求回滾操作的回滾條件。當執(zhí)行棧被配置成把一些條目存儲在高速緩存中且把其他條目進一步向下存儲在棧中、在圖形存儲器中時,分派單元326可被配置成當執(zhí)行棧不可用時指示發(fā)生了回滾條件。當條目正在從高速緩存轉移到圖形存儲器中或者從圖形存儲器轉移到高速緩存中時,執(zhí)行??赡懿豢捎谩D4A示出了根據(jù)本發(fā)明的一個實施例的推測指令發(fā)送和指令回滾方法400。盡管結合圖1、2、3A、3B和3C的系統(tǒng)來描述方法步驟,但是本領域的技術人員將理解任何經(jīng)配置以按任意順序執(zhí)行所述方法步驟的系統(tǒng)都在本發(fā)明的范圍內。在步驟405處,warp調度器和指令單元312每個時鐘循環(huán)發(fā)送至少一個指令,從而交織一個或多個線程組的指令。在步驟410處,指令管線324和分派單元326對指令執(zhí)行預執(zhí)行指令處理并且識別指令的任何回滾條件。在步驟415處,恰好在提交經(jīng)處理的指令來執(zhí)行之前,分派單元326檢查經(jīng)處理的指令的回滾標志以確定是否針對經(jīng)處理的指令發(fā)生了回滾條件。如果沒有發(fā)生回滾條件,則在步驟445處,分派單元326分派經(jīng)處理的指令以供一個或多個exec單元302執(zhí)行。否則,在步驟425處,分派單元326用信號通知warp調度器和指令單元312停止發(fā)送與和設置的回滾標志關聯(lián)的經(jīng)處理指令關聯(lián)的線程組的指令。分派單元326還向warp調度器和指令單元312提供指定回滾條件類型的回滾代碼。在步驟430處,分派單元326去除在檢測到回滾條件時處于進行中的、線程組的經(jīng)處理的指令。分派單元326還繼續(xù)分派未發(fā)生回滾條件的其他線程組的經(jīng)處理的指令,使得在完成回滾操作時其他線程組的指令執(zhí)行繼續(xù)。在步驟435處,warp調度器和指令單元312確定回滾操作是否完成并且被回滾的指令可針對線程組被重新發(fā)送。當回滾條件被去除或校正時,回滾操作完成。用于回滾的線程組的所有進行中指令對于重新發(fā)送指令而言不需要被去除。在回滾操作完成后,warp調度器和指令單元312為線程組重新發(fā)送回滾的指令。一些回滾條件不要求對線程組中的所有線程的回滾操作。作為替代,可執(zhí)行部分回滾操作。線程組中的不需要回滾的線程被分派單元326提交并且被exec單元302執(zhí)行,同時針對線程組中的其他線程執(zhí)行(部分)回滾操作。分派單元326計算并存儲線程組的指示將執(zhí)行部分回滾操作的線程的回滾活動掩碼。當為線程組重新發(fā)送指令時,warp調度器和指令單元312輸出回滾活動掩碼。當存在待用于線程組的部分回滾時,線程組的捕獲操作不被允許并且指令和重新發(fā)送的指令必須在采取任何捕獲之前完成執(zhí)行。可執(zhí)行部分回滾操作的指令包括像素屬性內插指令和索引化常數(shù)負載指令。當線程組中的部分線程針對這些指令發(fā)散時,針對發(fā)散線程執(zhí)行部分回滾。當造成回滾的指令被再次發(fā)送時,僅僅發(fā)散線程(根據(jù)回滾活動掩碼)執(zhí)行指令。圖4B示出了根據(jù)本發(fā)明的一個實施例的推測指令發(fā)送和部分指令回滾方法450。盡管結合圖1、2、3A、3B和3C的系統(tǒng)來描述方法步驟,但是本領域的技術人員將理解任何經(jīng)配置以按任意順序執(zhí)行所述方法步驟的系統(tǒng)都在本發(fā)明的范圍內。在步驟405處,warp調度器和指令單元312每個時鐘循環(huán)發(fā)送至少一個指令,從而交織一個或多個線程組的指令。在步驟410處,指令管線324和分派單元326對指令執(zhí)行預執(zhí)行指令處理并且識別指令的任何回滾條件。在步驟415處,恰好在提交經(jīng)處理的指令來執(zhí)行之前,分派單元326檢查經(jīng)處理的指令的回滾標志以確定是否針對經(jīng)處理的指令發(fā)生了回滾條件。如果沒有發(fā)生回滾條件,則在步驟445處,分派單元326分派經(jīng)處理的指令以供一個或多個exec單元302執(zhí)行。否則,在步驟420處,分派單元326確定是否可針對指令執(zhí)行部分回滾操作,并且如果否的話,則在步驟425處,分派單元326用信號通知warp調度器和指令單元312停止發(fā)送與和設置的回滾標志關聯(lián)的經(jīng)處理指令關聯(lián)的線程組的指令。分派單元326還向warp調度器和指令單元312提供指定回滾條件類型的回滾代碼。在步驟430處,分派單元326去除在檢測到回滾條件時處于進行中的、線程組的經(jīng)處理的指令。分派單元326還繼續(xù)分派未發(fā)生回滾條件的其他線程組的經(jīng)處理的指令,使得在完成回滾操作時其他線程組的指令執(zhí)行繼續(xù)。在步驟435處,warp調度器和指令單元312確定回滾操作是否完成并且被回滾的指令可針對線程組被重新發(fā)送。如果在步驟420處,分派單元326確定可針對指令執(zhí)行部分回滾操作,則在步驟455處,分派單元326計算并存儲部分回滾活動掩碼并且把線程組標志為執(zhí)行部分回滾操作。在步驟460處,分派單元326分派指令和任何進行中指令以供線程組中的非發(fā)散線程執(zhí)行。在步驟465處,分派單元326把線程組的活動掩碼更新為部分回滾活動掩碼并且行進至步驟440以重新發(fā)送回滾的指令。在步驟445處執(zhí)行回滾的指令后,分派單元326清除部分回滾標志,由此實現(xiàn)線程組的捕獲操作的執(zhí)行。一個或多個線程組的指令被推測性地發(fā)送用于預執(zhí)行處理,并且不能被提交用于執(zhí)行的任何指令被丟棄并且在解析了防止執(zhí)行的回滾條件后針對線程組重新發(fā)送。丟棄由于回滾條件而不能被提交的指令允許針對其他線程組提交和執(zhí)行其他指令,而不是在解析回滾條件時拖延。因此,針對未遇到回滾條件的線程組維持指令處理吞吐量。本發(fā)明的一個實施例可以作為與計算機系統(tǒng)一起使用的程序產(chǎn)品實現(xiàn)。程序產(chǎn)品的程序定義實施例的功能(包括本文所述的方法)并且可以被包含在各種計算機可讀存儲介質上。示例性的計算機可讀存儲介質包括,但不限于:(i )信息被永久保存在其上的非可寫存儲介質(例如,計算機內的只讀存儲器設備,諸如可被CD-ROM驅動器讀取的CD-ROM盤、閃存、ROM芯片或任何類型的固態(tài)非易失性半導體存儲器)jP(ii)可變信息被保存在其上的可寫存儲介質(例如,磁盤驅動器內的軟盤或者硬盤驅動器或者任何類型的固態(tài)隨機存取半導體存儲器)。以上已經(jīng)參照具體實施例描述了本發(fā)明。然而,本領域的技術人員應該理解在不脫離如所附權利要求提出的本發(fā)明更寬的精神和范圍的情況下,可以做出各種修改和改變。因此,前述的描述和附圖應被視為說明性的而非限制性的意義。
權利要求
1.一種用于執(zhí)行推測發(fā)送的指令的回滾的方法,所述方法包括: 發(fā)送第一線程組的第一指令集; 發(fā)送第二線程組的第二指令集; 在所述第一指令集中的指令的預執(zhí)行處理期間檢測所述第一線程組中的至少一個線程的回滾條件; 停止發(fā)送所述第一線程組的附加指令; 丟棄所述第一指令集中已經(jīng)發(fā)送的且尚未執(zhí)行的進行中指令;以及 執(zhí)行所述第二線程組的所述第二指令集。
2.一種用于調度計算任務來執(zhí)行的系統(tǒng),所述系統(tǒng)包括: 存儲器,被配置成存儲第一線程組的第一指令集和第二線程組的第二指令集; 調度器單元,被配置成: 發(fā)送第一線程組的第一指令集; 發(fā)送第二線程組的第二指令集;并且 當檢測到回滾條件時停止發(fā)送所述第一線程組的附加指令; 分派單元,被配置成: 在所述第一指令集中的 指令的預執(zhí)行處理期間檢測所述第一線程組中的至少一個線程的回滾條件;并且 丟棄所述第一指令集中已經(jīng)發(fā)送的且尚未執(zhí)行的進行中指令;和 多個執(zhí)行單元,被配置成執(zhí)行所述第二線程組的所述第二指令集。
3.根據(jù)權利要求2所述的系統(tǒng),其中所述調度器單元進一步被配置成: 發(fā)送第三線程組的第三指令集, 所述分派單元進一步被配置成: 在所述第三指令集中的第一指令的預執(zhí)行處理期間檢測所述第三線程組中的至少一個線程的部分回滾條件;并且 存儲指示第三線程組中的針對第一指令發(fā)散的第一部分線程的部分回滾活動掩碼,并且 所述多個執(zhí)行單元進一步被配置成: 執(zhí)行第三線程組中的針對第一指令未發(fā)散的第二部分線程的第一指令。
4.根據(jù)權利要求2所述的系統(tǒng),其中所述調度器單元進一步被配置成重新發(fā)送第三線程組的第一指令并且所述多個執(zhí)行單元進一步被配置成基于所述部分回滾活動掩碼來執(zhí)行第一部分線程的第一指令。
5.根據(jù)權利要求2所述的系統(tǒng),其中所述第一指令集中的指令指定不能并行執(zhí)行的兩個操作的無效超標量對。
6.根據(jù)權利要求5所述的系統(tǒng),其中所述調度器單元進一步被配置成: 作為第一線程組的第一指令發(fā)送所述無效超標量對的第一操作;并且 作為第一線程組的第二指令發(fā)送所述無效超標量對的第一操作。
7.根據(jù)權利要求2所述的系統(tǒng),其中所述第一指令集中的指令是被配置成使第一線程組與第二線程組同步的屏障同步指令。
8.根據(jù)權利要求2所述的系統(tǒng),其中所述第一指令集中的指令指定被損壞的操作數(shù)。
9.根據(jù)權利要求2所述的系統(tǒng),其中所述調度器單元進一步被配置成在去除所述回滾條件后重新發(fā)送第一線程組的第一指令集。
10.根據(jù)權利要求2所述的系統(tǒng),其中所述分派單元進一步被配置成在完成所述進行中指令的預執(zhí)行處理 后丟棄所述進行中指令。
全文摘要
本發(fā)明的一個實施例闡述了一種用于推測性地發(fā)送指令以允許處理管線在其他指令的回滾期間繼續(xù)處理一些指令的技術。調度器電路發(fā)送指令用于執(zhí)行,假設幾個循環(huán)后,當指令到達多線程執(zhí)行單元時,指令之間的這種相關性將被解析,資源將可用,操作數(shù)數(shù)據(jù)將可用并且其他條件將不會防止指令的執(zhí)行。當在特定線程組的指令的執(zhí)行點處存在回滾條件時,不把指令分派到多線程執(zhí)行單元。然而,由調度器電路發(fā)送以供不同線程組執(zhí)行的且不存在回滾條件的其他指令被多線程執(zhí)行單元執(zhí)行。在回滾條件不再存在后,重新發(fā)送引發(fā)回滾條件的指令。
文檔編號G06F9/46GK103197953SQ20121043653
公開日2013年7月10日 申請日期2012年11月5日 優(yōu)先權日2011年11月4日
發(fā)明者杰克·希萊爾·肖凱特, 奧利維爾·吉普, 羅伯特·J·斯托爾, 仇小鋼 申請人:輝達公司