專利名稱:用于使用預解碼數(shù)據(jù)調度指令的方法和裝置的制作方法
技術領域:
本公開總地涉及多線程指令調度,并且,更具體地,涉及用于使用預解碼數(shù)據(jù)調度指令的方法和裝置。
背景技術:
并行處理器具有使用不同的硬件資源來使多個線程能夠同時執(zhí)行的多個獨立內核。SMD (單指令、多數(shù)據(jù))架構處理器在多個內核的每一個上均執(zhí)行相同的指令,其中每個內核處理不同的輸入數(shù)據(jù)。MMD (多指令、多數(shù)據(jù))架構處理器利用供應給每個內核的不同的輸入數(shù)據(jù)在不同的內核上執(zhí)行不同的指令。并行處理器也可以是多線程的,其使用單個處理內核的資源使兩個或更多個線程能夠大體上同時執(zhí)行(即在不同的時鐘周期期間在內核上執(zhí)行不同的線程)。指令調度是指用于確定在下一個時鐘周期期間哪個線程執(zhí)行在哪個內核上的技術。通常,指令調度算法在從存儲器獲取指令之后將解碼多個指令以確定每個特定操作所需的特定資源和與那些資源相關聯(lián)的延遲。之后系統(tǒng)可以評估該延遲以為該多個指令確定最佳調度順序。例如,一個指令可以指定操作數(shù)(即寄存器值),該操作數(shù)取決于正在由來自同一線程的前一個指令所執(zhí)行的計算。之后調度器延遲該一個指令的執(zhí)行直到前一個指令完成執(zhí)行。上述系統(tǒng)的一個問題是解碼多個指令、識別指令之間的依賴關系以及分析與由指令所指定的所有計算相關聯(lián)的延遲需要處理器中的大量管理資源和大量狀態(tài)信息存儲。處理器可以確定由指令所指定的特定操作碼、與操作相關聯(lián)的資源(例如作為操作數(shù)傳遞到每個指令的特定寄存器)、指令之間的相互依賴關系以及與指令相關聯(lián)的任意其他重要數(shù)據(jù)。這類算法的實現(xiàn)可采取許多時鐘周期來完成以及采取大量存儲器用于存儲和解碼指令。
`
因此,本領域需要的是用于在不需要為輸入到其他指令的計算確定延遲的情況下而實施指令調度的系統(tǒng)和方法。
發(fā)明內容
在一個實施例中,多核處理器包括每個內核中的調度單元,其用于每個調度周期從兩個或兩個以上線程選擇指令以在該特定內核上執(zhí)行。隨著調度線程用于在內核上執(zhí)行,來自所述線程的指令在未被解碼的情況下獲取到緩沖區(qū)。預解碼數(shù)據(jù)由編譯器確定并在運行時由調度單元提取以及用來控制線程的選擇用于執(zhí)行。所述預解碼數(shù)據(jù)可以指定在發(fā)出所述指令之前要等待的若干調度周期。所述預解碼數(shù)據(jù)還可以為所述指令指定調度優(yōu)先級或指定應該在單個調度周期中發(fā)出兩個指令。一旦所述調度單元已經(jīng)選擇指令以發(fā)出用于執(zhí)行,解碼單元就完全解碼所述指令。本公開的一個示范性實施例提出了用于在并行處理計算裝置內調度指令的計算機實現(xiàn)的方法。所述方法包括以下步驟:從指令高速緩存單元獲取與兩個或兩個以上線程組相對應的指令,以及接收與所述指令的每一個相關聯(lián)的預解碼數(shù)據(jù),其中當編譯所述指令時確定所述預解碼數(shù)據(jù)。所述步驟進一步包括至少部分基于所述預解碼數(shù)據(jù)來選擇指令用于執(zhí)行、解碼所述指令以及將所述指令分派到所述并行處理單元用于執(zhí)行。本公開的另一示范性實施例提出了一種調度單元,包括指令高速緩存獲取單元、宏調度器單元、微調度器仲裁器、解碼單元和分派單元。所述指令高速緩存獲取單元配置為將與兩個或兩個以上線程組相對應的指令路由到第一緩沖區(qū)并將與所述指令的每一個相關聯(lián)的預解碼數(shù)據(jù)路由到第二緩沖區(qū)。所述宏調度器單元耦合到所述指令高速緩存獲取單元并配置為接收預解碼數(shù)據(jù),其中當編譯所述指令時確定所述預解碼數(shù)據(jù)。所述微調度器仲裁器耦合到所述宏調度器單元和所述第二緩沖區(qū)并配置為至少部分基于所述預解碼數(shù)據(jù)來在運行時選擇第一指令用于由處理單元執(zhí)行。所述解碼單元耦合到所述第一緩沖區(qū)并配置為解碼所述第一指令。所述分派單元耦合到所述解碼單元并配置為將所述第一指令分派到處理單元用于執(zhí)行。本公開的又一示范性實施例提出了一種包括中央處理單元和并行處理單元的計算設備。所述并行處理單元包括調度單元,所述調度單元配置為從指令高速緩存單元獲取與兩個或兩個以上線程組相對應的多個指令,以及接收與所述指令的每一個相關聯(lián)的預解碼數(shù)據(jù),其中當編譯所述指令時確定所述預解碼數(shù)據(jù)。所述調度單元進一步配置為至少部分基于所述預解碼數(shù)據(jù)來選擇指令用于執(zhí)行,解碼所述指令以及將所述指令分派到所述并行處理單元用于執(zhí)行。有利地,使用與每個指令相對應的所述預解碼數(shù)據(jù)減輕了所述調度單元上的工作負載。具體地,所述調度單元不再需要識別所述指令之間的依賴關系以及分析與由所述指令指定的所有計算相關聯(lián)的所述延遲。因此,減少了所述處理器中的管理資源量并且減少了由所述調度單元所維護的狀態(tài)信息量。
因此,可以詳細地理解上述本公開的特征,并且可以參考示范性實施例得到對如上面所簡要概括的本 發(fā)明更具體的描述,其中一些實施例在附圖中示出。然而,應當注意的是,附圖僅示出了本公開的典型實施例,因此不應被認為是對其范圍的限制,本公開可以具有其他等效的實施例。圖1為示出了配置為實現(xiàn)本公開一個或多個方面的計算機系統(tǒng)的框圖;圖2為根據(jù)本公開一個實施例的用于圖1的計算機系統(tǒng)的并行處理子系統(tǒng)的框圖;圖3A為根據(jù)本公開一個實施例的圖2的前端的框圖;圖3B為根據(jù)本公開一個實施例的在圖2的并行處理單元之一內的通用處理集群的框圖;圖3C為根據(jù)本公開一個實施例的圖3B的流多處理器的一部分的框圖;以及圖4為根據(jù)本公開一個示范性實施例的圖3C的warp調度器和指令單元的框圖;圖5A示出了根據(jù)本公開一個示范性實施例的從指令LI高速緩存所獲取的高速緩存線;圖5B示出了根據(jù)本公開一個示范性實施例的圖5A的特殊指令ss-1nst ;
圖6示出了根據(jù)本公開一個示范性實施例的用于在沒有指令解碼的情況下調度指令的方法;以及圖7示出了根據(jù)本公開一個示范性實施例的用于使用預解碼數(shù)據(jù)調度指令的方法。
具體實施例方式在下面的描述中,將闡述大量的特定細節(jié)以提供對本公開更透徹的理解。然而,本領域的技術人員應該清楚,本公開可以在沒有一個或多個這些特定細節(jié)的情況下得以實施。本公開描述了用于在解碼指令之前調度指令以在處理器內核上執(zhí)行的系統(tǒng)和方法。在一個實施例中,多核處理器包括每個內核中的調度單元,用于在該特定內核上從兩個或兩個以上線程調度指令的。隨著線程被調度用于執(zhí)行以及被發(fā)出到處理器內核,來自線程的指令在未被解碼的情況下被從指令高速緩存獲取到緩沖區(qū)中。調度單元包括用于實施執(zhí)行相同或不同指令集的線程組的優(yōu)先級排序的宏調度器單元。微調度器仲裁器確定每個調度周期從線程組之一選擇至少一個指令并發(fā)出該至少一個指令用于執(zhí)行。微調度器仲裁器使用預解碼數(shù)據(jù)來實現(xiàn)調度算法。對于每個指令在編譯期確定預解碼數(shù)據(jù)。在運行時,通過僅解碼指令的小部分來提取預解碼數(shù)據(jù)。可替代地,預解碼數(shù)據(jù)可以隨著指令一起被接收諸如與指令嵌入同一高速緩存線中。一旦微調度器仲裁器已經(jīng)選擇指令以發(fā)出到執(zhí)行單元,解碼單元就完全解碼該指令。系統(tǒng)概述圖1為示出了配置為實現(xiàn)本公開的一個或多個方面的計算機系統(tǒng)100的框圖。計算機系統(tǒng)100包括中央處理單元(CPU) 102和經(jīng)由可以包括存儲器橋105的互連路徑通信的系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTrans port)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個或多個用戶輸入設備108 (例如鍵盤、鼠標)接收用戶輸入并且經(jīng)由通信路徑106和存儲器橋105將所述輸入轉發(fā)到CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCDExpress、加速圖形端口或超傳輸鏈路)耦合到存儲器橋105 ;在一個實施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設備110 (例如傳統(tǒng)的基于陰極射線管或液晶顯示器的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關116提供I/O橋107與諸如網(wǎng)絡適配器118以及各種外插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮磁盤(CD)驅動器、數(shù)字視頻光盤(DVD)驅動器、膠片錄制設備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括特殊命名的通信路徑106和113可以使用任何適合的協(xié)議實現(xiàn),諸如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)元件集成在單個子系統(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ù)本公開一個實施例的并行處理子系統(tǒng)112。如圖所示,并行處理子系統(tǒng)112包括一個或多個并行處理單元(PI3U) 202,每個并行處理單元202都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,類似對象的多個實體以標識該對象的參考數(shù)字和需要時標識所述實體的括號中的數(shù)字來表示。)PPU202和并行處理存儲器204可使用一個或多個集成電路設備來實現(xiàn),諸如可編程處理器、專用集成電路(ASIC)或存儲器設備,或者以任何其他技術可行的方式來實現(xiàn)。再參考圖1以及圖2,在一些實施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器,它可以配置為實施與下述相關的各種操作:經(jīng)由存儲器橋105和第二通信路徑113從CPU102和/或系統(tǒng)存儲器104所提供的圖形數(shù)據(jù)生成像素數(shù)據(jù),與本地并行處理存儲器204(可被用作圖形存儲器,包括例如常用幀緩沖區(qū)(buffer))交互以存儲和更新像素數(shù)據(jù),傳遞像素數(shù)據(jù)到顯示設備110等等。在一些實施例中,并行處理子系統(tǒng)112可包括一個或多 個作為圖形處理器而操作的PPU 202以及包括一個或多個用于通用計算的其他PPU 202。這些PTO可以是相同的或不同的,并且每個PPU均可具有專用并行處理存儲器設備或不具有專用的并行處理存儲器設備。并行處理子系統(tǒng)112中的一個或多個PPU 202可輸出數(shù)據(jù)到顯示設備110,或者并行處理子系統(tǒng)112中的每個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)以發(fā)起對數(shù)據(jù)結構中的命令流的處理。PPU 202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令??梢越?jīng)由設備驅動程序103由應用程序為每個入棧緩沖區(qū)指定執(zhí)行優(yōu)先級以控制對不同入棧緩沖區(qū)的調度。現(xiàn)在返回參考圖2和圖1,每個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鏈路,如本領域所知的,其中專用通道被分配到每個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)。在各種 應用中,可分配不同的GPC 208用于處理不同類型的程序或用于執(zhí)行不同類型的計算。取決于因每種類型的程序或計算所產(chǎn)生的工作量,GPC 208的分配可以變化。GPC 208從任務/工作單元207內的工作分布單元接收所要執(zhí)行的處理任務。所述工作分布單元接收指向編碼為任務元數(shù)據(jù)(TMD)并存儲在存儲器中的處理任務的指針。指向TMD的指針包括在存儲為入棧緩沖區(qū)并由前端單元212從主機接口 206接收的命令流中。可以編碼為TMD的處理任務包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序將被執(zhí)行)的狀態(tài)參數(shù)和命令。任務/工作單元207從前端212接收任務并確保在每一個TMD所指定的處理發(fā)起前,將GPC 208配置為有效狀態(tài)??梢詾槊總€TMD指定用來調度處理任務的執(zhí)行的優(yōu)先級。還可從處理集群陣列230接收處理任務??蛇x地,TMD可包括控制是否將TMD添加到處理任務列表(或指向處理任務的指針列表)的頭部或尾部的參數(shù),從而提供除優(yōu)先級以外的另一級別的控制。存儲器接口 214包括D個分區(qū)單元215,每個分區(qū)單元215均直接耦合到一部分并行處理存儲器204,其中DS I。如所示的,分區(qū)單元215的數(shù)量一般等于動態(tài)隨機存取存儲器(DRAM) 220的數(shù)量。在其他實施例中,分區(qū)單元215的數(shù)量也可以不等于存儲器設備的數(shù)量。本領域的技術人員應該理解DRAM 220可以用其他合適的存儲設備來替代并且可以是一般常規(guī)的設計。因此省略了詳細描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標可以跨DRAM 220加以存儲,這允許分區(qū)單元215并行寫入每個渲染目標的各部分以有效地使用并行處理存儲器204的可用帶寬。任意一個GPC 208都可以處理要被寫到并行處理存儲器204內的任意DRAM 220的數(shù)據(jù)。交叉開關單元210配置為路由每個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)由橋式芯片或其他通信手段將PPU 202連接到系統(tǒng)存儲器。如上所述,在并行處理子系統(tǒng)112中可以包括任意數(shù)量的PPU 202。例如,可在單個外插卡上提供多個PP U 202、或可將多個外插卡連接到通信路徑113、或可將一個或多個PPU 202集成到橋式芯片中。在多PI3U系統(tǒng)中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同數(shù)量的處理內核、不同容量的本地并行處理存儲器等等。在存在多個PPU 202的情況下,可并行操作那些PPU從而以高于單個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ù)本公開一個實施例的圖2的任務/工作單元207的框圖。任務/工作單元207包括任務管理單元300和工作分布單元340。任務管理單元300基于執(zhí)行優(yōu)先級級別來組織所要調度的任務。對于每個優(yōu)先級級別,任務管理單元300將指向與任務相對應的TMD 322的指針列表存儲在調度器表321中,其中所述列表可以實現(xiàn)為鏈表??梢詫MD 322存儲在PP存儲器204或系統(tǒng)存儲器104中。任務管理單元300接受任務并將任務存儲在調度器表321中的速度與任務管理單元300調度任務以執(zhí)行的速度是解耦的。因此,任務管理單元300可以在調度任務之前收集若干任務。之后可以基于優(yōu)先級信息或使用其他技術諸如循環(huán)調度來調度所收集的任務。工作分布單元340包括具有槽的任務表345,每個槽均可以被用于正在執(zhí)行的任務的TMD 322所占用。當任務表345中有空閑槽時,任務管理單元300可以調度任務以執(zhí)行。當沒有空閑槽時,未占用槽的較高優(yōu)先級任務可以驅逐占用槽的較低優(yōu)先級任務。當任務被驅逐時,該任務被停止,并且如果該任務的執(zhí)行沒有完成,則將指向該任務的指針添加到所要調度的任務指針列表以使得任務的執(zhí)行稍后將恢復。當生成子處理任務時,在任務的執(zhí)行期間,將指向該子任務的指針添加到所要調度的任務指針列表??梢杂稍谔幚砑宏嚵?30中執(zhí)行的TMD 322生成子任務。不同于由任務/工作單元207從前端212接收的任務,子任務從處理集群陣列230接收。子任務不被插入幀緩沖區(qū)或傳輸?shù)角岸?。當生成子任務或將用于子任務的?shù)據(jù)存儲在存儲器中時不通知CPU 102。通過幀緩沖區(qū)提供的任務與子任務之間的另一個區(qū)別是通過幀緩沖區(qū)提供的任務由應用程序來定義而子任務是在任務執(zhí)行期間自動生成的。任務處理概述圖3B為根據(jù)本公開一個實施例的在圖2的PPU 202之一內的GPC208的框圖。每個GPC 208均可配置為并行執(zhí)行大量線程,其中術語“線程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實例。在一些實施例中,單指令、多數(shù)據(jù)(SIMD)指令發(fā)出技術用于在不提供多個獨立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實施例中,單指令、多線程(SIMT)技術用于使用配置為向GPC 208中的每一個內的處理引擎集發(fā)出指令的共有指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行相同指令的SMD執(zhí)行機制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領域普通技術人員應該理解SMD處理機制代表SMT處理機制的功能子集。經(jīng)由將處理任務分布到流多處理器(SM)310的管線管理器305來有利地控制GPC208的操作。管線管理器305還可配置為通過為由SM 310所輸出的處理數(shù)據(jù)指定目的地來控制工作分布交叉開關330。在一個實施例中,每個GPC 208均包括M個SM310,其中M彡1,每個SM 310均配置為處理一個或多 個線程組。另外,如本領域已知的,每個SM 310均有利地包括可以管線化的相同的功能執(zhí)行單元集(例如執(zhí)行單元和加載-存儲單元一作為Exec單元302和LSU 303在圖3C中示出),其允許在前一個指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任意組合。在一個實施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點運算(例如加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、移位和各種代數(shù)函數(shù)的計算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對數(shù)函數(shù)等等);以及相同的功能單元硬件可均衡的用來(beleveraged to)實施不同的操作。如本文之前所定義的,傳輸?shù)教囟℅PC 208的一系列指令構成線程,以及跨SM310內的并行處理引擎(未示出)的某一數(shù)量的并發(fā)執(zhí)行線程的集合在本文中稱為“warp”或“線程組”。如本文所使用的,“線程組”是指對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,所述組的一個線程被指派到SM 310內的不同處理引擎。線程組可以包括比SM 310內的處理引擎數(shù)量少的線程,在這種情況下一些處理引擎將在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比SM 310內的處理引擎數(shù)量多的線程,在這種情況下處理將在連續(xù)的時鐘周期內發(fā)生。因為每個SM 310均可以并發(fā)支持多達G個線程組,結果是在任意給定時間在GPC 208中可以執(zhí)行多達G*M個線程組。此外,多個相關線程組可以在SM 310內同時活動(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)量并且通常是SM 310內的并行處理引擎數(shù)量的整數(shù)倍,以及m是SM310內同時活動的線程組的數(shù)量。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲器或寄存器的容量來確定。每個SM310均包含一級(LI)高速緩存(圖3C所示)或使用用于實施加載和存儲操作的SM 310外部的相應LI高速緩存中的空間。每個SM 310都還有權訪問在所有GPC 208之間共享并且可用于在線程之間轉移數(shù)據(jù)的二級(L2)高速緩存。最后,SM 310還有權訪問片外“全局”存儲器,所述“全局”存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應該理解,PPU 202外部的任意存儲器均可用作全局存儲器。此外,一點五級(L1.5)高速緩存335可以包括在GPC 208內,其配置為接收并保持由SM 310所請求的經(jīng)由存儲器接口 214從存儲器獲取的數(shù)據(jù),包括指令、標準(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù),并將所請求的數(shù)據(jù)提供給SM 310。在GPC 208中具有多個SM 310的實施例有利地共享了高速緩存在L1.5高速緩存335中的共有指令和數(shù)據(jù)。每個GPC 208均可以包括配置為將虛擬地址映射到物理地址中的存儲器管理單元(MMU) 328。在其他實施例中,MMU 328可以駐留在存儲器接口 214內。MMU 328包括用于將虛擬地址映射到像素塊(tile)的物理地址的頁表條目(PTE)集和可選地包括高速緩存線索引。MMU 328可以包括地址轉換后備緩沖區(qū)(TLB)或可以駐留在多處理器SM 310或LI高速緩存或GPC 208內的高速緩存。物理地址經(jīng)處理以分布表面數(shù)據(jù)訪問位置來允許高效請求在分區(qū)單元215之間交錯。高速緩存線索引可用于確定用于高速緩存線的請求是否命中或未命中。在圖形和計算應用中,GPC 208可配置為使得每個SM 310均耦合到用于實施紋理映射操作例如確定紋理樣本位置、讀出紋理數(shù)據(jù)以及過濾該紋理數(shù)據(jù)的紋理單元315。從內部紋理LI高速緩存(未示出)或者在一些實施例中從SM 310內的LI高速緩存讀出紋理數(shù)據(jù)并根據(jù)需要從在所有GPC 208之間共享的L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中獲取紋理數(shù)據(jù)。 為了經(jīng)由交叉開關單元210將所處理的任務提供給另一個GPC208用于進一步處理或為了將所處理的任務存儲在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中,每個SM 310均將所處理的任務輸出到工作分布交叉開關330。preROP(預光柵操作)325配置為從SM 310接收數(shù)據(jù)、將數(shù)據(jù)引導到分區(qū)單元215內的ROP單元以及針對顏色混合實施優(yōu)化、組織像素顏色數(shù)據(jù)和實施地址轉譯。應該理解本文所述的內核架構是示例性的并且各種變化和修改都是可能的。任意數(shù)量的處理單元例如SM 310或紋理單元315、preR0P325均可以包括在GPC 208內。進一步地,如圖2所示,PPU 202可以包括任意數(shù)量的GPC 208,所述GPC 208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個GPC 208接收特定處理任務。進一步地,每個GPC 208有利地均使用單獨的和各異的處理單元、LI高速緩存來獨立于其他GPC 208操作以為一個或多個應用程序執(zhí)行任務。本領域普通技術人員應該理解圖1、2、3A和3B所描述的架構決不限制本發(fā)明的范圍并且在不脫離本發(fā)明范圍的情況下本文所教導的技術可以在任意經(jīng)適當配置的處理單元上實現(xiàn),所述處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC 208、一個或多個圖形或專用處理單元等等。在本發(fā)明的實施例中,使用PPU 202或計算系統(tǒng)的其他處理器以使用線程陣列執(zhí)行通用計算是可取的。為線程陣列中的每個線程均指派在線程的執(zhí)行期間對于線程可訪問的唯一的線程標識符(“線程ID”)??杀欢x為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或寫輸出數(shù)據(jù)集的哪部分。每線程指令序列可包括定義代表性線程和線程陣列的一個或多個其他線程之間的協(xié)作行為的至少一個指令。例如,每線程指令序列可能包括在序列中的特定點處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個或多個到達該特定點的時間為止的指令、用于代表性線程將數(shù)據(jù)存儲在其他線程的一個或多個有權訪問的共享存儲器中的指令、用于代表性線程自動讀出和更新存儲在其他線程的一個或多個基于它們的線程ID有權訪問的共享存儲器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計算數(shù)據(jù)將從其讀出的共享存儲器中的地址的指令,該地址是線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術,可以以可預測的方式由CTA的一個線程將數(shù)據(jù)寫入共享存儲器中的給定位置并由同一個CTA的不同線程從該位置讀出數(shù)據(jù)。因此,數(shù)據(jù)在線程之間共享的任意期望形式可以得到支持,以及CTA中的任意線程可以與同一個CTA中的任意其他線程分享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應該理解在使用CTA的特定應用中,CTA的線程可能會或可能不會真正互相分享數(shù)據(jù),這取決于CTA程序,術語“CTA”和“線程陣列”在本文作為同義詞使用。圖3C為根據(jù)本公開一個實施例的圖3B的SM 310的框圖。SM 310包括配置為經(jīng)由L1.5高速緩存335從存儲器接收指令和常數(shù)的指令LI高速緩存370。warp調度器和指令單元312從指令LI緩沖370接收指令和常數(shù)并根據(jù)該指令和常數(shù)控制本地寄存器堆304和SM310功能單元。SM 310功能單元包括N個exec (執(zhí)行或處理)單元302和P個加載-存儲單元(LSU) 303。SM 310提供具有不同級別的可訪問性的片上(內部)數(shù)據(jù)存儲。特殊寄存器(未示出)對于LSU 303可讀但不可寫并且用于存儲定義每個線程的“位置”的參數(shù)。在一個實施例中,特殊寄存器包括每線程(或SM 310內的每exec單元302)—個的存儲線程ID的寄存器;每個線程ID寄存器僅由各自的exec單元302可訪問。特殊寄存器還可以包括附加寄存器,其對于執(zhí)行由TMD 322所代表`的同一個處理任務的所有線程(或由所有LSU 303)可讀,其存儲CTA標識符、CTA維數(shù)、CTA所屬網(wǎng)格(grid)的維數(shù)(或隊列位置,如果TMD 322編碼隊列任務而不是網(wǎng)格任務的話)、以及CTA被指派到的TMD 322的標識符。如果TMD 322是網(wǎng)格TMD,則TMD 322的執(zhí)行會啟動和執(zhí)行固定數(shù)量的CTA以處理存儲在隊列525中的固定量的數(shù)據(jù)。將CTA的數(shù)量指定為網(wǎng)格寬度、高度和深度的乘積。可以將固定量的數(shù)據(jù)存儲在TMD 322中或TMD 322可以存儲指向將由CTA所處理的數(shù)據(jù)的指針。TMD 322還存儲由CTA所執(zhí)行的程序的開始地址。如果TMD 322是隊列TMD,那么使用TMD 322的隊列特點,這意味著將要被處理的數(shù)據(jù)量不一定是固定的。隊列條目存儲用于由指派到TMD 322的CTA所處理的數(shù)據(jù)。隊列條目還可以代表在線程執(zhí)行期間由另一個TMD 322所生成的子任務,從而提供嵌套并行性。通常線程或包括線程的CTA的執(zhí)行被掛起直到子任務的執(zhí)行完成??梢詫㈥犃写鎯υ赥MD 322中或與TMD 322分開存儲,在該情況下TMD 322存儲指向該隊列的指針。有利地,當代表子任務的TMD 322正在執(zhí)行時可以將由子任務所生成的數(shù)據(jù)寫到隊列。隊列可以實現(xiàn)為循環(huán)隊列以使得數(shù)據(jù)的總量不限于隊列的大小。
屬于網(wǎng)格的CTA具有指示網(wǎng)格內各自CTA的位置的隱含網(wǎng)格寬度、高度和深度參數(shù)。在初始化期間響應于經(jīng)由前端212從設備驅動程序103所接收的命令來寫特殊寄存器并且在處理任務的執(zhí)行期間特殊寄存器不改變。前端212調度每個處理任務用于執(zhí)行。每個CTA均與特定TMD 322相關聯(lián)用于一個或多個任務的并發(fā)執(zhí)行。此外,單個GPC208可以并發(fā)執(zhí)行多個任務。參數(shù)存儲器(未示出)存儲可由同一個CTA內的任意線程(或任意LSU 303)讀取但不可由其寫入的運行時間參數(shù)(常數(shù))。在一個實施例中,設備驅動程序103在引導SM 310開始執(zhí)行使用參數(shù)的任務之前將這些參數(shù)提供給參數(shù)存儲器。任意CTA內的任意線程(或SM 310內的任意exec單元302)均可以通過存儲器接口 214訪問全局存儲器??梢詫⑷执鎯ζ鞯母鞑糠执鎯υ贚I高速緩存320中。每個線程均將本地寄存器堆304用作暫存空間;每個寄存器被分配以專用于一個線程,并且在本地寄存器堆304的任意一個中的數(shù)據(jù)僅對于寄存器被分配到的線程可訪問。本地寄存器堆304可以實現(xiàn)為物理上或邏輯上分為P個通道的寄存器堆,每個通道具有一定數(shù)量的條目(其中每個條目可以存儲例如32位字)。將一個通道指派到N個exec單元中和P個下載-存儲單元LSU 303的每一個,并且利用用于執(zhí)行同一個程序的不同線程的數(shù)據(jù)來填充不同通道中的相應條目以幫助SIMD執(zhí)行??梢詫⑼ǖ赖牟煌糠址峙涞紾個并發(fā)線程組中的不同線程組,以使得本地寄存器堆304中的給定條目僅對于特定線程可訪問。在一個實施例中,保留本地寄存器堆304內的某些條目用于存儲線程標識符,這實現(xiàn)特殊寄存器之一。此外,標準LI高速緩存375存儲用于N個exec單元302和P個下載-存儲單元LSU 303的每個通道的標準或常數(shù)值。共享存儲器306對于單個CTA內的線程可訪問;換言之,共享存儲器306中的任意位置對于同一個CTA內的任意線程(或對于SM 310內的任意處理引擎)可訪問。共享存儲器306可以實現(xiàn)為具有允許任意處理引擎對共享存儲器中的任意位置讀取或寫入的互連的共享寄存器堆或共享片上高速緩存存儲器。在其他實施例中,共享狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)域上并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以實現(xiàn)為在實現(xiàn)共享存儲器3 06的同一個共享寄存器堆或共享高速緩存存儲器內的指定部分,或者實現(xiàn)為LSU 303對其具有只讀訪問權限的單獨的共享寄存器堆或片上高速緩存存儲器。在一個實施例中,實現(xiàn)參數(shù)存儲器的區(qū)域還用于存儲CTA ID和任務ID,以及CTA和網(wǎng)格維數(shù)或隊列位置,這實現(xiàn)特殊寄存器的各部分。SM 310中的每個LSU 303均耦合到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲器空間中所指定的加載和存儲指令所提供的地址轉換為每個相異存儲器空間中的地址。因此,指令可以用于通過指定統(tǒng)一存儲器空間中的地址來訪問本地、共享或全局存儲器空間中的任意一個。每個SM 310中的LI高速緩存320可以用于高速緩存私有的每線程本地數(shù)據(jù)還有每應用全局數(shù)據(jù)。在一些實施例中,可以將每CTA共享數(shù)據(jù)高速緩存在LI高速緩存320中。LSU 303經(jīng)由存儲器和高速緩存互連380耦合到共享存儲器306和LI高速緩存320。指令調度圖4為根據(jù)本公開一個示范性實施例的圖3C的warp調度器和指令單元312的框圖。如圖4所示,warp調度器和指令單元312包括指令高速緩存獲取單元412,其配置為從指令LI高速緩存370獲取包含用于warp的指令的高速緩存線。在一個實施例中,每個高速緩存線均為512位寬,在單個高速緩存線中存儲八個指令(64位寬)。指令高速緩存獲取單元412在沒有解碼從指令LI高速緩存370獲取的指令的情況下將指令路由到指令獲取緩沖區(qū)(IFB) 422用于臨時存儲。此外,指令高速緩存獲取單元412將與指令相關聯(lián)的預解碼數(shù)據(jù)路由到指令預解碼緩沖區(qū)(IPB) 424和宏調度器單元420。預解碼數(shù)據(jù)可以編碼與指令相關聯(lián)的(由編譯器預定的)延遲值(例如,執(zhí)行該指令將在來自warp的下一個指令可以執(zhí)行之前需要4個時鐘周期)。預解碼數(shù)據(jù)可以指示指令必須與下一個指令在同一調度周期中發(fā)出。預解碼數(shù)據(jù)可以指示指令和下一個指令應該在連續(xù)的調度周期中發(fā)出。最后,預解碼指令可以為指令調整選擇優(yōu)先級級別以增加或減少當用于另一線程組的指令沒有資格被發(fā)出時該指令被選擇以發(fā)出的可能性。在一個實施例中,可通過僅解碼指令的一部分(例如解碼指令的前3位)來生成預解碼數(shù)據(jù)。應該理解無論在實施解碼操作所需的時鐘周期的數(shù)目方面還是在SM 310中的物理邏輯電路量方面,僅解碼指令的該一小部分遠比解碼整個64位指令更加高效。在另一實施例中,預解碼數(shù)據(jù)可以作為單獨的指令包括在高速緩存線中。例如,用于PPU 202的ISA (指令集架構)可以定義特殊指令(ss-1nst),其當由PPU 202所解碼用于執(zhí)行時相當于NOP (無實施操作)指令。當程序被編譯以產(chǎn)生機器代碼用于在PPU 202上執(zhí)行各線程時,編譯器可配置為將ss-1nst指令寫到存儲器每行的開始(其中存儲器的每行均與高速緩存線寬相對應)。ss-1nst可以包括將指令標識為ss-1nst指令的8位操作碼以及七個8位值,所述七個8位值存儲用于被寫到存儲器相應行的其他七個指令的每一個的預解碼數(shù)據(jù)。在又一實施例中,可以通過其他技術可行的手段,諸如通過將預解碼數(shù)據(jù)寫到PPU 202中的特殊寄存器來將預解碼數(shù)據(jù)傳遞到宏調度器單元420和IPB 424。在一個實施例中,IPB 424實現(xiàn)簡單讀調度器以確保warp FIFO 442不為空。在一個實施例中,warp FIFO 442可以實現(xiàn)為存儲與經(jīng)調度以在SM 310上執(zhí)行的warp的每一個相對應的ss-1nst指令的若干FIFO。IPB 424使高速緩存獲取能夠與將指令分派到SM 310的邏輯單元相異步地實施。宏 調度器單元420維護與在SM 310上所調度的warp的每一個相關聯(lián)的優(yōu)先級并基于優(yōu)先級實施與所獲取的指令相關聯(lián)的預解碼數(shù)據(jù)的排序。例如,宏調度器單元420可以在任意給定時間維護與在SM 310上所調度的16個不同warp的每一個相關聯(lián)的6位或10位優(yōu)先級值??梢曰诟饕蛩貋碇概蓛?yōu)先級。在一個實施例中,優(yōu)先級可以基于何時在SM 310上調度warp (即最長掛起的warp可以具有最高的優(yōu)先級)。在其他實施例中,對于每個warp可由程序指定優(yōu)先級,其由該warp所執(zhí)行的指令來定義。在一個實施例中,宏調度器單元420每j個時鐘周期實施一次新的排序。例如,對于16個warp,宏調度器單元420可以每4個時鐘周期實施一次優(yōu)先級排序。在第一時鐘周期中,宏調度器單元420可以對于16個掛起warp的每一個采樣當前的優(yōu)先級值,優(yōu)先級的起始順序基于前一次排序順序。在第二時鐘周期中,宏調度器單元420基于與兩個warp
相關聯(lián)的優(yōu)先級值來比較并交換warpO和warp2、warpl和warp3、warp4和warp6......以及
warp 13和15(warp0與最高優(yōu)先級值相對應而warpl5與最低優(yōu)先級值相對應)。在第三時鐘周期中,宏調度器單元420基于優(yōu)先級值來比較并交換warpO和warpl、warp2和warp3、
warp4和warp5......以及warpl4和15。在第四時鐘周期中,宏調度器單元420比較并交換
warp I和warp2、warp 3和warp4......以及warpl3和14。之后由微調度器仲裁器440使用基于該優(yōu)先級排序的新順序來確定從哪個warp分派下一個指令。微調度器仲裁器440基于對由宏調度器單元420所生成的warp順序的優(yōu)先級調整和預解碼數(shù)據(jù)來選擇存儲在IFB 422中的指令。微調度器仲裁器440不一定按照由宏調度器單元420所指定的新順序來選擇指令。當?shù)谝恢噶羁梢曰陬A解碼數(shù)據(jù)發(fā)出時,該指令由微調度器仲裁器440發(fā)出。當?shù)谝恢噶畈豢苫陬A解碼數(shù)據(jù)發(fā)出時,微調度器仲裁器440確定用于不同warp的指令是否可以基于用于各指令的預解碼數(shù)據(jù)而發(fā)出。在某些情況下,第一指令可以發(fā)出,除非預解碼數(shù)據(jù)指定第一指令是低優(yōu)先級,使得(來自不同warp的)另一指令可以代替發(fā)出。在所有情況下,用于每個warp個體的指令按照從宏調度器單元420所接收的用于各warp個體的指令的順序而發(fā)出。因此,對于任意調度周期,微調度器仲裁器440按照由宏調度器單元420所提供的新順序來考慮第一指令用于選擇。取決于用于第一指令的預解碼數(shù)據(jù),微調度器仲裁器440可以從不同的warp選擇指令。微調度器仲裁器440維護SM 310的狀態(tài)模式,所述SM 310的狀態(tài)模式基于所發(fā)出的指令而更新。該狀態(tài)模式允許微調度器仲裁器440基于程序的動態(tài)執(zhí)行和SM 310內資源的可用性來選擇指令。例如,可以將執(zhí)行指令的SM 310或SM 310內的功能單元標識為指令所需的資源并且資源的可用性可以由微調度器仲裁器440使用。—旦微調度器仲裁器440選擇了下一個指令以發(fā)出,則微調度器仲裁器440就使得指令從IFB 422路由到解碼單元450。在一些實施例中,取決于SM 310的架構,指令可以是雙重或四重發(fā)出的,這意味著在特定時鐘周期中可以發(fā)出并解碼一個以上的指令。解碼單元450從IFB 422接收所要分派的下一個指令。解碼單元450實施指令的全解碼并將所解碼的指令傳輸?shù)椒峙蓡卧?70。另外,在一些實施例中,指令可以是雙重或四重發(fā)出的并且解碼單元450可以對每個所發(fā)出的指令實現(xiàn)單獨的解碼邏輯。分派單元470實現(xiàn)FIFO并將所解碼的值寫到本地寄存器堆304以由執(zhí)行單元302或加載/存儲單元303執(zhí)行。在同時發(fā)出多個指令的實施例中,分派單元470可以發(fā)出每個指令到SM 310的功能單元的不同部分。記分板單元480管理并追蹤每個線程組已經(jīng)解碼并分派的指令數(shù)量。 warp調度器和指令單元312還可以包括重播緩沖區(qū)430。在一些實例中,由分派單元470所分派的指令可能被SM 310中的功能執(zhí)行單元所拒絕。在這些實例中,可以將所解碼的指令存儲在重播緩沖區(qū)430中以在以后的時鐘周期再次發(fā)出和分派,而不是重新獲取指令和重新解碼指令。投機式(speculatively)發(fā)出和未被執(zhí)行的指令可能需要重發(fā)并輸入到重播緩沖區(qū)430。指令可能由于高速緩存未命中或不正確的分支而未被執(zhí)行。不是等待高速緩存未命中得到解決并導致該指令后面已經(jīng)發(fā)出的指令被延遲,而是在以后的時間重發(fā)指令。微調度器仲裁器440從重播緩沖區(qū)430接收所要重發(fā)的指令。微調度器仲裁器440通常配置為從重播緩沖區(qū)430選擇重發(fā)指令而不是選擇warpFIFO 442中的任意指令。然而,用于warp FIFO 442中的第一指令的預解碼數(shù)據(jù)可以指定即使當重發(fā)指令可用時也應該由微調度器仲裁器440選擇第一指令。圖5A示出了根據(jù)本公開一個示范性實施例的從指令LI高速緩存370所獲取的高速緩存線500。如圖所示,高速緩存線500為512位寬并包括八個指令。位O到63存儲特殊指令(ss-1nst)510,與圖4中的上述指令相似,其包括與高速緩存線500中的其他七個指令的每一個相關聯(lián)的預解碼數(shù)據(jù)。除ss-1nst 510之外,高速緩存線500的位64到127存儲第一指令(inst_l)521,位128到191存儲第二指令(inst_2) 522,位192到255存儲第三指令(inst_3) 523,位256到319存儲第四指令(inst_4) 524,位320到383存儲第五指令(inst_5) 525,位384到447存儲第六指令(inst_6) 526以及位448到512存儲第七指令(inst_7)527。應該理解在不同實施例中高速緩存線500的大小可以變化。例如,在一個實施例中,指令可以是32位寬而高速緩存線500可以是256位寬。在其他實施例中,每指令的預解碼數(shù)據(jù)的量可以長于8位以及因此驅動程序103可以將兩個連續(xù)的ss-1nst指令寫到高速緩存線500的位O到128以及將六個指令寫到位128到512中,其中每個ss-1nst為高速緩存線500中的六個指令中的三個提供預解碼數(shù)據(jù)。圖5B示出了根據(jù)本公開一個示范性實施例的圖5A的特殊指令ss_inst510。如圖5B所示,ss-1nst510包括操作碼530,所述操作碼530為8位寬并存儲在ss_inst510的位O到7。ss-1nst510指令還包括用于與ss-1nst510相關聯(lián)的七個指令的預解碼數(shù)據(jù)。將第一預解碼數(shù)據(jù)集(P_l) 541存儲在位8到15,將第二預解碼數(shù)據(jù)集(P_2) 542存儲在位16到23,將第三預解碼數(shù)據(jù)集(P_3)543存儲在位24到31,將第四預解碼數(shù)據(jù)集(P_4)544存儲在位32到39,將第五預解碼數(shù)據(jù)集(P_5) 545存儲在位40到47,將第六預解碼數(shù)據(jù)集(P_6)546存儲在位48到55,以及將第七預解碼數(shù)據(jù)集(P_7)547存儲在位56到63。如上所簡要論述的,預解碼數(shù)據(jù)541-547可以編碼與為相應指令調度信息相關聯(lián)的一個或多個值。例如,預解碼數(shù)據(jù)可以編碼具有四位(即O和15之間的值)的延遲值以及具有其他四位的特殊調度提示,諸如向warp調度器和指令單元312指示在相應指令之后至少八個調度周期不應發(fā)出來自同一 warp的附加指令的代碼。有被編碼在用于指令的預解碼數(shù)據(jù)中的四種不同類型的調度提示,例如缺省、配對(pair)、保持和等待。定義(固定或編程)缺省調度提示并將其用于為其指定缺省調度提示的指令。配對調度提示指定第一指令應該在同一調度周期中與用于同一 warp的下一個指令一起發(fā)出。將為 下一個指令所指定的提示施加到與下一個指令配對的第一指令。保持調度提示指定應該在用于任意其他warp的指令之前選擇第一指令。此外,保持調度提示還指定在第一指令之前是否可以選擇從重播緩沖區(qū)430所接收的重發(fā)指令。在一個實施例中,保持調度提示還指定對于warp是否即使先前所發(fā)出的加載或存儲操作尚未完成也可以發(fā)出第一指令。等待調度提示指定微調度器仲裁器440在發(fā)出第一指令之前應該等待w個發(fā)出周期。此外,調度提示可以指示對于warp的指令應該提高(boost)特定warp的發(fā)出優(yōu)先級。相反,調度提示可以指示應該降低特定warp的發(fā)出優(yōu)先級,使得對于給定指令來說該warp讓位以允許用于其他warp的指令發(fā)出。在為等待調度提示所指定的調度周期的數(shù)量已經(jīng)發(fā)生之后增高或降低用于warp的指令的調度優(yōu)先級。當用于warp的指令的優(yōu)先級降低時,可以指定特定數(shù)量的調度周期,在此之后調度優(yōu)先級增高回到中性水平。當與等待調度提示相對應的指令發(fā)出時,用于warp的調度優(yōu)先級可在用于該warp的另一指令是從warp FIFO 442提供到微調度器仲裁器440的第一指令時改變。最后,調度提示還可以指示當warp中的一個或多個線程在執(zhí)行期間發(fā)散時指令是否可能重發(fā)一次或多次。表I示出了用于每個調度提示的不同類型的預解碼數(shù)據(jù)和操作。表I調度提示類型和操作
權利要求
1.一種用于在并行計算裝置內調度指令的計算機實現(xiàn)的方法,所述方法包括: 從指令高速緩存單元獲取與兩個或兩個以上線程組相對應的指令; 接收與所述指令的每一個相關聯(lián)的預解碼數(shù)據(jù),其中所述預解碼數(shù)據(jù)在編譯所述指令時確定; 在運行時至少部分地基于所述預解碼數(shù)據(jù)來選擇第一指令以發(fā)出用于由并行處理單元執(zhí)行; 解碼所述第一指令;以及 將所述第一指令分派到所述并行處理單元用于執(zhí)行。
2.根據(jù)權利要求1所述的方法,其中所述預解碼數(shù)據(jù)編碼等待調度提示,所述等待調度提示包括在發(fā)出所述第一指令用于執(zhí)行之前發(fā)生的若干調度周期。
3.根據(jù)權利要求1所述的方法,其中所述預解碼數(shù)據(jù)指定使用缺省調度提示來調度所述第一指令。
4.根據(jù)權利要求1所述的方法,其中所述預解碼數(shù)據(jù)編碼保持調度提示,所述保持調度提示配置調度單元來選擇所述第一指令以越過以前所發(fā)出的指令而發(fā)出,所述以前所發(fā)出的指令未能執(zhí)行并為可用于發(fā)出的重發(fā)指令。
5.根據(jù)權利要求1所述的方法,其中所述預解碼數(shù)據(jù)編碼保持調度提示,所述保持調度提示配置調度單元來選擇以越過所述第一指令而發(fā)出以前所發(fā)出的指令,所述以前所發(fā)出的指令未能執(zhí)行并為可用于發(fā)出的重發(fā)指令。
6.根據(jù)權利要求 1所述的方法,其中所述預解碼數(shù)據(jù)編碼配對調度提示,所述配對調度提示配置調度單元來選擇以在單個調度周期中發(fā)出所述第一指令和第二指令,并且其中所述第一指令和所述第二指令與所述兩個或兩個以上線程組的第一線程組相關聯(lián)。
7.一種調度單元,包括: 指令高速緩存獲取單元,其配置為將與兩個或兩個以上線程組相對應的指令路由到第一緩沖區(qū)并將與所述指令的每一個相關聯(lián)的預解碼數(shù)據(jù)路由到第二緩沖區(qū); 宏調度器單元,其耦合到所述指令高速緩存獲取單元并配置為接收預解碼數(shù)據(jù),其中所述預解碼數(shù)據(jù)在編譯所述指令時確定; 微調度器仲裁器,其耦合到所述宏調度器單元和所述第二緩沖區(qū)并配置為在運行時至少部分地基于所述預解碼數(shù)據(jù)選擇第一指令用于由處理單元執(zhí)行; 解碼單元,其耦合到所述第一緩沖區(qū)并配置為解碼所述第一指令;以及 分派單元,其耦合到所述解碼單元并配置為將所述第一指令分派到處理單元用于執(zhí)行。
8.根據(jù)權利要求7所述的調度單元,其中所述預解碼數(shù)據(jù)編碼等待調度提示,所述等待調度提示包括在發(fā)出所述第一指令用于執(zhí)行之前發(fā)生的若干調度周期。
9.根據(jù)權利要求7所述的調度單元,其中所述預解碼數(shù)據(jù)指定使用缺省調度提示來調度所述第一指令。
10.根據(jù)權利要求7所述的調度單元,其中所述預解碼數(shù)據(jù)編碼保持調度提示,所述保持調度提示配置調度單元來選擇所述第一指令以越過以前所發(fā)出的指令而發(fā)出,所述以前所發(fā)出的指令未能執(zhí)行并為可用于發(fā)出的重發(fā)指令。
11.根據(jù)權利要求7所述的調度單元,其中所述預解碼數(shù)據(jù)編碼保持調度提示,所述保持調度提示配置調度單元來選擇以越過所述第一指令而發(fā)出以前所發(fā)出的指令,所述以前所發(fā)出的指令未能執(zhí)行 并為可用于發(fā)出的重發(fā)指令。
全文摘要
用于使用與每個指令相對應的預解碼數(shù)據(jù)調度指令的系統(tǒng)和方法。在一個實施例中,多核處理器包括每個內核中的調度單元,其用于每個調度周期從兩個或兩個以上線程選擇指令以在該特定內核上執(zhí)行。隨著調度線程用于在內核上執(zhí)行,來自線程的指令在未被解碼的情況下獲取到緩沖區(qū)中。預解碼數(shù)據(jù)由編譯器確定并在運行時由調度單元提取以及用來控制線程的選擇用于執(zhí)行。預解碼數(shù)據(jù)可以指定在調度指令之前等待若干調度周期。預解碼數(shù)據(jù)還可以為指令指定調度優(yōu)先級。一旦調度單元選擇指令以發(fā)出用于執(zhí)行,解碼單元就完全解碼該指令。
文檔編號G06F9/38GK103226463SQ201210564589
公開日2013年7月31日 申請日期2012年12月21日 優(yōu)先權日2011年12月21日
發(fā)明者杰克·希萊爾·肖凱特, 羅伯特·J·斯托爾, 奧利維爾·吉普 申請人:輝達公司