国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于源操作數(shù)收集器高速緩存的方法和裝置的制作方法

      文檔序號:6384161閱讀:213來源:國知局
      專利名稱:用于源操作數(shù)收集器高速緩存的方法和裝置的制作方法
      技術(shù)領(lǐng)域
      本公開總體上涉及處理器寄存器,更具體地,涉及用于源操作數(shù)收集器高速緩存的方法和裝置。
      背景技術(shù)
      并行處理器具有使用不同的硬件資源來使多個線程能夠同時執(zhí)行的多個獨(dú)立內(nèi)核。SMD (單指令、多數(shù)據(jù))架構(gòu)處理器在多個內(nèi)核的每一個上均執(zhí)行相同的指令,其中每個內(nèi)核執(zhí)行不同的輸入數(shù)據(jù)。MMD (多指令、多數(shù)據(jù))架構(gòu)處理器利用供應(yīng)給每個內(nèi)核的不同的輸入數(shù)據(jù)在不同的內(nèi)核上執(zhí)行不同的指令。并行處理器也可以是多線程的,其使用單個處理內(nèi)核的資源使兩個或更多個線程能夠大體上同時執(zhí)行(即在不同的時鐘周期期間在內(nèi)核上執(zhí)行不同的線程)。當(dāng)處理器調(diào)度指令用于由處理器內(nèi)核執(zhí)行時,處理器將某些值寫入耦合到處理器內(nèi)核的寄存器堆中的特殊寄存器。一個寄存器可以存儲指定將由處理器內(nèi)核實(shí)施的操作的操作碼而附加寄存器可以存儲用作到用于執(zhí)行指令的處理器內(nèi)核的輸入的操作數(shù)值。為了將要執(zhí)行的操作,必須將值的每一個均寫入寄存器堆并隨后經(jīng)由交叉開關(guān)或其他數(shù)據(jù)傳輸手段將值的每一個耦合到數(shù)據(jù)路徑的輸入。每個指令均可以要求寄存器堆中的新寄存器連接到數(shù)據(jù)路徑頂端處的輸入。與上述架構(gòu)有關(guān)的一個問題是配置交叉開關(guān)以將存儲在寄存器堆中的寄存器值耦合到數(shù)據(jù)路徑頂端處的輸入要求一個或多個時鐘周期來實(shí)施。加載每個操作數(shù)所需的時間將延遲引入到整體處理效率中。此外,交叉開關(guān)可配置為使得在每個時鐘周期期間僅一個操作數(shù)可以耦合到數(shù)據(jù)路徑的輸入。因此,本領(lǐng)域所需要的是用于將值從寄存器堆加載到處理器內(nèi)核的數(shù)據(jù)路徑的輸入中的改進(jìn)技術(shù)。

      發(fā)明內(nèi)容
      一個實(shí)施例提出利用源操作數(shù)收集器高速緩存所實(shí)現(xiàn)的用于在處理器內(nèi)核上執(zhí)行指令的方法。所述方法包括以下步驟:解碼指令以確定由所述指令所指定的多個操作數(shù),以及對于所述多個操作數(shù)中的每個操作數(shù),確定特定操作數(shù)未存儲在耦合到所述處理器內(nèi)核內(nèi)的數(shù)據(jù)路徑的輸入的高速緩存中,將所述特定操作數(shù)從與所述處理器內(nèi)核相關(guān)聯(lián)的本地寄存器堆加載到所述高速緩存中。所述方法進(jìn)一步包括配置所述處理器內(nèi)核以使用存儲在所述高速緩存中的操作數(shù)來執(zhí)行所述指令的步驟。另一個實(shí)施例提出包括指令的計(jì)算機(jī)可讀存儲介質(zhì)。當(dāng)由處理器內(nèi)核執(zhí)行所述指令時,所述指令引起所述處理器內(nèi)核實(shí)施以下步驟:解碼指令以確定由所述指令所指定的多個操作數(shù),以及對于所述多個操作數(shù)中的每個操作數(shù),確定特定操作數(shù)未存儲在耦合到所述處理器內(nèi)核內(nèi)的數(shù)據(jù)路徑的輸入的高速緩存中,將所述特定操作數(shù)從與所述處理器內(nèi)核相關(guān)聯(lián)的本地寄存器堆加載到所述高速緩存中。所述步驟還包括配置所述處理器內(nèi)核以使用存儲在所述高速緩存中的操作數(shù)來執(zhí)行所述指令。又一個實(shí)施例提出包括具有數(shù)據(jù)路徑的用于執(zhí)行指令的處理器內(nèi)核、耦合到所述數(shù)據(jù)路徑的輸入的高速緩存和調(diào)度單元的系統(tǒng)。所述調(diào)度單元配置為解碼指令以確定由所述指令所指定的多個操作數(shù),以及對于所述多個操作數(shù)中的每個操作數(shù),確定特定操作數(shù)未存儲在耦合到所述處理器內(nèi)核內(nèi)的數(shù)據(jù)路徑的輸入的高速緩存中,將所述特定操作數(shù)從與所述處理器內(nèi)核相關(guān)聯(lián)的本地寄存器堆加載到所述高速緩存中。所述調(diào)度單元還配置為使用存儲在所述高速緩存中的所述操作數(shù)來執(zhí)行所述指令。


      因此,可以詳細(xì)地理解上述本公開的特征,并且可以參考示范性實(shí)施例得到對如上面所簡要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本公開的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對其范圍的限制,本公開可以具有其他等效的實(shí)施例。圖1為示出了配置為實(shí)現(xiàn)本公開一個或多個方面的計(jì)算機(jī)系統(tǒng)的框圖;圖2為根據(jù)本公開一個實(shí)施例的用于圖1的計(jì)算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;圖3A為根據(jù)本公開一個實(shí)施例的圖2的前端的框圖;圖3B為根據(jù)本公開一個實(shí)施例的在圖2的并行處理單元之一內(nèi)的通用處理集群的框圖;圖3C為根據(jù)本公開一個實(shí)施例的圖3B的流多處理器的一部分的框圖;圖4為根據(jù)本公開另一個示范性實(shí)施例的圖3B的流多處理器的一部分的框圖;圖5示出了根據(jù)本公開一個示范性實(shí)施例的圖4的操作數(shù)收集器;以及圖6為根據(jù)本公開一個示范性實(shí)施例的示出了利用源操作數(shù)收集器高速緩存所實(shí)現(xiàn)的用于在處理器內(nèi)核上執(zhí)行指令的方法的流程圖。
      具體實(shí)施例方式在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本公開更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本公開可以在沒有一個或多個這些特定細(xì)節(jié)的情況下得以實(shí)施。本公開描述了用于源操作數(shù)收集器高速緩存的方法和裝置。在一個實(shí)施例中,處理器包括可以耦合到存儲元件(即操作數(shù)收集器)的寄存器堆,所述存儲元件(即操作數(shù)收集器)提供到用于執(zhí)行指令的處理器內(nèi)核的數(shù)據(jù)路徑的輸入。為了減小寄存器堆和操作數(shù)收集器之間的帶寬,操作數(shù)可以被高速緩存并在隨后的指令中重復(fù)利用。因此,可能僅需要將由給定指令所指定的操作數(shù)子集加載到操作數(shù)收集器中。調(diào)度單元維護(hù)高速緩存表用于監(jiān)視當(dāng)前存儲在操作數(shù)收集器中的寄存器值。調(diào)度單元還可以配置操作數(shù)收集器以為給定指令選擇耦合到數(shù)據(jù)路徑的輸入的特定存儲元件,這允許用于兩個或兩個以上指令的操作數(shù)被并發(fā)高速緩存。系統(tǒng)概述圖1為示出了配置為實(shí)現(xiàn)本公開的一個或多個方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括中央處理單元(CPU) 102和經(jīng)由可以包括存儲器橋105的互連路徑通信的系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個或多個用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由通信路徑106和存儲器橋105將所述輸入轉(zhuǎn)發(fā)到CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCDExpress、加速圖形端口或超傳輸鏈路)耦合到存儲器橋105 ;在一個實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110 (例如傳統(tǒng)的基于陰極射線管或液晶顯示器的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關(guān)116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種外插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮磁盤(CD)驅(qū)動器、數(shù)字視頻光盤(DVD)驅(qū)動器、膠片錄制設(shè)備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括特殊命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。在一個實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個實(shí)施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)元件集成在單個子系統(tǒng)中,諸如結(jié)合存儲器橋105、CPU 102以及I/O橋107,以形成片上系統(tǒng)(SoC)。應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)洌虻臄?shù)量和布置、CPU 102的數(shù)量以及并行處理子系統(tǒng)112的數(shù)量,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲器104直接連接到CPU 102而不是通過橋,并且其他設(shè)備經(jīng)由存儲器橋105和CPU 102與系統(tǒng)存儲器104通信。在其他替代性拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU 102,而不是連接到存儲器橋105。而在其他實(shí)施例中,I/O橋107和存儲器橋105可能被集成到單個芯片上而不是作為一個或多個分立設(shè)備存在。大型實(shí)施例可以包括兩個或兩個以上的CPU 102以及兩個或兩個以上的并行處理系統(tǒng)112。本文所示的特定部件是可選的;例如,任意數(shù)量的外插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,開關(guān)116被去掉,網(wǎng)絡(luò)適配器118和外插卡120、121直接連接到I/O 橋 107。圖2示出了根據(jù)本公開一個實(shí)施例的并行處理子系統(tǒng)112。如圖所示,并行處理子系統(tǒng)112包括一個或多個并行處理單元(PI3U) 202,每個并行處理單元202都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,類似對象的多個實(shí)體以標(biāo)識該對象的參考數(shù)字和需要時標(biāo)識所述實(shí)體的括號中的數(shù)字來表示。)PPU 202和并行處理存儲器204可使用一個或多個集成電路設(shè)備來實(shí)現(xiàn),諸如可編程處理器、專用集成電路(ASIC)或存儲器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。再參考圖1以及圖2,在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器, 它可以配置為實(shí)施與下述相關(guān)的各種操作:經(jīng)由存儲器橋105和第二通信路徑113從CPU 102和/或系統(tǒng)存儲器104所提供的圖形數(shù)據(jù)生成像素數(shù)據(jù),與本地并行處理存儲器204 (可被用作圖形存儲器,包括例如常用幀緩沖區(qū)(buffer))交互以存儲和更新像素數(shù)據(jù),傳遞像素數(shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器而操作的PPU 202以及包括一個或多個用于通用計(jì)算的其他PPU 202。這些PTO可以是相同的或不同的,并且每個PPU均可具有專用并行處理存儲器設(shè)備或不具有專用的并行處理存儲器設(shè)備。并行處理子系統(tǒng)112中的一個或多個PPU 202可輸出數(shù)據(jù)到顯示設(shè)備110,或者并行處理子系統(tǒng)112中的每個PPU 202均可輸出數(shù)據(jù)到一個或多個顯示設(shè)備110。在操作中,CPU 102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實(shí)施例中,CPU 102為每個PPU 202寫入命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),所述數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU 102和PPU 202都可訪問的其他存儲位置中。將指向每個數(shù)據(jù)結(jié)構(gòu)的指針寫到入棧緩沖區(qū)(pushbuffer)以發(fā)起對數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令??梢越?jīng)由設(shè)備驅(qū)動程序103由應(yīng)用程序?yàn)槊總€入棧緩沖區(qū)指定執(zhí)行優(yōu)先級以控制對不同入棧緩沖區(qū)的調(diào)度。現(xiàn)在返回參考圖2和圖1,每個PPU 202均包括經(jīng)由連接到存儲器橋105 (或者,在一個替代性實(shí)施例中,直接連接到CPU 102)的通信路徑113與計(jì)算機(jī)系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU 202到計(jì)算機(jī)系統(tǒng)100的其余部分的連接也可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112可作為外插卡來實(shí)現(xiàn),所述外插卡可被插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中。在其他實(shí)施例中,PPU 202可以和諸如存儲器橋105或I/O橋107的總線橋一起集成在單個芯片上。而在其他實(shí)施例中,PI3U 202的一些或所有元件可以和CPU 102—起集成在單個芯片上。
      ·
      在一個實(shí)施例中,通信路徑113是PC1-EXPRESS鏈路,如本領(lǐng)域所知的,其中專用通道被分配到每個PPU 202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳輸?shù)臄?shù)據(jù)包(或其他信號),并且還從通信路徑113接收所有傳入的數(shù)據(jù)包(或其他信號),將傳入的數(shù)據(jù)包引導(dǎo)到PPU 202的適當(dāng)部件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口 206,而可將與存儲器操作相關(guān)的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接口 206讀取每個入棧緩沖區(qū),并且將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。有利地,每個PPU 202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU202 (O)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC 208都能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程均是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC 208用于處理不同類型的程序或用于執(zhí)行不同類型的計(jì)算。取決于因每種類型的程序或計(jì)算所產(chǎn)生的工作量,GPC 208的分配可以變化。GPC 208從任務(wù)/工作單元207內(nèi)的工作分布單元接收所要執(zhí)行的處理任務(wù)。所述工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲在存儲器中的處理任務(wù)的指針。指向TMD的指針包括在存儲為入棧緩沖區(qū)并由前端單元212從主機(jī)接口 206接收的命令流中??梢跃幋a為TMD的處理任務(wù)包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個TMD所指定的處理發(fā)起前,將GPC 208配置為有效狀態(tài)??梢詾槊總€TMD指定用來調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級。還可從處理集群陣列230接收處理任務(wù)。可選地,TMD可包括控制是否將TMD添加到處理任務(wù)列表(或指向處理任務(wù)的指針列表)的頭部或尾部的參數(shù),從而提供除優(yōu)先級以外的另一級別的控制。存儲器接口 214包括D個分區(qū)單元215,每個分區(qū)單元215均直接耦合到一部分并行處理存儲器204,其中DS I。如所示的,分區(qū)單元215的數(shù)量一般等于動態(tài)隨機(jī)存取存儲器(DRAM) 220的數(shù)量。在其他實(shí)施例中,分區(qū)單元215的數(shù)量也可以不等于存儲器設(shè)備的數(shù)量。本領(lǐng)域的技術(shù)人員應(yīng)該理解DRAM 220可以用其他合適的存儲設(shè)備來替代并且可以是一般常規(guī)的設(shè)計(jì)。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM 220加以存儲,這允許分區(qū)單元215并行寫入每個渲染目標(biāo)的各部分以有效地使用并行處理存儲器204的可用帶寬。任意一個GPC 208都可以處理要被寫到并行處理存儲器204內(nèi)的任意DRAM 220的數(shù)據(jù)。交叉開關(guān)單元210配置為路由每個GPC 208的輸出到任意分區(qū)單元215的輸入或到另一個GPC 208用于進(jìn)一步處理。GPC 208通過交叉開關(guān)單元210與存儲器接口 214通信,以對各種外部存儲器設(shè)備進(jìn)行讀取或?qū)懭?。在一個實(shí)施例中,交叉開關(guān)單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲器204的連接,從而使得在不同GPC 208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或?qū)τ赑PU 202而言非本地的其他存儲器通信。在圖2所示的實(shí)施例中,交叉開關(guān)單元210直接與I/O單元205連接。交叉開關(guān)單元210可使用虛擬信道來分開GPC 208與分區(qū)單元215之間的業(yè)務(wù)流。另外,GPC 208可被編程以執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應(yīng)用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellation)著色、頂點(diǎn)著色、幾何著色、和/或像素著色程序)等等。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)部件訪問,所述其他系統(tǒng)部件包括CPU 102或另一個并行處理子系統(tǒng)112。PPU 202可配備有任意容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任意組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實(shí)施例中,PPU 202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU 202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實(shí)施例中,PPU 202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PC1-EXPRESS)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信手段將PPU 202連接到系統(tǒng)存儲器。如上所述,在并行處理子系統(tǒng)112中可以包括任意數(shù)量的PPU 202。例如,可在單個外插卡上提供多個PPU 202、或可將多個外插卡連接到通信路徑113、或可將一個或多個PPU 202集成到橋式芯片中。在多PI3U系統(tǒng)中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同數(shù)量的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在存在多個PPU 202的情況下,可并行操作那些PPU從而以高于單個PPU 202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺式電腦、筆記本電腦或手持式個人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等

      多個并發(fā)任務(wù)調(diào)度可以在GPC 208上并發(fā)執(zhí)行多個處理任務(wù)并且處理任務(wù)在執(zhí)行期間可以生成一個或多個“子”處理任務(wù)。任務(wù)/工作單元207接收任務(wù)并動態(tài)調(diào)度處理任務(wù)和子處理任務(wù)以由GPC 208執(zhí)行。圖3A為根據(jù)本公開一個實(shí)施例的圖2的任務(wù)/工作單元207的框圖。任務(wù)/工作單元207包括任務(wù)管理單元300和工作分布單元340。任務(wù)管理單元300基于執(zhí)行優(yōu)先級級別來組織所要調(diào)度的任務(wù)。對于每個優(yōu)先級級別,任務(wù)管理單元300將指向與任務(wù)相對應(yīng)的TMD 322的指針列表存儲在調(diào)度器表321中,其中所述列表可以實(shí)現(xiàn)為鏈表。可以將TMD 322存儲在PP存儲器204或系統(tǒng)存儲器104中。任務(wù)管理單元300接受任務(wù)并將任務(wù)存儲在調(diào)度器表321中的速度與任務(wù)管理單元300調(diào)度任務(wù)以執(zhí)行的速度是解耦的。因此,任務(wù)管理單元300可以在調(diào)度任務(wù)之前收集若干任務(wù)。之后可以基于優(yōu)先級信息或使用其他技術(shù)諸如循環(huán)調(diào)度來調(diào)度所收集的任務(wù)。工作分布單元340包括具有槽的任務(wù)表345,每個槽均可以被用于正在執(zhí)行的任務(wù)的TMD 322所占用。當(dāng)任務(wù)表345中有空閑槽時,任務(wù)管理單元300可以調(diào)度任務(wù)以執(zhí)行。當(dāng)沒有空閑槽時,未占用槽的較高優(yōu)先級任務(wù)可以驅(qū)逐占用槽的較低優(yōu)先級任務(wù)。當(dāng)任務(wù)被驅(qū)逐時,該任務(wù)被停止,并且如果該任務(wù)的執(zhí)行沒有完成,則將指向該任務(wù)的指針添加到所要調(diào)度的任務(wù)指針列表以使得任務(wù)的執(zhí)行稍后將恢復(fù)。當(dāng)生成子處理任務(wù)時,在任務(wù)的執(zhí)行期間,將指向該子任務(wù)的指針添加到所要調(diào)度的任務(wù)指針列表??梢杂稍谔幚砑宏嚵?30中執(zhí)行的TMD 322生成子任務(wù)。不同于由任務(wù)/工作單元207從前端212接收的任務(wù),子任務(wù)從處理集群陣列230接收。子任務(wù)不被插入幀緩沖區(qū)或傳輸?shù)角岸?。?dāng)生成子任務(wù)或?qū)⒂糜谧尤蝿?wù)的數(shù)據(jù)存儲在存儲器中時不通知CPU 102。通過幀緩沖區(qū)提供的任務(wù)與子任務(wù)之間的另一個區(qū)別是通過幀緩沖區(qū)提供的任務(wù)由應(yīng)用程序來定義而子任務(wù)是在任務(wù)執(zhí)行期間自動生成的。任務(wù)處理概述圖3B為根據(jù)本公開一個實(shí)施例的在圖2的PPU 202之一內(nèi)的GPC 208的框圖。每個GPC 208均可配置為并行執(zhí)行大量線程,其中術(shù)語“線程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令、多數(shù)據(jù)(SIMD)指令發(fā)出技術(shù)用于在不提供多個獨(dú)立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線程(SIMT)技術(shù)用于使用配置為向GPC 208中的每一個內(nèi)的處理引擎集發(fā)出指令的共有指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行相同指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。經(jīng)由將處理任務(wù)分布到流多處理器(SM)310的管線管理器305來有利地控制GPC208的操作。管線管理器305還可配置為通過為由SM 310所輸出的處理數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。在一個實(shí)施例中,每個GPC 208均包括M個SM 310,其中M彡1,每個SM 310均配置為處理一個或多個線程組。另外,如本領(lǐng)域已知的,每個SM 310均有利地包括可以管線化的相同的功能執(zhí)行單元集(例如執(zhí)行單元和加載-存儲單元一作為Exec單元302和LSU 303在圖3C中示出),其允許在前一個指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任意組合。在一個實(shí)施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如加法和乘法)、比較操作、布爾操作(AND、OR、XOR)、移位和各種代數(shù)函數(shù)的計(jì)算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對數(shù)函數(shù)等等);以及相同的功能單元硬件可可均衡的用來(beleveraged to)實(shí)施不同的操作。如本文之前所定義的,傳輸?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ù)量少的線程,在這種情況下一些處理引擎將在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比SM 310內(nèi)的處理引擎數(shù)量多的線程,在這種情況下處理將在連續(xù)的時鐘周期內(nèi)發(fā)生。因?yàn)槊總€SM310均可以并發(fā)支持多達(dá)G個線程組,結(jié)果是在任意給定時間在GPC 208中可以執(zhí)行多達(dá)G*M個線程組。此外,多個相關(guān)線程組可以在SM 310內(nèi)同時活動(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)量并且通常是SM 310內(nèi)的并行處理引擎數(shù)量的整數(shù)倍,以及m是SM 310內(nèi)同時活動的線程組的數(shù)量。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲器或寄存器的容量來確定。每個SM 310均包含一級(LI)高速緩存(圖3C所示)或使用用于實(shí)施加載和存儲操作的SM 310外部的相應(yīng)LI高速緩存中的空間。每個SM 310都還有權(quán)訪問在所有GPC208之間共享并且可用于在線程之間轉(zhuǎn)移數(shù)據(jù)的二級(L2)高速緩存。最后,SM 310還有權(quán)訪問片外“全局”存儲器,所述“全局”存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應(yīng)該理解,PPU 202外部的任意存儲器均可用作全局存儲器。此外,一點(diǎn)五級(L1.5)高速緩存335可以包括在GPC 208內(nèi),其配置為接收并保持由SM 310所請求的經(jīng)由存儲器接口 214從存儲器獲取的數(shù)據(jù),包括指令、標(biāo)準(zhǔn)(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù),并將所請求的數(shù)據(jù)提供給SM 310。在GPC 208中具有多個SM 310的實(shí)施例有利地共享了高速緩存在L1.5高速緩存335中的共有指令和數(shù)據(jù)。每個GPC 208均可以包括配置為將虛擬地址映射到物理地址中的存儲器管理單元(MMU) 328。在其他實(shí)施例中,MMU 328可以駐留在存儲器接口 214內(nèi)。MMU 328包括用于將虛擬地址映射到像素塊(tile)的物理地址的頁表?xiàng)l目(PTE)集和可選地包括高速緩存線索引。MMU 328可以包括地址轉(zhuǎn)換后備緩沖區(qū)(TLB)或可以駐留在多處理器SM 310或LI高速緩存或GPC 208內(nèi)的高速緩存。物理地址經(jīng)處理以分布表面數(shù)據(jù)訪問位置來允許高效請求在分區(qū)單元215之間交錯。高速緩存線索引可用于確定用于高速緩存線的請求是否命中或未命中。在圖形和計(jì)算應(yīng)用中,GPC 208可配置為使得每個SM 310均耦合到用于實(shí)施紋理映射操作例如確定紋理樣本位置、讀出紋理數(shù)據(jù)以及過濾該紋理數(shù)據(jù)的紋理單元315。從內(nèi)部紋理LI高速緩存(未示出)或者在一些實(shí)施例中從SM 310內(nèi)的LI高速緩存讀出紋理數(shù)據(jù)并根據(jù)需要從在所有GPC 208之間共享的L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中獲取紋理數(shù)據(jù)。為了經(jīng)由交叉開關(guān)單元210將所處理的任務(wù)提供給另一個GPC208用于進(jìn)一步處理或?yàn)榱藢⑺幚淼娜蝿?wù)存儲在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中,每個SM 310均將所處理的任務(wù)輸出到工作分布交叉開關(guān)330。preROP(預(yù)光柵操作)325配置為從SM310接收數(shù)據(jù)、將數(shù)據(jù)引導(dǎo)到分區(qū)單元215內(nèi)的ROP單元以及針對顏色混合實(shí)施優(yōu)化、組織像素顏色數(shù)據(jù)和實(shí)施地址轉(zhuǎn)譯。應(yīng)該理解本文所述的內(nèi)核架構(gòu)是示例性的并且各種變化和修改都是可能的。任意數(shù)量的處理單元例如SM 310或紋理單元315、preR0P 325均可以包括在GPC 208內(nèi)。進(jìn)一步地,如圖2所示,PPU 202可以包括任意數(shù)量的GPC 208,所述GPC 208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個GPC 208接收特定處理任務(wù)。進(jìn)一步地,每個GPC 208有利地均使用單獨(dú)的和各異的處理單元、LI高速緩存來獨(dú)立于其他GPC208操作以為一個或多個應(yīng)用程序執(zhí)行任務(wù)。本領(lǐng)域普通技術(shù)人員應(yīng)該理解圖1、2、3A和3B所描述的架構(gòu)決不限制本發(fā)明的范圍并且在不脫離本發(fā)明范圍的情況下本文所教導(dǎo)的技術(shù)可以在任意經(jīng)適當(dāng)配置的處理單元上實(shí)現(xiàn),所述處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC 208、一個或多個圖形或?qū)S锰幚韱卧鹊?。在本發(fā)明的實(shí)施例中,使用PPU 202或計(jì)算系統(tǒng)的其他處理器以使用線程陣列執(zhí)行通用計(jì)算是可取的。為線程陣列中的每個線程均指派在線程的執(zhí)行期間對于線程可訪問的唯一的線程標(biāo)識符(“線程ID”)??杀欢x為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。每線程指令序列可包括定義代表性線程和線程陣列的一個或多個其他線程之間的協(xié)作行為的至少一個指令。例如,每線程指令序列可能包括在序列中的特定點(diǎn)處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個或多個到達(dá)該特定點(diǎn)的時間為止的指令、用于代表性線程將數(shù)據(jù)存儲在其他線程的一個或多個有權(quán)訪問的共享存儲器中的指令、用于代表性線程自動讀出和更新存儲在其他線程的一個或多個基于它們的線程ID有權(quán)訪問的共享存儲器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計(jì)算數(shù)據(jù)將從其讀出的共享存儲器中的地址的指令,該地址是線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測的方式由CTA的一個線程將數(shù)據(jù)寫入共享存儲器中的給定位置并由同一個CTA的不同線程從該位置讀出數(shù)據(jù)。因此,數(shù)據(jù)在線程之間共享的任意期望形式可以得到支持,以及CTA中的任意線程可以與同一個CTA中的任意其他線程分享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應(yīng)該理解在使用CTA的特定應(yīng)用中,CTA的線程可能會或可能不會真正互相分享數(shù)據(jù),這取決于CTA程序,術(shù)語“CTA”和“線程陣列”在本文作為同義詞使用。圖3C為根據(jù)本公開一個實(shí)施例的圖3B的SM 310的框圖。SM 310包括配置為經(jīng)由L1.5高速緩存335從存儲器接收指令和常數(shù)的指令LI高速緩存370。warp調(diào)度器和指令單元312從指令LI緩沖370接收指令和常數(shù)并根據(jù)該指令和常數(shù)控制本地寄存器堆304和SM 310功能單元。SM310功能單元包括N個exec (執(zhí)行或處理)單元302和P個加載-存儲單元(LSU) 303。
      SM 310提供具有不同級別的可訪問性的片上(內(nèi)部)數(shù)據(jù)存儲。特殊寄存器(未示出)對于LSU 303可讀但不可寫并且用于存儲定義每個線程的“位置”的參數(shù)。在一個實(shí)施例中,特殊寄存器包括每線程(或SM 310內(nèi)的每exec單元302)—個的存儲線程ID的寄存器;每個線程ID寄存器僅由各自的exec單元302可訪問。特殊寄存器還可以包括附加寄存器,其對于執(zhí)行由TMD 322所代表的同一個處理任務(wù)的所有線程(或由所有LSU303)可讀,其存儲CTA標(biāo)識符、CTA維數(shù)、CTA所屬網(wǎng)格(grid)的維數(shù)(或隊(duì)列位置,如果TMD 322編碼隊(duì)列任務(wù)而不是網(wǎng)格任務(wù)的話)、以及CTA被指派到的TMD 322的標(biāo)識符。如果TMD 322是網(wǎng)格TMD,則TMD 322的執(zhí)行會啟動和執(zhí)行固定數(shù)量的CTA以處理存儲在隊(duì)列525中的固定量的數(shù)據(jù)。將CTA的數(shù)量指定為網(wǎng)格寬度、高度和深度的乘積??梢詫⒐潭康臄?shù)據(jù)存儲在TMD 322中或TMD 322可以存儲指向?qū)⒂蒀TA所處理的數(shù)據(jù)的指針。TMD 322還存儲由CTA所執(zhí)行的程序的開始地址。如果TMD 322是隊(duì)列TMD,那么使用TMD 322的隊(duì)列特點(diǎn),這意味著將要被處理的數(shù)據(jù)量不一定是固定的。隊(duì)列條目存儲用于由指派到TMD 322的CTA所處理的數(shù)據(jù)。隊(duì)列條目還可以代表在線程執(zhí)行期間由另一個TMD 322所生成的子任務(wù),從而提供嵌套并行性。通常線程或包括線程的CTA的執(zhí)行被掛起直到子任務(wù)的執(zhí)行完成??梢詫㈥?duì)列存儲在TMD 322中或與TMD 322分開存儲,在該情況下TMD 322存儲指向該隊(duì)列的指針。有利地,當(dāng)代表子任務(wù)的TMD 322正在執(zhí)行時可以將由子任務(wù)所生成的數(shù)據(jù)寫到隊(duì)列。隊(duì)列可以實(shí)現(xiàn)為循環(huán)隊(duì)列以使得數(shù)據(jù)的總量不限于隊(duì)列的大小。屬于網(wǎng)格的CTA具有指示網(wǎng)格內(nèi)各自CTA的位置的隱含網(wǎng)格寬度、高度和深度參數(shù)。在初始化期間響應(yīng)于經(jīng)由前端212從設(shè)備驅(qū)動程序103所接收的命令來寫特殊寄存器并且在處理任務(wù)的執(zhí)行期間特殊寄存器不改變。前端212調(diào)度每個處理任務(wù)用于執(zhí)行。每個CTA均與特定TMD 322相關(guān)聯(lián)用于一個或多個任務(wù)的并發(fā)執(zhí)行。此外,單個GPC 208可以并發(fā)執(zhí)行多個任務(wù)。參數(shù)存儲器(未示出)存儲可由同一個CTA內(nèi)的任意線程(或任意LSU 303)讀取但不可由其寫入的運(yùn)行時間參數(shù)(常數(shù))。在一個實(shí)施例中,設(shè)備驅(qū)動程序103在引導(dǎo)SM 310開始執(zhí)行使用參數(shù)的任務(wù)之前將這些參數(shù)提供給參數(shù)存儲器。任意CTA內(nèi)的任意線程(或SM 310內(nèi)的任意exec單元302)均可以通過存儲器接口 214訪問全局存儲器??梢詫⑷执鎯ζ鞯母鞑糠执鎯υ贚I高速緩存320中。每個線程均將本地寄存器堆304用作暫存空間;每個寄存器被分配以專用于一個線程,并且在本地寄存器堆304的任意一個中的數(shù)據(jù)僅對于寄存器被分配到的線程可訪問。本地寄存器堆304可以實(shí)現(xiàn)為物理上或邏輯上分為P個通道的寄存器堆,每個通道具有一定數(shù)量的條目(其中每個條目可以存儲例如32位字)。將一個通道指派到N個exec單元中和P個下載-存儲單元LSU 303的每一個,并且利用用于執(zhí)行同一個程序的不同線程的數(shù)據(jù)來填充不同通道中的相應(yīng)條目以幫助SIMD執(zhí)行。可以將通道的不同部分分配到G個并發(fā)線程組中的不同線程組,以使得本地寄存器堆304中的給定條目僅對于特定線程可訪問。在一個實(shí)施例中,保留本地寄存器堆304內(nèi)的某些條目用于存儲線程標(biāo)識符,這實(shí)現(xiàn)特殊寄存器之一。此外,標(biāo)準(zhǔn)LI高速緩存375存儲用于N個exec單元302和P個下載-存儲單元LSU 303的每個通道的標(biāo)準(zhǔn)或常數(shù)值。共享存儲器306對于單個CTA內(nèi)的線程可訪問;換言之,共享存儲器306中的任意位置對于同一個CTA內(nèi)的任意線程(或?qū)τ赟M 310內(nèi)的任意處理引擎)可訪問。共享存儲器306可以實(shí)現(xiàn)為具有允許任意處理引擎對共享存儲器中的任意位置讀取或?qū)懭氲幕ミB的共享寄存器堆或共享片上高速緩存存儲器。在其他實(shí)施例中,共享狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)域上并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以實(shí)現(xiàn)為在實(shí)現(xiàn)共享存儲器306的同一個共享寄存器堆或共享高速緩存存儲器內(nèi)的指定部分,或者實(shí)現(xiàn)為LSU 303對其具有只讀訪問權(quán)限的單獨(dú)的共享寄存器堆或片上高速緩存存儲器。在一個實(shí)施例中,實(shí)現(xiàn)參數(shù)存儲器的區(qū)域還用于存儲CTA ID和任務(wù)ID,以及CTA和網(wǎng)格維數(shù)或隊(duì)列位置,這實(shí)現(xiàn)特殊寄存器的各部分。SM 310中的每個LSU 303均耦合到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲器空間中所指定的加載和存儲指令所提供的地址轉(zhuǎn)換為每個相異存儲器空間中的地址。因此,指令可以用于通過指定統(tǒng)一存儲器空間中的地址來訪問本地、共享或全局存儲器空間中的任意一個。每個SM 310中的LI高速緩存320可以用于高速緩存私有的每線程本地數(shù)據(jù)還有每應(yīng)用全局?jǐn)?shù)據(jù)。在一些實(shí)施例中,可以將每CTA共享數(shù)據(jù)高速緩存在LI高速緩存320中。LSU 303經(jīng)由存儲器和高速緩存互連380耦合到共享存儲器306和LI高速緩存320。操作數(shù)高速緩存圖4為根據(jù)本公開另一個示范性實(shí)施例的圖3B的SM 310的框圖。盡管未明確示出,但除圖4中明確示出的部件之外,圖4的SM 310可以包含上述圖3C的SM 310的部件的一些或所有。如圖4所示,SM 310包括warp調(diào)度器和指令單元312、本地寄存器堆304和一個或多個功能執(zhí)行單元諸如執(zhí)行單元302或LSU 303。warp調(diào)度器和指令單元312包括解碼單元450和分派單元470。解碼單元450接收將要被分派到執(zhí)行單元302的下一個指令。解碼單元450實(shí)施指令的全解碼并將所解碼的指令傳輸?shù)椒峙蓡卧?70。例如,解碼單元450將確定由指令中的操作碼所指定的特定類型的指令和被指定為指令的操作數(shù)的特定寄存器索引以及用于存儲指令結(jié)果的寄存器索引。在一些實(shí)施例中,指令可以是雙發(fā)出或四發(fā)出的并且解碼單元450可以為每個所發(fā)出的指令實(shí)現(xiàn)單獨(dú)的解碼邏輯。分派單元470實(shí)現(xiàn)FIFO并將所解碼的值寫到本地寄存器堆304用于執(zhí)行,在同時發(fā)出多個指令的實(shí)施例中,分派單元470可以發(fā)出每個指令到SM 310的功能單元的不同部分。在一個實(shí)施例中,本地寄存器堆304包括四個寄存器庫(庫0422、庫1424、庫2426和庫3428)。在最常規(guī)的處理單元中,本地寄存器堆可以非常小。例如,X86CPU架構(gòu)包括每處理器內(nèi)核8個(32位)或16個(64位)寄存器。相反,本地寄存器堆304的每個庫可以包括可用作到執(zhí)行單元302的輸入的大量寄存器,諸如256個寄存器或更多。交叉開關(guān)420配置為將每個寄存器庫中的各寄存器連接到執(zhí)行單元302中的操作數(shù)收集器440。執(zhí)行單元302實(shí)現(xiàn)數(shù)據(jù)路徑用于實(shí)施操作。數(shù)據(jù)路徑包括操作數(shù)收集器440、算術(shù)邏輯單元(ALU)452和結(jié)果FIFO 454。操作數(shù)收集器440包括可以耦合到ALU 452的輸入的若干存儲元件441-446。每個存儲元件441-446均可以是觸發(fā)器、鎖存器或能夠臨時存儲作為ALU 452的輸入所供應(yīng)的值的任意其他技術(shù)可行的電路部件。存儲元件的輸出可以硬連接到包括ALU452的電路元件諸如加法器電路或浮點(diǎn)乘法器電路。如所示的,操作數(shù)收集器440包括六個存儲元件441-446。在其他實(shí)施例中,任意數(shù)量的存儲元件441-446可以實(shí)現(xiàn)在執(zhí)行單元302 中。在包括相對小的寄存器堆的常規(guī)處理器設(shè)計(jì)中,交叉開關(guān)或其他互連可以配置為在單個時鐘周期期間將本地寄存器堆中的任意寄存器耦合到數(shù)據(jù)路徑輸入的任意一個。此夕卜,在常規(guī)處理器中,可以在單個時鐘周期中將數(shù)量等于到數(shù)據(jù)路徑的輸入數(shù)量的若干寄存器同時連接到任意數(shù)據(jù)路徑輸入。應(yīng)該理解本地寄存器堆304的大小增加超出8或16個寄存器可能增加交叉開關(guān)420的復(fù)雜度。因此,在一些實(shí)施例中,交叉開關(guān)420僅可以在每個時鐘周期期間將單個寄存器從每個寄存器庫(例如422、424、426和428)耦合到特定存儲元件441-446。上述處理器架構(gòu)(其中交叉開關(guān)420在一個時鐘周期期間僅將每寄存器庫的單個寄存器耦合到操作數(shù)收集器440)減小了交叉開關(guān)420的大小和復(fù)雜度,但是該處理器架構(gòu)還為經(jīng)由執(zhí)行單元302執(zhí)行指令而引入了各種約束。例如,在每個時鐘周期期間本地寄存器堆304和操作數(shù)收集器440之間的帶寬等于本地寄存器堆304中的寄存器庫數(shù)量。如所示的,本地寄存器堆304包括四個寄存器庫,從而允許在單個時鐘周期期間將多達(dá)四個操作數(shù)寫入操作數(shù)收集器440中。然而,因?yàn)椴僮鲾?shù)收集器440包括用于在每個指令期間提供到ALU 452的輸入的六個存儲元件441-446,所以可能需要在兩個連續(xù)的時鐘周期中加載操作數(shù)(在第一時鐘周期中加載4個操作數(shù)以及在第二時鐘周期中加載2個操作數(shù))。另夕卜,必須注意通過將同一指令所需的操作數(shù)值存儲在不同寄存器庫422、424、426和428中來避免寄存器庫沖突。例如,如果將所有六個操作數(shù)都存儲在庫0422中,那么需要6個時鐘周期來將操作數(shù)加載到操作數(shù)收集器440中。在一個實(shí)施例中,分派單元470包括配置為通過確保將用于每個指令的操作數(shù)均存儲在不同寄存器庫422、424、426和428中來避免庫沖突的邏輯。在另一個實(shí)施例中,驅(qū)動程序103可以包括引起驅(qū)動程序103在并行處理器指令被傳送到PPU 202之前的編譯期間檢查和避免庫沖突的實(shí)現(xiàn)指令。然而,盡管具有這類技術(shù)的實(shí)現(xiàn)方案,但是一些庫沖突可能無法輕易解決。在一個實(shí)施例中,操作數(shù)收集器440使對操作數(shù)的高速緩存能夠同時與操作數(shù)收集器440內(nèi)的多個指令相關(guān)聯(lián)。如所示的,操作數(shù)收集器440包括與到ALU 452的每個輸入相對應(yīng)的一個或多個存儲元件(441 (O)-441 (R-1)、442 (O)-442 (R-1)等等)。分派單元470可以包括邏輯以控制針對每個指令將哪個存儲元件集441 (i)-446 (i)連接到ALU 452。例如,如表I所示,執(zhí)行 在ALU 302上的程序可以包括由驅(qū)動程序103所生成并傳輸?shù)絇PU202的指令集。第一指令可以是包括三個操作數(shù)(R13、R11、R14)和輸出(Rl)的積和熔加(FMA)指令。第二指令可以是包括三個操作數(shù)(R6、R7、R8)和輸出(R2)的加法(ADD)指令。第三指令可以是包括三個操作數(shù)(R6、Rll和R13)的乘法(mUL)指令。標(biāo)示為X的操作數(shù)不用作針對給定指令的到ALU 452的輸入并且為了本公開的目的其可以忽略。
      編號j操作碼~Mim
      1FMARlR13, Rll, R14, X, X, X
      2ADDR2R6, R7, R8, X, X, X
      3MlJLR3R6, Rll, R13, X, X, X表I操作數(shù)收集器440可以在下一個指令期間重復(fù)利用來自前一個指令的操作數(shù)。例如,在上述第二指令期間,將存儲在本地寄存器堆304中的寄存器6、寄存器7和寄存器8中的操作數(shù)值分別加載到存儲元件441、442和443中。在上述第三指令期間,在存儲元件441中的值可以重復(fù)利用并且僅將存儲在本地寄存器堆304中的寄存器11和寄存器13中的操作數(shù)值加載到操作數(shù)收集器440中。換言之,不需要在每個指令期間重新加載存儲元件441-446。分派單元470可以包括存儲用于當(dāng)前被加載到操作數(shù)收集器440中的每個寄存器的索引的邏輯。包括在分派單元470中的邏輯可以實(shí)現(xiàn)為包括與每個存儲元件441-446相對應(yīng)的槽的查找表(即高速緩存表)。每個槽可以存儲指示與存儲在相應(yīng)存儲元件441-446中的值相關(guān)聯(lián)的寄存器索引的值。當(dāng)解碼單元450確定哪個寄存器(即寄存器索引)用作用于下一個指令的操作數(shù)時,分派單元470將檢查以確定對應(yīng)于該寄存器索引的寄存器值是否由于調(diào)度前一個指令而當(dāng)前存儲在同一個存儲元件441-446中。有利地,如果同一個存儲元件441-446存儲該寄存器值,則可以在同一個指令周期期間將來自同一個寄存器庫中的另一個寄存器值加載到不同存儲元件441-446中。在另一個實(shí)施例中,操作數(shù)收集器440可以針對ALU 452的給定數(shù)據(jù)路徑輸入來存儲多個寄存器值的集(即操作數(shù)1-6分別存儲在存儲元件441-446中)。在這類實(shí)施例中,操作數(shù)收集器440可以包括用于ALU 452的每個數(shù)據(jù)通路輸入的R個存儲元件441 (O)、441 (I)、…、441 (R-1)的集。因此,可以將來自前R個指令的操作數(shù)高速緩存在操作數(shù)收集器440中并在隨后的指令中重復(fù)利用以減小將操作數(shù)從本地寄存器堆304加載到操作數(shù)收集器440中所需的帶寬。例如,如果R等于2,那么在表I所闡述的第一指令期間,將寄存器13加載到存儲元件441 (O)中,將寄存器11加載到存儲元件442 (O)中以及將寄存器14加載到存儲元件443 (O)中。隨后,在第二指令期間,將寄存器6加載到存儲元件441 (I)中,將寄存器7加載到存儲元件442 (I)中以及將寄存器8加載到存儲元件443 (I)中。在第三指令期間,第一操作數(shù)值(寄存器6 )存儲在存儲元件441 (I)中以及第二操作數(shù)值(寄存器11)存儲在存儲元件442 (O)中。在一些實(shí)施例中,必須并發(fā)選擇在給定指令期間所加載的存儲元件441 (i)-446
      (i)的給定子集以與隨后的指令一起使用。換言之,在上述第三指令期間,分派單元可以重復(fù)利用在第一指令期間所加 載的存儲元件441 (0)-446 (O)或者在第二指令期間所加載的存儲元件441 (1)-446 (I ),但不是在第二指令期間所加載的第一存儲元件441 (I)(即存儲寄存器6中的值)以及在第一指令期間所加載的第二存儲元件442 (O)(即存儲寄存器
      11中的值)。在其他實(shí)施例中,分派單元470可以包括用于在每個獨(dú)立存儲元件441-446之間選擇的邏輯,其使在不同指令期間存儲在不同存儲元件441 (i)-446 (i)的集中的寄存器值能夠在隨后的指令中重復(fù)利用。應(yīng)該理解可以監(jiān)視高速緩存一致性以確保存儲元件441-446中的值等于本地寄存器堆304中的相應(yīng)寄存器中的值。在一個實(shí)施例中,高速緩存表中的槽存儲索引值,所述索引值指定與存儲在關(guān)聯(lián)的存儲元件441-446中的值相對應(yīng)的寄存器。每當(dāng)將新值寫到本地寄存器堆304中的寄存器時,搜索高速緩存表以確定對應(yīng)于該寄存器的索引是否當(dāng)前存儲在操作數(shù)收集器440中。如果操作數(shù)收集器440包括對應(yīng)于該寄存器的條目,那么更新高速緩存表以從槽移除該索引(即將高速緩存表的該槽中的值設(shè)置為O以使操作數(shù)收集器440中的數(shù)據(jù)無效)。因此,如果該寄存器之后被指定為隨后指令中的操作數(shù),則分派單元470將重新將值從本地寄存器堆304加載到操作數(shù)收集器440中,這確保不將無效值提供給ALU 452。圖5示出了根據(jù)本公開一個示范性實(shí)施例的圖4的操作數(shù)收集器440。如圖5所示,操作數(shù)收集器440包括圖4的存儲元件441-446。如上所述,存儲元件441-446實(shí)現(xiàn)用于存儲耦合到ALU 452的數(shù)據(jù)路徑輸入的寄存器值的高速緩存。交叉開關(guān)420經(jīng)分派單元470配置以將本地寄存器堆304中的各寄存器耦合到存儲元件441-446。操作數(shù)收集器440還包括多個多路復(fù)用器511-516。多路復(fù)用器511具有耦合到第一存儲元件441 (O)的第一輸入和耦合到第二存儲元件441 (I)的第二輸入。多路復(fù)用器511還具有耦合到向ALU452的邏輯提供第一操作數(shù)值的ALU 452的第一數(shù)據(jù)路徑輸入的輸出。多路復(fù)用器512具有耦合到第一存儲元件442 (O)的第一輸入和耦合到第二存儲元件442 (I)的第二輸入。多路復(fù)用器512還具有耦合到向ALU 452的邏輯提供第二操作數(shù)值的ALU 452的第二數(shù)據(jù)路徑輸入的輸出。多路復(fù)用器513、514、515和516具有與上述多路復(fù)用器511和512相似的連接,分別用于ALU 452的第三、第四、第五和第六數(shù)據(jù)路徑輸入。分派單元470配置多路復(fù)用器511、512、513、514、515和516以在不同的存儲元件441 (i)-446 (i)的集之間進(jìn)行選擇。如圖5所示,耦合到多路復(fù)用器511-516的控制信號可以耦合到多路復(fù)用器中的每一個以選擇與相同的先前所加載的指令相對應(yīng)的所有存儲元件441 ( i)-446 (i)。在替代性實(shí)施例中,分派單元470可以向多路復(fù)用器511-516中的每一個供應(yīng)不同的控制信號,這允許將對應(yīng)于不同指令的存儲元件441 (i)-446 (i)耦合到ALU 452的數(shù)據(jù)路徑輸入。在替代性實(shí)施例中,操作數(shù)收集器440可以包括使任意存儲元件441-446能夠連接到ALU 452的任意數(shù)據(jù)路徑輸入的不同互連邏輯。例如,一個或多個交叉開關(guān)可以實(shí)現(xiàn)在操作數(shù)收集器440內(nèi)而不是多路復(fù)用器511-516內(nèi)。作為示例,該一個或多個交叉開關(guān)可以使存儲元件442 (I)能夠與ALU 452的第四數(shù)據(jù)路徑輸入相連接并且使存儲元件443
      (O)能夠與ALU 452的第一數(shù)據(jù)路徑輸入相連接。換言之,如果操作數(shù)先前被加載到操作數(shù)高速緩存440中的任意存儲元件,則該操作數(shù)將導(dǎo)致操作數(shù)高速緩存440命中。因此,參考以上表I所給定的指令,因?yàn)樵趦蓚€先前指令期間由第三指令所指定的三個操作數(shù)已先被加載到操作數(shù)高速緩存440的存儲元件的至少一個中,所以由第三指令所指定的所有三個操作數(shù)都可以重復(fù)利用。圖6為根據(jù)本公開一個示范性實(shí)施例,示出了利用源操作數(shù)收集器高速緩存所實(shí)現(xiàn)的用于在處理器內(nèi)核上執(zhí)行指令的方法600的流程圖。盡管結(jié)合圖1、2、3A-3C、4和5的系統(tǒng)描述了該方法步驟,但是本領(lǐng)域普通技術(shù)人員應(yīng)該理解任意配置為以任意順序?qū)嵤┰摲椒ú襟E的系統(tǒng)均在本發(fā)明的范圍內(nèi)。方法600開始于步驟610,其中SM 310解碼指令以確定由指令所指定的多個操作數(shù)。每個操作數(shù)均可以被指定為與本地寄存器堆304內(nèi)的寄存器相對應(yīng)的索引。在步驟612,SM 310確定操作數(shù)的一個或多個是否高速緩存在操作數(shù)收集器440中。SM 310可以維護(hù)高速緩存表,所述高速緩存表存儲與存儲在操作數(shù)收集器440中的寄存器相對應(yīng)的索弓I。分派單元470可以針對存儲在高速緩存表中的索引來檢查所解碼的與由指令所指定的操作數(shù)相對應(yīng)的寄存器索引。在步驟614,對于未存儲在操作數(shù)收集器440中的每個操作數(shù),SM 310配置交叉開關(guān)420以將本地寄存器堆304中的指定的寄存器與操作數(shù)收集器440中的存儲元件441-446耦合到一起。在步驟616,SM 310更新高速緩存表以反映與存儲在操作數(shù)收集器440中的寄存器值相對應(yīng)的寄存器索引。在步驟618,SM 310配置ALU 452以使用存儲在操作數(shù)收集器440中的操作數(shù)作為到ALU 452的輸入來執(zhí)行指令。在步驟620,SM 310確定是否有被調(diào)度以在ALU 452上執(zhí)行的附加指令。如果附加指令被調(diào)度以執(zhí)行,那么方法600返回在此解碼下一個指令的步驟610。然而,如果不再有指令被調(diào)度以執(zhí)行,那么方法600終止。本公開的一個實(shí)施例可以作為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品實(shí)現(xiàn)。程序產(chǎn)品的程序定義實(shí)施例的功能(包括本文所述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲介質(zhì)上。示意性的計(jì)算機(jī)可讀存儲介質(zhì)包括,但不限于:(i)信息被永久保存在其上的非可寫存儲介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲器設(shè)備,諸如可被壓縮光盤只讀存儲器(CD-ROM)驅(qū)動器讀取的CD-ROM盤、閃存、只讀存儲器(ROM)芯片或任何類型的固態(tài)非易失性半導(dǎo)體存儲器);和( )可變信息被保存在其上的可寫存儲介質(zhì)(例如,磁盤驅(qū)動器內(nèi)的軟盤或者硬盤驅(qū)動器或者任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲器)。以上已經(jīng)參照特定實(shí)施例描述了本公開。然而,本領(lǐng)域的普通技術(shù)人員應(yīng)該理解在不脫離如所附權(quán)利要求提出的本公開更寬的精神和范圍的情況下,可以做出各種修改和改變。因此,前述的描 述和附圖應(yīng)被視為示意性的而非限制性的意義。
      權(quán)利要求
      1.一種利用源操作數(shù)收集器高速緩存所實(shí)現(xiàn)的用于在處理器內(nèi)核上執(zhí)行指令的方法,所述源操作數(shù)收集器高速緩存耦合到位于所述處理器內(nèi)核內(nèi)的數(shù)據(jù)路徑的至少一個輸入,所述方法包括: 解碼指令以確定由所述指令所指定的多個操作數(shù); 對于所述多個操作數(shù)中的每個操作數(shù),確定所述操作數(shù)未存儲在所述源操作數(shù)收集器高速緩存中,將所述操作數(shù)從本地寄存器堆加載到所述源操作數(shù)收集器高速緩存中;以及 配置所述處理器內(nèi)核以跨越存儲在所述源操作數(shù)收集器高速緩存中的所述操作數(shù)執(zhí)行所述指令。
      2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括一旦將所述操作數(shù)加載到所述源操作數(shù)收集器高速緩存中,則更新高速緩存表以將與所述操作數(shù)相應(yīng)的寄存器索引與所述源操作數(shù)收集器高速緩存中的存儲元件相關(guān)聯(lián)。
      3.根據(jù)權(quán)利要求1所述的方法,其中所述本地寄存器堆包括多個寄存器庫。
      4.根據(jù)權(quán)利要求3所述的方法,進(jìn)一步包括配置交叉開關(guān)以將所述多個寄存器庫的第一寄存器庫中的寄存器耦合到所述源操作數(shù)收集器高速緩存中的第一存儲元件。
      5.根據(jù)權(quán)利要求1所述的方法,其中所述源操作數(shù)收集器高速緩存的大小設(shè)置為并發(fā)存儲由所述指令所指定的所述多個操作數(shù)和由另一個經(jīng)解碼指令所指定的多個操作數(shù)。
      6.一種系統(tǒng),包括: 包括數(shù)據(jù)路徑的處理器內(nèi)核,用于執(zhí)行指令; 源操作數(shù)收集器高速緩存,其耦合到所述數(shù)據(jù)路徑的至少一個輸入; 本地寄存器堆,其耦合到所述源操作數(shù)收集器高速緩存;以及 調(diào)度單元,其配置為: 解碼指令以確定由所述指令所指定的多個操作數(shù), 對于所述多個操作數(shù)中的每個操作數(shù),確定所述操作數(shù)未存儲在所述源操作數(shù)收集器高速緩存中,將所述操作數(shù)從所述本地寄存器堆加載到所述源操作數(shù)收集器高速緩存中;以及 配置所述處理器內(nèi)核以跨越存儲在所述源操作數(shù)收集器高速緩存中的所述操作數(shù)執(zhí)行所述指令。
      7.根據(jù)權(quán)利要求6所述的系統(tǒng),進(jìn)一步包括高速緩存表,以及其中,一旦將所述操作數(shù)加載到所述源操作數(shù)收集器高速緩存中,則所述調(diào)度單元進(jìn)一步配置為更新所述高速緩存表以將與所述操作數(shù)相應(yīng)的寄存器索引與所述源操作數(shù)收集器高速緩存中的存儲元件相關(guān)聯(lián)。
      8.根據(jù)權(quán)利要求6所述的系統(tǒng),其中所述本地寄存器堆包括多個寄存器庫。
      9.根據(jù)權(quán)利要求6所述的系統(tǒng),進(jìn)一步包括交叉開關(guān),其配置為將所述多個寄存器庫的第一寄存器庫中的寄存器耦合到所述源操作數(shù)收集器高速緩存中的第一存儲元件。
      10.根據(jù)權(quán)利要求6所述的系統(tǒng),其中所述源操作數(shù)收集器高速緩存的大小設(shè)置為并發(fā)存儲由所述指令所指定的所述多個操作數(shù)和由另一個經(jīng)解碼指令所指定的多個操作數(shù)。
      全文摘要
      用于源操作數(shù)收集器高速緩存的方法和裝置。在一個實(shí)施例中,處理器包括可以耦合到存儲元件(即操作數(shù)收集器)的寄存器堆,該存儲元件提供到處理器內(nèi)核的數(shù)據(jù)路徑的輸入以執(zhí)行指令。為了減小寄存器堆和操作數(shù)收集器之間的帶寬,可以高速緩存并在隨后的指令中重復(fù)利用操作數(shù)。調(diào)度單元維護(hù)用于監(jiān)視哪個寄存器值當(dāng)前存儲在操作數(shù)收集器中的高速緩存表。調(diào)度單元還可以配置操作數(shù)收集器以針對給定指令選擇耦合到數(shù)據(jù)路徑的輸入的特定存儲元件。
      文檔編號G06F9/345GK103197916SQ20121053997
      公開日2013年7月10日 申請日期2012年12月13日 優(yōu)先權(quán)日2011年12月14日
      發(fā)明者杰克·希萊爾·肖凱特, 曼紐爾·奧利維爾·高斯奧, 約翰·埃里克·林霍爾姆 申請人:輝達(dá)公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1