專利名稱:用于并行處理器的高效斷言執(zhí)行的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及并行處理領(lǐng)域,并且,更具體地,涉及用于并行處理器的高效斷言(predicated)執(zhí)行。
背景技術(shù):
斷言執(zhí)行是用于有條件地執(zhí)行單獨(dú)的指令操作的機(jī)制,典型地,通過有條件地提交或忽略執(zhí)行指令的結(jié)果,從而為條件分支轉(zhuǎn)移(branch)提供選擇。在并行處理器中,例如其中并行的線程或數(shù)據(jù)通道組執(zhí)行共同的指令流的單指令多線程(SMT)和SMD并行處理器,每個線程或數(shù)據(jù)通道中的斷言執(zhí)行能夠極大地提高其中線程組的每個線程可獨(dú)立使用不同的執(zhí)行路徑的分散的分支轉(zhuǎn)移代碼的性能。在現(xiàn)有的并行處理器設(shè)計中,每個線程或數(shù)據(jù)通道中的斷言執(zhí)行均采用一組4位(bit)的條件碼(CC)寄存器用于每個線程或通道實(shí)例(instance),并且指令具有包括若干指令位來選擇一個CC寄存器以及附加位以編碼比較條件的保護(hù)(guard);只有針對該線程或通道的條件求值為真(True),保護(hù)指令才會提交它的針對線程或者通道的結(jié)果,否則無效。此外,很多指令可選地為每個線程或數(shù)據(jù)通道對CC寄存器進(jìn)行寫入,需要若干指令位以編碼目標(biāo)CC寄存器,加上一個位以使能/無效所述寄存器寫操作。作為示例,現(xiàn)有的SMT并行線程處理器的每個線程均具有四個4位的CC寄存器,因此指令保護(hù)包括7個位兩個位用于選擇四個CC寄存器中的一個,以及五個位用于編碼比較測試。存在24種可能的CC寄存器的測試。對于可選地寫CC寄存器的指令,需要三個個位以編碼目標(biāo)CC寄存器和寫使能?,F(xiàn)有方式的一個問題在于,每線程的狀態(tài)(每線程16位用于四個寄存器)以及指令編碼空間(每個指令7位用于保護(hù)條件,加上每指令3位用于寫CC寄存器的任意指令)方面的開銷。注意到,幾乎每個指令都必須具有保護(hù)域,因此減小編碼開銷是關(guān)注的重點(diǎn)。CC寄存器的每線程16位的開銷乘以并行線程或數(shù)據(jù)通道實(shí)例的數(shù)量,一般每個SIMT或SIMD并行處理器具有數(shù)百個,并且進(jìn)一步乘以每芯片數(shù)以十記的并行處理器的數(shù)量。每線程的寄存器狀態(tài)造成芯片面積和能耗的開銷。如前所述,本技術(shù)領(lǐng)域需要的是一種機(jī)制,用于最小化與斷言執(zhí)行相關(guān)聯(lián)的每線程的狀態(tài),最小化編碼斷言執(zhí)行所需的位的指令,并最小化實(shí)現(xiàn)斷言執(zhí)行所需的指令和周期的數(shù)量
發(fā)明內(nèi)容
本發(fā)明的一個實(shí)施例提供了用于訪問與線程組相關(guān)聯(lián)的斷言信息的方法。所述方法包括以下步驟接收用于由所述線程組執(zhí)行的第一指令,其中所述第一指令指定第一源操作數(shù)標(biāo)識符、操作以及第一目標(biāo)斷言標(biāo)識符;對于所述線程組中的每一個線程,通過對由所述第一源操作數(shù)標(biāo)識符所標(biāo)識的第一源操作數(shù)中的數(shù)據(jù)應(yīng)用所述操作來計算斷言結(jié)果;以及,在第一斷言寄存器中存儲所述斷言結(jié)果,所述斷言寄存器與所述線程相關(guān)聯(lián)并且由所述第一目標(biāo)斷言標(biāo)識符所標(biāo)識,其中對于所述線程組中的每一個線程,所述第一源寄存器以及所述第一斷言寄存器不同。 有利地,本文所描述的發(fā)明提供一種用于開銷高效斷言執(zhí)行的機(jī)制,其使SMT/SIMD并行處理器中的每線程狀態(tài)最小化。此外,斷言的可選否定進(jìn)一步節(jié)省了每線程的附加位,否則將需要其來存儲否定斷言。進(jìn)一步,可生成用于并行多線程程序的條件程序域的高效代碼。
因此,可以詳細(xì)地理解上述本發(fā)明的特征,并且可以參考實(shí)施例得到對如上面所概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅用于示意性地表示本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對本發(fā)明范圍的限制,本發(fā)明可以具有其他等效的實(shí)施方式。圖I為示出了經(jīng)配置以實(shí)現(xiàn)本發(fā)明一個或多個方面的計算機(jī)系統(tǒng)的框圖;圖2為根據(jù)本發(fā)明一個實(shí)施例的,用于圖I中計算機(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í)施例的,圖3C中斷言寄存器堆(file)的較詳細(xì)示意圖;以及圖5為根據(jù)本發(fā)明一個實(shí)施例的,用于為條件(斷言)指令的執(zhí)行而在斷言寄存器堆中設(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ī)系統(tǒng)100的框圖。計算機(jī)系統(tǒng)100包括中央處理單元(CPU) 102和通過互連路徑通信的系統(tǒng)存儲器104,所述互連路徑可包括存儲器橋105。存儲器橋105可以是諸如北橋芯片,通過總線或其他通信路徑106 (諸如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是諸如南橋芯片,從一個或多個用戶輸入設(shè)備108(諸如鍵盤、鼠標(biāo))接收用戶輸入并且通過路徑106和存儲器橋105將所述輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(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和各種外插卡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)的計算架構(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以及CPU 102與系統(tǒng)存儲器104通信。在其他可選拓?fù)渲校⑿刑幚碜酉到y(tǒng)112連接到I/O橋107或直接連接到CPU 102,而不是連接到存儲器橋105。在其他實(shí)施例中,I/0橋107和存儲器橋105可能被集成到單個芯片上。大量實(shí)施例可以包括兩個或多個CPU102以及兩個或多個并行處理系統(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包括一個或多個并行處理單元(PTOs) 202,每個并行處理單元202都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,類似對象的多個實(shí)體以標(biāo)識該對象的參考數(shù)字和需要時標(biāo)識所述實(shí)體的括號中的數(shù)字來表示。)PPU202和并行處理存儲器204可使用一個或多個集成電路設(shè)備來實(shí)現(xiàn),例如可編程處理器、專用集成電路(ASIC)或存儲器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。再參考圖I,在一些實(shí)施例中,并行處理子系統(tǒng)112的一些或所有PPU202是具有渲染管線的圖形處理器,它可以被配置為執(zhí)行與以下各項相關(guān)的各種任務(wù)經(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以及包括一個或多個用作通用計算的其他PPU 202。這些PI3U可以是相同的或不同的,并且每個PPU均可具有其自己的專用并行處理存儲器設(shè)備或不具有專用的并行處理存儲器設(shè)備。一個或多個PPU 202可輸出數(shù)據(jù)到顯示設(shè)備110,或者每個PPU 202均可輸出數(shù)據(jù)到一個或多個顯示設(shè)備110。在操作中,CPU 102是計算機(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ū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令?,F(xiàn)在參考圖2,每個PPU202均包括1/0(輸入/輸出)單元205,其通過連接到存儲器橋105 (或在一個可選實(shí)施例中,直接連接到CPU 102)的通信路徑113與計算機(jī)系統(tǒng)100的其余部分通信。PPU 202到計算機(jī)系統(tǒng)100其余部分的連接也可以不同。在一些實(shí)施例中,并行處理子系統(tǒng)112可作為外插卡來實(shí)現(xiàn),所述外插卡可被插入到計算機(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的讀取或?qū)懭?引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接口 206讀取每個入棧緩沖區(qū),并且將該入棧緩沖區(qū)指定的工作輸出到前端212。有利地,每個PPU202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,Pro202(0)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC 208都能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程是一個程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC 208用于處理不同類型的程序或用于執(zhí)行不同類型的計算。例如,在圖形應(yīng)用中,第一組GPC 208可被分配為執(zhí)行曲面細(xì)分(tessellation)操作并產(chǎn)生用于曲面元(patch)的基元(primitive)拓?fù)洌⑶业诙MGPC 208可被分配為執(zhí)行曲面細(xì)分著色以評估用于所述基元拓?fù)涞那嬖獏?shù)并確定頂點(diǎn)位置和每頂點(diǎn)的其他屬性。取決于為每種類型的程序或計算所產(chǎn)生的工作量,GPC 208的分配可以改變。GPC 208通過工作分布單元200來接收將要執(zhí)行的處理任務(wù),所述工作分布單元200從前端單元212接收定義處理任務(wù)的命令。處理任務(wù)包括將被處理的數(shù)據(jù)的索引,例如表面(曲面元)數(shù)據(jù)、基元數(shù)據(jù)、頂點(diǎn)數(shù)據(jù)和/或像素數(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ì)分處理能夠分布給多個GPC 208。工作分布單元200可被配置為按照能夠向多個GPC 208提供任務(wù)進(jìn)行處理的頻率來產(chǎn)生任務(wù)。相反,在常規(guī)系統(tǒng)中,處 理一般由單個處理引擎執(zhí)行,而其他處理引擎則保持空閑,等到該單個處理引擎完成其任務(wù)才開始他們的處理任務(wù)。在本發(fā)明的一些實(shí)施例中,各部分GPC 208被配置為執(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)行進(jìn)一步處理。將存儲器接口 214包括D個分區(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è)備代替,并且通??梢允浅R?guī)設(shè)計。因此省略詳細(xì)的描述。渲染目標(biāo),例如幀緩沖區(qū)或紋理映射可以跨DRAM 220存儲,允許分區(qū)單元215并行地寫入每個渲染目標(biāo)的一部分,從而高效地使用并行處理存儲器204的可用帶寬。任意一個GPC 208都可以處理將被寫到并行處理存儲器204中任意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)核能夠與系統(tǒng)存儲器104或?qū)τ赑PU202而言非本地的其他存儲器通信。圖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)用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面著色、頂點(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,包括不設(shè)置本地存儲器,并且PPU 202可以以任意組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲架構(gòu)(UMA)實(shí)施例中,PI3U 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、或可將一個或多個PPU202集成到橋式芯片中。在多PI3U系統(tǒng)中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同數(shù)量的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在出現(xiàn)多個PPU 202的情況下,可并行操作這些PPU從而以高于單個PPU 202可能達(dá)到的吞吐量來處理數(shù)據(jù)。包括一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺式電腦、筆記本電腦或手持式個人計算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等等。
處理集群陣列概述圖3A為根據(jù)本發(fā)明一個實(shí)施例的,圖2的一個PPU 202中的GPC 208的框圖。每個GPC 208可被配置為以并行方式執(zhí)行大量的線程,其中術(shù)語“線程”是指針對一組特定輸入數(shù)據(jù)執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,使用單指令多數(shù)據(jù)(SIMD)指令發(fā)送技術(shù)來支持大量線程的并行執(zhí)行,而無需提供多個獨(dú)立的指令單元。在其他實(shí)施例中,使用單指令多線程(SMT)技術(shù),采用被配置為向每一個GPC 208中一組處理引擎發(fā)送指令的共同指令單元,來支持大量通常同步化的線程的并行執(zhí)行。與所有處理引擎通常執(zhí)行相同指令的SMD執(zhí)行機(jī)制不同,SMT執(zhí)行通過給定的線程程序,允許不同線程更容易地跟隨分散的執(zhí)行路徑。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,SIMD處理機(jī)制代表SMT處理機(jī)制的功能子集。通過管線管理器305可以有利地控制GPC 208的操作,所述管線管理器305分布處理任務(wù)給被稱為流多處理器(SPM) 310的SMT并行線程處理器。管線管理器305也可被配置為通過為SPM 310輸出的經(jīng)處理數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。
在一個實(shí)施例中,每個GPC 208均包括M個SPM 310,其中M彡I,每個SPM 310被配置為處理一個或多個線程組。另外,每個SPM 310均有利地包括可被管線化的相同的一組功能執(zhí)行單元(例如,算術(shù)邏輯單元,以及加載-存儲單元,如圖3C中Exec單元302和LSU 303所示),允許在前一個指令完成之前發(fā)送新的指令,如本領(lǐng)域所已知的??梢蕴峁┕δ軋?zhí)行單元的任意組合。在一個實(shí)施例中,該功能單元支持各種操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如,加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、位移(bit-shifting)、以及各種代數(shù)函數(shù)計算(例如,平面插值、三角、指數(shù)和對數(shù)函數(shù)等);并且相同的功能單元硬件可被均衡以執(zhí)行不同的操作。被發(fā)送到特定GPC 208的一系列指令構(gòu)成了一個線程,如本文前面所定義,并且一定數(shù)量的跨SPM 310內(nèi)并行處理引擎(未示出)而并發(fā)執(zhí)行的線程的集合,在本文中被稱作“卷繞包(warp)”或“線程組”。如本文所使用的,“線程組”是指針對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,且所述組的每個線程被分配給SPM 310中的不同的處理引擎。線程組可以包括比SPM 310中的處理引擎數(shù)量更少的線程,在這種情況下,在線程組正被執(zhí)行的周期期間,一些處理引擎將處于空閑。線程組也可以包括比SPM 310中的處理引擎數(shù)量更多的線程,在這種情況下,將在連續(xù)的時鐘周期進(jìn)行處理。因為每個SPM 310均能并發(fā)支持高達(dá)G個線程組,因此在任意給定的時間,GPC 208中可以有GXM個線程組正在執(zhí)行。此外,SPM 310內(nèi)在同一時間可以有多個相關(guān)的線程組處于激活狀態(tài)(在不同的執(zhí)行階段)。這個線程組的集合在本文中被稱作“協(xié)作線程陣列”(“CTA”)或者“線程陣列”。特定CTA的大小等于mX k,其中k是線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SPM310中并行處理引擎數(shù)量的整數(shù)倍,m是在SPM 310中同時激活的線程組的數(shù)量。通常由編程人員以及諸如存儲器或寄存器的硬件資源的容量,來確定CTA的大小。每個SPM 310都包括LI緩沖(未示出)或者使用SPM 310之外的相應(yīng)的LI高速緩存中的空間,該空間用于執(zhí)行加載和存儲操作。每個310也有權(quán)訪問分區(qū)單元215中的L2高速緩存,所述L2高速緩存在所有GPC 208中共享并且可以被用于在線程之間傳輸數(shù)據(jù)。最后,SPM 310也有權(quán)訪問片外“全局”存儲器,可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應(yīng)該理解,在PPU 202外的任意存儲器都可用作全局存儲器。此外,GPC 208中可包括LI. 5高速緩存335,被配置為接收和保持通過存儲器接口 214從存儲器獲取的由SPM 310所請求的數(shù)據(jù),包括指令、一致性(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù),并將所請求的數(shù)據(jù)提供給SPM 310。在GPC208中具有多個SPM 310的實(shí)施例有益地共享LI. 5高速緩存335中所高速緩存的指令和數(shù)據(jù)。
每個GPC 208均可包括被配置為將虛擬地址映射到物理地址的存儲器管理單元(MMU)328。在其他實(shí)施例中,MMU 328可駐留在存儲器接口 214中。該MMU 328包括被用于將虛擬地址映射到像素塊(tile)的物理地址的一組頁表條目(PTEs),以及可選地包括高速緩存線索引(cache line index)。MMU 328可包括地址轉(zhuǎn)譯后備緩沖區(qū)(TLB),或包括駐留在多處理器SPM 310或LI高速緩存或GPC208中的高速緩存。處理所述物理地址以分布表面數(shù)據(jù)訪問位置,從而允許在分區(qū)單元間的有效請求交錯。高速緩存線索引可用于確定對聞速緩存線的請求是否命中或未命中。在圖形和計算應(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獲取。每個SPM310都輸出處理后的任務(wù)給工作分布交叉開關(guān)330以提供處理后的任務(wù)給另一個GPC 208用于進(jìn)一步的處理,或者通過交叉開關(guān)單元210將處理后的任務(wù)存儲在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中。preROP(pre-raster operations,預(yù)光柵操作)325被配置為從SPM 310接收數(shù)據(jù),將數(shù)據(jù)引導(dǎo)至分布單元215中的ROP單元,并執(zhí)行用于色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)以及執(zhí)行地址轉(zhuǎn)譯。應(yīng)該理解,本文所描述的內(nèi)核架構(gòu)是示例性的,變化和修改都有是可能的。GPC208中可以包括任意數(shù)量的處理單元,諸如SPM 310或紋理單元315、preR0P 325。進(jìn)一步,雖然只示出一個GPC 208 JSPPU 202可以包括任意數(shù)量的GPC 208,所述GPC 208最好在功能上彼此相似,從而執(zhí)行行為不依賴于哪個GPC 208接收到特定的處理任務(wù)。進(jìn)一步,每個GPC208最好使用單獨(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是讀/寫高速緩存,其被配置為執(zhí)行加載和存儲從交叉開關(guān)單元210及R0P360接收的操作。由L2高速緩存350輸出讀取缺失和緊急寫回請求到FBDRAM接口 355進(jìn)行處理。臟更新也被發(fā)送到FB 355用于伺機(jī)處理。FB 355直接與DRAM220接口,輸出讀和寫請求,并接收從DRAM 220讀取的數(shù)據(jù)。在圖形應(yīng)用中,ROP 360是執(zhí)行光柵操作的處理單元,例如模板(stencil)、z測試、混合以及類似操作,并輸出像素數(shù)據(jù)作為處理后的圖形數(shù)據(jù)用于在圖形存儲器中存儲。在本發(fā)明的一些實(shí)施例中,將ROP 360包括在每個GPC 208中,而不是分區(qū)單元215中,并且通過交叉開關(guān)單元210傳送像素讀寫請求而非像素片段數(shù)據(jù)。處理后的圖形數(shù)據(jù)可以在顯示設(shè)備110上顯示,或者被路由用于由CPU102或由并行處理子系統(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中描述的架構(gòu)不以任何方式限制本發(fā)明的范圍,以及在此教導(dǎo)的技術(shù)可以在任意經(jīng)合適配置的處理單元上實(shí)現(xiàn),包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC 208、一個或多個圖形或?qū)S锰幚韱卧蝾愃圃O(shè)備,均不超出本發(fā)明的范圍。在本發(fā)明的實(shí)施例中,希望使用PPU 202或計算系統(tǒng)的其他處理器,采用線程陣列來執(zhí)行通用計算。分配唯一的線程標(biāo)識符(“線程ID”)給線程陣列中的每個線程,所述線程標(biāo)識符在該線程執(zhí)行期間可由該線程訪問??蓪⒕€程ID定義為一維或多維數(shù)值,其控制該線程處理行為的各個方面。例如,線程ID可用于確定線程會處理哪部分輸入數(shù)據(jù)集,和/或確定線程會產(chǎn)生或?qū)懩牟糠州敵鰯?shù)據(jù)集。每線程指令序列可包括定義了代表線程與線程陣列中一個或多個其他線程之間的協(xié)作行為的至少一個指令。例如,每線程指令序列可能包括以下指令將對所述代表線程的操作執(zhí)行在序列中的特定點(diǎn)掛起直到一個或多個其他線程到達(dá)該特定點(diǎn)時的指令;指示代表線程在一個或多個其他線程有權(quán)訪問的共享存儲器中存儲數(shù)據(jù)的指令;指示代表線程自動地讀取和更新存儲在一個或多個其他線程基于其線程ID有權(quán)訪問的共享存儲器中 的數(shù)據(jù)的指令;等等。CTA程序也可包括計算從其中讀取數(shù)據(jù)的共享存儲器的地址的指令,且該地址為線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測的方式由CTA的一個線程將數(shù)據(jù)寫入共享存儲器中給定的位置,并且由同一個CTA的不同的線程從該位置讀取。因此,可以支持以任意希望的方式在線程中共享數(shù)據(jù),并且CTA中的任意線程能夠和同一個CTA中的任何其他線程共享數(shù)據(jù)。如果在CTA的線程中存在數(shù)據(jù)共享,則數(shù)據(jù)共享的程度由該CTA程序確定;因此,應(yīng)該理解在使用CTA的特定應(yīng)用中,取決于該CTA程序,CTA的線程實(shí)際上可能互相共享數(shù)據(jù)或者不共享數(shù)據(jù),并且術(shù)語“CTA”和“線程陣列”在本文中同義使用。圖3C為根據(jù)本發(fā)明一個實(shí)施例的,圖3A中SPM 310的框圖。SPM 310包括指令LI高速緩存370,器經(jīng)配置以通過LI. 5高速緩存335接收指令和常數(shù)。warp調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常量,并根據(jù)指令和常數(shù)控制本地寄存器堆304和SPM 310功能單元。SPM310的功能單元包括N個exec (執(zhí)行或處理)單元302和P個加載-存儲單元(LSU) 303。SPM310提供具有不同訪問級別的片上(內(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)行初始化期間,對專用寄存器進(jìn)行寫入,并且在CTA執(zhí)行期間專用寄存器不會發(fā)生改變。參數(shù)存儲器(未示出)可由任意CTA線程(或任意LSU 303)讀取但不可寫入,其存儲執(zhí)行時間參數(shù)(常數(shù))。在一個實(shí)施例中,設(shè)備驅(qū)動器103在引導(dǎo)SPM 310開始執(zhí)行使用這些參數(shù)的CTA之前,提供參數(shù)給所述參數(shù)存儲器。任意CTA中的任意CTA線程(或SPM 310中的任意exec單元302)都可通過存儲器接口 214訪問全局存儲器。一部分全局存儲器可存儲在LI高速緩存320中。本地寄存器堆304可由每個CTA線程用作臨時空間(scratch space);每一個寄存器被分配給一個線程排他性使用,并且在任意一個本地寄存器堆304中的數(shù)據(jù)均僅可由該數(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)了一個專用寄存器。斷言寄存器堆307包括用于每個CTA線程的斷言寄存器。關(guān)于圖4和圖5中在下面對斷言寄存器堆307進(jìn)行更為詳細(xì)的描述。共享存儲器306可由(在單個CTA中的)所有CTA線程訪問;共享存儲器306中的任意位置都可由同一個CTA中的任意CTA線程(或SPM310中的任意處理引擎)訪問。共享存儲器306可實(shí)現(xiàn)為具有互連的共享片上高速緩存存儲器或共享寄存器堆,所述互連允許任意處理引擎對共享存儲器的任意位置進(jìn)行讀或?qū)?。在其他?shí)施例中,共享狀態(tài)空間可能映射到片外存儲器的每CTA域(region)上,并且在LI高速緩存320中高速緩存。參數(shù)存儲器可實(shí)現(xiàn)為同一個共享寄存器堆或?qū)崿F(xiàn)共享存儲器306的共享高速緩存存儲器內(nèi)的指定部分,或?qū)崿F(xiàn)為單獨(dú)的共享寄存器堆或LSU 303對其具有只讀訪問權(quán)限的片上高速緩存存儲器。在一個實(shí)施例中,實(shí)現(xiàn)參數(shù)存儲器的區(qū)域(area)也可被用于存儲CTA ID和柵格ID,以及存儲CTA和柵格的維度,實(shí)現(xiàn)專用寄存器的一部分。SPM 310中的每個LSU 303均可耦合到統(tǒng)一地址映射單元352,所述統(tǒng)一地址映射單元352將為在統(tǒng)一存儲空間內(nèi)指定的加載和存儲指令所提供的地址轉(zhuǎn)換為在每個各異的存儲器空間中的地址。因此,通過在統(tǒng)一存儲器空間中指定地址,指令可用于訪問任意的本地、共享或全局存儲器空間。用于并行處理器的斷言指令執(zhí)行以下論述針對執(zhí)行并行線程或并行數(shù)據(jù)通道的并行處理器。在一些實(shí)施例中,并行線程或并行數(shù)據(jù)通道組利用SMT或SMD技術(shù)來執(zhí)行共同的指令流。使用SMT技術(shù)的一個實(shí)施例描述為為并行處理器中執(zhí)行的每個線程顯性地提供包含I位斷言的斷言寄存器。還描述了用于設(shè)置和使用該I位斷言的通用指令組。有利地,以下描述的斷言寄存器架構(gòu)減少了線程狀態(tài)和指令編碼開銷,并且實(shí)現(xiàn)條件程序域需要的指令較少。圖4為根據(jù)本發(fā)明一個實(shí)施例的,圖3C的斷言寄存器堆307的更詳細(xì)的示意圖。如圖所示,斷言寄存器堆307包括N個不同的斷言寄存器402。每個斷言寄存器402均與執(zhí)行在SPM 310中的執(zhí)行單元302上的不同線程相關(guān)聯(lián)。僅為了描述的目的,以下更詳細(xì)地描述斷言寄存器402 (O)。斷言寄存器402 (O)包括條件代碼404和斷言408。條件代碼404包括四個I位的條件代碼標(biāo)志(flag) 0F (溢出標(biāo)志)、CF (進(jìn)位標(biāo)志)、SF(符號標(biāo)志)以及ZF(零標(biāo)志)。在每個線程中,指令選擇性地寫入條件代碼;一般由整數(shù)和浮點(diǎn)運(yùn)算指令寫入條件代碼,以指示算術(shù)運(yùn)算結(jié)果的屬性。斷言408包括能夠由與斷言寄存器402(0)相關(guān)聯(lián)的進(jìn)程所使用的七個I位的斷言。斷言408中每一個斷言P0-P6均表明與所述線程相關(guān)聯(lián)的狀態(tài)的一個位,其中對于斷言而言值O表明False (假),而值I表明True (真)。除斷言P0- P6之外,提供用于True斷言編碼的保留指令PT,其值總是為I。斷言PT不需要每線程的任何狀態(tài)。當(dāng)需要恒定的True斷言值時,斷言PT可被用作指令源操作數(shù),并且當(dāng)指令沒有非活性的(live-out)斷言結(jié)果時,斷言PT可被用作指令目標(biāo)操作數(shù);忽略對PT的寫。對于執(zhí)行在SPM 310中的每個線程,通過斷言設(shè)置指令來設(shè)置斷言寄存器402中相應(yīng)的斷言。下面詳細(xì)描述六種不同類型的斷言設(shè)置指令,其用于為執(zhí)行在SPM 310中的每個線程在斷言寄存器402中設(shè)置斷言。ISETP、FSETP和DSETP是三個不同的斷言設(shè)置指令。在其最簡單的形式中,這些指令的每一個都通過評估一個或多個源操作數(shù)來將與線程相關(guān)聯(lián)的布爾斷言設(shè)置為為True或False。源操作數(shù)可以是本地寄存器堆304中的通用寄存器、立即數(shù)值、或者常數(shù)值。一個簡單示例測試一個源操作數(shù)的值,并且如果該源操作數(shù)為零則設(shè)置斷言為False,否則設(shè)置斷言為True。更普遍地,這些指令的每一個均對產(chǎn)生布爾結(jié)果的一個或多個源操作數(shù)應(yīng)用一個操作。測試操作通過將一個源操作數(shù)和零值相比較來評估該源操作數(shù)。比較操作比較至少兩個源操作數(shù),并在斷言寄存器402的一個或多個斷言中存儲該比較的布爾結(jié)果??梢杂蓴嘌栽O(shè)置指令來指定不同的比較,包括小于、大于、等于,不等于等等。任何其他技術(shù)上可行的兩個值之間的比較都包括在本發(fā)明的范圍內(nèi)。重要的是,對執(zhí)行斷言設(shè)置指令的每個線程來說,比較的布爾結(jié)果可以是不同的,并且因此,對應(yīng)不同的線程,存儲在斷言寄存器402中的布爾結(jié)果可以是不同的。ISETP指令對表示整數(shù)值的兩個操作數(shù)(例如,通用寄存器、立即操作數(shù)、或常量)進(jìn)行比較以生成布爾結(jié)果。FSETP指令對表示單精度浮點(diǎn)值的兩個源操作數(shù)進(jìn)行比較以生成布爾結(jié)果。可以利用不同的選項(option),例如“具有否定符號”和“絕對值”,來指定FSETP指令的源操作數(shù)。DSETP指令對表示雙精度值的兩個源操作數(shù)進(jìn)行比較以生成布爾結(jié)果。用于實(shí)現(xiàn)if-then-else (如果-則-否則)語句if (R0 < Rl) then {A ;} else {B ;}的 ISETP 斷言設(shè)置指令的示例為ISETP. It P2, R0, Rl ;#P2 = (R0 < Rl I 0)當(dāng)對特定線程執(zhí)行這一指令時,比較存儲在與該線程相關(guān)聯(lián)的寄存器RO和Rl中的整數(shù)值。具體地,將“It”(小于)比較應(yīng)用于RO和R1。將該比較的布爾結(jié)果存儲在與該線程相關(guān)聯(lián)的相應(yīng)的斷言寄存器402內(nèi)的P2斷言中。然后根據(jù)P2為True或者False,可以對實(shí)現(xiàn)語句A和B的分支轉(zhuǎn)移指令進(jìn)行斷言,或者利用到被稱為if-conversion (如果-轉(zhuǎn)換)的斷言指令的轉(zhuǎn)化,可以去除這些分支。根據(jù)P2為True,實(shí)現(xiàn)語句A的指令可以被斷言,而根據(jù)P2為False,實(shí)現(xiàn)語句B的指令可以被預(yù)測。利用多個或復(fù)合的布爾函數(shù),斷言設(shè)置指令也可被用于設(shè)置多個斷言。例如,基于復(fù)合的布爾函數(shù)設(shè)置多個斷言對于if-conversion的嵌套的if_then_else結(jié)構(gòu)以及對于評估復(fù)合布爾表達(dá)式是有效的。在這些情況下,為了生成高效的代碼,SETP指令包括可選斷言源操作數(shù)和布爾函數(shù)??蛇x地該斷言源操作數(shù)可以是否定的。若干斷言代碼模式需要計算相關(guān)的斷言對。例如,在一個簡單的嵌套if-then-else結(jié)構(gòu)中,需要斷言對來保護(hù)嵌套語句中的then和else塊??紤]下面嵌套if-then-else 結(jié)構(gòu)的 if-conversion if (R0 < Rl) then {A ;} else {if (R2 > R3) then {B ;} else {C ;}}
如果第一個條件RO < Rl為True,則執(zhí)行塊A中的指令。如果第一個條件RO < Rl為False并且第二個條件R2 > R3為True,則執(zhí)行塊B中的指令;僅當(dāng)?shù)谝粋€條件RO < Rl為False并且第二個條件R2 > R3也為False時,才執(zhí)行塊C中的指令。利用SETP指令容易地計算出相應(yīng)的保護(hù)條件ISETP. ItPI, R0, Ri ;#P1 = (R0 < Ri)ISETP. gt. and P2, R2, R3, ! Pl ;#P2 = ! P1&(R2 > R3)ISETP. le. and P3, R2, R3, ! Pl ;#P3 = ! P1& ! (R2 > R3)此外,當(dāng)SETP指令擴(kuò)展為在斷言寄存器402中兩個不同的斷言中存儲結(jié)果時,可減少斷言代碼中所需SETP指令的數(shù)量。除了所使用的比較補(bǔ)碼以外,第二個布爾結(jié)果的計算與第一個布爾結(jié)果的計算非常相似。在上述示例中,P2和P3可通過單個ISETP指令計算,該指令用兩個布爾操作設(shè)置兩個目標(biāo)斷言 ISETP.lt PI, R0, Rl;ISETP. gt. and P2, P3, R2, R3, ! Pl ;#P2 = (R2 > R3)& ! Pl ;P3 = ! (R2 >R3)& ! PlPSETP, CSETP和VSETP為三個附加的斷言設(shè)置指令。PSETP指令支持對斷言執(zhí)行常規(guī)布爾函數(shù)。PSETP指令指定斷言寄存器402中的兩個或多個斷言源操作數(shù),以及斷言寄存器402中的一個或多個比較操作和一個或多個目標(biāo)斷言。例如,PSETP指令PSETP.bopO.bopl Pu, Pv, { ! }Pp, { ! }Pq, { ! }Pr ;基于可選地否定的源斷言操作Pp、Pq和Pr的復(fù)合布爾操作bop0、bopl,在斷言寄存器402中將兩個目標(biāo)斷言Pu和Pv設(shè)置為布爾值Pu = ({ ! }Pp bope { ! } Pq) bop I { ! }Pr ;Pv = (( ! { ! } Pp) bope { ! } Pq) bop I { ! }Pr ;當(dāng)執(zhí)行CSETP指令時,利用特定的測試來測試條件代碼(CC)寄存器,使用特定的布爾操作bop將布爾結(jié)果與斷言操作數(shù)Pp結(jié)合,并且基于該測試,在斷言寄存器402中設(shè)置一個或多個目標(biāo)斷言。所述測試可包括帶符號數(shù)字測試、帶符號的或無序的測試、以及無符號的整數(shù)測試。當(dāng)執(zhí)行VSETP指令時,從VSET指令中所指定的一個或多個源寄存器中提取子字(sub-word)(一個字節(jié)或短型(short))或者單字值,符號將該值擴(kuò)展為33位的帶符號的值并且執(zhí)行指定的比較以產(chǎn)生布爾中間結(jié)果。然后利用指定的布爾操作將該中間結(jié)果與可選地否定的斷言源操作數(shù)相結(jié)合,并且基于該結(jié)果在斷言寄存器402中設(shè)置一個或多個目標(biāo)斷言。當(dāng)使用有符號的或無符號的整型字或子字工作時,VSETP是有效的,例如在媒體處理算法中。上述不同的斷言設(shè)置指令具有相應(yīng)的通用寄存器設(shè)置指令,例如I SET、FSET、PSET等。與斷言設(shè)置指令一樣,這些指令計算布爾結(jié)果,但該結(jié)果被轉(zhuǎn)換為32位的值,該值存儲在本地寄存器堆304的一個或多個通用寄存器中。該32位的值可以是整型值或單精度浮點(diǎn)值,取決于指令結(jié)果的格式類型。當(dāng)選擇整型結(jié)果時,將布爾結(jié)果O和I分別轉(zhuǎn)換為整型值0x0000000和OxFFFFFFFF。當(dāng)選擇浮點(diǎn)結(jié)果時,將布爾結(jié)果O和I分別轉(zhuǎn)換為單精度浮點(diǎn)值0. Of和I. Of0P2R指令將斷言寄存器402復(fù)制到本地寄存器堆304中32位寄存器的高半部分或低半部分。這一指令包括掩碼操作數(shù),其允許將所述位的子集寫到通用寄存器。這有助于實(shí)現(xiàn)寄存器分配和函數(shù)調(diào)用轉(zhuǎn)換。R2P指令將在掩碼的控制下從通用寄存器的低半部分或高半部分選擇的位復(fù)制到斷言寄存器402。在SPM 310中執(zhí)行的指令具有保護(hù)斷言,其控制每個線程中指令的條件執(zhí)行。保護(hù)斷言對應(yīng)于與每個線程相關(guān)聯(lián)的斷言寄存器402中的斷言。如果對于線程的保護(hù)斷言為true (具有值I),則由該線程正常執(zhí)行該指令。如果對于線程的保護(hù)斷言為false (具有值O),該指令對該線程無效,并且不影響該線程的機(jī)器狀態(tài)。所述保護(hù)斷言可選地可為否定的,因此需要四個指令位來編碼該保護(hù)斷言,該保護(hù)斷言選擇七個斷言中的一個或PT用于每個指令。利用斷言PT進(jìn)行保護(hù),指令可以被無條件地執(zhí)行。使用語法“@Px”或“@ ! Px”將保護(hù)條件寫到每個指令的左側(cè)。用于一個線程的斷言指令示例iP2 IADD Rl, R2,R3 ;#如果P2為true則執(zhí)行,否則無效 iPT IMUL R2, R4, R6 ;# 無條件執(zhí)行i ! Pl FMAX Rl, R2,R3 ;# 如果 Pl 為 false 則執(zhí)行,否則無效斷言最常見的用法是用于去除短的轉(zhuǎn)發(fā)分支,以及去除簡單的、單層的if-then-else結(jié)構(gòu)。對于這些常見情況,否定-針對-使用(negate-on-use)減少的達(dá)一半數(shù)量的活性(live)斷言寄存器。狀態(tài)的減少特別有利于SMT和SMD并行處理器,其具有很多線程并因此具有很多每線程狀態(tài)的實(shí)例。為了去除諸如嵌套if-then結(jié)構(gòu)的在更復(fù)雜的控制流域中的分支,要計算更多的常規(guī)斷言條件。例如,考慮以下代碼if (P) then {A;} else {if (q) then {B ;} else {C ;}}當(dāng)條件p為true,A應(yīng)該執(zhí)行,并且B和C應(yīng)被無效。試圖利用斷言和其補(bǔ)碼保護(hù)B和C,分別是q和! q,導(dǎo)致甚至在P為true時,它們中的一個被錯誤執(zhí)行。利用C語言語法,用于B的正確保護(hù)是(! p&q),以及用于C的正確保護(hù)是(! p& ! q)。利用具有兩個目標(biāo)斷言的單個SETP指令能夠有效地計算這些保護(hù)。除了保護(hù)的(斷言的)計算指令(例如,算法、邏輯、存儲器加載/存儲操作),斷言被用于保護(hù)控制流修改指令,例如條件的和斷言的BRA、BRX、JMP以及JMX。分支轉(zhuǎn)移/跳轉(zhuǎn)(jump)條件基于保護(hù)斷言或條件代碼寄存器測試或此而學(xué)者的組合。也將斷言用于SEL指令、MNMX指令、VOTE指令和LDLK指令中?;跀嘌约拇嫫?02中可選地否定斷言,SEL指令選擇在SEL指令中所指定的第一或第二源操作數(shù)。將所選擇的操作數(shù)復(fù)制到特定的目的寄存器?;诳蛇x地否定斷言的值,IMNMX, FMNMXjP DMNMX指令選擇兩個源操作數(shù)中的最小值或者最大值。例如,對于一個特定線程,如果在MNMX指令中所指定的斷言為false,則針對所述兩個源操作數(shù)執(zhí)行最小值操作。相反,如果在MNMX指令中所指定的斷言為true,那么針對所述兩個源操作數(shù)執(zhí)行最大值操作。將被選擇的操作的結(jié)果復(fù)制到指定目標(biāo)寄存器。VOTE指令跨線程組中所有激活線程執(zhí)行斷言的減少-廣播(reduce-and-broadcast)。跨線程組中所有激活線程共享vote操作的執(zhí)行結(jié)果。該vote操作為.ALL (當(dāng)且僅當(dāng)跨所有激活線程的源斷言為ture時為true)、. ANY(當(dāng)且僅當(dāng)跨所有激活線程有至少一個源斷言為true時為ture)以及.EQ (當(dāng)且僅當(dāng)跨所有激活線程的源斷言為true或跨所有激活線程的源斷言為false時為ture)。加載-加鎖(load-and-lock)指令(LDLK)與加載-共享-加鎖(load-shared-and-lock) (LDSLK)指令從存儲器加載值,并試圖取得與存儲器地址相關(guān)聯(lián)的鎖;這些指令寫斷言目標(biāo)寄存器以表明是否取得所述鎖(寫入True)或是沒有取得(寫A False)。圖5為根據(jù)本發(fā)明一個實(shí)施例的,用于為條件指令的執(zhí)行而在斷言寄存器堆中設(shè)置斷言和訪問斷言的方法步驟的流程圖。雖然所述方法步驟結(jié)合圖1-4中的系統(tǒng)來描述,但本技術(shù)領(lǐng)域技術(shù)人員應(yīng)該理解,被配置以任意順序執(zhí)行本方法的任何系統(tǒng)都包括在本發(fā)明范圍內(nèi)。 方法500從步驟502開始,在步驟502中SPM 310接收關(guān)于在線程組的每個線程內(nèi)執(zhí)行的指令。如本文前面所述,每個線程執(zhí)行具有不同源操作數(shù)的相同指令,以生成不同的輸出。在步驟504,SPM 310確定該指令是否為斷言和/或條件指令。如果該指令不是斷言和/或條件指令,那么方法進(jìn)入到步驟520,在此步驟中為每個線程無條件執(zhí)行該指令。如果該指令為斷言和/或條件指令,那么方法進(jìn)入步驟506,在此步驟中,SPM 310為每個線程確定該指令中所指定的相應(yīng)的斷言和/或條件是否為true。方法繼續(xù)到步驟508,在此步驟中為每個線程測試保護(hù)斷言和/或分支條件。在步驟508,如果對于每個線程該保護(hù)斷言和/或條件為False,則方法繼續(xù)進(jìn)入步驟530,在此步驟中SPM 310無效用于該線程的指令。在步驟508中,如果保護(hù)斷言和/或條件為True,則方法繼續(xù)進(jìn)入步驟510。在步驟510,如果該指令為斷言設(shè)置指令,那么方法進(jìn)入步驟512,其中,基于源操作數(shù)和由該指令指定的比較操作,為每個線程在斷言寄存器402中設(shè)置一個或多個斷言。重要的是,由于對每個線程是采用不同的源操作數(shù)執(zhí)行指令,因此用于線程組中每個線程的斷言值可以是不同的。在步驟510,如果該指令不是斷言設(shè)置指令,那么方法進(jìn)入步驟540,其中對于每個線程執(zhí)行該指令。有利地,本文所述發(fā)明提供用于開銷高效斷言執(zhí)行的機(jī)制,其最小化SMT/SMD并行處理器中的每線程狀態(tài)。此外,斷言的可選否定進(jìn)一步節(jié)省了每線程的附加位,否則將需要其來存儲否定斷言。進(jìn)一步,可生成用于并行多線程程序的條件程序域的高效代碼。本發(fā)明的一個實(shí)施例可以被實(shí)現(xiàn)為與計算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。程序產(chǎn)品的程序?qū)?shí)施例的功能(包括在此描述的方法)進(jìn)行定義,并且能夠被包含在各種各樣的計算機(jī)可讀存儲介質(zhì)上。示例性的計算機(jī)可讀存儲介質(zhì)包括但不限于(i)信息在其上永久保存的非可寫存儲介質(zhì)(例如,計算機(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)該理解,可以對其進(jìn)行各種修改和變化而不脫離在所附權(quán)利要求中提出的本發(fā)明的較寬精神和范圍。相應(yīng)地,前面的描述和附圖是作為示例性的,而不具有限制意義。
權(quán)利要求
1.一種用于訪問與線程組相關(guān)聯(lián)的斷言信息的計算機(jī)實(shí)現(xiàn)的方法,所述方法包括 接收用于由所述線程組執(zhí)行的第一指令,其中所述第一指令指定第一源操作數(shù)標(biāo)識符、操作以及第一目標(biāo)斷言標(biāo)識符; 對于所述線程組中的每一個線程, 通過對由所述第一源操作數(shù)標(biāo)識符所標(biāo)識的第一源操作數(shù)中的數(shù)據(jù)應(yīng)用所述操作來計算斷言結(jié)果;以及 在第一斷言寄存器中存儲所述斷言結(jié)果,所述斷言寄存器與所述線程相關(guān)聯(lián)并且由所述第一目標(biāo)斷言標(biāo)識符所標(biāo)識, 其中對于所述線程組中的每一個線程,所述第一源寄存器以及所述第一斷言寄存器不同。
2.根據(jù)權(quán)利要求I所述的方法,其中所述操作對所述第一源操作數(shù)中的所述數(shù)據(jù)與零進(jìn)行比較。
3.根據(jù)權(quán)利要求I所述的方法,其中所述第一指令進(jìn)一步指定第二源操作數(shù),并且所述操作對所述第一源寄存器中的數(shù)據(jù)與所述第二源操作數(shù)中的數(shù)據(jù)進(jìn)行比較。
4.根據(jù)權(quán)利要求3所述的方法,其中所述第一指令進(jìn)一步指定第三源操作數(shù)標(biāo)識符和組合操作,并且計算斷言結(jié)果的所述步驟還包括,對由所述第三源操作數(shù)標(biāo)識符所標(biāo)識的第三源操作數(shù)中的數(shù)據(jù)以及對所述第一源操作數(shù)和所述第二源操作數(shù)中數(shù)據(jù)的比較應(yīng)用組合操作。
5.根據(jù)權(quán)利要求4所述的方法,其中所述第三源操作數(shù)是斷言。
6.根據(jù)權(quán)利要求3所述的方法,其中所述第一指令進(jìn)一步指定第二目標(biāo)斷言標(biāo)識符,并且進(jìn)一步包括步驟 對于所述線程組中的每一個線程, 通過對所述第一源操作數(shù)和所述第二源操作數(shù)中的所述數(shù)據(jù)應(yīng)用逆向比較操作,來計算第二斷言結(jié)果;以及, 將所述第二斷言結(jié)果保存在第二斷言寄存器中,所述第二斷言寄存器與所述線程相關(guān)聯(lián)并且由所述第二目標(biāo)斷言標(biāo)識符所標(biāo)識, 其中對于所述線程組中的每一個線程,所述第二斷言寄存器不同。
7.根據(jù)權(quán)利要求3所述的方法,其中所述第一源操作數(shù)或所述第二源操作數(shù)中的至少一個是斷g。
8.根據(jù)權(quán)利要求3所述的方法,其中所述第二源操作數(shù)是條件代碼。
9.根據(jù)權(quán)利要求I所述的方法,其中進(jìn)一步包括接收用于由所述線程組執(zhí)行的保護(hù)指令的步驟,所述保護(hù)指令指定所述第一目標(biāo)斷言標(biāo)識符。
10.根據(jù)權(quán)利要求9所述的方法,其中所述保護(hù)指令包括指定第三源操作數(shù)標(biāo)識符和第四源操作數(shù)標(biāo)識符的選擇指令,并且進(jìn)一步包括以下步驟對于所述線程組中的每一個線程,基于由所述第一目標(biāo)斷言標(biāo)識符所標(biāo)識的所述第一斷言寄存器,確定是否選擇由所述第三源操作數(shù)標(biāo)識符所標(biāo)識的第三源操作數(shù)中的數(shù)據(jù)或由所述第四源操作數(shù)標(biāo)識符所標(biāo)識的第四源操作數(shù)中的數(shù)據(jù)。
11.根據(jù)權(quán)利要求9所述的方法,其中所述保護(hù)指令包括指定第三源操作數(shù)標(biāo)識符和第四源操作數(shù)標(biāo)識符的最小值/最大值指令,并且進(jìn)一步包括以下步驟對于所述線程組中的每一個線程,基于由所述第一目標(biāo)斷言標(biāo)識符所標(biāo)識的所述第一斷言寄存器,確定是否針對由所述第三源操作數(shù)標(biāo)識符所標(biāo)識的第三源操作數(shù)中的數(shù)據(jù)或者由所述第四源操作數(shù)標(biāo)識符所標(biāo)識的第四源操作數(shù)中的數(shù)據(jù)執(zhí)行最小值操作或最大值操作。
12.根據(jù)權(quán)利要求9所述的方法,其中所述保護(hù)指令包括指定第三指令的分支指令,并且進(jìn)一步包括以下步驟對于所述線程組中的每一個線程,基于由所述第一目標(biāo)斷言標(biāo)識符所標(biāo)識的第一斷言寄存器,確定是否所述第三指令應(yīng)該是下一個被執(zhí)行的指令。
13.一種計算機(jī)系統(tǒng),包括 存儲器;以及 處理器,經(jīng)配置以 接收用于由所述線程組執(zhí)行的第一指令,其中所述第一指令指定第一源操作數(shù)標(biāo)識符、操作以及第一目標(biāo)斷言標(biāo)識符; 對于所述線程組中的每一個線程, 通過對由所述第一源操作數(shù)標(biāo)識符所標(biāo)識的第一源操作數(shù)中的數(shù)據(jù)應(yīng)用所述操作來計算斷言結(jié)果;以及, 在第一斷言寄存器中存儲所述斷言結(jié)果,所述斷言寄存器與所述線程相關(guān)聯(lián)并且由所述第一目標(biāo)斷言標(biāo)識符所標(biāo)識, 其中對于所述線程組中的每一個線程,所述第一源寄存器以及所述第一斷言寄存器不同。
14.根據(jù)權(quán)利要求13所述的計算機(jī)系統(tǒng),其中所述第一指令進(jìn)一步指定第二源操作數(shù),并且所述操作對所述第一源寄存器中的數(shù)據(jù)與所述第二源操作數(shù)中的數(shù)據(jù)進(jìn)行比較。
15.根據(jù)權(quán)利要求13所述的計算機(jī)系統(tǒng),其中所述處理器進(jìn)一步經(jīng)配置以接收用于由所述線程組執(zhí)行的保護(hù)指令,所述保護(hù)指令指定所述第一目標(biāo)斷言標(biāo)識符。
全文摘要
本文提供的發(fā)明闡述了用于在執(zhí)行多線程或數(shù)據(jù)通道的并行處理器中的指令的斷言執(zhí)行機(jī)制。執(zhí)行在并行處理器中的每個線程或數(shù)據(jù)通道均與一個斷言寄存器相關(guān)聯(lián),該斷言寄存器存儲一組1位斷言??梢允褂貌煌愋偷臄嘌栽O(shè)置指令來設(shè)置這些斷言中的每一個,其中每個斷言設(shè)置指令都指定一個或多個源操作數(shù),針對該源操作數(shù)將執(zhí)行至少一個操作,并且一個或多個目標(biāo)斷言用于存儲該操作的結(jié)果??梢酝ㄟ^斷言來保護(hù)指令,該斷言可以影響是否對特定線程執(zhí)行指令,或者如何對特定線程或數(shù)據(jù)通道執(zhí)行指令。
文檔編號G06F15/76GK102640132SQ201080053930
公開日2012年8月15日 申請日期2010年9月28日 優(yōu)先權(quán)日2009年9月28日
發(fā)明者理查德·克雷格·約翰遜, 約翰·R·尼科爾斯, 羅伯特·史蒂文·格蘭維爾 申請人:輝達(dá)公司