多線(xiàn)程處理單元中的高效存儲(chǔ)器虛擬化的制作方法【專(zhuān)利摘要】公開(kāi)了多線(xiàn)程處理單元中的高效存儲(chǔ)器虛擬化。用于同時(shí)執(zhí)行每個(gè)具有獨(dú)立虛擬地址空間的多個(gè)任務(wù)的技術(shù)涉及將地址空間標(biāo)識(shí)符(ASID)指派到每個(gè)任務(wù)并且構(gòu)建每個(gè)虛擬存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求以包括虛擬地址和ASID二者。在虛擬到物理地址轉(zhuǎn)譯期間,ASID選擇相對(duì)應(yīng)的頁(yè)表,其包括用于ASID和相關(guān)聯(lián)的任務(wù)的虛擬到物理地址映射。用于轉(zhuǎn)譯后備緩沖區(qū)(TLB)的條目包括虛擬地址和ASID二者以完成每個(gè)到物理地址的映射??梢詫?shí)現(xiàn)共享虛擬地址空間的任務(wù)的深調(diào)度以提高針對(duì)TLB和數(shù)據(jù)高速緩存二者的高速緩存親和性?!緦?zhuān)利說(shuō)明】多線(xiàn)程處理單元中的高效存儲(chǔ)器虛擬化【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明總地涉及多線(xiàn)程計(jì)算機(jī)架構(gòu),并且更具體地,涉及多線(xiàn)程處理單元中的高效存儲(chǔ)器虛擬化?!?br>背景技術(shù):
】[0002]在具有中央處理單元(CPU)和圖形處理單元(GPU)二者的常規(guī)計(jì)算系統(tǒng)中,CPU實(shí)施應(yīng)用計(jì)算的一部分、分配資源以及管理總體應(yīng)用執(zhí)行,而GPU實(shí)施由CPU所確定的高吞吐量的計(jì)算。在某些應(yīng)用空間中,諸如高性能計(jì)算(HPC)應(yīng)用,GPU典型地實(shí)施與給定的應(yīng)用相關(guān)聯(lián)的大多數(shù)計(jì)算。因此,總體應(yīng)用性能與GPU利用率直接相關(guān)。在這種應(yīng)用中,以高GPU利用率而達(dá)到高應(yīng)用性能,即以GPU處理單元中相對(duì)大的一部分并發(fā)地執(zhí)行有用的工作為特征的情況。工作被組織成在處理單元上并行執(zhí)行的線(xiàn)程程序。[0003]典型的線(xiàn)程程序執(zhí)行為跨駐留在單個(gè)虛擬地址空間中的并行數(shù)據(jù)集的高度并行、高度相似的操作,所述并行數(shù)據(jù)集諸如圖像或圖像集。如果應(yīng)用需要執(zhí)行多個(gè)不同線(xiàn)程程序,那么GPU常規(guī)地一次執(zhí)行不同線(xiàn)程程序中的一個(gè)直到不同線(xiàn)程程序已全部完成它們的經(jīng)指派的工作為止,其中每個(gè)不同線(xiàn)程程序在相對(duì)應(yīng)的虛擬地址空間內(nèi)。每個(gè)線(xiàn)程程序被加載到相對(duì)應(yīng)的上下文中用于在GPU內(nèi)的執(zhí)行。上下文包括加載到駐留在GPU內(nèi)的頁(yè)表中的虛擬地址空間狀態(tài)。因?yàn)槊總€(gè)不同線(xiàn)程程序常規(guī)地要求私有虛擬地址空間,所以在任何一個(gè)時(shí)間僅一個(gè)線(xiàn)程程序可以在GPU上執(zhí)行。[0004]HPC應(yīng)用典型地被執(zhí)行在常規(guī)地包括節(jié)點(diǎn)集的HPC集群上,每個(gè)節(jié)點(diǎn)包括CPU和GPU。每個(gè)節(jié)點(diǎn)典型地被指派任務(wù)集,所述任務(wù)可經(jīng)由消息傳遞接口(MPI)任務(wù)與執(zhí)行在其他節(jié)點(diǎn)上的其他任務(wù)進(jìn)行通信。典型的GPU計(jì)算任務(wù)作為公共虛擬存儲(chǔ)器空間內(nèi)的并行線(xiàn)程程序?qū)嵗愿逩PU利用率而高效執(zhí)行。然而,考慮到常規(guī)GPU執(zhí)行模式,一次僅一個(gè)MPI任務(wù)可以在給定GPU上執(zhí)行。每個(gè)MPI任務(wù)可包括一系列用于GPU的工作量,這給出相應(yīng)范圍的GPU利用率。在一個(gè)場(chǎng)景中,僅一個(gè)線(xiàn)程或小數(shù)目的線(xiàn)程作為MPI任務(wù)被執(zhí)行在GPU上,這導(dǎo)致欠佳的GPU利用率和欠佳的總體應(yīng)用性能。因此,某些HPC應(yīng)用在基于GPU的HPC處理集群上低效地實(shí)施。一般而言,要求GPU順序執(zhí)行任務(wù)的應(yīng)用將實(shí)施欠佳,其中所述任務(wù)包括小數(shù)目的線(xiàn)程實(shí)例,每個(gè)線(xiàn)程實(shí)例要求獨(dú)立的虛擬地址空間。[0005]如前述所示,本領(lǐng)域需要的是使能具有不同虛擬地址空間的任務(wù)的并發(fā)GPU執(zhí)行的技術(shù)。【
發(fā)明內(nèi)容】[0006]本發(fā)明的一個(gè)實(shí)施例闡述用于在并行處理子系統(tǒng)上并發(fā)地執(zhí)行具有不同虛擬地址空間的兩個(gè)或更多個(gè)線(xiàn)程程序的方法,方法包括檢索任務(wù)元數(shù)據(jù)集,所述任務(wù)元數(shù)據(jù)集包括與由第一地址空間標(biāo)識(shí)符(ASID)所標(biāo)識(shí)的第一虛擬地址空間相關(guān)聯(lián)的第一頁(yè)查找表以及與由第二ASID所標(biāo)識(shí)的第二虛擬地址空間相關(guān)聯(lián)的第二頁(yè)查找表,調(diào)度與第一虛擬地址空間相關(guān)聯(lián)的第一線(xiàn)程程序以在并行處理子系統(tǒng)的第一處理核心內(nèi)執(zhí)行,以及調(diào)度與第二虛擬地址空間相關(guān)聯(lián)的第二線(xiàn)程程序以在并行處理子系統(tǒng)的第一處理核心或另一個(gè)處理核心內(nèi)執(zhí)行,其中由第一線(xiàn)程程序當(dāng)執(zhí)行時(shí)所生成的虛擬地址請(qǐng)求包含第一ASID,并且由第二線(xiàn)程程序所生成的虛擬地址請(qǐng)求包含第二ASID。[0007]本發(fā)明的其他實(shí)施例包括但不限于包括指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令當(dāng)由處理單元所執(zhí)行時(shí)使處理單元實(shí)施本文所描述的技術(shù),以及包括配置為實(shí)施本文所描述的技術(shù)的處理單元的計(jì)算設(shè)備。[0008]本發(fā)明的一個(gè)優(yōu)勢(shì)在于,GPU可以同時(shí)執(zhí)行具有不同虛擬地址空間的不同任務(wù),從而提高某些應(yīng)用中的GPU利用率和性能。本發(fā)明的另一個(gè)優(yōu)勢(shì)在于,GPU任務(wù)能夠以地址空間隔離來(lái)執(zhí)行,從而提高可靠性并且減少與調(diào)試相關(guān)聯(lián)的開(kāi)發(fā)活動(dòng)?!緦?zhuān)利附圖】【附圖說(shuō)明】[0009]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實(shí)施例得到對(duì)如上面所簡(jiǎn)要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對(duì)其范圍的限制,本發(fā)明可以具有其他等效的實(shí)施例。[0010]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖;[0011]圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于圖1的計(jì)算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;[0012]圖3A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的前端的框圖;[0013]圖3B是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的并行處理單元之一內(nèi)的通用處理集群的框圖;[0014]圖3C是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖3B的流多處理器的一部分的框圖;[0015]圖4A示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、配置為實(shí)現(xiàn)多個(gè)并發(fā)虛擬地址空間的并行處理子系統(tǒng);[0016]圖4B示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的地址空間標(biāo)識(shí)符表?xiàng)l目;[0017]圖4C示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的頁(yè)表?xiàng)l目;[0018]圖4D示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的轉(zhuǎn)譯后備緩沖區(qū)(translationlook-asidebuffer)條目;[0019]圖5示出了根據(jù)本發(fā)明的實(shí)施例的、將地址空間標(biāo)識(shí)符和虛擬地址轉(zhuǎn)譯到物理地址;[0020]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、在一個(gè)物理地址空間內(nèi)共存的兩個(gè)并發(fā)虛擬地址空間;[0021]圖7示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、將并行處理子系統(tǒng)配置為執(zhí)行具有不同虛擬地址空間的多個(gè)線(xiàn)程程序;[0022]圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在并行處理子系統(tǒng)上并發(fā)地執(zhí)行具有不同虛擬地址空間的兩個(gè)或更多個(gè)線(xiàn)程程序的方法步驟的流程圖;[0023]圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在多個(gè)不同虛擬地址空間之一中實(shí)施虛擬到物理地址映射的方法步驟的流程圖;以及[0024]圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于針對(duì)圖形處理單元上下文內(nèi)的任務(wù)而實(shí)施深調(diào)度的方法步驟的流程圖。【具體實(shí)施方式】[0025]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對(duì)本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒(méi)有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。[0026]系統(tǒng)概述[0027]圖1為示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲(chǔ)器橋105的互連路徑通信的中央處理單元(CPU)102和系統(tǒng)存儲(chǔ)器104。存儲(chǔ)器橋105可以是例如北橋芯片,經(jīng)由總線(xiàn)或其他通信路徑106(例如超傳輸(HyperTransport)鏈路)連接到I/O(輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個(gè)或多個(gè)用戶(hù)輸入設(shè)備108(例如鍵盤(pán)、鼠標(biāo))接收用戶(hù)輸入并且經(jīng)由通信路徑106和存儲(chǔ)器橋105將該輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(tǒng)112經(jīng)由總線(xiàn)或第二通信路徑113(例如外圍部件互連(PCI)Express、加速圖形端口或超傳輸鏈路)耦連到存儲(chǔ)器橋105;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110(例如常規(guī)的基于陰極射線(xiàn)管或液晶顯示器的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤(pán)114也連接到I/O橋107。交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(xiàn)(USB)或其他端口連接、壓縮光盤(pán)(CD)驅(qū)動(dòng)器、數(shù)字視頻光盤(pán)(DVD)驅(qū)動(dòng)器、膠片錄制設(shè)備及類(lèi)似部件,也可以連接到I/0橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-Express、AGP(加速圖形端口)、超傳輸或者任何其他總線(xiàn)或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。[0028]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時(shí)保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個(gè)實(shí)施例中,可以將并行處理子系統(tǒng)112與一個(gè)或多個(gè)其他系統(tǒng)元件集成在單個(gè)子系統(tǒng)中,諸如結(jié)合存儲(chǔ)器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。[0029]應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、CPU102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲(chǔ)器104直接連接到CPU102而不是通過(guò)橋,并且其他設(shè)備經(jīng)由存儲(chǔ)器橋105和CPU102與系統(tǒng)存儲(chǔ)器104通信。在其他替代性拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU102,而不是連接到存儲(chǔ)器橋105。而在其他實(shí)施例中,I/O橋107和存儲(chǔ)器橋105可能被集成到單個(gè)芯片上而不是作為一個(gè)或多個(gè)分立設(shè)備存在。大型實(shí)施例可以包括兩個(gè)或更多個(gè)CPU102以及兩個(gè)或更多個(gè)并行處理子系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O橋107。[0030]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的并行處理子系統(tǒng)112。如所示的,并行處理子系統(tǒng)112包括一個(gè)或多個(gè)并行處理單元(PI3U)202,每個(gè)并行處理單元202都耦連到本地并行處理(PP)存儲(chǔ)器204。通常,并行處理子系統(tǒng)包括U個(gè)PPU,其中U≥I。(本文中,類(lèi)似對(duì)象的多個(gè)實(shí)例需要時(shí)以標(biāo)識(shí)對(duì)象的參考數(shù)字和標(biāo)識(shí)實(shí)例的括號(hào)中的數(shù)字來(lái)表示。)PPU202和并行處理存儲(chǔ)器204可使用一個(gè)或多個(gè)集成電路設(shè)備來(lái)實(shí)現(xiàn),諸如可編程處理器、專(zhuān)用集成電路(ASIC)或存儲(chǔ)器設(shè)備,或者以任何其他技術(shù)可行的方式來(lái)實(shí)現(xiàn)。[0031]再參考圖1以及圖2,在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線(xiàn)的圖形處理器,其可以配置為實(shí)施與下述相關(guān)的各種操作:經(jīng)由存儲(chǔ)器橋105和第二通信路徑113從CPU102和/或系統(tǒng)存儲(chǔ)器104所供應(yīng)的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù),與本地并行處理存儲(chǔ)器204(可被用作圖形存儲(chǔ)器,包括例如常規(guī)幀緩沖區(qū)(buffer))交互以存儲(chǔ)和更新像素?cái)?shù)據(jù),傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個(gè)或多個(gè)作為圖形處理器而操作的PPU202以及一個(gè)或多個(gè)用于通用計(jì)算的其他PPU202。這些PTO可以是同樣的或不同的,并且每個(gè)PPU可具有專(zhuān)用并行處理存儲(chǔ)器設(shè)備或不具有專(zhuān)用并行處理存儲(chǔ)器設(shè)備。并行處理子系統(tǒng)112中的一個(gè)或多個(gè)PPU202可輸出數(shù)據(jù)到顯示設(shè)備110,或者并行處理子系統(tǒng)112中的每個(gè)PPU202可輸出數(shù)據(jù)到一個(gè)或多個(gè)顯示設(shè)備110。[0032]在操作中,CPU102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU102發(fā)出控制PPU202的操作的命令。在一些實(shí)施例中,CPU102寫(xiě)入用于每個(gè)PPU202的命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),該數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲(chǔ)器104、并行處理存儲(chǔ)器204、或CPU102和PPU202都可訪(fǎng)問(wèn)的其他存儲(chǔ)位置中。將指向每個(gè)數(shù)據(jù)結(jié)構(gòu)的指針寫(xiě)到入棧緩沖區(qū)(pushbuffer)以發(fā)起對(duì)數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU202從一個(gè)或多個(gè)入棧緩沖區(qū)讀取命令流,然后相對(duì)于CPU102的操作異步地執(zhí)行命令。可以經(jīng)由設(shè)備驅(qū)動(dòng)程序103由應(yīng)用程序?yàn)槊總€(gè)入棧緩沖區(qū)指定執(zhí)行優(yōu)先級(jí)以控制對(duì)不同入棧緩沖區(qū)的調(diào)度。[0033]現(xiàn)在返回參考圖2和圖1,每個(gè)PPU202包括經(jīng)由連接到存儲(chǔ)器橋105(或者,在一個(gè)替代性實(shí)施例中,直接連接到CPU102)的通信路徑113與計(jì)算機(jī)系統(tǒng)100的其余部分通信的I/O(輸入/輸出)單元205。PPU202到計(jì)算機(jī)系統(tǒng)100的其余部分的連接也可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112可實(shí)現(xiàn)為可插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中的插卡。在其他實(shí)施例中,PPU202可以和諸如存儲(chǔ)器橋105或I/O橋107的總線(xiàn)橋集成在單個(gè)芯片上。而在其他實(shí)施例中,PPU202的一些或所有元件可以和CPU102集成在單個(gè)芯片上。[0034]在一個(gè)實(shí)施例中,通信路徑113是PCIExpress鏈路,如本領(lǐng)域所知的,其中專(zhuān)用通道被分配到每個(gè)PPU202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳送的包(或其他信號(hào)),并且還從通信路徑113接收所有傳入的包(或其他信號(hào)),將傳入的包引導(dǎo)到PPU202的適當(dāng)部件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口206,而將與存儲(chǔ)器操作相關(guān)的命令(例如,對(duì)并行處理存儲(chǔ)器204的讀取或?qū)懭?引導(dǎo)到存儲(chǔ)器交叉開(kāi)關(guān)單元210。主機(jī)接口206讀取每個(gè)入棧緩沖區(qū),并且將存儲(chǔ)在入棧緩沖區(qū)中的命令流輸出到前端212。[0035]有利地,每個(gè)PPU202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU202(0)包括處理集群陣列230,該陣列230包括C個(gè)通用處理集群(GPC)208,其中C≥I。每個(gè)GPC208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線(xiàn)程,其中每個(gè)線(xiàn)程是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC208用于處理不同類(lèi)型的程序或用于實(shí)施不同類(lèi)型的計(jì)算。GPC208的分配可以取決于因每種類(lèi)型的程序或計(jì)算所產(chǎn)生的工作量而變化。[0036]GPC208從任務(wù)/工作單元207內(nèi)的工作分布單元接收所要執(zhí)行的處理任務(wù)。工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲(chǔ)在存儲(chǔ)器中的處理任務(wù)的指針。指向TMD的指針包括在存儲(chǔ)為入棧緩沖區(qū)并由前端單元212從主機(jī)接口206接收的命令流中??梢跃幋a為T(mén)MD的處理任務(wù)包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個(gè)TMD所指定的處理發(fā)起前,將GPC208配置為有效狀態(tài)??梢詾槊總€(gè)TMD指定用來(lái)調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級(jí)。還可從處理集群陣列230接收處理任務(wù)??蛇x地,TMD可包括控制將TMD添加到處理任務(wù)列表(或指向處理任務(wù)的指針的列表)的頭部還是尾部的參數(shù),從而提供除優(yōu)先級(jí)以外的另一級(jí)別的控制。[0037]存儲(chǔ)器接口214包括D個(gè)分區(qū)單元215,每個(gè)分區(qū)單元215直接耦連到并行處理存儲(chǔ)器204的一部分,其中D>I。如所示的,分區(qū)單元215的數(shù)目一般等于動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)220的數(shù)目。在其他實(shí)施例中,分區(qū)單元215的數(shù)目也可以不等于存儲(chǔ)器設(shè)備的數(shù)目。本領(lǐng)域的技術(shù)人員應(yīng)該理解DRAM220可以用其他合適的存儲(chǔ)設(shè)備來(lái)替代并且可以是一般常規(guī)的設(shè)計(jì)。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM220加以存儲(chǔ),這允許分區(qū)單元215并行寫(xiě)入每個(gè)渲染目標(biāo)的各部分以有效地使用并行處理存儲(chǔ)器204的可用帶寬。[0038]任何一個(gè)GPC208都可以處理要被寫(xiě)到并行處理存儲(chǔ)器204內(nèi)的任何DRAM220的數(shù)據(jù)。交叉開(kāi)關(guān)單元210配置為路由每個(gè)GPC208的輸出到任何分區(qū)單元215的輸入或到另一個(gè)GPC208用于進(jìn)一步處理。GPC208通過(guò)交叉開(kāi)關(guān)單元210與存儲(chǔ)器接口214通信,以對(duì)各種外部存儲(chǔ)器設(shè)備進(jìn)行讀取或?qū)懭搿T谝粋€(gè)實(shí)施例中,交叉開(kāi)關(guān)單元210具有到存儲(chǔ)器接口214的連接以和I/O單元205通信,以及到本地并行處理存儲(chǔ)器204的連接,從而使得在不同GPC208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲(chǔ)器104或?qū)τ赑PU202而言非本地的其他存儲(chǔ)器通信。在圖2所示的實(shí)施例中,交叉開(kāi)關(guān)單元210直接與I/O單元205連接。交叉開(kāi)關(guān)單元210可使用虛擬信道來(lái)分開(kāi)GPC208與分區(qū)單元215之間的業(yè)務(wù)流。[0039]另外,GPC208可被編程以執(zhí)行與種類(lèi)繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線(xiàn)性和非線(xiàn)性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過(guò)濾、建模操作(例如,應(yīng)用物理定律以確定對(duì)象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellation)著色器、頂點(diǎn)著色器、幾何著色器、和/或像素著色器程序)等等。PPU202可將數(shù)據(jù)從系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204轉(zhuǎn)移到內(nèi)部(片上)存儲(chǔ)器中,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫(xiě)回到系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)部件訪(fǎng)問(wèn),所述其他系統(tǒng)部件包括CPU102或另一個(gè)并行處理子系統(tǒng)112。[0040]PPU202可配備有任何容量(amount)的本地并行處理存儲(chǔ)器204,包括沒(méi)有本地存儲(chǔ)器,并且可以以任何組合方式使用本地存儲(chǔ)器和系統(tǒng)存儲(chǔ)器。例如,在統(tǒng)一存儲(chǔ)器架構(gòu)(UMA)實(shí)施例中,PPU202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專(zhuān)用的圖形(并行處理)存儲(chǔ)器,并且PPU202會(huì)以排他或幾乎排他的方式使用系統(tǒng)存儲(chǔ)器。在UMA實(shí)施例中,PPU202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCIExpress)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信手段將PPU202連接到系統(tǒng)存儲(chǔ)器。[0041]如上所示,在并行處理子系統(tǒng)112中可以包括任何數(shù)目的PPU202。例如,可在單個(gè)插卡上提供多個(gè)PPU202、或可將多個(gè)插卡連接到通信路徑113、或可將一個(gè)或多個(gè)PPU202集成到橋式芯片中。在多PPU系統(tǒng)中的PPU202可以彼此同樣或不同。例如,不同的PPU202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲(chǔ)器等等。在存在多個(gè)PPU202的情況下,可并行操作那些PI3U從而以高于單個(gè)PPU202所可能達(dá)到的吞吐量來(lái)處理數(shù)據(jù)。包含一個(gè)或多個(gè)PPU202的系統(tǒng)可以以各種配置和形式因素來(lái)實(shí)現(xiàn),包括臺(tái)式電腦、筆記本電腦或手持式個(gè)人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺(tái)、嵌入式系統(tǒng)等等。[0042]多個(gè)并發(fā)任務(wù)調(diào)度[0043]可以在GPC208上并發(fā)執(zhí)行多個(gè)處理任務(wù)并且處理任務(wù)在執(zhí)行期間可以生成一個(gè)或多個(gè)“子”處理任務(wù)。任務(wù)/工作單元207接收任務(wù)并動(dòng)態(tài)調(diào)度處理任務(wù)和子處理任務(wù)用于由GPC208執(zhí)行。[0044]圖3A為根據(jù)本發(fā)明的一個(gè)實(shí)施例的圖2的任務(wù)/工作單元207的框圖。任務(wù)/工作單元207包括任務(wù)管理單元300和工作分布單元340。任務(wù)管理單元300基于執(zhí)行優(yōu)先級(jí)級(jí)別來(lái)組織所要調(diào)度的任務(wù)。對(duì)于每個(gè)優(yōu)先級(jí)級(jí)別,任務(wù)管理單元300將指向與任務(wù)相對(duì)應(yīng)的TMD322的指針的列表存儲(chǔ)在調(diào)度器表321中,其中所述列表可以實(shí)現(xiàn)為鏈表。可以將TMD322存儲(chǔ)在PP存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中。任務(wù)管理單元300接受任務(wù)并將任務(wù)存儲(chǔ)在調(diào)度器表321中的速度與任務(wù)管理單元300調(diào)度任務(wù)用于執(zhí)行的速度是解耦的。因此,任務(wù)管理單元300可以在調(diào)度任務(wù)之前收集數(shù)個(gè)任務(wù)。之后可以基于優(yōu)先級(jí)信息或使用其他技術(shù)諸如輪叫調(diào)度來(lái)調(diào)度所收集的任務(wù)。[0045]工作分布單元340包括具有槽的任務(wù)表345,每個(gè)槽可以被用于正在執(zhí)行的任務(wù)的TMD322所占用。當(dāng)任務(wù)表345中有空閑槽時(shí),任務(wù)管理單元300可以調(diào)度任務(wù)用于執(zhí)行。當(dāng)沒(méi)有空閑槽時(shí),未占用槽的較高優(yōu)先級(jí)任務(wù)可以驅(qū)逐占用槽的較低優(yōu)先級(jí)任務(wù)。當(dāng)任務(wù)被驅(qū)逐時(shí),該任務(wù)被停止,并且如果該任務(wù)的執(zhí)行沒(méi)有完成,則將指向該任務(wù)的指針添加到所要調(diào)度的任務(wù)指針的列表以使得任務(wù)的執(zhí)行稍后將恢復(fù)。當(dāng)生成子處理任務(wù)時(shí),在任務(wù)的執(zhí)行期間,將指向該子任務(wù)的指針添加到所要調(diào)度的任務(wù)指針的列表??梢杂稍谔幚砑宏嚵?30中執(zhí)行的TMD322生成子任務(wù)。[0046]不同于由任務(wù)/工作單元207從前端212接收的任務(wù),子任務(wù)從處理集群陣列230接收。子任務(wù)不被插入入棧緩沖區(qū)或傳送到前端。當(dāng)生成子任務(wù)或?qū)⒂糜谧尤蝿?wù)的數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器中時(shí)不通知CPU102。通過(guò)入棧緩沖區(qū)提供的任務(wù)與子任務(wù)之間的另一個(gè)區(qū)別是通過(guò)入棧緩沖區(qū)提供的任務(wù)由應(yīng)用程序來(lái)定義而子任務(wù)是在任務(wù)執(zhí)行期間動(dòng)態(tài)生成的。[0047]任務(wù)處理概述[0048]圖3B為根據(jù)本發(fā)明的一個(gè)實(shí)施例的在圖2的PPU202之一內(nèi)的GPC208的框圖。每個(gè)GPC208可配置為并行執(zhí)行大量線(xiàn)程,其中術(shù)語(yǔ)“線(xiàn)程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令、多數(shù)據(jù)(SIMD)指令發(fā)出技術(shù)用于在不提供多個(gè)獨(dú)立指令單元的情況下支持大量線(xiàn)程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線(xiàn)程(SMT)技術(shù)用于使用配置為向GPC208中的每一個(gè)內(nèi)的處理引擎集發(fā)出指令的公共指令單元來(lái)支持大量一般來(lái)說(shuō)同步的線(xiàn)程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過(guò)給定線(xiàn)程程序允許不同線(xiàn)程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。[0049]經(jīng)由將處理任務(wù)分布到流多處理器(SM)310的管線(xiàn)管理器305來(lái)有利地控制GPC208的操作。管線(xiàn)管理器305還可配置為通過(guò)為由SM310所輸出的處理數(shù)據(jù)指定目的地來(lái)控制工作分布交叉開(kāi)關(guān)330。[0050]在一個(gè)實(shí)施例中,每個(gè)GPC208包括M個(gè)SM310,其中M≥1,每個(gè)SM310配置為處理一個(gè)或多個(gè)線(xiàn)程組。另外,如本領(lǐng)域已知的,每個(gè)SM310有利地包括可以管線(xiàn)化的同樣功能執(zhí)行單元集(例如執(zhí)行單元和加載-存儲(chǔ)單元一在圖3C中示出為Exec單元302和LSU303),其允許在前一個(gè)指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任何組合。在一個(gè)實(shí)施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、移位和各種代數(shù)函數(shù)的計(jì)算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對(duì)數(shù)函數(shù)等等);以及相同功能單元硬件可均衡地用來(lái)實(shí)施不同的操作。[0051]如本文之前所定義的,傳送到特定GPC208的一系列指令構(gòu)成線(xiàn)程,并且跨SM310內(nèi)的并行處理引擎(未示出)的某一數(shù)目的并發(fā)執(zhí)行線(xiàn)程的集合在本文中稱(chēng)為“線(xiàn)程束(warp)”或“線(xiàn)程組”。如本文所使用的,“線(xiàn)程組”是指對(duì)不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線(xiàn)程,所述組的一個(gè)線(xiàn)程被指派到SM310內(nèi)的不同處理引擎。線(xiàn)程組可以包括比SM310內(nèi)的處理引擎數(shù)目少的線(xiàn)程,在這種情況下一些處理引擎將在該線(xiàn)程組正在被處理的周期期間處于閑置狀態(tài)。線(xiàn)程組還可以包括比SM310內(nèi)的處理引擎數(shù)目多的線(xiàn)程,在這種情況下處理將在連續(xù)的時(shí)鐘周期內(nèi)發(fā)生。因?yàn)槊總€(gè)SM310可以并發(fā)支持多達(dá)G個(gè)線(xiàn)程組,結(jié)果是在任何給定時(shí)間在GPC208中可以執(zhí)行多達(dá)G*M個(gè)線(xiàn)程組。[0052]此外,多個(gè)相關(guān)線(xiàn)程組可以在SM310內(nèi)同時(shí)活動(dòng)(在執(zhí)行的不同階段)。該線(xiàn)程組集合在本文中稱(chēng)為“協(xié)作線(xiàn)程陣列”(“CTA”)或“線(xiàn)程陣列”。特定CTA的大小等于m*k,其中k是線(xiàn)程組中并發(fā)執(zhí)行線(xiàn)程的數(shù)目并且通常是SM310內(nèi)的并行處理引擎數(shù)目的整數(shù)倍,以及m是SM310內(nèi)同時(shí)活動(dòng)的線(xiàn)程組的數(shù)目。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲(chǔ)器或寄存器的容量來(lái)確定。[0053]每個(gè)SM310包含一級(jí)(LI)高速緩存(圖3C所示)或使用用于實(shí)施加載和存儲(chǔ)操作的SM310外部的相應(yīng)LI高速緩存中的空間。每個(gè)SM310都還有權(quán)訪(fǎng)問(wèn)在所有GPC208之間共享并且可用于在線(xiàn)程之間轉(zhuǎn)移數(shù)據(jù)的二級(jí)(L2)高速緩存。最后,SM310還有權(quán)訪(fǎng)問(wèn)片外“全局”存儲(chǔ)器,所述“全局”存儲(chǔ)器可以包括例如并行處理存儲(chǔ)器204和/或系統(tǒng)存儲(chǔ)器104。應(yīng)該理解,PPU202外部的任何存儲(chǔ)器可用作全局存儲(chǔ)器。此外,一點(diǎn)五級(jí)(L1.5)高速緩存335可以包括在GPC208內(nèi),其配置為接收并保持由SM310所請(qǐng)求的經(jīng)由存儲(chǔ)器接口214從存儲(chǔ)器獲取的數(shù)據(jù),包括指令、一致(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù),并將所請(qǐng)求的數(shù)據(jù)提供給SM310。在GPC208中具有多個(gè)SM310的實(shí)施例有利地共享了高速緩存在L1.5高速緩存335中的公共指令和數(shù)據(jù)。[0054]每個(gè)GPC208可以包括配置為將虛擬地址映射到物理地址中的存儲(chǔ)器管理單元(MMU)328。在其他實(shí)施例中,MMU328可以駐留在存儲(chǔ)器接口214、多處理器SM310或LI高速緩存320內(nèi)。MMU328配置為經(jīng)由頁(yè)表420將虛擬地址映射到物理地址。MMU328可以包括地址轉(zhuǎn)譯后備緩沖區(qū)(TLB)或高速緩存以存儲(chǔ)部分頁(yè)表420。物理地址經(jīng)處理以分布表面數(shù)據(jù)訪(fǎng)問(wèn)位置來(lái)允許高效請(qǐng)求在分區(qū)單元215之間交錯(cuò)。高速緩存行索引可用于指示用于聞速緩存行的請(qǐng)求是命中還是未命中。[0055]在圖形和計(jì)算應(yīng)用中,GPC208可配置為使得每個(gè)SM310耦連到用于實(shí)施紋理映射操作例如確定紋理樣本位置、讀取紋理數(shù)據(jù)以及過(guò)濾該紋理數(shù)據(jù)的紋理單元315。從內(nèi)部紋理LI高速緩存(未示出)或者在一些實(shí)施例中從SM310內(nèi)的LI高速緩存讀取紋理數(shù)據(jù)并根據(jù)需要從在所有GPC208之間共享的L2高速緩存、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中獲取紋理數(shù)據(jù)。為了將所處理的任務(wù)提供給另一個(gè)GPC208用于進(jìn)一步處理或?yàn)榱私?jīng)由交叉開(kāi)關(guān)單元210將所處理的任務(wù)存儲(chǔ)在L2高速緩存、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中,每個(gè)SM310將所處理的任務(wù)輸出到工作分布交叉開(kāi)關(guān)330。preROP(預(yù)光柵操作)325配置為從SM310接收數(shù)據(jù)、將數(shù)據(jù)引導(dǎo)到分區(qū)單元215內(nèi)的ROP單元以及針對(duì)顏色混合實(shí)施優(yōu)化、組織像素顏色數(shù)據(jù)和實(shí)施地址轉(zhuǎn)譯。[0056]應(yīng)該理解本文所述的內(nèi)核架構(gòu)是示例性的并且變化和修改都是可能的。任何數(shù)目的處理單元例如SM310或紋理單元315、preR0P325可以包括在GPC208內(nèi)。進(jìn)一步地,如圖2所示,PPU202可以包括任何數(shù)目的GPC208,所述GPC208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個(gè)GPC208接收特定處理任務(wù)。進(jìn)一步地,每個(gè)GPC208有利地使用分開(kāi)且各異的處理單元、LI高速緩存來(lái)獨(dú)立于其他GPC208操作以為一個(gè)或多個(gè)應(yīng)用程序執(zhí)行任務(wù)。[0057]本領(lǐng)域普通技術(shù)人員應(yīng)該理解圖1、2、3A和3B所描述的架構(gòu)決不限制本發(fā)明的范圍并且在不脫離本發(fā)明范圍的情況下本文所教導(dǎo)的技術(shù)可以在任何經(jīng)適當(dāng)配置的處理單元上實(shí)現(xiàn),所述處理單元包括但不限于一個(gè)或多個(gè)CPU、一個(gè)或多個(gè)多核CPU、一個(gè)或多個(gè)PPU202、一個(gè)或多個(gè)GPC208、一個(gè)或多個(gè)圖形或?qū)S锰幚韱卧鹊?。[0058]在本發(fā)明的實(shí)施例中,使用計(jì)算系統(tǒng)的PPU202或其他處理器來(lái)使用線(xiàn)程陣列執(zhí)行通用計(jì)算是可取的。為線(xiàn)程陣列中的每個(gè)線(xiàn)程指派在線(xiàn)程的執(zhí)行期間對(duì)于線(xiàn)程可訪(fǎng)問(wèn)的唯一的線(xiàn)程標(biāo)識(shí)符(“線(xiàn)程ID”)。可被定義為一維或多維數(shù)值的線(xiàn)程ID控制線(xiàn)程處理行為的各方面。例如,線(xiàn)程ID可用于確定線(xiàn)程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線(xiàn)程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。[0059]每線(xiàn)程指令序列可包括定義線(xiàn)程陣列的代表性線(xiàn)程和一個(gè)或多個(gè)其他線(xiàn)程之間的協(xié)作行為的至少一個(gè)指令。例如,每線(xiàn)程指令序列可能包括在序列中的特定點(diǎn)處掛起用于代表性線(xiàn)程的操作執(zhí)行直到諸如其他線(xiàn)程的一個(gè)或多個(gè)到達(dá)該特定點(diǎn)的時(shí)間為止的指令、用于代表性線(xiàn)程將數(shù)據(jù)存儲(chǔ)在其他線(xiàn)程的一個(gè)或多個(gè)有權(quán)訪(fǎng)問(wèn)的共享存儲(chǔ)器中的指令、用于代表性線(xiàn)程原子地讀取和更新存儲(chǔ)在其他線(xiàn)程的一個(gè)或多個(gè)基于它們的線(xiàn)程ID有權(quán)訪(fǎng)問(wèn)的共享存儲(chǔ)器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計(jì)算數(shù)據(jù)將從其讀取的共享存儲(chǔ)器中的地址的指令,該地址是線(xiàn)程ID的函數(shù)。通過(guò)定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測(cè)的方式由CTA的一個(gè)線(xiàn)程將數(shù)據(jù)寫(xiě)入共享存儲(chǔ)器中的給定位置并由同一個(gè)CTA的不同線(xiàn)程從該位置讀取數(shù)據(jù)。因此,數(shù)據(jù)在線(xiàn)程之間共享的任何期望模式可以得到支持,以及CTA中的任何線(xiàn)程可以與同一個(gè)CTA中的任何其他線(xiàn)程共享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線(xiàn)程之間的共享,則其范圍由CTA程序確定;因此,應(yīng)該理解的是,在使用CTA的特定應(yīng)用中,CTA的線(xiàn)程可能會(huì)或可能不會(huì)真正互相共享數(shù)據(jù),這取決于CTA程序,術(shù)語(yǔ)“CTA”和“線(xiàn)程陣列”在本文作為同義詞使用。[0060]圖3C為根據(jù)本發(fā)明的一個(gè)實(shí)施例的圖3B的SM310的框圖。SM310包括配置為經(jīng)由L1.5高速緩存335從存儲(chǔ)器接收指令和常數(shù)的指令LI高速緩存370。線(xiàn)程束調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常數(shù)并根據(jù)該指令和常數(shù)控制本地寄存器堆304和SM310功能單元。SM310功能單元包括N個(gè)exec(執(zhí)行或處理)單元302和P個(gè)加載-存儲(chǔ)單元(LSU)303。[0061]SM310提供具有不同級(jí)別的可訪(fǎng)問(wèn)性的片上(內(nèi)部)數(shù)據(jù)存儲(chǔ)。特殊寄存器(未示出)對(duì)于LSU303可讀但不可寫(xiě)并且用于存儲(chǔ)定義每個(gè)線(xiàn)程的“位置”的參數(shù)。在一個(gè)實(shí)施例中,特殊寄存器包括每線(xiàn)程(或SM310內(nèi)的每exec單元302)—個(gè)的存儲(chǔ)線(xiàn)程ID的寄存器;每個(gè)線(xiàn)程ID寄存器僅由各自的exec單元302可訪(fǎng)問(wèn)。特殊寄存器還可以包括附加寄存器,其對(duì)于執(zhí)行由TMD322所代表的同一個(gè)處理任務(wù)的所有線(xiàn)程(或由所有LSU303)可讀,其存儲(chǔ)CTA標(biāo)識(shí)符、CTA維數(shù)、CTA所屬網(wǎng)格(grid)的維數(shù)(或隊(duì)列位置,如果TMD322編碼隊(duì)列任務(wù)而不是網(wǎng)格任務(wù)的話(huà))、以及CTA被指派到的TMD322的標(biāo)識(shí)符。[0062]如果TMD322是網(wǎng)格TMD,則TMD322的執(zhí)行會(huì)啟動(dòng)和執(zhí)行固定數(shù)目的CTA以處理存儲(chǔ)在隊(duì)列525中的固定量的數(shù)據(jù)。將CTA的數(shù)目指定為網(wǎng)格寬度、高度和深度的乘積。可以將固定量的數(shù)據(jù)存儲(chǔ)在TMD322中或TMD322可以存儲(chǔ)指向?qū)⒂蒀TA所處理的數(shù)據(jù)的指針。TMD322還存儲(chǔ)由CTA所執(zhí)行的程序的開(kāi)始地址。[0063]如果TMD322是隊(duì)列TMD,那么使用TMD322的隊(duì)列特點(diǎn),這意味著將要被處理的數(shù)據(jù)量不一定是固定的。隊(duì)列條目存儲(chǔ)用于由指派到TMD322的CTA所處理的數(shù)據(jù)。隊(duì)列條目還可以代表在線(xiàn)程執(zhí)行期間由另一個(gè)TMD322所生成的子任務(wù),從而提供嵌套并行性。通常線(xiàn)程或包括線(xiàn)程的CTA的執(zhí)行被掛起直到子任務(wù)的執(zhí)行完成。可以將隊(duì)列存儲(chǔ)在TMD322中或與TMD322分開(kāi)存儲(chǔ),在該情況下TMD322存儲(chǔ)指向該隊(duì)列的隊(duì)列指針。有利地,當(dāng)代表子任務(wù)的TMD322正在執(zhí)行時(shí)可以將由子任務(wù)所生成的數(shù)據(jù)寫(xiě)到隊(duì)列。隊(duì)列可以實(shí)現(xiàn)為循環(huán)隊(duì)列以使得數(shù)據(jù)的總量不限于隊(duì)列的大小。[0064]屬于網(wǎng)格的CTA具有指示網(wǎng)格內(nèi)各自CTA的位置的隱含網(wǎng)格寬度、高度和深度參數(shù)。在初始化期間響應(yīng)于經(jīng)由前端212從設(shè)備驅(qū)動(dòng)程序103所接收的命令來(lái)寫(xiě)特殊寄存器并且在處理任務(wù)的執(zhí)行期間特殊寄存器不改變。前端212調(diào)度每個(gè)處理任務(wù)用于執(zhí)行。每個(gè)CTA與具體TMD322相關(guān)聯(lián)用于一個(gè)或多個(gè)任務(wù)的并發(fā)執(zhí)行。此外,單個(gè)GPC208可以并發(fā)執(zhí)行多個(gè)任務(wù)。[0065]參數(shù)存儲(chǔ)器(未示出)存儲(chǔ)可由同一個(gè)CTA內(nèi)的任何線(xiàn)程(或任何LSU303)讀取但不可由其寫(xiě)入的運(yùn)行時(shí)間參數(shù)(常數(shù))。在一個(gè)實(shí)施例中,設(shè)備驅(qū)動(dòng)程序103在引導(dǎo)SM310開(kāi)始執(zhí)行使用參數(shù)的任務(wù)之前將這些參數(shù)提供給參數(shù)存儲(chǔ)器。任何CTA內(nèi)的任何線(xiàn)程(或SM310內(nèi)的任何exec單元302)可以通過(guò)存儲(chǔ)器接口214訪(fǎng)問(wèn)全局存儲(chǔ)器??梢詫⑷执鎯?chǔ)器的各部分存儲(chǔ)在LI高速緩存320中。[0066]每個(gè)線(xiàn)程將本地寄存器堆304用作暫存空間;每個(gè)寄存器被分配以專(zhuān)用于一個(gè)線(xiàn)程,并且在本地寄存器堆304的任何部分中的數(shù)據(jù)僅對(duì)于寄存器被分配到的線(xiàn)程可訪(fǎng)問(wèn)。本地寄存器堆304可以實(shí)現(xiàn)為物理上或邏輯上分為P個(gè)通道的寄存器堆,每個(gè)通道具有一定數(shù)目的條目(其中每個(gè)條目可以存儲(chǔ)例如32位字)。將一個(gè)通道指派到N個(gè)exec單元302和P個(gè)下載-存儲(chǔ)單元LSU303的每一個(gè),并且利用用于執(zhí)行同一個(gè)程序的不同線(xiàn)程的數(shù)據(jù)來(lái)填充不同通道中的相應(yīng)條目以幫助SIMD執(zhí)行。可以將通道的不同部分分配到G個(gè)并發(fā)線(xiàn)程組中的不同線(xiàn)程組,以使得本地寄存器堆304中的給定條目?jī)H對(duì)于特定線(xiàn)程可訪(fǎng)問(wèn)。在一個(gè)實(shí)施例中,保留本地寄存器堆304內(nèi)的某些條目用于存儲(chǔ)線(xiàn)程標(biāo)識(shí)符,實(shí)現(xiàn)特殊寄存器之一。此外,一致LI高速緩存375存儲(chǔ)用于N個(gè)exec單元302和P個(gè)下載-存儲(chǔ)單元LSU303的每個(gè)通道的一致值或常數(shù)值。[0067]共享存儲(chǔ)器306對(duì)于單個(gè)CTA內(nèi)的線(xiàn)程可訪(fǎng)問(wèn);換言之,共享存儲(chǔ)器306中的任何位置對(duì)于同一個(gè)CTA內(nèi)的任何線(xiàn)程(或?qū)τ赟M310內(nèi)的任何處理引擎)可訪(fǎng)問(wèn)。共享存儲(chǔ)器306可以實(shí)現(xiàn)為具有允許任何處理引擎對(duì)共享存儲(chǔ)器中的任何位置讀取或?qū)懭氲幕ミB的共享寄存器堆或共享片上高速緩存存儲(chǔ)器。在其他實(shí)施例中,共享狀態(tài)空間可能映射到片外存儲(chǔ)器的每CTA區(qū)上并被高速緩存在LI高速緩存320中。參數(shù)存儲(chǔ)器可以實(shí)現(xiàn)為在實(shí)現(xiàn)共享存儲(chǔ)器306的同一個(gè)共享寄存器堆或共享高速緩存存儲(chǔ)器內(nèi)的指定部分,或者實(shí)現(xiàn)為L(zhǎng)SU303對(duì)其具有只讀訪(fǎng)問(wèn)權(quán)限的分開(kāi)的共享寄存器堆或片上高速緩存存儲(chǔ)器。在一個(gè)實(shí)施例中,實(shí)現(xiàn)參數(shù)存儲(chǔ)器的區(qū)域還用于存儲(chǔ)CTAID和任務(wù)ID,以及CTA和網(wǎng)格維數(shù)或隊(duì)列位置,實(shí)現(xiàn)特殊寄存器的各部分。SM310中的每個(gè)LSU303耦連到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲(chǔ)器空間中所指定的加載和存儲(chǔ)指令所提供的地址轉(zhuǎn)換為每個(gè)各異存儲(chǔ)器空間中的地址。因此,指令可以用于通過(guò)指定統(tǒng)一存儲(chǔ)器空間中的地址來(lái)訪(fǎng)問(wèn)本地、共享或全局存儲(chǔ)器空間中的任何一個(gè)。[0068]每個(gè)SM310中的LI高速緩存320可以用于高速緩存私有的每線(xiàn)程本地?cái)?shù)據(jù)還有每應(yīng)用全局?jǐn)?shù)據(jù)。在一些實(shí)施例中,可以將每CTA共享數(shù)據(jù)高速緩存在LI高速緩存320中。LSU303經(jīng)由存儲(chǔ)器和高速緩存互連380耦連到共享存儲(chǔ)器306和LI高速緩存320。[0069]獨(dú)立虛擬地址空間[0070]本發(fā)明的實(shí)施例使諸如GPU的并行處理子系統(tǒng)能夠同時(shí)執(zhí)行具有不同的、獨(dú)立的虛擬地址空間的線(xiàn)程程序。每個(gè)虛擬地址空間可以與一個(gè)或多個(gè)其他虛擬地址空間并存,這使GPU能夠同時(shí)執(zhí)行線(xiàn)程程序。每個(gè)線(xiàn)程程序可以在與相對(duì)應(yīng)的應(yīng)用進(jìn)程相關(guān)聯(lián)的虛擬地址空間內(nèi)操作,所述應(yīng)用進(jìn)程可以分配存儲(chǔ)器并將虛擬地址引用傳遞給線(xiàn)程程序。通過(guò)使并行處理系統(tǒng)能夠同時(shí)執(zhí)行不同虛擬地址空間中的多個(gè)線(xiàn)程程序,可以針對(duì)更寬廣范圍的應(yīng)用達(dá)到較高的GPU利用率和性能。[0071]圖4A示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、配置為實(shí)現(xiàn)多個(gè)并發(fā)虛擬地址空間的圖1的并行處理子系統(tǒng)112。在某些實(shí)施例中,并行處理子系統(tǒng)112包括GPU。對(duì)于實(shí)現(xiàn)統(tǒng)一虛擬存儲(chǔ)器(UVM)的實(shí)施例而言,每個(gè)應(yīng)用進(jìn)程460可以包括要在應(yīng)用進(jìn)程460和任何相關(guān)聯(lián)的GPU計(jì)算任務(wù)之間所統(tǒng)一的虛擬地址空間內(nèi)被實(shí)施的GPU計(jì)算任務(wù)。該統(tǒng)一允許應(yīng)用進(jìn)程460和GPU計(jì)算任務(wù)無(wú)縫地傳達(dá)存儲(chǔ)器引用。一般而言,每個(gè)應(yīng)用進(jìn)程460在與其他應(yīng)用進(jìn)程460不同的虛擬地址空間內(nèi)操作。每個(gè)應(yīng)用上下文包括由主機(jī)操作系統(tǒng)所維持的應(yīng)用上下文頁(yè)表用于將與應(yīng)用相關(guān)聯(lián)的虛擬地址空間映射到典型地由應(yīng)用進(jìn)程460所共享的物理地址空間。[0072]給定的應(yīng)用進(jìn)程460可以經(jīng)由到驅(qū)動(dòng)程序103的執(zhí)行請(qǐng)求而發(fā)起GPU計(jì)算任務(wù)的執(zhí)行,其通過(guò)將用于GPU計(jì)算任務(wù)的執(zhí)行信息添加到GPU上下文450和將GPU上下文450添力口至I」用于GPU的工作的隊(duì)列來(lái)響應(yīng)。GPU上下文450包括任務(wù)元數(shù)據(jù)(TMD)452,所述任務(wù)元數(shù)據(jù)(TMD)452包括用于執(zhí)行一個(gè)或多個(gè)線(xiàn)程程序的信息,所述一個(gè)或多個(gè)線(xiàn)程程序?qū)崿F(xiàn)可以在GPU內(nèi)同時(shí)執(zhí)行的一個(gè)或多個(gè)GPU計(jì)算任務(wù)。一個(gè)或多個(gè)線(xiàn)程程序可以與在同一GPU上下文450內(nèi)所定義的一個(gè)或多個(gè)不同虛擬地址空間相關(guān)聯(lián)。用于一個(gè)虛擬地址空間的頁(yè)表針對(duì)TMD452的一個(gè)實(shí)例而定義。TMD452的每個(gè)實(shí)例包括用于一個(gè)GPU上下文450內(nèi)的一個(gè)相關(guān)聯(lián)的線(xiàn)程程序的執(zhí)行信息。[0073]在給定的TMD452內(nèi)的頁(yè)表可以來(lái)源于相對(duì)應(yīng)的應(yīng)用上下文頁(yè)表??商娲?,在給定的TMD452內(nèi)的頁(yè)表可以引用相對(duì)應(yīng)的應(yīng)用上下文頁(yè)表。在一個(gè)實(shí)施例中,應(yīng)用上下文450駐留在系統(tǒng)存儲(chǔ)器104內(nèi)。驅(qū)動(dòng)程序103內(nèi)的資源管理器(RM)454配置為將每個(gè)被指派到TMD452的一個(gè)或多個(gè)線(xiàn)程程序裝入一個(gè)GPU上下文450用于在單個(gè)GPU上下文內(nèi)的同時(shí)執(zhí)行。在一個(gè)實(shí)施例中,代理(proxy)456包括配置為將請(qǐng)求傳達(dá)到RM454的用戶(hù)空間進(jìn)程。例如,某些執(zhí)行請(qǐng)求和分配請(qǐng)求可以經(jīng)由代理456被傳送到RM454。[0074]如圖2先前所描述的,主機(jī)206配置為檢索駐留在諸如系統(tǒng)存儲(chǔ)器104的存儲(chǔ)器中的數(shù)據(jù)。數(shù)據(jù)可以包括與排隊(duì)等候執(zhí)行的一個(gè)或多個(gè)GPU上下文450相關(guān)的信息。主機(jī)206順序地一次選擇一個(gè)GPU上下文450用于執(zhí)行。前端212讀取GPU上下文450內(nèi)的TMD452并且將PPU202配置為基于GPU上下文450執(zhí)行一個(gè)或多個(gè)線(xiàn)程程序。前端上下文交換器(FECS)407將MMU328配置為將適當(dāng)?shù)奶摂M地址提供到物理地址映射。給定的GPU上下文450的執(zhí)行需要等待直到與GPU上下文450相關(guān)聯(lián)的所有頁(yè)表被FECS407配置為止。在一個(gè)實(shí)現(xiàn)方案中,F(xiàn)ECS407生成“完成”(“done”)信號(hào)以指示頁(yè)表和相關(guān)的配置步驟完成,從而提示FE212以向任務(wù)/工作單元207指示頁(yè)表配置完成。該指示使任務(wù)/工作單元207能夠開(kāi)始調(diào)度與頁(yè)表相關(guān)聯(lián)的任務(wù)。[0075]TMD452內(nèi)的每個(gè)頁(yè)表由FECS407經(jīng)由綁定命令(bindcommand)傳送到MMU328而與地址空間標(biāo)識(shí)符(ASID)相關(guān)聯(lián)。每個(gè)線(xiàn)程程序與ASID相關(guān)聯(lián),所述ASID附屬到由線(xiàn)程程序在執(zhí)行的過(guò)程期間所生成的每個(gè)虛擬存儲(chǔ)器請(qǐng)求。例如,如果給定的GPU上下文450包括用于兩個(gè)不同線(xiàn)程程序并且每個(gè)與不同虛擬地址空間相關(guān)聯(lián)的執(zhí)行信息,那么兩個(gè)線(xiàn)程程序中的一個(gè)可以與ASID=O相關(guān)聯(lián),并且兩個(gè)線(xiàn)程程序中的另一個(gè)可以與ASID=I相關(guān)聯(lián)。在該示例中,GPU上下文450還包括用于虛擬地址空間零(ASID=O)的一個(gè)頁(yè)表和用于虛擬地址空間一(ASID=I)的不同頁(yè)表。在執(zhí)行的過(guò)程期間,由第一線(xiàn)程程序所生成的每個(gè)虛擬存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求包括虛擬地址和為0的ASID。來(lái)自該線(xiàn)程程序的頁(yè)表查找請(qǐng)求針對(duì)用于ASID=O的頁(yè)表。類(lèi)似地,由第二線(xiàn)程程序所生成的每個(gè)虛擬存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求包括虛擬地址和為I的ASID。來(lái)自該線(xiàn)程程序的頁(yè)表查找請(qǐng)求針對(duì)用于ASID=I的頁(yè)表。[0076]處理核心440配置為實(shí)施某個(gè)預(yù)確定的任務(wù)集,諸如將存儲(chǔ)器塊從一個(gè)地址范圍拷貝到另一個(gè)地址范圍。處理核心440從FECS407接收工作并且可以結(jié)合SM310來(lái)操作,但是可以不要求通用可編程性。在一個(gè)實(shí)施例中,主機(jī)206指導(dǎo)處理核心440的操作。[0077]MMU328包括ASID表410、頁(yè)表420以及TLB430。ASID表410包括將ASID與相對(duì)應(yīng)的頁(yè)表420相關(guān)聯(lián)的一個(gè)或多個(gè)ASID表?xiàng)l目。一般而言,由執(zhí)行在SM310內(nèi)的線(xiàn)程程序所生成的每個(gè)存儲(chǔ)器請(qǐng)求包括虛擬地址和ASID值以選擇一個(gè)頁(yè)表420來(lái)實(shí)施從虛擬地址到物理地址的映射。ASID表410將ASID值映射到相對(duì)應(yīng)的頁(yè)表420。頁(yè)表420然后提供從虛擬地址到物理地址的映射。頁(yè)表420在MMU328內(nèi)示出,但可以駐留在任何技術(shù)上可行的存儲(chǔ)器子系統(tǒng)內(nèi),諸如系統(tǒng)存儲(chǔ)器104或PP存儲(chǔ)器204。[0078]TLB430配置為對(duì)虛擬地址到物理地址映射進(jìn)行高速緩存,每個(gè)映射表示為高速緩存條目。每個(gè)高速緩存條目標(biāo)簽(tag)包括ASID和虛擬地址。每個(gè)高速緩存條目值包括物理地址。當(dāng)TLB430包括與用于存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求的ASID和虛擬地址輸入這二者匹配的高速緩存條目時(shí),TLB命中發(fā)生。在TLB命中的情況下,TLB針對(duì)存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求提供相對(duì)應(yīng)的物理地址。當(dāng)TLB430不包括與ASID和虛擬地址輸入這二者匹配的高速緩存條目時(shí),TLB未命中發(fā)生。TLB430可以實(shí)現(xiàn)任何技術(shù)上可行的技術(shù)來(lái)確定ASID輸入和虛擬地址輸入是否一起表示TLB命中或TLB未命中。在一個(gè)實(shí)施例中,內(nèi)容可尋址存儲(chǔ)器電路配置為將ASID和虛擬地址對(duì)存儲(chǔ)為搜索標(biāo)簽用于確定命中或未命中。當(dāng)內(nèi)容可尋址存儲(chǔ)器將輸入ASID和虛擬地址對(duì)匹配到先前所存儲(chǔ)的標(biāo)簽時(shí),這指示TLB命中,則TLB內(nèi)所存儲(chǔ)的相對(duì)應(yīng)的物理地址被選擇以完成虛擬到物理映射。這種技術(shù)關(guān)于搜索標(biāo)簽可以是充分關(guān)聯(lián)的。其他技術(shù)可以實(shí)現(xiàn)不同程度的關(guān)聯(lián)性。在TLB未命中的情況下,MMU328選擇由組成存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求的ASID所標(biāo)識(shí)的一個(gè)頁(yè)表420,并且基于用于虛擬地址的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求、經(jīng)由所標(biāo)識(shí)的頁(yè)表420實(shí)施虛擬地址到物理地址轉(zhuǎn)譯。一旦一個(gè)頁(yè)表420被標(biāo)識(shí)以提供用于轉(zhuǎn)譯操作的頁(yè)表信息,則任何技術(shù)上可行的技術(shù)可以用來(lái)實(shí)施虛擬到物理轉(zhuǎn)譯。如果頁(yè)表420不能將虛擬地址映射到物理地址,那么存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求會(huì)產(chǎn)生指示存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求無(wú)效的錯(cuò)誤。[0079]由SM310內(nèi)的線(xiàn)程程序所使用的特定ASID可以經(jīng)由綁定命令而與具體頁(yè)表430相關(guān)聯(lián),所述綁定命令從FECS407生成并被傳送到MMU328。綁定命令還可以用來(lái)使駐留在TLB430內(nèi)的虛擬到物理映射數(shù)據(jù)無(wú)效。以這種方式,ASID值可以在順序地執(zhí)行的GPU上下文450上被重新使用。[0080]圖4B示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的ASID表?xiàng)l目412。ASID表?xiàng)l目412包括ASID字段414以及相對(duì)應(yīng)的頁(yè)數(shù)據(jù)綁定標(biāo)識(shí)符(PDBID)字段416,其指向用于ASID字段414中所指定的ASID值的、駐留在存儲(chǔ)器中的頁(yè)表。在一個(gè)實(shí)施例中,PDBID416是頁(yè)目錄基址(PDB),其與用于存儲(chǔ)器中的頁(yè)表420的物理地址引用相對(duì)應(yīng)。頁(yè)表可以駐留在PPU存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中。[0081]圖4C示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的頁(yè)表?xiàng)l目422。頁(yè)表?xiàng)l目(PTE)422包括虛擬地址字段424和相對(duì)應(yīng)的物理地址字段426。給定的頁(yè)表與特定ASID相關(guān)聯(lián),其隱含地與虛擬地址字段424中所指定的虛擬地址相關(guān)聯(lián)。[0082]圖4D示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的TLB條目432。TLB條目422包括ASID字段434、虛擬地址字段436以及相對(duì)應(yīng)的物理地址字段438。ASID字段434和虛擬地址字段436組成用于找到物理地址字段438的查找標(biāo)簽。給定的TLB430可以包括多個(gè)TLB條目432,具有ASID字段434內(nèi)的ASID值的混合。在由TLB條目432所指定的虛擬到物理映射操作中TLB430能夠通過(guò)將ASID字段434包括作為查找標(biāo)簽的一部分來(lái)對(duì)用于獨(dú)立虛擬地址空間的虛擬地址到物理地址映射進(jìn)行高速緩存。[0083]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、將ASID和虛擬地址(VA)轉(zhuǎn)譯到物理地址(PA)。該操作可響應(yīng)于TLB430內(nèi)的未命中來(lái)實(shí)施。ASID510和VA520包括查找請(qǐng)求。ASID510用來(lái)在ASID表410內(nèi)實(shí)施查找。在該示例中,查找與存儲(chǔ)在ASID表?xiàng)l目412(1)內(nèi)的ASID匹配,其引用頁(yè)表420(I)。由此處,VA520用來(lái)在頁(yè)表420(I)內(nèi)實(shí)施查找。在該示例中,查找與PTE422(e)的VA字段424匹配。PTE422(e)內(nèi)的相對(duì)應(yīng)的PA字段426完成到PA530的映射操作,其被設(shè)定為PTE422Ce)內(nèi)的PA字段426的值。多個(gè)頁(yè)表420可以在任何一個(gè)時(shí)間保持活躍,并且TLB430可以在TLB未命中時(shí)從多個(gè)頁(yè)表420中的任何一個(gè)檢索虛擬到物理地址映射。維持每虛擬地址空間的不同頁(yè)表420,如由ASID所指定的,使多個(gè)虛擬地址空間能夠共存并映射到公共物理地址空間,如下文圖6所示出的。在一個(gè)實(shí)施例中,ASID指定GPU上下文和與GPU上下文相關(guān)聯(lián)的特定頁(yè)表標(biāo)識(shí)符。[0084]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、在一個(gè)物理地址空間620內(nèi)共存的兩個(gè)并發(fā)虛擬地址空間610(0),610(I)。VA空間610(0)包括經(jīng)由映射函數(shù)630而映射到PA空間620內(nèi)的相對(duì)應(yīng)的物理地址頁(yè)的多個(gè)虛擬地址頁(yè)。類(lèi)似地,VA空間610(I)包括映射到PA空間620中的相對(duì)應(yīng)的物理地址頁(yè)的多個(gè)虛擬地址頁(yè)。[0085]如所示,VA空間610(0)包括映射到PA頁(yè)0x0..0000的在0x0..0000處的VA頁(yè),以及映射到PA頁(yè)0x0.?0001的在0x0.?0001處的VA頁(yè)。VA空間610(I)還包括在0x0.?0000和0x0.?0001處的VA頁(yè),但這些VA頁(yè)分別映射到PA頁(yè)0x0.?0002和0x0.?0003。應(yīng)用上下文405可以包括分配在虛擬地址空間610(0)內(nèi)的存儲(chǔ)器,并且不同應(yīng)用上下文可以包括分配在虛擬地址空間610(I)內(nèi)的存儲(chǔ)器。通過(guò)維持由ASID所標(biāo)識(shí)的不同虛擬地址空間,資源可以通過(guò)在并行處理子系統(tǒng)112上執(zhí)行線(xiàn)程程序而始終從執(zhí)行在CPU102上的應(yīng)用代碼被管理和分配。在一個(gè)使用模型中,特定PA頁(yè)映射到兩個(gè)或更多個(gè)VA空間。在這種使用模型中,PA頁(yè)包括具有在相對(duì)應(yīng)的執(zhí)行上下文中的兩個(gè)或更多個(gè)不同虛擬地址表示的共享存儲(chǔ)器頁(yè)。[0086]圖7示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、將并行處理子系統(tǒng)112初始化為執(zhí)行具有包括一個(gè)上下文的不同虛擬地址空間的多個(gè)線(xiàn)程程序。FE212讀取圖4A的TMD452,圖4A包括經(jīng)選擇用于由主機(jī)206執(zhí)行的GPU上下文450。每個(gè)TMD452包括ASID714。在一個(gè)實(shí)施例中,RM454將ASID714指派到每個(gè)不同TMD452。調(diào)度器710確定特定TMD452應(yīng)被調(diào)度以執(zhí)行并傳送執(zhí)行請(qǐng)求到計(jì)算工作分布器(CWD)720,所述計(jì)算工作分布器(CWD)720在一個(gè)或多個(gè)SM310之中分布用于TMD452的工作來(lái)建立由TMD452所指定的一個(gè)或多個(gè)CTA的網(wǎng)格。如圖3B先前所論述的,每個(gè)CTA可以包括一個(gè)或多個(gè)線(xiàn)程組。CTA的每個(gè)線(xiàn)程組綁定到公共ASID714。在一個(gè)實(shí)施例中,調(diào)度器710包括圖3A的任務(wù)管理單元300,以及CWD720包括工作分布單元340。[0087]可以實(shí)現(xiàn)不同分布策略用于將CTA的網(wǎng)格映射到可用SM310上。一個(gè)在本文中被稱(chēng)為“深分配(de印allocation)”的方法優(yōu)先地將與同一網(wǎng)格相關(guān)聯(lián)的CTA指派到最小數(shù)目的不同SM310以一般針對(duì)進(jìn)行TLB高速緩存以及進(jìn)行數(shù)據(jù)高速緩存二者來(lái)最大化高速緩存親和性(affinity)。例如,如果一個(gè)SM310能夠容納完整的網(wǎng)格,那么CWD720將用于網(wǎng)格的全部CTA指派在一個(gè)SM310上`。繼續(xù)該示例,網(wǎng)格760包括被指派到SM310(0)的CTA750。類(lèi)似地,網(wǎng)格762包括被指派到SM310(I)的CTA752,并且網(wǎng)格764包括被指派到SM310(n)的CTA754。CTA750很可能針對(duì)TLB查找和進(jìn)行數(shù)據(jù)高速緩存這二者展示高速緩存親和性。類(lèi)似地,CTA752和754很可能展示類(lèi)似的高速緩存親和性,其一般提高總體性能。[0088]深分配適合于其中需要多個(gè)不同虛擬地址空間以容納被多路復(fù)用到公共GPU上下文中的不同線(xiàn)程程序的同時(shí)執(zhí)行的場(chǎng)景。深分配一般通過(guò)同時(shí)允許多個(gè)較小網(wǎng)格來(lái)最大化GPU利用率。深分配由允許由不同網(wǎng)格所要求的多個(gè)虛擬地址空間在TLB430和MMU328內(nèi)共存的本發(fā)明的實(shí)施例所使能。寬分配(wideallocation)將與特定網(wǎng)格相關(guān)聯(lián)的CTA擴(kuò)散在可用SM310之上。寬分配適合于其中一個(gè)網(wǎng)格配置為要求全部在同一虛擬地址空間內(nèi)操作的大數(shù)目CTA的場(chǎng)景。一般地,寬分配通過(guò)一般最大化在與任務(wù)相關(guān)聯(lián)的線(xiàn)程之中的并行性來(lái)最大化單個(gè)任務(wù)的性能。由每個(gè)TMD452的屬性ASID714來(lái)促進(jìn)應(yīng)使用深分配的檢測(cè)。例如,當(dāng)多個(gè)不同ASID值被表示在正被調(diào)度用于執(zhí)行的一個(gè)GPU上下文450內(nèi)的多個(gè)TMD452之中時(shí),那么深分配可以?xún)?yōu)先于寬分配。[0089]圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在并行處理子系統(tǒng)上并發(fā)地執(zhí)行具有不同虛擬地址空間的兩個(gè)或更多個(gè)線(xiàn)程程序的方法800的流程圖。盡管結(jié)合圖1、2、3A、3B、3C、4A、5和7的系統(tǒng)描述了方法800,但是本領(lǐng)域普通技術(shù)人員將理解的是,配置為以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。在一個(gè)實(shí)施例中,方法800由PPU實(shí)施,所述PPU諸如圖2的PPU202。[0090]方法800開(kāi)始于步驟810,其中PI3U檢索用于與GPU上下文相關(guān)聯(lián)的任務(wù)的TMD描述集,所述GPU上下文諸如圖4A的GPU上下文450。每個(gè)TMD包括用于在PPU上執(zhí)行任務(wù)的信息。信息包括對(duì)實(shí)現(xiàn)任務(wù)的線(xiàn)程程序的引用以及用于將由任務(wù)所生成的虛擬地址轉(zhuǎn)譯成物理地址的相對(duì)應(yīng)的頁(yè)表。在步驟820,PPU內(nèi)的調(diào)度器調(diào)度每個(gè)任務(wù)以在可用SM上執(zhí)行,所述可用SM諸如圖3B的SM310。在步驟830,在PPU內(nèi)的前端上下文交換器單元將每個(gè)不同頁(yè)表和GPU上下文內(nèi)的相對(duì)應(yīng)的ASID綁定到SM和TLB。綁定具有將頁(yè)表和用于頁(yè)表的ASID關(guān)聯(lián)到配置為使用由ASID所標(biāo)識(shí)并由頁(yè)表所映射的虛擬地址空間的線(xiàn)程程序的作用。綁定還可具有使準(zhǔn)備用于執(zhí)行GPU上下文的TLB無(wú)效的作用,所述GPU上下文表示與先前所高速緩存的、駐留在TLB內(nèi)的映射無(wú)關(guān)的新上下文。[0091]在步驟840,PPU執(zhí)行在相對(duì)應(yīng)的SM上所調(diào)度的每個(gè)任務(wù)。在執(zhí)行的過(guò)程期間,每個(gè)任務(wù)可以對(duì)相關(guān)聯(lián)的虛擬地址空間生成一個(gè)或多個(gè)存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求。虛擬地址空間由被綁定到任務(wù)的ASID值來(lái)標(biāo)識(shí)。對(duì)虛擬地址的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求最初將引起TLB未命中。第一TLB未命中將發(fā)生,作為第一SM第一次對(duì)第一虛擬地址生成第一存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求的結(jié)果。第二TLB未命中將發(fā)生,作為第二SM第一次對(duì)第二虛擬地址生成第二存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求的結(jié)果。每個(gè)存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求包括虛擬地址和ASID。虛擬地址和ASID二者必須針對(duì)目標(biāo)TLB與駐留在該TLB內(nèi)的TLB條目標(biāo)簽匹配以生成命中。TLB命中指示組成存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求的虛擬地址和ASID具有在目標(biāo)TLB內(nèi)的經(jīng)高速緩存的映射。TLB未命中指示TLB針對(duì)所請(qǐng)求的虛擬地址和ASID當(dāng)前不具有經(jīng)高速緩存的映射。在步驟850,PPU內(nèi)的MMU響應(yīng)于來(lái)自第一SM的第一TLB未命中而實(shí)施第一頁(yè)表查找,所述PPU內(nèi)的MMU諸如圖3B的MMU328。該第一頁(yè)表查找產(chǎn)生從第一虛擬地址和第一ASID的組合到相對(duì)應(yīng)的物理地址的第一映射。第一映射被高速緩存在第一目標(biāo)TLB內(nèi)。在步驟852,MMU響應(yīng)于第二TLB未命中而實(shí)施第二頁(yè)表查找。第二存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求包括第二ASID,要求MMU使用由第二ASID所標(biāo)識(shí)的第二頁(yè)表來(lái)實(shí)施第二頁(yè)表查找。第二映射被高速緩存在第二目標(biāo)TLB內(nèi)。第一目標(biāo)TLB和第二目標(biāo)TLB可以包括同一TLB單元,諸如TLB430。在一個(gè)實(shí)施例中,每個(gè)頁(yè)表查找涉及頁(yè)表遍歷(pagetablewalking)以在相對(duì)應(yīng)的虛擬地址空間內(nèi)針對(duì)每個(gè)虛擬地址找到適合的映射??梢詫?shí)現(xiàn)任何技術(shù)上可行的頁(yè)表遍歷技術(shù)而不脫離本發(fā)明的范圍和精神。[0092]方法終止于步驟890。[0093]圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在多個(gè)不同虛擬地址空間之一中實(shí)施虛擬到物理地址映射的方法步驟的流程圖。盡管結(jié)合圖1、2、3A、3B、3C、4A、5和7的系統(tǒng)描述了方法900,但是本領(lǐng)域普通技術(shù)人員將理解的是,配置為以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。在一個(gè)實(shí)施例中,方法900由PI3U實(shí)施,所述PPU諸如圖2的PPU202。[0094]方法900開(kāi)始于步驟910,其中PPU內(nèi)的MMU接收包括虛擬地址和ASID的虛擬地址到物理地址映射請(qǐng)求以指定多個(gè)不同虛擬地址空間中的哪一個(gè)應(yīng)被用來(lái)實(shí)施映射。在步驟920,如果映射請(qǐng)求不包括TLB命中,那么方法前進(jìn)到步驟930。在步驟930,MMU經(jīng)由ASID表將ASID映射到頁(yè)表引用,所述ASID表諸如ASID表410。在步驟940,MMU使用由頁(yè)表引用所引用的頁(yè)表來(lái)將虛擬地址映射到物理地址。在步驟950,MMU將虛擬地址到物理地址映射傳送到目標(biāo)TLB用于進(jìn)行高速緩存和以后使用。在步驟960,MMU將物理地址關(guān)聯(lián)到映射請(qǐng)求來(lái)使能關(guān)聯(lián)存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求以繼續(xù)進(jìn)行。方法終止于步驟990。[0095]返回到步驟920,如果映射請(qǐng)求不包括TLB命中,那么方法繼續(xù)進(jìn)行到步驟960。[0096]圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于針對(duì)圖形處理單元上下文內(nèi)的任務(wù)實(shí)施深調(diào)度的方法步驟的流程圖。盡管結(jié)合圖1、2、3A、3B、3C、4A、5和7的系統(tǒng)描述了方法1000,但是本領(lǐng)域普通技術(shù)人員將理解的是,配置為以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。在一個(gè)實(shí)施例中,方法1000由PPU實(shí)施,所述PPU諸如圖2的PPU202。[0097]方法1000開(kāi)始于步驟1010,其中PPU內(nèi)的計(jì)算工作分布器(CWD)接收包括多個(gè)任務(wù)以在PPU內(nèi)并發(fā)執(zhí)行的GPU上下文,所述GPU上下文諸如GPU上下文450。在步驟1020,CffD從包括GPU上下文的多個(gè)任務(wù)中選擇任務(wù)。在步驟1030,CWD基于用于所選擇的任務(wù)的執(zhí)行要求和SM池中的當(dāng)前可用的資源來(lái)從SM池中選擇一個(gè)或多個(gè)SM。在該步驟中,CWD嘗試最小化在其內(nèi)調(diào)度以執(zhí)行所選擇的任務(wù)的不同SM的數(shù)目??梢詫?shí)現(xiàn)任何技術(shù)上可行的技術(shù)來(lái)將任務(wù)要求映射到可用資源上以滿(mǎn)足任務(wù)要求。在步驟1040,CWD調(diào)度所選擇的任務(wù)用于從SM池所選擇的一個(gè)或多個(gè)SM的執(zhí)行。在步驟1050,如果所選擇的任務(wù)不是駐留在GPU上下文中的最后的任務(wù),那么方法繼續(xù)進(jìn)行到步驟1020。否則,方法終止于步驟1060。[0098]在一個(gè)實(shí)施例中,CWD配置為根據(jù)深調(diào)度或?qū)捳{(diào)度技術(shù)、基于明確的指令來(lái)調(diào)度整個(gè)GPU上下文。明確的指令可以以編程方式或經(jīng)由一個(gè)或多個(gè)環(huán)境變量來(lái)轉(zhuǎn)達(dá)。在其他實(shí)施例中,CWD可以根據(jù)深調(diào)度或?qū)捳{(diào)度技術(shù)、根據(jù)明確的指令來(lái)單個(gè)地調(diào)度GPU競(jìng)爭(zhēng)內(nèi)的每個(gè)任務(wù)??商娲?,CWD可以基于與每個(gè)任務(wù)相關(guān)聯(lián)的不同ASID值來(lái)推斷哪些調(diào)度技術(shù)來(lái)實(shí)現(xiàn)以及針對(duì)哪些任務(wù)。[0099]雖然以上討論致力于將用于執(zhí)行的不同任務(wù)組織成公共GPU上下文,但是配置為執(zhí)行具有不同虛擬地址空間的多個(gè)同時(shí)上下文的并行協(xié)處理器在本發(fā)明的實(shí)施例的范圍和精神內(nèi)。[0100]在某些實(shí)施例中,數(shù)據(jù)高速緩存關(guān)于物理地址而被加標(biāo)簽。在可替代實(shí)施例中,數(shù)據(jù)高速緩存關(guān)于虛擬地址而被加標(biāo)簽并且要求ASID作為每個(gè)標(biāo)簽的一部分。這兩個(gè)加標(biāo)簽的機(jī)制可以組合在單個(gè)GPU內(nèi)。[0101]總而言之,公開(kāi)了用于在同一GPU上并發(fā)地執(zhí)行具有不同虛擬地址空間的不同任務(wù)的技術(shù)。每個(gè)任務(wù)經(jīng)由地址空間標(biāo)識(shí)符(ASID)與虛擬地址空間相關(guān)聯(lián)。由執(zhí)行的任務(wù)所生成的虛擬存儲(chǔ)器請(qǐng)求包括用來(lái)選擇相對(duì)應(yīng)的頁(yè)表的ASID。所選擇的頁(yè)表隨后用來(lái)將組成虛擬存儲(chǔ)器請(qǐng)求的虛擬地址映射到物理地址。頁(yè)表從由操作系統(tǒng)所維持的相對(duì)應(yīng)的頁(yè)表來(lái)建立用于調(diào)用任務(wù)的用戶(hù)應(yīng)用進(jìn)程。轉(zhuǎn)譯后備緩沖區(qū)(TLB)對(duì)虛擬存儲(chǔ)器請(qǐng)求地址映射進(jìn)行高速緩存用于將來(lái)使用。TLB條目包括標(biāo)簽和數(shù)據(jù)字段,所述標(biāo)簽包括ASID和虛擬地址,所述數(shù)據(jù)字段包括相對(duì)應(yīng)的物理地址。在一個(gè)實(shí)施例中,任務(wù)被組織成公共上下文用于執(zhí)行??梢愿鶕?jù)深調(diào)度機(jī)制來(lái)調(diào)度任務(wù),由此共享公共虛擬地址空間的任務(wù)在最小數(shù)目的不同SM上執(zhí)行。[0102]本發(fā)明的一個(gè)優(yōu)勢(shì)在于,GPU可以同時(shí)執(zhí)行具有不同虛擬地址空間的不同任務(wù),從而提高某些應(yīng)用中的GPU利用率和性能。[0103]本發(fā)明的實(shí)施例的另一個(gè)優(yōu)勢(shì)在于,GPU任務(wù)能夠以地址空間隔離來(lái)執(zhí)行,其提高可靠性并且減少與調(diào)試相關(guān)聯(lián)的開(kāi)發(fā)活動(dòng)。[0104]雖然上述內(nèi)容針對(duì)本發(fā)明的實(shí)施例,但可對(duì)本發(fā)明的其他和進(jìn)一步的實(shí)施例進(jìn)行設(shè)計(jì)而不脫離其基本范圍。例如,可以以硬件或軟件或硬件和軟件的組合來(lái)實(shí)現(xiàn)本發(fā)明的各方面。本發(fā)明的一個(gè)實(shí)施例可被實(shí)施為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實(shí)施例的各功能(包括本文中描述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上。示出的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括但不限于:(i)不可寫(xiě)的存儲(chǔ)介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲(chǔ)器設(shè)備,諸如可由CD-ROM驅(qū)動(dòng)器讀取的CD-ROM盤(pán)、閃存、ROM芯片或任何類(lèi)型的固態(tài)非易失性半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)永久性信息;和(ii)可寫(xiě)的存儲(chǔ)介質(zhì)(例如,磁盤(pán)驅(qū)動(dòng)器或硬盤(pán)驅(qū)動(dòng)器內(nèi)的軟盤(pán)或者任何類(lèi)型的固態(tài)隨機(jī)存取半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)可更改的信息。當(dāng)承載針對(duì)本發(fā)明的功能的計(jì)算機(jī)可讀指令時(shí),這樣的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)是本發(fā)明的實(shí)施例。[0105]因此,本發(fā)明的范圍由下面的權(quán)利要求來(lái)確定?!緳?quán)利要求】1.一種用于將與包含在不同虛擬地址空間集中的第一虛擬地址空間相關(guān)聯(lián)的虛擬地址映射到物理地址的方法,所述方法包括:接收包括所述虛擬地址和與所述第一虛擬地址空間相關(guān)聯(lián)的地址空間標(biāo)識(shí)符(ASID)的請(qǐng)求地址;基于轉(zhuǎn)譯后備緩沖區(qū)(TLB)未命中而確定所述請(qǐng)求地址未被高速緩存在TLB內(nèi);響應(yīng)于所述TLB未命中,映射所述請(qǐng)求地址到物理地址;以及將所述物理地址與所述請(qǐng)求地址相關(guān)聯(lián)。2.根據(jù)權(quán)利要求1所述的方法,其中映射所述請(qǐng)求地址包括:映射所述ASID到頁(yè)表引用;基于與所述頁(yè)表引用相關(guān)聯(lián)的頁(yè)表映射所述第一虛擬地址到所述物理地址;以及將所述虛擬地址到物理地址映射傳送到所述TLB。3.根據(jù)權(quán)利要求2所述的方法,其中映射所述ASID到頁(yè)表引用包括在ASID表中實(shí)施表查找,其中所述ASID包括進(jìn)入ASID表的索引,以及其中所述ASID表中的經(jīng)索引的條目包含對(duì)相對(duì)應(yīng)的頁(yè)表的存儲(chǔ)器引用。4.根據(jù)權(quán)利要求2所述的方法,其中映射所述第一虛擬地址到所述物理地址包括遍歷與所述頁(yè)表引用相關(guān)聯(lián)的頁(yè)表。5.根據(jù)權(quán)利要求2所述的方法,其中所述頁(yè)表引用包括物理地址指針。6.根據(jù)權(quán)利要求1所述的方法,其中確定所述請(qǐng)求地址未被高速緩存包括在TLB內(nèi)實(shí)施關(guān)聯(lián)查找。`7.根據(jù)權(quán)利要求6所述的方法,其中所述TLB配置為存儲(chǔ)多個(gè)條目,其中每個(gè)條目包括標(biāo)簽和相對(duì)應(yīng)的物理地址,并且其中所述關(guān)聯(lián)查找包括將所述請(qǐng)求地址與所述多個(gè)條目?jī)?nèi)的每個(gè)標(biāo)簽進(jìn)行比較。8.根據(jù)權(quán)利要求1所述的方法,其中所述ASID與第一執(zhí)行上下文相關(guān)聯(lián),以及不同ASID與第二執(zhí)行上下文相關(guān)聯(lián),并且其中所述TLB配置為對(duì)用于所述第一執(zhí)行上下文和所述第二執(zhí)行上下文二者的虛擬地址到物理地址映射進(jìn)行高速緩存。9.一種并行處理子單元,其配置為將與包含在不同虛擬地址空間集中的第一虛擬地址空間相關(guān)聯(lián)的虛擬地址映射到物理地址,通過(guò)實(shí)施步驟:接收包括所述虛擬地址和與所述第一虛擬地址空間相關(guān)聯(lián)的地址空間標(biāo)識(shí)符(ASID)的請(qǐng)求地址;基于轉(zhuǎn)譯后備緩沖區(qū)(TLB)未命中而確定所述請(qǐng)求地址未被高速緩存在TLB內(nèi);響應(yīng)于所述TLB未命中,映射所述請(qǐng)求地址到物理地址;以及將所述物理地址與所述請(qǐng)求地址相關(guān)聯(lián)。10.一種計(jì)算設(shè)備,包括:中央處理單元,其配置為執(zhí)行具有第一處理上下文的進(jìn)程;以及耦連到所述中央處理單元的并行處理子單元,其配置為:接收包括虛擬地址和與第一虛擬地址空間相關(guān)聯(lián)的地址空間標(biāo)識(shí)符(ASID)的請(qǐng)求地址;基于轉(zhuǎn)譯后備緩沖區(qū)(TLB)未命中而確定所述請(qǐng)求地址未被高速緩存在TLB內(nèi);響應(yīng)于所述TLB未命中,映射所述請(qǐng)求地址到物理地址;以及將所述物理地址與所述請(qǐng)求地址相關(guān)`聯(lián)。【文檔編號(hào)】G06F12/10GK103778072SQ201310512362【公開(kāi)日】2014年5月7日申請(qǐng)日期:2013年10月25日優(yōu)先權(quán)日:2012年10月25日【發(fā)明者】尼克·巴羅威廉姆斯,布雷恩·法斯,杰爾姆·F·小杜魯克,詹姆士·勒羅伊·德明,蒂莫西·約翰·珀塞爾,盧森·鄧寧,馬克·海爾格羅夫申請(qǐng)人:輝達(dá)公司