用于分塊式延期著色的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的制作方法
【專利摘要】提供用于分塊式延期著色的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品。在操作中,識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子。進(jìn)一步地,識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊。另外,針對多個(gè)光子中的每一個(gè)識(shí)別能夠由效應(yīng)球面的投影所影響的多個(gè)屏幕空間像素塊中的每一個(gè)。此外,選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的至少一個(gè)光子子集。此外,利用所選擇的至少一個(gè)光子子集計(jì)算用于至少一個(gè)場景的著色。
【專利說明】用于分塊式延期著色的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品
[0001]優(yōu)先權(quán)聲明
[0002]本申請要求享有于2012年12月21日提交的第61/745,264號(hào)美國臨時(shí)申請的優(yōu)先權(quán),其整體內(nèi)容通過援引并入本文。
【技術(shù)領(lǐng)域】
[0003]本發(fā)明涉及圖形處理,并且更具體地,涉及在圖形處理的上下文中的著色。
【背景技術(shù)】
[0004]在圖形處理中,在諸如視頻游戲的實(shí)時(shí)應(yīng)用的上下文中,高效地對已經(jīng)散射在多個(gè)表面的光進(jìn)行渲染是非常理想的。光子映射被已知為用于離線渲染中的間接照明的一致估計(jì)量(consistent estimator)。光子映射不僅擅于對用于許多其他渲染方法的緩慢收斂的焦散路徑進(jìn)行采樣,而且很好地對低頻光滑和漫射相互反射進(jìn)行估計(jì)并且出奇地易于實(shí)現(xiàn)。
[0005]用來對復(fù)雜場景進(jìn)行最終實(shí)時(shí)渲染的光子映射的許多變體已經(jīng)被提出并且甚至已經(jīng)以交互速率在有限的場景上進(jìn)行了展示。結(jié)合該算法進(jìn)步,GPU現(xiàn)在足夠強(qiáng)大以使得可在實(shí)時(shí)渲染系統(tǒng)中實(shí)現(xiàn)光子映射。然而,一個(gè)當(dāng)前的挑戰(zhàn)就是在于現(xiàn)代GPU上高效地縮放的同時(shí)維持質(zhì)量。
[0006]光子映射包括兩個(gè)步驟:沿著來自光源的光線追蹤光子以及估計(jì)起因于散射在可見表面的那些光子的輻射度(radiance)(即“著色”)。高效的并行光線追蹤硬件和軟件系統(tǒng)能夠每秒追蹤數(shù)億光線并且過程可以分?jǐn)傇诙鄠€(gè)幀上。因此,現(xiàn)有系統(tǒng)滿足光子追蹤所需要的性能。這些系統(tǒng)的凈性能典型地取決于高效的光子著色。
[0007]因此,存在對于解決與現(xiàn)有技術(shù)相關(guān)聯(lián)的這些和/或其他問題的需求。
【發(fā)明內(nèi)容】
[0008]提供用于分塊式(tiled)延期著色的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品。在操作中,識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子。進(jìn)一步地,識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊。另外,針對多個(gè)光子中的每一個(gè)識(shí)別能夠由效應(yīng)球面(effect sphere)的投影所影響的多個(gè)屏幕空間像素塊中的每一個(gè)。此外,選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的至少一個(gè)光子子集。此外,利用所選擇的至少一個(gè)光子子集計(jì)算用于至少一個(gè)場景的著色。
【專利附圖】
【附圖說明】
[0009]圖1示出了根據(jù)一個(gè)實(shí)施例的、用于分塊式延期著色的方法的流程圖。
[0010]圖2示出了根據(jù)一個(gè)實(shí)施例的并行處理單元(PTO)。
[0011]圖3示出了根據(jù)一個(gè)實(shí)施例的、圖2的流多處理器。
[0012]圖4A示出了根據(jù)另一個(gè)實(shí)施例的、用于分塊式延期著色的方法的流程圖。[0013]圖4B示出了根據(jù)另一個(gè)實(shí)施例的、用于分塊式延期著色的方法的流程圖。
[0014]圖5示出了根據(jù)一個(gè)實(shí)施例的、利用分塊式延期著色實(shí)現(xiàn)方案所創(chuàng)建的圖像。
[0015]圖6示出了在其中可以實(shí)現(xiàn)各先前實(shí)施例的各種架構(gòu)和/或功能性的示例性系統(tǒng)。
【具體實(shí)施方式】
[0016]圖1示出了根據(jù)一個(gè)實(shí)施例的、用于分塊式延期著色的方法100的流程圖。如在操作110中所示的,識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子。在一個(gè)實(shí)施例中,與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子可以與光子映射過程相關(guān)聯(lián)。例如,光子可以是包括沿著來自一個(gè)或多個(gè)光源的光線對光子進(jìn)行追蹤以及對起因于散射在可見表面的那些光子的輻射度進(jìn)行估計(jì)的過程的一部分。
[0017]此外,在操作120中,識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊。在一個(gè)實(shí)施例中,與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊可以包括與場景相關(guān)聯(lián)的多個(gè)像素。例如,屏幕空間像素塊可以包括η X η陣列的像素,其中η是大于I的整數(shù)。
[0018]如在操作130中所示的,針對多個(gè)光子中的每一個(gè)識(shí)別能夠由效應(yīng)球面的投影所影響的多個(gè)屏幕空間像素塊中的每一個(gè)。在本描述的上下文中,光子的效應(yīng)球面是指能夠影響與其相關(guān)聯(lián)的像素和/或像素塊的影響球面。在一個(gè)實(shí)施例中,可以將每個(gè)光子的拷貝插入將包含該光子的效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中(或與其相關(guān)聯(lián),等)。在另一個(gè)實(shí)施例中,可以將每個(gè)光子的拷貝放置在與光子能夠影響的多個(gè)屏幕空間像素塊相對應(yīng)的存儲(chǔ)桶(bucket)中。在另一個(gè)實(shí)施例中,可以將指向每個(gè)光子的指針插入能夠包含該光子的效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中(或與其相關(guān)聯(lián),等)。在又一個(gè)實(shí)施例中,可以將每個(gè)光子的拷貝或者指向每個(gè)光子的指針插入能夠包含光子的效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中。
[0019]此外,在一個(gè)實(shí)施例中,可以識(shí)別與屏幕空間像素塊相關(guān)聯(lián)的一個(gè)或多個(gè)組塊(chunk)的光子用于處理。例如,在像素塊中的光子比存儲(chǔ)器能容納的光子多的情況下,可以實(shí)現(xiàn)在像素塊上的多個(gè)通道,在每個(gè)通道中處理像素塊中的光子組塊。另外,在一個(gè)實(shí)施例中,可以剔除不和與多個(gè)屏幕空間像素塊相關(guān)聯(lián)的預(yù)定義深度范圍相交的、與多個(gè)屏幕空間像素塊相關(guān)聯(lián)的光子。例如,在一個(gè)實(shí)施例中,在將光子分類到像素塊中的過程期間,分塊式算法可以起到剔除不與像素塊內(nèi)的屏幕的深度范圍相交的光子的作用。
[0020]如進(jìn)一步所示的,在操作140中,可以選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的至少一個(gè)光子子集。在一個(gè)實(shí)施例中,選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的光子子集可以包括對多個(gè)屏幕空間像素塊中的每一個(gè)中的所有像素進(jìn)行迭代。在另一個(gè)實(shí)施例中,選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的光子子集可以包括對多個(gè)屏幕空間像素塊中的每一個(gè)中的所有像素進(jìn)行迭代并且選擇從其計(jì)算著色的屏幕空間像素塊中的每一個(gè)中的光子子集。
[0021]此外,在一個(gè)實(shí)施例中,選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的光子子集可以包括選擇與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所有光子(即不僅是子集,等)。此外,在一個(gè)實(shí)施例中,可以利用隨機(jī)過程來選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的光子子集。例如,在一個(gè)實(shí)施例中,可以在每個(gè)像素處獨(dú)立地隨機(jī)選擇光子子集。在又一個(gè)實(shí)施例中,可以利用交錯(cuò)過程來選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的光子子集。
[0022]如在操作150中所示的,利用所選擇的光子子集為至少一個(gè)場景計(jì)算著色。在一個(gè)實(shí)施例中,計(jì)算著色可以包括在與至少一個(gè)場景相關(guān)聯(lián)的每個(gè)像素處重建平滑著色。此夕卜,在一個(gè)實(shí)施例中,計(jì)算著色可以包括從鄰域像素值在與至少一個(gè)場景相關(guān)聯(lián)的每個(gè)像
素處重建平滑著色。
[0023]此外,在一個(gè)實(shí)施例中,計(jì)算著色可以包括利用側(cè)(lateral)濾波器。當(dāng)然,在各實(shí)施例中,可以利用關(guān)于邊緣的任何數(shù)目的濾波器來計(jì)算著色。還有就是,在一個(gè)實(shí)施例中,方法100可以包括渲染至少一個(gè)場景。
[0024]現(xiàn)在將就各可選架構(gòu)和特征來闡述更多示例性的信息,根據(jù)用戶的期望可以采用或不采用所述架構(gòu)和特征來實(shí)現(xiàn)前述的框架。應(yīng)該特別注意下面的信息出于示例性的目的而闡述并且其不應(yīng)該被認(rèn)為是以任何方式進(jìn)行限制。下面特征中的任何一個(gè)可以可選地合并,排斥或無需排斥所述的其他特征。
[0025]圖2示出根據(jù)一個(gè)實(shí)施例的并行處理單元(PTO)200。雖然本文提供并行處理器作為PPU200的示例,但應(yīng)特別注意的是,這類處理器僅出于示例性目的而闡述,并且可出于相同目的采用任何處理器以對其進(jìn)行補(bǔ)充和/或替換。在一個(gè)實(shí)施例中,PPU200包括X個(gè)流多處理器(SM) 250并且配置為在SM250 (X)中的兩個(gè)或更多個(gè)中并發(fā)地執(zhí)行多個(gè)線程。線程(即執(zhí)行的線程)是在特定SM250內(nèi)執(zhí)行的指令集的實(shí)例化。下文結(jié)合圖3更詳細(xì)描述的每個(gè)SM250可包括但不限于一個(gè)或多個(gè)處理核心、一個(gè)或多個(gè)加載/存儲(chǔ)單元(LSU)、一級(jí)(LI)高速緩存、共享存儲(chǔ)器等。
[0026]在一個(gè)實(shí)施例中,PPU200包括輸入/輸出(I/O)單元205,其配置為通過系統(tǒng)總線202傳送和接收來自中央處理單元(CPU)(未示出)的通信(即命令、數(shù)據(jù)等)。I/O單元205可實(shí)現(xiàn)用于高速外圍部件互連(PCIe)總線上的通信的PCIe接口。在可替代實(shí)施例中,I/O單元205可實(shí)現(xiàn)其他類型的公知總線接口。
[0027]PPU200還包括主機(jī)接口單元210,其將命令解碼并將命令傳送到PPU200的任務(wù)管理單元215或如命令可指定的其他單元(例如存儲(chǔ)器接口 280)。在一個(gè)實(shí)施例中,PPU200包括U個(gè)存儲(chǔ)器接口 280 (U),其中每個(gè)存儲(chǔ)器接口 280 (U)連接到相應(yīng)的存儲(chǔ)器設(shè)備204(U)0主機(jī)接口單元210配置為路由PPU200的各邏輯單元之間的通信。
[0028]在一個(gè)實(shí)施例中,由CPU將被編碼為命令流的程序?qū)懭刖彌_區(qū)。緩沖區(qū)是例如存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器的存儲(chǔ)器中的區(qū)域,其可由CPU和PPU200 二者訪問(即讀/寫)。CPU將命令流寫入緩沖區(qū)并隨后將指向命令流開始的指針傳送到PPU200。主機(jī)接口單元210為任務(wù)管理單元(TMU)215提供指向一個(gè)或多個(gè)流的指針。TMU215選擇一個(gè)或多個(gè)流并配置為將所選擇的流組織成掛起網(wǎng)格池。在一個(gè)實(shí)施例中,線程塊包括32個(gè)相關(guān)線程,并且網(wǎng)格是執(zhí)行相同流的一個(gè)或多個(gè)線程塊的陣列,并且不同的線程塊可通過全局存儲(chǔ)器交換數(shù)據(jù)。掛起網(wǎng)格池可包括尚未被選擇用于執(zhí)行的新網(wǎng)格和已被部分地執(zhí)行并且已被暫停的網(wǎng)格。
[0029]耦連在TMU215和SM250之間的工作分布單元220管理活動(dòng)網(wǎng)格池,選擇并分派活動(dòng)網(wǎng)格用于由SM250執(zhí)行。當(dāng)掛起的網(wǎng)格有資格執(zhí)行、即不具有未解決的數(shù)據(jù)依賴時(shí),掛起的網(wǎng)格由TMU215轉(zhuǎn)移到活動(dòng)網(wǎng)格池。當(dāng)活動(dòng)網(wǎng)格的執(zhí)行被依賴阻塞時(shí),活動(dòng)網(wǎng)格被轉(zhuǎn)移到掛起池。當(dāng)網(wǎng)格的執(zhí)行完成時(shí),網(wǎng)格被工作分布單元220從活動(dòng)網(wǎng)格池移除。除了接收來自主機(jī)接口單元210和工作分布單元220的網(wǎng)格以外,TMU215還接收在網(wǎng)格的執(zhí)行期間由SM250所動(dòng)態(tài)生成的網(wǎng)格。這些動(dòng)態(tài)生成的網(wǎng)格加入掛起網(wǎng)格池中的其他掛起的網(wǎng)格。
[0030]在一個(gè)實(shí)施例中,CPU執(zhí)行實(shí)現(xiàn)應(yīng)用編程接口(API)的驅(qū)動(dòng)程序內(nèi)核,該應(yīng)用編程接口使能在CPU上執(zhí)行的一個(gè)或多個(gè)應(yīng)用以調(diào)度用于在PPU200上執(zhí)行的操作。應(yīng)用可包括使驅(qū)動(dòng)程序內(nèi)核生成一個(gè)或多個(gè)網(wǎng)格用于執(zhí)行的指令(即API調(diào)用)。在一個(gè)實(shí)施例中,PPU200實(shí)現(xiàn)SMT (單指令、多線程)架構(gòu),其中由線程塊中的不同線程對不同數(shù)據(jù)集并發(fā)地執(zhí)行網(wǎng)格中的每個(gè)線程塊(即線程束(warp))。驅(qū)動(dòng)程序內(nèi)核定義包含k個(gè)相關(guān)線程的線程塊,使得相同線程塊中的線程可通過共享存儲(chǔ)器交換數(shù)據(jù)。
[0031]在一個(gè)實(shí)施例中,PPU200可包括15個(gè)不同的SM250。每個(gè)SM250是多線程的并配置為并發(fā)地執(zhí)行來自特定線程塊的多個(gè)線程(例如32個(gè)線程)。SM250中的每一個(gè)經(jīng)由交叉開關(guān)260 (或其他類型的互連網(wǎng)絡(luò))連接到二級(jí)(L2)高速緩存265。L2高速緩存265連接到一個(gè)或多個(gè)存儲(chǔ)器接口 280。存儲(chǔ)器接口 280實(shí)現(xiàn)16、32、64、128位數(shù)據(jù)總線等等,用于高速數(shù)據(jù)轉(zhuǎn)移。在一個(gè)實(shí)施例中,PPU200可連接到多達(dá)6個(gè)存儲(chǔ)器設(shè)備204,諸如圖形雙數(shù)據(jù)速率、版本5、同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(⑶DR5SDRAM)。
[0032]在一個(gè)實(shí)施例中,PPU200實(shí)現(xiàn)多級(jí)存儲(chǔ)器層次。存儲(chǔ)器204位于耦連到PPU200的SDRAM的片外。來自存儲(chǔ)器204的數(shù)據(jù)可被獲取并存儲(chǔ)在L2高速緩存265中,該L2高速緩存265位于片上并在各SM250之間共享。在一個(gè)實(shí)施例中,SM250中的每一個(gè)還實(shí)現(xiàn)LI高速緩存。LI高速緩存是專用于特定SM250的私有存儲(chǔ)器。LI高速緩存中的每一個(gè)耦連到共享的L2高速緩存265。來自L2高速緩存265的數(shù)據(jù)可被獲取并存儲(chǔ)在LI高速緩存中的每一個(gè)中用于SM250的功能單元中的處理。
[0033]在一個(gè)實(shí)施例中,PPU200包括圖形處理單元(GPU)。PPU200配置為接收指定用于處理圖形數(shù)據(jù)的著色器程序的命令。圖形數(shù)據(jù)可被定義為諸如點(diǎn)、線、三角形、四邊形、三角形條帶等基元的集合。典型地,基元包括指定用于(例如在模型空間坐標(biāo)系中的)基元的若干頂點(diǎn)以及與基元的每個(gè)頂點(diǎn)相關(guān)聯(lián)的屬性的數(shù)據(jù)。PPU200可配置為處理圖形基元以生成幀緩沖區(qū)(即用于顯示器的像素中的每一個(gè)的像素?cái)?shù)據(jù))。驅(qū)動(dòng)程序內(nèi)核實(shí)現(xiàn)圖形處理管線,諸如由OpenGL API定義的圖形處理管線。
[0034]應(yīng)用將用于場景的模型數(shù)據(jù)(即頂點(diǎn)和屬性的合集)寫到存儲(chǔ)器。模型數(shù)據(jù)定義在顯示器上可見的對象中的每一個(gè)。應(yīng)用隨后對驅(qū)動(dòng)程序內(nèi)核做出請求模型數(shù)據(jù)被渲染和顯示的API調(diào)用。驅(qū)動(dòng)程序內(nèi)核讀取模型數(shù)據(jù)并將命令寫到緩沖區(qū)以實(shí)施一個(gè)或多個(gè)操作來處理模型數(shù)據(jù)。命令可將包括頂點(diǎn)著色器、外殼著色器、幾何著色器、像素著色器等中的一個(gè)或多個(gè)的不同著色器程序編碼。例如,TMU215可配置一個(gè)或多個(gè)SM250為執(zhí)行處理由模型數(shù)據(jù)所定義的若干頂點(diǎn)的頂點(diǎn)著色器程序。在一個(gè)實(shí)施例中,TMU215可配置不同SM250為并發(fā)地執(zhí)行不同著色器程序。例如,SM250的第一子集可配置為執(zhí)行頂點(diǎn)著色器程序,而SM250的第二子集可配置為執(zhí)行像素著色器程序。SM250的第一子集處理頂點(diǎn)數(shù)據(jù)以產(chǎn)生經(jīng)處理的頂點(diǎn)數(shù)據(jù)并將經(jīng)處理的頂點(diǎn)數(shù)據(jù)寫到L2高速緩存265和/或存儲(chǔ)器204。在經(jīng)處理的頂點(diǎn)數(shù)據(jù)被光柵化(即從三維數(shù)據(jù)變換成屏幕空間中的二維數(shù)據(jù))以產(chǎn)生碎片數(shù)據(jù)(fragment data)之后,SM250的第二子集執(zhí)行像素著色器以產(chǎn)生經(jīng)處理的碎片數(shù)據(jù),其隨后與其他經(jīng)處理的碎片數(shù)據(jù)混合并被寫到存儲(chǔ)器204中的幀緩沖區(qū)。頂點(diǎn)著色器程序和像素著色器程序可并發(fā)地執(zhí)行,以管線的方式處理來自同一場景的不同數(shù)據(jù)直到用于場景的所有模型數(shù)據(jù)已被渲染到幀緩沖區(qū)為止。隨后,幀緩沖區(qū)的內(nèi)容被傳送到顯示控制器用于在顯示設(shè)備上顯示。
[0035]PPU200可包括在臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、平板計(jì)算機(jī)、智能電話(例如無線、手持設(shè)備)、個(gè)人數(shù)字助理(PDA)、數(shù)字相機(jī)、手持電子設(shè)備等等中。在一個(gè)實(shí)施例中,PTO200具體化在單個(gè)半導(dǎo)體襯底上。在另一實(shí)施例中,PPU200連同一個(gè)或多個(gè)其他邏輯單元被包括在片上系統(tǒng)(SoC)中,所述一個(gè)或多個(gè)其他邏輯單元諸如精簡指令集計(jì)算機(jī)(RISC) CPU、存儲(chǔ)器管理單元(MMU)、數(shù)模轉(zhuǎn)換器(DAC)等。
[0036]在一個(gè)實(shí)施例中,PPU200可被包括在包括諸如⑶DR5SDRAM的一個(gè)或多個(gè)存儲(chǔ)器設(shè)備204的圖形卡上。圖形卡可配置為與包括例如北橋芯片集和南橋芯片集的、臺(tái)式計(jì)算機(jī)的主板上的PCIe槽相接。在又一實(shí)施例中,Pro200可以是被包括在主板的芯片集(即北橋)中的集成圖形處理單元(iGPU)。
[0037]圖3示出根據(jù)一個(gè)實(shí)施例的、圖2的流多處理器250。如圖3所示,SM250包括指令高速緩存305、一個(gè)或多個(gè)調(diào)度器單元310、寄存器堆320、一個(gè)或多個(gè)處理核心350、一個(gè)或多個(gè)雙精度單元(DPU) 351、一個(gè)或多個(gè)特殊功能單元(SFU) 352、一個(gè)或多個(gè)加載/存儲(chǔ)單元(LSU)353、互連網(wǎng)絡(luò)380、共享存儲(chǔ)器370以及一個(gè)或多個(gè)紋理單元/LI高速緩存390。
[0038]如上文所述,工作分布單元220分派活動(dòng)網(wǎng)格用于在PPU200的一個(gè)或多個(gè)SM250上執(zhí)行。調(diào)度器單元310從工作分布單元220接收網(wǎng)格并管理用于每個(gè)活動(dòng)網(wǎng)格的一個(gè)或多個(gè)線程塊的指令調(diào)度。調(diào)度器單元310調(diào)度線程用于在并行線程的組中執(zhí)行,其中每個(gè)組稱為線程束。在一個(gè)實(shí)施例中,每個(gè)線程束包括32個(gè)線程。調(diào)度器單元310可管理多個(gè)不同線程塊,在每個(gè)時(shí)鐘周期期間將線程塊分配到線程束用于執(zhí)行并隨后調(diào)度來自各功能單元(即核心350、DPU351、SFU352以及LSU353)上的多個(gè)不同線程束的指令。
[0039]在一個(gè)實(shí)施例中,每個(gè)調(diào)度器單元310包括一個(gè)或多個(gè)指令分派單元315。每個(gè)分派單元315配置為將指令傳送到功能單元中的一個(gè)或多個(gè)。在圖3示出的實(shí)施例中,調(diào)度器單元310包括兩個(gè)分派單元315,其使能來自同一線程束的兩個(gè)不同指令在每個(gè)時(shí)鐘周期期間被分派。在可替代實(shí)施例中,每個(gè)調(diào)度器單元310可包括單個(gè)分派單元315或附加的分派單元315。
[0040]每個(gè)SM350包括寄存器堆320,其提供用于SM350的功能單元的寄存器的集合。在一個(gè)實(shí)施例中,寄存器堆320在功能單元中的每一個(gè)之間被劃分,使得每個(gè)功能單元被分配寄存器堆320的專用部分。在另一實(shí)施例中,寄存器堆320在正由SM250執(zhí)行的不同線程束之間被劃分。寄存器堆320為連接到功能單元的數(shù)據(jù)路徑的操作數(shù)提供暫時(shí)存儲(chǔ)。
[0041]每個(gè)SM250包括L個(gè)處理核心350。在一個(gè)實(shí)施例中,SM250包括大數(shù)目的(例如192個(gè)等)不同的處理核心350。每個(gè)核心350是完全管線化(fully-pipelined)的單精度處理單元,其包括浮點(diǎn)運(yùn)算邏輯單元和整數(shù)運(yùn)算邏輯單元。在一個(gè)實(shí)施例中,浮點(diǎn)運(yùn)算邏輯單元實(shí)現(xiàn)用于浮點(diǎn)運(yùn)算的IEEE754-2008標(biāo)準(zhǔn)。每個(gè)SM250還包括實(shí)現(xiàn)雙精度浮點(diǎn)運(yùn)算的M個(gè)DPU351、實(shí)施特殊功能(例如拷貝矩形、像素混合操作等)的N個(gè)SFU352以及經(jīng)由J個(gè)紋理單元/LI高速緩存390和互連網(wǎng)絡(luò)380在共享存儲(chǔ)器370和寄存器堆320之間實(shí)現(xiàn)加載和存儲(chǔ)操作的P個(gè)LSU353。J個(gè)紋理單元/LI高速緩存390耦連在互連網(wǎng)絡(luò)380和共享存儲(chǔ)器370之間并且還耦連到交叉開關(guān)260。在一個(gè)實(shí)施例中,SM250包括64個(gè)DPU351、32個(gè)SFU352以及32個(gè)LSU353。在另一個(gè)實(shí)施例中,LI高速緩存不包括在紋理單元內(nèi),而是與共享存儲(chǔ)器370 —起被包括,具有至交叉開關(guān)260的分開的直接的連接。
[0042]每個(gè)SM250包括互連網(wǎng)絡(luò)380,其通過互連網(wǎng)絡(luò)380將功能單元中的每一個(gè)連接到寄存器堆320和共享存儲(chǔ)器370。在一個(gè)實(shí)施例中,互連網(wǎng)絡(luò)380是交叉開關(guān),其可配置為將任何功能單元連接到寄存器堆320中的任何寄存器、J個(gè)紋理單元/LI高速緩存390中的任何一個(gè)或共享存儲(chǔ)器370中的任何存儲(chǔ)器位置。
[0043]在一個(gè)實(shí)施例中,SM250實(shí)現(xiàn)在GPU內(nèi)。在這類實(shí)施例中,SM250包括J個(gè)紋理單元/LI高速緩存390。紋理單元/LI高速緩存390配置為從存儲(chǔ)器204訪問紋理圖(即紋理元素(texel)的2D陣列)并對紋理圖采樣以產(chǎn)生經(jīng)采樣的紋理值用于在著色器程序中使用。紋理單元/LI高速緩存390使用mip-map (即變化細(xì)節(jié)層級(jí)的紋理圖)實(shí)現(xiàn)諸如抗鋸齒操作的紋理操作。在一個(gè)實(shí)施例中,SM250包括16個(gè)紋理單元/LI高速緩存390。在一個(gè)實(shí)施例中,紋理單元/LI高速緩存390可以配置為接收來自LSU353的加載和存儲(chǔ)請求以及合并紋理訪問與加載和存儲(chǔ)請求以生成經(jīng)合并的存儲(chǔ)器操作,該經(jīng)合并的存儲(chǔ)器操作被輸出到包括共享存儲(chǔ)器370的存儲(chǔ)器系統(tǒng)。存儲(chǔ)器系統(tǒng)還可以包括L2高速緩存265、存儲(chǔ)器204和系統(tǒng)存儲(chǔ)器(未不出)。
[0044]上文所描述的PPU200可配置為實(shí)施比常規(guī)CPU快得多的高度并行計(jì)算。并行計(jì)算在圖形處理、數(shù)據(jù)壓縮、計(jì)量生物學(xué)、流處理算法等方面具有優(yōu)勢。
[0045]在一個(gè)實(shí)施例中,可以利用前述的系統(tǒng)來實(shí)現(xiàn)光子映射。光子映射包括發(fā)射光子、追蹤光子以及通過估計(jì)光子的密度計(jì)算所散射的輻射度(即著色等)。光子發(fā)射和追蹤步驟類似于路徑追蹤。它們沿著傳輸路徑產(chǎn)生一系列散射點(diǎn)。追蹤在每個(gè)散射點(diǎn)處將入射光子存儲(chǔ)在光子圖中。對用于圖的數(shù)據(jù)結(jié)構(gòu)的挑選取決于稍后所采用的著色算法。
[0046]用來對復(fù)雜場景進(jìn)行實(shí)時(shí)渲染的光子映射的許多變體已經(jīng)被提出。結(jié)合該算法進(jìn)步,GPU現(xiàn)在足夠強(qiáng)大以使得光子可在實(shí)時(shí)渲染系統(tǒng)中被利用。
[0047]諸如OptiX的高效的并行光線追蹤硬件和軟件系統(tǒng)能夠每秒追蹤數(shù)億光線并且過程可以分?jǐn)傇诙鄠€(gè)幀上。因此,現(xiàn)有系統(tǒng)滿足光子追蹤所需要的性能。凈性能取決于高效的光子著色。因此,可以利用分塊式延期光子收集實(shí)現(xiàn)方案來實(shí)現(xiàn)針對并行向量架構(gòu)的光子著色的架構(gòu)感知優(yōu)化以增加光子收集的可擴(kuò)展性(例如用于在交互應(yīng)用中達(dá)到膠片質(zhì)量的光照等)并且一般地推進(jìn)GPU上的延期著色。
[0048]圖4A示出了根據(jù)另一個(gè)實(shí)施例的、用于分塊式延期著色的方法400的流程圖。作為選項(xiàng),方法400可以在先前的圖和/或任何隨后的圖的上下文中實(shí)現(xiàn)。然而當(dāng)然,方法400可以在任何期望的環(huán)境中實(shí)現(xiàn)。還應(yīng)該注意前述定義可以在本描述期間應(yīng)用。
[0049]如在操作410中所示的,將每個(gè)光子的拷貝(或指向每個(gè)光子的指針)放置在將包含其效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中。此外,如在操作420中所示的,對每個(gè)像素塊中的像素實(shí)施迭代,并且對于每一個(gè)像素塊,挑選從其計(jì)算著色的像素塊中的光子子集。此外,如在操作430中所示的,在每個(gè)像素處從其鄰域處的值重建平滑著色。
[0050]圖4B示出了根據(jù)另一個(gè)實(shí)施例的、用于分塊式延期著色的方法450的流程圖。作為選項(xiàng),方法450可以在先前的圖和/或任何隨后的圖的上下文中實(shí)現(xiàn)。然而當(dāng)然,方法450可以在任何期望的環(huán)境中實(shí)現(xiàn)。還應(yīng)該注意前述定義可以在本描述期間應(yīng)用。
[0051]如在操作460中所示的,將每個(gè)光子的拷貝(或指向每個(gè)光子的指針)放置在將包含其效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中,并且不與像素塊內(nèi)的場景的深度范圍相交的光子被剔除。此外,如在操作470中所示的,以組塊對每個(gè)像素塊中的像素實(shí)施迭代并且挑選從其計(jì)算著色的像素塊中的光子子集。此外,如在操作480中所示的,在每個(gè)像素處從其鄰域處的值重建平滑著色。
[0052]以此方式,在一個(gè)實(shí)施例中,可以利用分塊式算法來將每個(gè)光子的拷貝插入與它可能影響的屏幕空間像素塊相對應(yīng)的存儲(chǔ)桶中。這允許第二通道對來自用于計(jì)算著色器的共享存儲(chǔ)器內(nèi)能容納的公共光子子集的像素塊內(nèi)的所有像素進(jìn)行著色。
[0053]在像素塊中的光子比實(shí)現(xiàn)系統(tǒng)的存儲(chǔ)器能容納的光子多的情況下,可以在像素塊上產(chǎn)生多個(gè)通道,在每個(gè)通道中處理像素塊中的相當(dāng)大小的光子組塊。在一個(gè)實(shí)施例中,在將光子分類到像素塊中的過程期間,分塊式算法可以起到剔除不與像素塊內(nèi)的場景的深度范圍相交的光子的作用。在具有高深度變化的場景中,可啟動(dòng)即刻終止的許多著色線程,這降低向量線路占用而不提供有用的計(jì)算。
[0054]表1示出了根據(jù)一個(gè)實(shí)施例的、說明像素塊插入通道的例示性代碼。
[0055]表1
[0056]
【權(quán)利要求】
1.一種方法,包括: 識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子; 識(shí)別與所述至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊; 針對所述多個(gè)光子中的每一個(gè)識(shí)別能夠由效應(yīng)球面的投影所影響的所述多個(gè)屏幕空間像素塊中的每一個(gè); 選擇從其計(jì)算著色的與所述屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的至少一個(gè)光子子集;以及 利用所選擇的至少一個(gè)光子子集為所述至少一個(gè)場景計(jì)算著色。
2.如權(quán)利要求1所述的方法,其中計(jì)算所述著色包括在與所述至少一個(gè)場景相關(guān)聯(lián)的每個(gè)像素處重建平滑著色。
3.如權(quán)利要求1所述的方法,其中計(jì)算所述著色包括在與所述至少一個(gè)場景相關(guān)聯(lián)的每個(gè)像素處從 鄰域像素值重建平滑著色。
4.如權(quán)利要求1所述的方法,其中計(jì)算所述著色包括利用側(cè)濾波器。
5.如權(quán)利要求1所述的方法,其中選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所述至少一個(gè)光子子集包括對所述多個(gè)屏幕空間像素塊中的每一個(gè)中的所有像素進(jìn)行迭代。
6.如權(quán)利要求1所述的方法,其中選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所述至少一個(gè)光子子集包括對所述多個(gè)屏幕空間像素塊中的每一個(gè)中的所有像素進(jìn)行迭代并且選擇從其計(jì)算著色的屏幕空間像素塊中的每一個(gè)中的光子子集。
7.如權(quán)利要求1所述的方法,其中選擇從其計(jì)算著色的與屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所述至少一個(gè)光子子集包括選擇與所述屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所有光子。
8.如權(quán)利要求1所述的方法,其中利用隨機(jī)過程來選擇從其計(jì)算著色的與所述屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所述至少一個(gè)光子子集。
9.如權(quán)利要求1所述的方法,其中利用交錯(cuò)過程來選擇從其計(jì)算著色的與所述屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的所述至少一個(gè)光子子集。
10.如權(quán)利要求1所述的方法,進(jìn)一步包括將每個(gè)光子的拷貝插入將包含特定光子的效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中。
11.如權(quán)利要求1所述的方法,進(jìn)一步包括將每個(gè)光子的拷貝插入與所述光子能夠影響的所述多個(gè)屏幕空間像素塊相對應(yīng)的存儲(chǔ)桶中。
12.如權(quán)利要求1所述的方法,進(jìn)一步包括將指向每個(gè)光子的指針插入能夠包含特定光子的效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中。
13.如權(quán)利要求1所述的方法,進(jìn)一步包括將每個(gè)光子的拷貝或指向每個(gè)光子的指針插入能夠包含特定光子的效應(yīng)球面的投影的每個(gè)屏幕空間像素塊中。
14.如權(quán)利要求1所述的方法,進(jìn)一步包括識(shí)別與所述屏幕空間像素塊相關(guān)聯(lián)的一個(gè)或多個(gè)組塊的光子用于處理。
15.如權(quán)利要求1所述的方法,進(jìn)一步包括剔除不和與所述多個(gè)屏幕空間像素塊相關(guān)聯(lián)的預(yù)定義深度范圍相交的、與所述多個(gè)屏幕空間像素塊相關(guān)聯(lián)的光子。
16.如權(quán)利要求1所述的方法,其中與所述至少一個(gè)場景相關(guān)聯(lián)的所述多個(gè)光子與光子映射過程相關(guān)聯(lián)。
17.如權(quán)利要求1所述的方法,其中與所述至少一個(gè)場景相關(guān)聯(lián)的所述多個(gè)屏幕空間像素塊包括多個(gè)像素。
18.如權(quán)利要求1所述的方法,進(jìn)一步包括渲染所述至少一個(gè)場景。
19.一種非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其存儲(chǔ)當(dāng)由處理器執(zhí)行時(shí)使所述處理器實(shí)施步驟的指令,所述步驟包括: 識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子; 識(shí)別與所述至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊; 針對所述多個(gè)光子中的每一個(gè)識(shí)別能夠由效應(yīng)球面的投影所影響的所述多個(gè)屏幕空間像素塊中的每一個(gè); 選擇從其計(jì)算著色的與所述屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的至少一個(gè)光子子集;以及 利用所選擇的至少一個(gè)光子子集為所述至少一個(gè)場景計(jì)算著色。
20.—種系統(tǒng),包括: 存儲(chǔ)器系統(tǒng);以及 一個(gè)或多個(gè)處理核心,所述一個(gè)或多個(gè)處理核心耦連到所述存儲(chǔ)器系統(tǒng)并且每一個(gè)配置為: 識(shí)別與至少一個(gè)場景相關(guān)聯(lián)的多個(gè)光子; 識(shí)別與所述至少一個(gè)場景相關(guān)聯(lián)的多個(gè)屏幕空間像素塊; 針對所述多個(gè)光子中的每一個(gè)識(shí)別能夠由效應(yīng)球面的投影所影響的所述多個(gè)屏幕空間像素塊中的每一個(gè); 選擇從其計(jì)算著色的與所述屏幕空間像素塊中的每一個(gè)相關(guān)聯(lián)的至少一個(gè)光子子集;以及 利用所選擇的至少一個(gè)光子子集為所述至少一個(gè)場景計(jì)算著色。
【文檔編號(hào)】G06T1/60GK103914804SQ201310714763
【公開日】2014年7月9日 申請日期:2013年12月20日 優(yōu)先權(quán)日:2012年12月21日
【發(fā)明者】摩根·麥圭爾, 麥克爾·托馬斯·馬拉, 大衛(wèi)·帕特里克·利布基, 雅各布·潘塔萊奧尼 申請人:輝達(dá)公司