亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于并行處理單元的陷阱處理器架構(gòu)的制作方法

文檔序號:6351247閱讀:262來源:國知局
專利名稱:用于并行處理單元的陷阱處理器架構(gòu)的制作方法
技術(shù)領(lǐng)域
本發(fā)明總體涉及陷阱處理器(trap handler)架構(gòu),并且,更具體地涉及高度并行線程處理器和圖形處理單元中的陷阱處理器架構(gòu)。
背景技術(shù)
陷阱處理器是計(jì)算機(jī)系統(tǒng)中的軟件例程,例如當(dāng)計(jì)算機(jī)程序執(zhí)行期間計(jì)算機(jī)系統(tǒng)中發(fā)生異常(exertion)或中斷時,執(zhí)行所述陷阱處理器。由于執(zhí)行計(jì)算機(jī)程序中的特定指令導(dǎo)致需要以特定方式對其進(jìn)行處理的意外結(jié)果,因此發(fā)生異常。例如,除以零的指令或包括錯誤存儲器地址的指令將產(chǎn)生異常,其使得計(jì)算機(jī)程序流跳轉(zhuǎn)到陷阱處理器例程。相反,中斷的發(fā)生是由于不依靠計(jì)算機(jī)程序流自身的外部事件。例如,諸如按下鼠標(biāo)上的按鍵或者完成到NIC卡的數(shù)據(jù)傳輸這類設(shè)備I/O事件,將會使該設(shè)備傳送中斷到計(jì)算機(jī)系統(tǒng),同樣使得計(jì)算機(jī)程序流跳轉(zhuǎn)到陷阱器例程。不論是處理異常還是中斷(本文中都稱為“異?!?,陷阱處理器一般都從保存當(dāng)前計(jì)算機(jī)程序流的狀態(tài)開始(例如,保存于程序堆棧),然后跳轉(zhuǎn)到該陷阱處理器的特定子例程以尋址特定的異?;蛑袛唷km然陷阱處理器架構(gòu)通常實(shí)現(xiàn)于計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)和設(shè)備驅(qū)動器中,但至今為止,在此類計(jì)算機(jī)系統(tǒng)中的諸如圖形處理器子系統(tǒng)或GPU(圖形處理單元)等高度并行線程處理器,則由于實(shí)現(xiàn)和效率方面的困難,仍然未能包含陷阱處理器架構(gòu)。由于其高度并行化的特征,在發(fā)生中斷或異常的情況下,對應(yīng)于可在GPU中運(yùn)行的多個不同線程組,用于現(xiàn)代GPU的陷阱處理器架構(gòu)需要正確地處理數(shù)以萬計(jì)的并發(fā)執(zhí)行的線程。此外,考慮到對于GPU的尺寸和成本限制,此類陷阱處理器架構(gòu)的集成電路組件需要有效地利用半導(dǎo)體晶圓面積(wafer die area) 0由于難以將可有效處理并發(fā)執(zhí)行線程的陷阱處理器架構(gòu)包含進(jìn)來,因此當(dāng)前的GPU不能提供依賴于陷阱處理器的增強(qiáng)特征集,該增強(qiáng)特征集諸如處理主機(jī)CPU中斷、不需要與CPU交互即可在GPU中直接進(jìn)行異常處理以及GPU系統(tǒng)調(diào)用支持。因此,本技術(shù)領(lǐng)域需要的是用于在GPU中有效提供陷阱處理器架構(gòu)的系統(tǒng)和方法,所述陷阱處理器架構(gòu)能夠恰當(dāng)?shù)靥幚碓贕PU中當(dāng)前運(yùn)行線程的高度并行化的特性。

發(fā)明內(nèi)容
本發(fā)明的一個或多個實(shí)施例提供用于GPU的陷阱處理器架構(gòu),其處理GPU中的異常和中斷。為了針對GPU的線程組中每ー個,解決線程組同步問題以及最小化設(shè)計(jì)復(fù)雜度和驗(yàn)證工作,所述陷阱處理器架構(gòu)強(qiáng)制執(zhí)行以下特性所有線程組或者全部執(zhí)行在它們各自的代碼段內(nèi),或者全部執(zhí)行在所述陷阱處理器代碼段的代碼段內(nèi)。根據(jù)ー個實(shí)施例,GPU經(jīng)配置以處理在所述GPU的多處理器內(nèi)的第一線程組執(zhí)行、期間發(fā)生的干擾事件,例如異?;蛑袛?。所述GPU包括陷阱處理器控制器,所述陷阱處理器控制器經(jīng)配置以執(zhí)行以下步驟接收所述干擾事件的通知;停止執(zhí)行在所述多處理器內(nèi)的所有線程組的執(zhí)行;設(shè)置錯誤狀態(tài)寄存器以指示所述干擾事件的類型;以及,為每個線程組設(shè)置程序計(jì)數(shù)器,以指出陷阱器代碼段的存儲器地址,所述陷阱器代碼段包括配置所述多處理器來處理所述干擾事件的軟件例程;以及,包括所述陷阱處理器代碼段的存儲器單元,所述陷阱處理器代碼段包含當(dāng)由所述多處理器執(zhí)行時,執(zhí)行以下步驟的指令請求所述錯誤狀態(tài)寄存器的值;分支轉(zhuǎn)移到所述陷阱處理器代碼段中的子段,所述子段包括用于尋址所述干擾事件的類型的指令;以及,執(zhí)行所述陷阱處理器代碼段的所述子段中的指令以處理該干擾事件。包括這中陷阱處理器架構(gòu)的GPU的ー個優(yōu)點(diǎn)在于,在處理大量可由陷阱處理器自身內(nèi)部處理的很多情況時,GPU較少地依賴于主機(jī)CPU。


因此,可以詳細(xì)地理解上述本發(fā)明的特征,并且可以參考實(shí)施例得到對如上面所 概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅用于示意性地表示本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對本發(fā)明范圍的限制,本發(fā)明可以具有其他等效的實(shí)施方式。圖I為示出了被配置為實(shí)現(xiàn)本發(fā)明ー個或多個方面的計(jì)算機(jī)系統(tǒng)的框圖;圖2為根據(jù)本發(fā)明ー個實(shí)施例的,用于圖I中計(jì)算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;圖3A為根據(jù)本發(fā)明ー個實(shí)施例的,圖2中ー個PPU內(nèi)的GPC的框圖;圖3B為根據(jù)本發(fā)明ー個實(shí)施例的,圖2中ー個PPU內(nèi)的分區(qū)單元的框圖;圖3C為根據(jù)本發(fā)明ー個實(shí)施例的,圖3A中SPM的一部分的框圖;以及圖4為根據(jù)本發(fā)明ー個實(shí)施例的,可由圖2中ー個或多個PPU經(jīng)配置實(shí)現(xiàn)的圖形處理管線的示意圖;圖5為根據(jù)本發(fā)明ー個實(shí)施例的,包括陷阱處理器控制器的SPM架構(gòu)的框圖;圖6為根據(jù)本發(fā)明ー個實(shí)施例的,用于由陷阱處理器控制器處理異?;蛑袛嗟姆椒ú襟E的流程圖;圖7為根據(jù)本發(fā)明ー個實(shí)施例的,陷阱處理器代碼段的流程圖。
具體實(shí)施例方式在下面的描述中,將闡述大量的詳細(xì)內(nèi)容以提供對本發(fā)明更深入的理解。然而,本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個或多個這些具體細(xì)節(jié)的情況下得以實(shí)施。在其他例子中,沒有描述公知的特征以避免對本發(fā)明造成混淆。系統(tǒng)概述圖I為示出了經(jīng)配置以實(shí)現(xiàn)本發(fā)明的ー個或多個方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括中央處理單元(CPU) 102和通過可包括存儲器橋105的互連路徑通信的系統(tǒng)存儲器104。存儲器橋105可以是諸如北橋芯片,通過總線或其他通信路徑106(諸如超傳輸(HyperTransport)鏈路)連接到1/0(輸入/輸出)橋107。I/O橋107,其可以是諸如南橋芯片,從ー個或多個用戶輸入設(shè)備108 (諸如鍵盤、鼠標(biāo))接收用戶輸入并且通過路徑106和存儲器橋105將所述輸入轉(zhuǎn)發(fā)到CPU 102。并行處理子系統(tǒng)112通過總線或其他通信路 徑113 (諸如PCI Express、加速圖形端ロ或超傳輸鏈路)耦合到存儲器橋105 ;在一個實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110 (諸如常見的基于CRT或IXD的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關(guān)116提供I/O橋與諸如網(wǎng)絡(luò)適配器118和各種外插卡(add-in card) 120和121的其他組件之間的連接。其他組件(未明確示出),包括USB或其他端ロ連接、CD驅(qū)動器、DVD驅(qū)動器、膠片錄制設(shè)備及類似組件,也可以連接到I/O橋107。使圖I中各種組件互連的通信路徑可以采用任何適合的協(xié)議來實(shí)現(xiàn),諸如PCI (外部組件互連)、PCI-Express、AGP (加速圖形端ロ )、超傳輸或任何其他總線或者點(diǎn)到點(diǎn)通信協(xié)議,以及不同設(shè)備間的連接可采用本技術(shù)領(lǐng)域已知的不同協(xié)議。在一個實(shí)施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于圖形和視頻處理的電路,所述電路包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另ー個實(shí)施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于通用處理的電路,同時保留底層的(underlying)計(jì)算架構(gòu),本文將詳細(xì)描述。在另ー個實(shí)施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)單元一起集成,例如存儲器橋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è)備通過存儲器橋105以及CPU102與系統(tǒng)存儲器104通信。在其他替代拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU 102,而不是連接到存儲器橋105。在又一些實(shí)施例中,I/O橋107和存儲器橋105可能被集成到單個芯片中。大量實(shí)施例可以包括兩個或多個CPU 102以及兩個或多個并行處理系統(tǒng)112。本文所示的特定部件是可選的,例如,可以支持任意數(shù)量的外插卡或外設(shè)。在一些實(shí)施例中,開關(guān)116被去棹,網(wǎng)絡(luò)適配器118和外插卡120、121直接連接到I/O橋107。圖2示出了根據(jù)本發(fā)明的一個實(shí)施例的并行處理子系統(tǒng)112。如圖所示,并行處理子系統(tǒng)112包括一個或多個并行處理單元(PPU) 202,其每ー個都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,類似對象的多個實(shí)體被表示為標(biāo)識該對象的參考數(shù)字和在需要時標(biāo)識該實(shí)體的括號中的數(shù)字。)PPU 202和并行處理存儲器204可使用ー個或多個集成電路器件來實(shí)現(xiàn),例如可編程處理器、專用集成電路(ASIC)或存儲器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。再參考圖I,在一些實(shí)施例中,并行處理子系統(tǒng)112的ー些或所有PPU202是具有渲染管線的圖形處理器,它可以被配置為執(zhí)行與以下各項(xiàng)相關(guān)的各種任務(wù)JACPU 102和/或系統(tǒng)存儲器104經(jīng)由存儲器橋105和總線113提供的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù);與本地并行處理存儲器204(可被用作圖形存儲器,包括例如常用幀緩沖區(qū)(buffer))交互以存儲和更新像素?cái)?shù)據(jù);傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110 ;等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器來操作的PPU 202以及ー個或多個被用于通用計(jì)算的其他PPU 202。這些PI3U可以是相同的或不同的,并且每個PPU均可具有其自己的專用并行處理存儲設(shè)備或不具有專用的并行處理存儲設(shè)備。ー個或多個PPU 202可輸出數(shù)據(jù)到顯示設(shè)備110或每個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寫命令流到入棧緩沖區(qū)(pushbuffer)中(在圖I或圖2中未明確示出),所述入棧緩沖區(qū)可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU 102和PPU 202都可訪問的其他存儲位置中。PPU 202從入棧緩沖區(qū)讀取該命令流,然后相對CPU102的操作異步地執(zhí)行命令。
現(xiàn)在返回參考圖2,每個PPU 202均包括I/O (輸入/輸出)単元205,其通過連接到存儲器橋105 (或,在一個替代實(shí)施例中,直接連接到CPU102)的通信路徑113與計(jì)算機(jī)系統(tǒng)100的其余部分通信。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í)施例中,PPU 202的ー些或所有元件可以和CPU 102—起集成在單個芯片上。在一個實(shí)施例中,通信路徑113是PCI-Express鏈路,其中給每個PPU202均分配專用的信道,如本技術(shù)領(lǐng)域所已知的。也可使用其他的通信路徑。I/O単元205生成用于在通信路徑113傳送的數(shù)據(jù)包(或其他信號),并且還從通信路徑113接收所有到達(dá)的數(shù)據(jù)包(或其他信號),將到達(dá)的數(shù)據(jù)包引導(dǎo)到PPU 202的適當(dāng)組件。例如,可將與處理任務(wù)有關(guān)的命令引導(dǎo)到主機(jī)接ロ 206,而可將與存儲器操作有關(guān)的命令(例如,對并行處理存儲器204進(jìn)行讀取或?qū)懭?引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接ロ 206讀取每個入棧緩沖區(qū),并且將該入棧緩沖區(qū)所指定的工作輸出到前端212。有利地,每個PPU 202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)所示,PPU 202(0)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC208均能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程都是ー個程序的實(shí)例(instance)。在各種應(yīng)用中,可以分配不同的GPC 208用于處理不同類型的程序或用于執(zhí)行不同類型的計(jì)算。例如,在圖形應(yīng)用中,可分配第一組GPC 208來執(zhí)行曲面細(xì)分(tessellation)操作并產(chǎn)生用于曲面片(patch)的基元(primitive)拓?fù)?,并且可分配第ニ組GPC 208來執(zhí)行曲面細(xì)分著色以評估用于基元拓?fù)涞那嫫瑓?shù),并確定頂點(diǎn)位置和每頂點(diǎn)的其他屬性。依賴于每種類型的程序或計(jì)算所產(chǎn)生的工作量,GPC 208的分配可以改變。GPC 208通過工作分布單元200接收將被執(zhí)行的處理任務(wù),所述工作分布單元200從前端単元212接收定義處理任務(wù)的命令。處理任務(wù)包括將被處理的數(shù)據(jù)的索引,例如,表面(曲面元)數(shù)據(jù)、基元數(shù)據(jù)、頂點(diǎn)數(shù)據(jù)和/或像素?cái)?shù)據(jù),還包括定義如何處理數(shù)據(jù)的命令和狀態(tài)參數(shù)(例如,什么程序?qū)⒈粓?zhí)行)。工作分布單元200可以被配置為取得與這些任務(wù)相對應(yīng)的索引,或者工作分布單元200可以從前端212接收這些索引。前端212確保在由入棧緩沖區(qū)所指定的處理啟動前,將GPC 208配置為有效狀態(tài)。例如,當(dāng)PPU 202被用于圖形處理時,用于每個曲面元的處理工作量被分為幾乎相同大小的任務(wù),以使得曲面細(xì)分處理能夠被分布給多個GPC208。工作分布單元200可被配置為以能夠?yàn)槎鄠€GPC 208提供任務(wù)的頻率產(chǎn)生任務(wù)用于處理。相反,在常規(guī)系統(tǒng)中,一般是由單個處理引擎來執(zhí)行處理,而其他處理引擎則保持空閑,等待該單個處理引擎完成其任務(wù)之后才開始他們的處理任務(wù)。在本發(fā)明的一些實(shí)施例中,各部分GPC 208經(jīng)配置以執(zhí)行不同類型的處理。例如第一部分可被配置為執(zhí)行頂點(diǎn)著色和拓?fù)渖?,第二部分可被配置為?zhí)行曲面細(xì)分和幾何著色,以及第三部分可被配置為執(zhí)行屏幕空間中的像素著色以產(chǎn)生經(jīng)渲染的圖像。由GPC 208產(chǎn)生的中間數(shù)據(jù)可以被存儲在緩沖區(qū)中,以允許該中間數(shù)據(jù)在GPC 208之間傳送用于進(jìn)ー步處理。存儲器接ロ 214包括D個分區(qū)単元215,其每個分區(qū)単元215均耦合到并行處理存儲器204的一部分,其中DS I。如圖所示,分區(qū)215的數(shù)量通常等于DRAM 220的數(shù)量。在其他實(shí)施例中,分區(qū)215的數(shù)量可與存儲器設(shè)備的數(shù)量不同。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,DRAM 220可以由其他合適的存儲設(shè)備所代替,并且可以是一般常規(guī)設(shè)計(jì)。因此在此省略詳細(xì)的描述。渲染目標(biāo),例如幀緩沖區(qū)或紋理映射可以跨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ū)懭搿T谝粋€實(shí)施例中,交叉開關(guān)單元210具有到存儲器接ロ 214的連接以和I/O單元205通信,以及具有到本地并行處理存儲器204的連接,從而使得在不同GPC 208中的處理內(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ì)分著色、頂點(diǎn)著色、幾何著色和/或像素著色程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204傳輸?shù)絻?nèi)部(片上)存儲器,處理所述數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行存儲存儲器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)組件訪問,所述其他系統(tǒng)組件包括CPU 102或另ー個并行處理子系統(tǒng)112。PPU 202可以設(shè)置有任意容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任意組合方式來使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實(shí)施例中,PTO 202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU 202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實(shí)施例中,PPU 202可被集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCI-EXPRESS)的分立芯片被提供,所述高速鏈路通過橋式芯片或其他通信方式將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)核、不同容量的本地并行處理存儲器等等。在出現(xiàn)多個PPU 202的情況下,可并行操作這些PI3U以高于單個PPU 202所可能達(dá)到的呑吐量來處理數(shù)據(jù)。包括ー個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺式電腦、筆記本電腦或手持式個人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等類似設(shè)備。處理集群陣列概述圖3A為根據(jù)本發(fā)明ー個實(shí)施例的,圖2的ー個PPU 202中的GPC208的框圖。每個GPC 208可被配置為以并行方式執(zhí)行大量的線程,其中術(shù)語“線程”是指針對ー組特定輸入數(shù)據(jù)執(zhí)行的特定程序的實(shí)例(instance)。在一些實(shí)施例中,使用單指令多數(shù)據(jù)(SMD)指令發(fā)送技術(shù)來支持大量線程的并行處理,而無需提供多個獨(dú)立的指令単元。在其他實(shí)施例中,使用單指令多線程(SMT)技木,采用經(jīng)配置以向每ー個GPU 208內(nèi)的一組處理引擎發(fā)送指令的共同指令単元,來支持大量通常同步化的線程的并行執(zhí)行。與所有執(zhí)行引擎一般 執(zhí)行相同指令的SMD執(zhí)行機(jī)制不同,SMT執(zhí)行通過給定的線程程序,允許不同線程更容易地跟隨(follow)分散的執(zhí)行路徑。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,SMD處理機(jī)制代表SIMT處理機(jī)制的一個功能子集。通過管線管理器305可以有利地控制GPC 208的操作,所述管線管理器305分布處理任務(wù)給流多處理器(SPM)310。管線管理器305也可以被配置為通過為SPM 310輸出的經(jīng)處理數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。在一個實(shí)施例中,每個GPC208包括M個SPM 310,其中M彡1,每個SPM 310經(jīng)配置以處理ー個或多個線程組。另外,每個SPM 310有利地包括可被管線化的相同的一組功能執(zhí)行單元(例如,算術(shù)邏輯單元和加載-存儲單元,如圖3C中的Exec單元302和LSU 303所示),允許在前ー個指令完成之前發(fā)送新的指令,如本領(lǐng)域所已知的??梢蕴峁┕δ軈g元的任意組合在一個實(shí)施例中,功能単元支持各種操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如,加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、位移(bit-shifting)以及各種代數(shù)函數(shù)計(jì)算(例如,平面插值、三角、指數(shù)、對數(shù)函數(shù)等);并且同一個功能単元硬件可被平衡以執(zhí)行不同的操作。被發(fā)送到特定GPC 208的一系列指令構(gòu)成了ー個線程,如本文前面所定義,并且跨SPM 310中并行處理引擎(未示出)的一定數(shù)量的并發(fā)執(zhí)行的線程的集合在本文中被稱作“卷繞包(warp)”或“線程組”。如本文所使用,“線程組”是指針對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的ー組線程,其中所述組的每個線程都被指定給SPM 310中不同的處理引擎。線程組可以包括少于SPM 310中的處理引擎數(shù)量的線程,在這種情況下,在線程組正在被執(zhí)行的周期期間,一些處理引擎將處于空閑。線程組也可以包括多于SPM 310中的處理引擎數(shù)量的線程,在這種情況下,處理將在連續(xù)的時鐘周期上進(jìn)行。因?yàn)槊總€SPM 310都能并發(fā)地支持高達(dá)G個線程組,由此在任意給定的時間,GPC 208中都可以執(zhí)行高達(dá)GXM個線程組。此外,在SPM 310中同一時間可以激活多個相關(guān)的線程組(在不同的執(zhí)行階段)。這ー線程組的集合在本文中被稱作“協(xié)作線程陣列”(“CTA”)或“線程陣列”。ー個特定CTA的大小等于mXk,其中k是線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SPM 310中并行處理引擎數(shù)量的整數(shù)倍,m是在SPM 310中同時激活的線程組的數(shù)量。通常由編程人員以及CTA可用的諸如存儲器或寄存器的硬件資源的容量,來確定CTA的大小。
每個SPM 310都包括LI高速緩存(未示出)或者使用SPM 310之外的相應(yīng)LI高速緩存中的空間,用于執(zhí)行加載和存儲操作。每個SPM 310也都有權(quán)訪問分區(qū)單元215中的L2高速緩存,所述L2高速緩存在所有GPC 208中間共享并且可以被用于在線程之間傳輸數(shù)據(jù)。最后,SPM 310也有權(quán)訪問片外“全局”存儲器,其可包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應(yīng)該理解,在PPU 202外的任意存儲器都可用作全局存儲器。此夕卜,LI. 5高速緩存335可被包括在GPC 208中,經(jīng)配置以接收和保持由SPM 310所請求的數(shù)據(jù),該數(shù)據(jù)經(jīng)過存儲器接ロ 214從存儲器取得,包括指令、一致性(uniform)數(shù)據(jù)以及常數(shù)數(shù)據(jù),并將所請求的數(shù)據(jù)提供給SPM 310。在GPC 208中具有多個SPM 310的實(shí)施例有益地共享被高速緩存在LI. 5高速緩存335中的共同指令和數(shù)據(jù)。每個GPC208均可包括經(jīng)配置以將虛擬地址映射到物理地址的存儲器管理単元(MMU)328。在其他實(shí)施例中,MMU 328可駐留在存儲器接ロ 214中。MMU 328包括用于將虛擬地址映射到像素塊(tile)的物理地址的ー組頁表?xiàng)l目(PTE),以及可選地包括高速緩存線索引(cache line index)。MMU 328可包括地址轉(zhuǎn)譯后備緩沖區(qū)(TLB)或可駐留在多處理器SPM310或LI高速緩存或GPC 208中的高速緩存。處理所述物理地址以分布接口數(shù)據(jù)訪問位置,從而允許在分區(qū)單元間有效的請求交錯(interleave)。高速緩存線索引可用于確定對聞速緩存線的請求是否命中或未命中。在圖形和計(jì)算應(yīng)用中,GPC 208可被配置為使得使每個SPM 310均耦合到紋理單元315,用于執(zhí)行紋理映射操作,例如確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。從內(nèi)部紋理LI高速緩存(未示出)或者在一些實(shí)施例中從SPM 310中的LI高速緩存讀取紋理數(shù)據(jù),以及當(dāng)需要的時候從L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104取得紋理數(shù)據(jù)。為了提供處理后的任務(wù)給另ー個GPC 208用于進(jìn)一歩的處理,或者為了將處理后的數(shù)據(jù)通過交叉開關(guān)單元210存儲在在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中,姆個SPM 310都輸出處理后的任務(wù)給工作分布交叉開關(guān)330。preROP (pre-rasteroperations,預(yù)光柵操作)325被配置為從SPM 310接收數(shù)據(jù),將數(shù)據(jù)引導(dǎo)至分區(qū)単元215中的ROP単元,并執(zhí)行用于色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)以及執(zhí)行地址轉(zhuǎn)譯。應(yīng)該理解,本文所描述的內(nèi)核架構(gòu)是示例性的,變化和修改都是可能的。GPC 208中可以包括任意數(shù)量的處理單元,諸如SPM 310或紋理單元315、preROP 325。進(jìn)ー步,雖然只示出ー個GPC 208 JSPPU 202可以包括任意數(shù)量的GPC 208,所述GPC 208最好在功能上彼此相似,從而執(zhí)行行為不依賴于哪個GPC 208接收到特定處理任務(wù)。進(jìn)ー步地,每個GPC 208最好使用單獨(dú)的、各異的處理單元、LI高速緩存等,獨(dú)立于其他GPC 208操作。圖3B為根據(jù)本發(fā)明ー個實(shí)施例的,圖2的ー個PPU 202中的分區(qū)單元215的框圖;如圖所示,分區(qū)單元215包括L2高速緩存350、幀緩沖區(qū)(FB)DRAM接ロ 355以及光柵操作單元(ROP) 360。L2高速緩存350是讀/寫高速緩存,其被配置為對從交叉開關(guān)單元210及ROP 360接收的操作執(zhí)行加載和存儲。由L2高速緩存350輸出讀取失敗和緊急回寫請求到FB DRAM接ロ 355用于處理。臟更新也被發(fā)送到FB 355用于伺機(jī)處理。FB 355直接與DRAM 220接ロ,輸出讀和寫請求,并接收從DRAM 220讀取的數(shù)據(jù)。在圖形應(yīng)用中,ROP 360是執(zhí)行光柵操作的處理單元,例如模板(stencil)、z測試、混合以及類似操作,并輸出像素?cái)?shù)據(jù)作為處理后的圖形數(shù)據(jù)用于在圖形存儲器中存儲。在本發(fā)明的一些實(shí)施例中,將ROP 360包括在每個GPC 208中而不是分區(qū)單元215中,并且通過交叉開關(guān)單元210傳送像素讀寫請求而非像素片段數(shù)據(jù)。處理后的圖形數(shù)據(jù)可以在顯示設(shè)備110上顯示,或者被路由用于由CPU 102或由并行處理子系統(tǒng)112中的一個處理實(shí)體來進(jìn)ー步處理。為了分布光柵操作的處理,每個分區(qū)單元215都包括ROP 360。在一些實(shí)施例中,ROP 360可被配置為壓縮寫入存儲器的z數(shù)據(jù)或色彩數(shù)據(jù),以及解壓縮從存儲器中讀取的z數(shù)據(jù)或色彩數(shù)據(jù)。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,圖1、2、3A和3B中描述的架構(gòu)不以任何方式來限制本發(fā)明的范圍,以及在此教導(dǎo)的技術(shù)可以在任意經(jīng)合適配置的處理單元上實(shí)現(xiàn),包括但不限于ー個或多個CPU、一個或多個多內(nèi)核CPU、ー個或多個PPU 202、ー個或多個GPC208、一個或多個圖形或?qū)S锰幚韱卧蝾愃圃O(shè)備,均不超出本發(fā)明的范圍。在本發(fā)明的實(shí)施例中,希望使用PPU 202或計(jì)算系統(tǒng)的其他處理器,采用線程陣 列來執(zhí)行通用計(jì)算。給線程陣列中的每個線程都分配唯一的線程標(biāo)識符(“thread ID”),所述線程標(biāo)識符在該線程執(zhí)行期間可由該線程訪問。線程ID可被定義為ー維或多維數(shù)值,其控制線程處理行為的各個方面。例如,線程ID可用于確定線程處理哪部分輸入數(shù)據(jù)集,和/或確定線程產(chǎn)生或?qū)懭肽牟糠州敵鰯?shù)據(jù)集。每線程的指令序列可包括至少ー個指令,所述指令定義了代表線程與線程陣列中一個或多個其他線程之間的協(xié)作行為。例如,每線程的指令序列可包括以下指令在序列中的特定點(diǎn)將對于代表線程的操作執(zhí)行掛起直到ー個或多個其他線程到達(dá)該特定點(diǎn)時的指令;指示代表線程在一個或多個其他線程有權(quán)訪問的共享存儲器中存儲數(shù)據(jù)的指令;指示代表線程自動地讀取和更新存儲在一個或多個其他線程基于其線程ID有權(quán)訪問的共享存儲器中的數(shù)據(jù)的指令;等等。CTA程序也可包括計(jì)算從其中讀取數(shù)據(jù)的共享存儲器中的地址的指令,該地址為線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術(shù),數(shù)據(jù)可以以可預(yù)測的方式由CTA的一個線程寫入共享存儲器中給定的位置,并且由同一個CTA的不同線程從該位置讀取。因此,可以支持?jǐn)?shù)據(jù)以任意希望的方式共享在線程中,并且CTA中的任意線程都可以和同一個CTA中的任意其他線程共享數(shù)據(jù)。如果在CTA的線程中間共享有數(shù)據(jù),則數(shù)據(jù)共享的程度由CTA程序確定;因此,應(yīng)該理解在使用CTA的特定應(yīng)用中,CTA的線程實(shí)際上可能相互共享數(shù)據(jù)或者可能不共享數(shù)據(jù),這取決于該CTA程序,并且術(shù)語“CTA”和“線程陣列”在本文中同義使用。圖3C為根據(jù)本發(fā)明ー個實(shí)施例的,圖3A中SPM 310的框圖。SPM310包括指令LI高速緩存370,其經(jīng)配置以通過LI. 5高速緩存335接收指令和常數(shù)。warp調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常數(shù),井根據(jù)該指令和常數(shù)控制本地寄存器堆304和SPM 310功能單元。SPM 310的功能單元包括N個exec (執(zhí)行或處理)單元302和P個加載-存儲單元(LSU) 303。SPM 310提供具有不同訪問級別的片上(內(nèi)部)數(shù)據(jù)存儲。專用寄存器(未示出)對于LSU 303讀取可讀但不可寫,并被用于存儲定義每個CTA線程“位置”的參數(shù)。在ー個實(shí)施例中,專用寄存器包括存儲線程ID的每個CTA線程(或SPM 310中每exec單元302)ー個的寄存器;每個線程ID寄存器僅可以由各自的ー個exec単元302訪問。專用寄存器也可包括可由所有CTA線程(或所有LSU 303)讀取的附加寄存器,其存儲CTA標(biāo)識符、CTA維度、CTA所屬柵格(grid)的維度以及CTA所屬柵格的標(biāo)識符。在初始化期間響應(yīng)于通過前端212從設(shè)備驅(qū)動器103所接收的命令對專用寄存器進(jìn)行寫入,并且在CTA執(zhí)行期間專用寄存器不改變。參數(shù)存儲器(未示出)對于任意CTA線程(或任意LSU 303)可讀但不可寫,其存儲執(zhí)行時間參數(shù)(常數(shù))。在一個實(shí)施例中,設(shè)備驅(qū)動器103在引導(dǎo)SPM 310開始執(zhí)行采用這些參數(shù)的CTA之前,提供參數(shù)給所述參數(shù)存儲器。任意CTA (或SPM 310中的任意exec単元302)中的任意CTA線程可通過存儲器接ロ 214訪問全局存儲器。全局存儲器的一部分可存儲在LI高速緩存320中。本地寄存器堆304可由姆個CTA用作臨時空間(scratch space);姆一個寄存器被分配給ー個線程專用,并且在任意一個本地寄存器堆304中的數(shù)據(jù)僅可由其被分配到的CTA線程所訪問。本地寄存器堆304可作為被物理地或邏輯地分為P個通道的寄存器堆實(shí)現(xiàn),每個通道具有一定數(shù)量的條目(其中每個條目可能存儲諸如32位字長)。為N個exec 単元302以及P個加載-存儲單元LSU 303的每ー個都分配ー個通道,并且不同通道中的相應(yīng)條目可填充用于執(zhí)行同一個程序的不同線程的數(shù)據(jù),以有助于SIMD執(zhí)行。通道的不同部分可被分配給G個并發(fā)線程組中的不同線程組,從而使本地寄存器堆304中給定的條目僅可由特定線程訪問。在一個實(shí)施例中,本地將寄存器堆304中的某些條目被保留用于存儲線程標(biāo)識符,實(shí)現(xiàn)ー個專用寄存器。共享存儲器306可由(在單個CTA中的)所有CTA線程訪問;共享存儲器306的任意位置都可由統(tǒng)ー CTA (或SPM 310中的任意處理引擎)中的任意CTA線程訪問。共享存儲器306可作為共享寄存器堆或共享片上高速緩存存儲器實(shí)現(xiàn),該共享片上高速緩存存儲器具有允許任意處理引擎對共享存儲器中任意位置進(jìn)行讀或?qū)懙幕ミB。在其他實(shí)施例中,共享狀態(tài)空間可映射到片外存儲器的每CAT上,并且被高速緩存在LI高速緩存320中。參數(shù)存儲器可作為同一個共享寄存器堆或?qū)崿F(xiàn)共享存儲器306的共享高速緩存存儲器中的指定部分實(shí)現(xiàn),或作為單獨(dú)的共享寄存器堆或LSU303對其具有只讀訪問權(quán)限的片上高速緩存存儲器實(shí)現(xiàn)。在一個實(shí)施例中,實(shí)現(xiàn)參數(shù)存儲器的區(qū)域也被用于存儲CTA ID和柵格ID以及存儲CTA和柵格的尺寸,實(shí)現(xiàn)專用寄存器的一部分。SPM 310中的每個LSU 303均可耦合到統(tǒng)一地址映射単元352,其將為在統(tǒng)一存儲器空間中指定的加載和存儲指令所提供的地址轉(zhuǎn)換為在每個各異的存儲器空間中的地址。因此,通過在統(tǒng)一存儲器空間中指定地址,指令可用于訪問任意本地、共享或全局存儲器空間。每個SPM 310中的LI高速緩存320可被用于高速緩存私有的每線程本地?cái)?shù)據(jù)和每應(yīng)用程序的全局?jǐn)?shù)據(jù)。在一些實(shí)施例中,可以在LI高速緩存320中高速緩存該CTA的共享數(shù)據(jù)。通過存儲器和高速緩存的互連380,LSU 303耦合到一致性LI高速緩存375、共享存儲器306和LI高速緩存320。所述一致性LI高速緩存375經(jīng)配置以通過LI. 5高速緩存335從存儲器接收只讀數(shù)據(jù)和常數(shù)。圖4為根據(jù)本發(fā)明ー個實(shí)施例的,由圖2中ー個或多個PPU 202經(jīng)配置以實(shí)現(xiàn)的圖形處理管線400的示意圖。例如,ー個SPM 310可經(jīng)配置以執(zhí)行頂點(diǎn)處理單元415、幾何處理單元425以及片段處理單元460中一個或多個的功能。數(shù)據(jù)匯編器410、基元匯編器420、光柵化器455以及光柵操作單元465的功能也可以由GPC 208和相應(yīng)的分區(qū)單元215中的其他處理引擎執(zhí)行。作為替代地,圖形處理管線400可采用用于ー個或多個功能的專用處理單元來實(shí)現(xiàn)。
數(shù)據(jù)匯編器410處理單元為高位表面、基元等采集頂點(diǎn)數(shù)據(jù),并輸出包括頂點(diǎn)屬性的頂點(diǎn)數(shù)據(jù)到頂點(diǎn)處理單元415。頂點(diǎn)處理單元415是經(jīng)配置以執(zhí)行頂點(diǎn)著色程序的可編程執(zhí)行単元,根據(jù)頂點(diǎn)著色程序指定,照亮(lighting)和變換頂點(diǎn)數(shù)據(jù)。例如,頂點(diǎn)處理単元415可被編程以將頂點(diǎn)數(shù)據(jù)從基于對象的坐標(biāo)表示(對象空間)變換到替代的諸如世界空間或標(biāo)準(zhǔn)化設(shè)備坐標(biāo)(NDC)空間的基礎(chǔ)坐標(biāo)系統(tǒng)。頂點(diǎn)處理單元415可讀取由數(shù)據(jù)匯編器410存儲在LI高速緩存320、并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù),用于在處理頂點(diǎn)數(shù)據(jù)中使用?;獏R編器420從頂點(diǎn)處理單元415接收頂點(diǎn)屬性,按需讀取所存儲的頂點(diǎn)屬性,并且構(gòu)件用于由幾何處理單元425處理的圖形基元。圖形基元包括三角形、線段、點(diǎn)等。幾何處理單元425是經(jīng)配置以執(zhí)行幾何著色程序的可編程處理單元,根據(jù)幾何著色程序的指定變換從基元匯編器420接收的圖形基元。例如,幾何處理單元425可被編程為將圖形基元再分為ー個或多個新的圖形基元,并計(jì)算用于光柵化所述新的圖形基元的參數(shù),例如平面方程系數(shù)。在一些實(shí)施例中,幾何處理單元425也可増加或刪除幾何流中的元素。幾何處理単元425輸出指定新的圖形基元的參數(shù)和頂點(diǎn)到視圖縮放、剔除(cull)和裁剪(clip)單元450。幾何處理單元425可讀取存儲在并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù),用于在處理所述幾何數(shù)據(jù)中使用。視圖縮放、剔除(cull)和裁剪単元450執(zhí)行剪裁、剔除以及視圖縮放,并輸出處理后的圖形基元到光柵化器455。光柵化器455掃描轉(zhuǎn)換所述新的圖形基元,并輸出片段和覆蓋數(shù)據(jù)到片段處理單元460。此外,光柵化器455可經(jīng)配置以執(zhí)行z剔除和其他基于z的優(yōu)化。片段處理單元460是經(jīng)配置以執(zhí)行片段著色程序的可編程執(zhí)行単元,其根據(jù)片段著色程序的指定,變換從光柵化器455接收的片段。例如,片段處理單元460可被編程為執(zhí)行諸如透視校正、紋理映射、著色、混合等操作,以產(chǎn)生輸出到光柵操作単元465的著色片段。片段處理單元460可讀取存儲在并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù),用于在處理所述片段數(shù)據(jù)中使用。依賴于所編程的采樣率,可以以像素、采樣或其他粒度對片段進(jìn)行著色。光柵操作単元465是執(zhí)行諸如模板、z測試、混合等操作的處理單元,并輸出像素?cái)?shù)據(jù)作為處理后的圖形數(shù)據(jù),用于存儲在圖形存儲器中。處理后的圖形數(shù)據(jù)可被存儲在諸如并行處理存儲器204和/或系統(tǒng)存儲器104的圖形存儲器中,用于在顯示設(shè)備110上顯示或由CPU 102或并行處理子系統(tǒng)112進(jìn)ー步處理。在本發(fā)明的一些實(shí)施例中,光柵操作単元465經(jīng)配置以壓縮被寫入存儲器中的z數(shù)據(jù)或色彩數(shù)據(jù),以及解壓縮從存儲器中讀出的z數(shù)據(jù)或色彩數(shù)據(jù)。陷阱處理器架構(gòu)圖5為根據(jù)本發(fā)明一個實(shí)施例的,包括陷阱處理器控制器的SPM架構(gòu)的框圖。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,圖5中僅描述了通常與實(shí)現(xiàn)陷阱處理器功能相關(guān)的組件,圖5 是SPM架構(gòu)的簡化框圖,并不是SPM架構(gòu)的所有邏輯組件都必須在此加以描述(例如,預(yù)取指令緩沖區(qū)、高速緩存、共享存儲器等)。例如,應(yīng)該理解,圖5可以被認(rèn)為是圖3C的簡化版或替代實(shí)施例,與圖3C的實(shí)施例相比包括較少的細(xì)節(jié),以及圖5和圖3C中的各種組件可以被相容地結(jié)合或組合在實(shí)際的SPM架構(gòu)中。
如圖5的實(shí)施例中所描述,圖3A的SPM 310的SPM控制器500包括,當(dāng)在特定時間點(diǎn)為特定線程組執(zhí)行計(jì)算機(jī)程序指令時,用于SPM 310的取得-解碼-執(zhí)行(fetch-decode-execute)周期的集成電路邏輯。SPM控制器500也包括陷講處理器控制器505,其包括集成電路邏輯以處理在計(jì)算機(jī)程序流期間發(fā)生的中斷和異常。SPM控制器500與線程組調(diào)度器510通信,以確定在特定時間點(diǎn)分配SPM 310的計(jì)算資源給若干線程組中的哪個線程組(例如,根據(jù)由線程組調(diào)度器510設(shè)置的ー些優(yōu)先級,SPM控制器500將SPM310的計(jì)算資源在各種其支持的線程組中進(jìn)行時間切分)。當(dāng)線程組調(diào)度器510確定特定線程組有權(quán)訪問SPM 310資源時,將由程序計(jì)數(shù)器513指出的計(jì)算機(jī)程序指令512從存儲器520 (例如,在某些實(shí)施例中的并行 處理存儲器204等)的代碼段515 (即,用于正在被該線程組執(zhí)行的特定計(jì)算機(jī)程序)中取得,并且放入SPM 310的指令緩沖區(qū)525中,用于解碼和執(zhí)行(并且隨后程序計(jì)數(shù)器513遞增)。如前所述,特定線程組中的每個線程都同時執(zhí)行指令緩沖區(qū)525中的指令,每個線程都利用寄存器堆530中可用的任何所必要的寄存器,以及每個線程都分配有并行執(zhí)行資源單元535的ー個ALU/FPU (算木邏輯單元/浮點(diǎn)単元)計(jì)算單元540 (X),以執(zhí)行與該指令相關(guān)聯(lián)的必要的計(jì)算。例如,如圖5的實(shí)施例所述,SPM310可支持線程組中多達(dá)32個不同的同時執(zhí)行的線程,這是由于并行執(zhí)行資源単元535包括32個單獨(dú)的計(jì)算單元540 (x)。正如本技術(shù)領(lǐng)域的技術(shù)人員所應(yīng)當(dāng)了解的,為了在計(jì)算機(jī)程序執(zhí)行期間存儲狀態(tài)信息(例如,本地變量、臨時的信息,等等),存儲器520的線程組程序堆棧545被分配給正由該線程組執(zhí)行的計(jì)算機(jī)程序,并且在該計(jì)算機(jī)程序執(zhí)行流程期間按需要相應(yīng)擴(kuò)大或縮小。寄存器堆530進(jìn)ー步包括根據(jù)異常或中斷的發(fā)生,由陷阱處理器控制器505所使用的專用寄存器。寄存器堆530包括錯誤狀態(tài)寄存器(ESR) 550,該錯誤狀態(tài)寄存器550由陷阱處理器控制器505使用以指示所發(fā)生的異?;蛑袛嗟念愋?。在某些實(shí)施例中,ESR 550是SPM 310的唯一的ESR寄存器,并且在所有線程組(如下面進(jìn)ー步描述)中共享。線程組ID寄存器560由陷阱器處理器505使用,以存儲導(dǎo)致該中斷或者異常的線程組的識別號或者與該中斷或異常相關(guān)聯(lián)的其他方面。以及,陷阱處理器地址寄存器565包括陷阱處理器代碼段570在存儲器520中的存儲器地址。陷阱處理器代碼段570進(jìn)ー步被分為代碼子段,每個子段均包括指令以處理不同類型的異?;蛑袛?。例如,如所述,陷阱處理器代碼段包括代碼子段572,以支持對GPU中的某些系統(tǒng)調(diào)用(例如malloc (),分配附加的GPU存儲器用于在SPM 310中運(yùn)行的計(jì)算機(jī)程序)進(jìn)行處理;包括代碼子段574以處理主機(jī)CPU中斷,例如,用于調(diào)試目的;以及包括代碼子段576以處理計(jì)算機(jī)程序流程執(zhí)行期間的處理器異常(例如,錯誤的存儲器地址,等等)。應(yīng)該理解,根據(jù)本文的教導(dǎo),陷阱處理器代碼段570中可以包括任意數(shù)量的附加的或可替換的代碼子段,以處理各種異?;蛑袛鄨鼍啊_@種附加的異常或中斷場景可包括,例如,處理SPM內(nèi)異常、GPU負(fù)載的環(huán)境切換、糾錯代碼(ECC)錯誤處理以及超時條件。圖6為根據(jù)本發(fā)明ー個實(shí)施例的,用于由陷阱處理器控制器處理異?;蛑袛嗟姆椒ú襟E流程圖。雖然結(jié)合圖I到5來描述所述方法步驟,但本技術(shù)領(lǐng)域技術(shù)人員應(yīng)該理解,被配置以任意順序執(zhí)行所述方法步驟的任意系統(tǒng)都包括在本發(fā)明的范圍內(nèi)。為了最小化每個SPM的線程組的設(shè)計(jì)復(fù)雜度和驗(yàn)證工作,SPM遵循圖6的流程來處理異?;蛑袛?,其強(qiáng)制執(zhí)行以下特性其所有線程組或者都在他們各自的代碼段515內(nèi)執(zhí)行或者都在陷阱處理器代碼段570中執(zhí)行。在步驟600中,向陷阱處理器控制器505通知當(dāng)前正在執(zhí)行的線程組的特定線程遇到異常(或中斷發(fā)生,根據(jù)具體情況),例如,由于在ー個ALU/FPU計(jì)算單元540(x)中進(jìn)行計(jì)算期間訪問錯誤的存儲器地址。在步驟605,根據(jù)正被通知的異常,陷阱處理器控制器505停止對SPM 310的所有線程組取得指令,以及在步驟610,等待每個線程組中所有的當(dāng)前管線化的指令流出或者以其他方式完成。在步驟615,陷阱處理器控制器505將與每個線程組的程序執(zhí)行狀態(tài)相關(guān)的某些狀態(tài)信息(例如,當(dāng)前程序計(jì)數(shù)器513的值、代碼段515的地址或其他狀態(tài)寄存器等)推入每個線程組各自的程序堆棧545,以保持(preserve)該線程組的執(zhí)行狀態(tài)。在步驟620,陷阱處理器控制器505設(shè)置或者不然的話確保ESR550被正確更新以反映異常的原因,并且在步驟625,設(shè)置或者不然的話確保生成該異常的線程組的標(biāo)識號在線程組ID寄存器560中被正確地反映。在步驟630,對于每個線程組,陷阱處理器控制器505使得器計(jì)數(shù)器513來包括在陷阱處理器地址565中發(fā)現(xiàn)的地址,從而使每個線程組隨后在步驟635中進(jìn)入陷阱處理器代碼段570。在步驟650,當(dāng)每個線程組進(jìn)入陷阱代碼處理器代碼段570時,其首先遇到讀取ESR寄存器的指令。當(dāng)處理該ESR讀取指令時,在步驟655中,陷阱處理器控制器505確定執(zhí)行該ESR讀取指令的當(dāng)前線程組的線程組ID是否與在步驟625中被設(shè)置在線程組ID寄存器560中的線程ID相同。如果線程組不同,在步驟660,陷阱處理器控制器505返回空(null)或清空ESR值,以指示當(dāng)前線程組沒有遇到異?;蛘咧袛?,并且因此可以退出或者不然的話從陷阱處理器代碼段570(在圖7中進(jìn)ー步描述)轉(zhuǎn)回。如果該線程組匹配,那么在步驟665,陷阱處理器控制器返回在步驟620中存儲在ESR寄存器550中的ESR值。如在圖6中進(jìn)ー步所描述,在陷阱處理器代碼段570的執(zhí)行期間,取決于發(fā)生的異?;蛑袛嗟念愋停總€線程組可能遇到如步驟670和680中分別所示的PAUSE (暫停)指令或RETURN (返回)指令(或者其等價(jià)指令)。例如,某些類型的異?;蛑袛嗫赡芑旧闲枰c主機(jī)CPU通信來處理。例如,作為用戶對程序執(zhí)行流程進(jìn)行附加調(diào)試(例如,在調(diào)試會話中使用“ cntrl-c”命令以停止(halt)和檢查程序執(zhí)行狀態(tài))的結(jié)果,為了處理主機(jī)CPU中斷,主機(jī)CPU可向?qū)е孪鄳?yīng)的線程組到達(dá)陷阱處理器代碼段570的子段代碼574中發(fā)送中斷。該子段代碼可包括指令來獲取和存儲與該線程組相關(guān)聯(lián)的某些狀態(tài)信息(例如,用于調(diào)試目的),并且包括PAUSE指令,其通過發(fā)回中斷給主機(jī)CPU來通知該CPU準(zhǔn)備使用狀態(tài)信息,從而產(chǎn)生對主機(jī)CPU的返回控制,如步驟675。在步驟675,一旦該中斷提交到主機(jī)CPU,則在步驟685陷阱處理器控制器停止該線程組的執(zhí)行。執(zhí)行PAUSE的線程組保持停止?fàn)顟B(tài),直到該主機(jī)CPU明確地命令其重新開始執(zhí)行。作為替代地,陷阱處理器代碼段570執(zhí)行的子段代碼可包括不需要借助干與主機(jī)CPU的通信而使SPM 310能夠處理異?;蛑袛嗟闹噶?。在這種情況下,基本上該子段代碼將包括RETURN指令(在用于處理異常或中斷的任意其他指令之后),該指令同樣導(dǎo)致在步驟685,陷阱處理器控制器505停止線程組的執(zhí)行。一旦在步驟690中確定SPM 310的所有線程組已經(jīng)執(zhí)行RETURN或PAUSE指令,那么在步驟695,陷阱處理器控制器505允許執(zhí)行RETURN的線程組返回其各自的代碼段515。圖7為根據(jù)本發(fā)明ー個實(shí)施例的,陷阱處理器代碼段的流程圖。雖然結(jié)合圖I至5來描述陷阱處理器代碼段的流程,本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,被配置以任何順序執(zhí)行這些步驟的任何系統(tǒng)都包括在本發(fā)明的范圍內(nèi)。應(yīng)該理解,圖7是對圖6中步驟640的、更詳細(xì) 的描述。如之前圍繞圖6中所討論的,在步驟700,每個運(yùn)行陷阱處理器代碼段570的線程組都首先讀取它的ESR寄存器。在一個實(shí)施例中,陷阱處理器控制器505表現(xiàn)為每個線程組都具有它自己的專用ESR寄存器,雖然線程組可能正使用単一的ESR寄存器550,并且使用在圖6的步驟655-665中所描述的邏輯來實(shí)現(xiàn)這ー表象。在步驟705,如果讀取指令的返回值為空或清空(指示當(dāng)前線程組沒有經(jīng)歷實(shí)際的異?;蛑袛?,那么在步驟710,陷阱處理器代碼段570可包括將線程組返回其代碼段515的RETURN指令。然而,如果ESR讀指令返回了值,那么在步驟715,基于該返回的值確定異?;蛑袛嗟念愋?,并且在步驟720,指令流分支轉(zhuǎn)移或跳轉(zhuǎn)到陷阱處理器代碼段570的適當(dāng)?shù)淖佣未a。如步驟725所述,子段代碼可包括各種指令以處理異?;蛑袛?,例如,將數(shù)據(jù)保存到CPU可訪問的存儲器、從存儲器恢復(fù)數(shù)據(jù)、執(zhí)行PAUSE以及向主機(jī)CPU提交中斷、處理和清空任何錯誤條件和/或返回到程序代碼段(例如,RETURN指令)。雖然上面的描述針對的是本發(fā)明的實(shí)施例,但由此可設(shè)計(jì)不脫離基本范圍的本發(fā)明的其他實(shí)施例。例如,如本文所描述的GPU的某些實(shí)施例提供這樣ー種能力,避免正在執(zhí)行同一個程序塊的SPM并發(fā)執(zhí)行線程組之間的死鎖(deadlock)。例如,這種同時執(zhí)行的線程組可以彼此阻止對共享存儲器中的同一個全局變量進(jìn)行操作,或者反過來由于無序執(zhí)行導(dǎo)致對這種全局變量造成數(shù)據(jù)損壞。同樣,將指令(稱作屏障(barrier)或syncthreads ())暴露給開發(fā)者,使他們能將代碼劃分為段,以跨這些同步執(zhí)行的線程組來對共享存儲器操作強(qiáng)制進(jìn)行順序約束。這種屏障確保在同步屏障之后的任意共享存儲器參量之前,完成所有先于同步屏障指令發(fā)生的共享存儲器參量。在線程組中遇到同步屏障指令的SPM將停止為該線程組取得指令,并且在繼續(xù)所有線程組的執(zhí)行之前,等待所有其他相關(guān)的線程組到達(dá)它們相應(yīng)的同步屏障指令。然而,如果SPM的ー個(可能不相關(guān)的)線程組遇到異常,則正在等待同步屏障指令的線程組們?yōu)榱死^續(xù)其執(zhí)行流程(即,乃至陷阱處理器代碼段)可能無法完成同步屏障指令,這是因?yàn)橛捎谒龅降漠惓?,使其他已?jīng)在等待的線程組在到達(dá)步驟605之前可能無法到達(dá)他們相應(yīng)的同步屏障指令。同樣,為了避免上述情況(即,某些線程被無期限地停止在同步屏障指令,并且不能夠進(jìn)入陷阱處理器代碼段),對于圖6的流程來說ー個替代實(shí)施例是在步驟610之后首先識別線程是否正在等待同步屏障指令,并且在步驟615之前展開(unwind)或者反之回滾(roll back)該同步屏障指令,從而,這ー線程組將能夠在步驟635中自由進(jìn)入陷阱處理器代碼段(即,它將不再等待該同步屏障指令,而是將會完成之前的指令,從而能夠移動到陷阱處理器代碼段)??蛇x實(shí)施例可包括附加特征。例如,一個可選的實(shí)施例可以使中斷的發(fā)生能夠廣播給GPU上的所有其他SM,從而其他SPM如果需要的話能夠可選地設(shè)置陷阱??鏢M或跨GPU對所有線程組設(shè)置陷阱通常是有用的,這是因?yàn)樵贕PU類型的并行計(jì)算中線程組一般都緊密耦合。另ー個可選實(shí)施例除了每個SPM的ESR 550之外,可使用向GPU中所有SM進(jìn)行中斷通知的附加的全局ESR。某些中斷,例如外部主機(jī)CPU中斷,為了觸發(fā)對GPU中所有SM進(jìn)行通知,可被分類為全局中斷并由此使用全局ESR。在這樣的實(shí)施例中,在陷阱處理器代碼段如圖7的步驟710所示使線程組能夠返回到該線程組的代碼段之前,兩類ESR都需要返回空或清空值。如本文所述的陷阱處理器架構(gòu)的其他實(shí)施例可包括附加特征,例如,當(dāng)在陷阱處理器中執(zhí)行時使某些異常失效的能力,支持有效的和任意的代碼插入的向量表,陷阱處理器和向量表的動態(tài)綁定,以及調(diào)試器“單步”模式的硬件實(shí)現(xiàn)。例如,當(dāng)使能調(diào)試器單步模式時,在對所有符合條件的線程組設(shè)置陷阱之前,SPM從每個符合條件的線程組中取得和執(zhí)行單個指令。由于該調(diào)試器軟件不需要在每個步驟重復(fù)地插入并且隨后替換斷點(diǎn)(breakpoint)指令,因此這種實(shí)現(xiàn)方式產(chǎn)生更有效的單步實(shí)現(xiàn)。其他可選的實(shí)施例可在執(zhí)行于陷阱處理器中時,使超范圍(out-of-range)寄存器異常無效,因此允許不同的并發(fā)運(yùn)行進(jìn)程分配不同數(shù)量的本地每線程寄存器,但共享相同的陷阱處理器。在陷阱處理器中使超范圍寄存器異常無效,允許該陷阱處理器讀取所有架構(gòu)上可訪問的寄存器,而無需識別所分配的寄存器的真實(shí)數(shù)量。另ー個可選實(shí)施例可包括由特定分支指令所針對的矢量表。通過外部可見的存儲器映射寄存器來動態(tài)綁定矢量表基址(base address),所述外部可見的存儲器映射寄存器允許在進(jìn)程已經(jīng)開始執(zhí)行后構(gòu)建任意矢量表。矢量表和分支轉(zhuǎn)移指令使得能夠有效插入任意指令序列,例如,用于陷阱條件的求值 (例如,條件斷點(diǎn))。分支轉(zhuǎn)移指令充當(dāng)對跟隨該分支轉(zhuǎn)移指令的指令的函數(shù)調(diào)用,隨后的函數(shù)返回指令返回進(jìn)程的控制流程。和分支指令矢量表一祥,還可以通過存儲器映射寄存器來動態(tài)綁定陷阱處理器自身的存儲器地址,使調(diào)試器能夠動態(tài)附加到在GPU上運(yùn)行的進(jìn)程中。此外,應(yīng)該理解,在某些實(shí)施例中陷阱處理器代碼段的內(nèi)容是可編程的,并且可被動態(tài)地更新,例如,通過固件升級和類似方法。本發(fā)明的一個實(shí)施例可以實(shí)現(xiàn)為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。程序產(chǎn)品的程序?qū)?shí)施例的功能(包括在此描述的方法)進(jìn)行定義,并且能夠被包含在各種各樣的計(jì)算機(jī)可讀存儲介質(zhì)內(nèi)。示例性的計(jì)算機(jī)可讀存儲介質(zhì)包括但不限于(i)信息在其上永久保存的非可寫存儲介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲裝置,如可被CD-ROM驅(qū)動器讀出的CD-ROM盤、閃存、ROM芯片或者任意類型的固態(tài)非易失性半導(dǎo)體存儲器);以及(ii)其上存儲有可改變的信息的可寫存儲介質(zhì)(例如,軟盤驅(qū)動器內(nèi)的軟盤或硬盤驅(qū)動器或任意類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲器)。以上參考具體實(shí)施例對本發(fā)明進(jìn)行描述。然而,本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,在不脫離如所附權(quán)利要求所述的本發(fā)明的較寬范圍和精神的情況下可對其進(jìn)行各種修改和變化。相應(yīng)地,前面的描述和附圖是示例性的,而不具有限制意義。
權(quán)利要求
1.ー種用于處理干擾事件的方法,所述干擾事件在并行處理子系統(tǒng)的多處理器內(nèi)的第ー線程組執(zhí)行期間發(fā)生,所述并行處理子系統(tǒng)駐留在計(jì)算機(jī)系統(tǒng)內(nèi),所述方法包括 接收所述干擾事件的通知; 停止執(zhí)行在所述多處理器內(nèi)的所有線程組的執(zhí)行; 設(shè)置錯誤狀態(tài)寄存器以指示所述干擾事件的類型;以及, 為每個線程組設(shè)置程序計(jì)數(shù)器,以指出陷阱處理器代碼段的存儲器地址,所述陷阱處理器代碼段包括配置所述多處理器來處理所述干擾事件的軟件例程。
2.根據(jù)權(quán)利要求I所述的方法,其中所述停止所有線程組的執(zhí)行的步驟包括,等待被管線化用于由執(zhí)行在所述多處理器中的所有線程組執(zhí)行的所有指令完成。
3.根據(jù)權(quán)利要求I所述的方法,其中所述停止所有線程組的執(zhí)行的步驟包括,在執(zhí)行期間維持足夠的所述多處理器的狀態(tài),以便回滾所有被管線化用于執(zhí)行的指令。
4.根據(jù)權(quán)利要求I所述的方法,其中從包括由所述線程組的第一線程所生成的異常和由所述第一線程組的執(zhí)行而外部生成的中斷的組中選擇所述干擾事件。
5.根據(jù)權(quán)利要求I所述的方法,其中與執(zhí)行在所述多處理器內(nèi)的每個線程組相關(guān)聯(lián)的線程并發(fā)執(zhí)行,并且在所述多處理器中給所述線程組分配時間片。
6.根據(jù)權(quán)利要求I所述的方法,進(jìn)ー步包括以下步驟 確定所述第一線程組正執(zhí)行在所述陷阱處理器代碼段中; 響應(yīng)于所述陷阱處理器代碼段中的讀取所述錯誤狀態(tài)寄存器的指令,提供所述錯誤狀態(tài)寄存器中的值;以及 執(zhí)行所述陷阱處理器代碼段的子段中的指令來處理所述干擾事件。
7.根據(jù)權(quán)利要求I所述的方法,進(jìn)ー步包括以下步驟 識別在同步屏障指令處正在等待至少ー個其他線程組的第二線程組;以及 由所述第二線程組展開所述同步屏障指令的執(zhí)行,以使所述第二線程組便于進(jìn)入所述陷阱處理器代碼段。
8.一種圖形處理單元(GPU),經(jīng)配置以處理干擾事件,所述干擾事件在所述GPU的多處理器內(nèi)的第一線程組執(zhí)行期間發(fā)生,所述GPU包括 陷阱處理器控制器,經(jīng)配置以執(zhí)行以下步驟接收所述干擾事件的通知;停止執(zhí)行在所述多處理器內(nèi)的所有線程組的執(zhí)行;設(shè)置錯誤狀態(tài)寄存器以指示所述干擾事件的類型;以及,為每個線程組設(shè)置程序計(jì)數(shù)器,以指出陷阱處理器代碼段的存儲器地址,所述陷阱處理器代碼段包括配置所述多處理器來處理所述干擾事件的軟件例程;以及 包括所述陷阱處理器代碼段的存儲器単元,所述陷阱處理器代碼段包含當(dāng)由所述多處理器執(zhí)行時,執(zhí)行以下步驟的指令請求所述錯誤狀態(tài)寄存器的值;分支轉(zhuǎn)移到所述陷阱處理器代碼段中的子段,所述子段包括用于尋址所述干擾事件的類型的指令;以及,執(zhí)行所述陷阱處理器代碼段的所述子段中的指令以處理所述干擾事件。
9.根據(jù)權(quán)利要求8所述的GPU,其中所述陷阱處理器控制器進(jìn)ー步經(jīng)配置以執(zhí)行以下步驟確定所述第一線程組正執(zhí)行在所述陷阱處理器代碼段中;響應(yīng)于所述陷阱處理器代碼段中的讀取所述錯誤狀態(tài)寄存器的指令,提供所述錯誤狀態(tài)寄存器中的值;以及,執(zhí)行所述陷阱處理器代碼段的子段中的指令來處理所述干擾事件。
10.根據(jù)權(quán)利要求8所述的GPU,其中所述執(zhí)行所述陷阱處理器代碼段的所述子段中的指令的步驟包括,執(zhí)行指令以傳送中斷到駐留在所述計(jì)算機(jī)系統(tǒng)中的主機(jī)CPU,以通知所述主機(jī)CPU所述干擾事件。
11.根據(jù)權(quán)利要求8所述的GPU,其中所述陷阱處理器控制器進(jìn)ー步經(jīng)配置以執(zhí)行以下步驟等待執(zhí)行在所述多處理器中的其他線程組中的每ー者完成在所述陷阱處理器代碼中的執(zhí)行或者產(chǎn)生到駐留在所述計(jì)算機(jī)系統(tǒng)中的主機(jī)CPU的執(zhí)行流程;以及,在遇到所述干擾事件之前返回所述第一線程組的代碼段。
12.根據(jù)權(quán)利要求9所述的GPU,其中所述陷阱處理器控制器進(jìn)ー步經(jīng)配置以執(zhí)行以下步驟識別在同步屏蔽指令處正在等待至少ー個其他線程組的第二線程組;以及,由所述第二線程組展開所述同步屏蔽指令的執(zhí)行,以使所述第二線程組便于進(jìn)入所述陷阱處理器代碼段。
13.根據(jù)權(quán)利要求9所述的GPU,其中從包括由所述線程組的第一線程所生成的異常和由所述第一線程組的執(zhí)行而外部生成的中斷的組中選擇所述干擾事件。
14.根據(jù)權(quán)利要求9所述的GPU,其中與執(zhí)行在所述多處理器內(nèi)的每個線程組相關(guān)聯(lián)的線程并發(fā)執(zhí)行,并且在所述多處理器中給所述線程組分配時間片。
15.根據(jù)權(quán)利要求9所述的GPU,進(jìn)ー步包括寄存器堆,所述寄存器堆包括所述錯誤狀態(tài)寄存器、所述程序計(jì)數(shù)器、用于存儲所述陷阱處理器代碼段的存儲器地址的寄存器以及用于存儲所述第一線程組的標(biāo)識的寄存器。
全文摘要
將陷阱處理器架構(gòu)結(jié)合到諸如GPU的并行處理子系統(tǒng)中。該陷阱處理器架構(gòu)通過強(qiáng)制實(shí)行以下特性來為并發(fā)執(zhí)行線程最小化設(shè)計(jì)復(fù)雜度和驗(yàn)證工作與流多處理器相關(guān)聯(lián)的所有線程組或者全部執(zhí)行在它們各自的代碼段內(nèi),或者全部執(zhí)行在在陷阱處理器代碼段內(nèi)。
文檔編號G06F7/38GK102648449SQ201080054127
公開日2012年8月22日 申請日期2010年9月28日 優(yōu)先權(quán)日2009年9月29日
發(fā)明者丹尼爾·薩利納斯, 史蒂文·J·海因里希, 尼古拉斯·王, 布雷特·W·庫恩, 明·休, 杰克·夏高特, 湯米·索恩, 米歇爾·C·施巴諾, 約翰·R·尼科爾斯, 阿拉賓得·卡拉恩 申請人:輝達(dá)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1