TWI546770B - 圖形處理單元中3d加速結構之完全並列原地建構 - Google Patents
圖形處理單元中3d加速結構之完全並列原地建構 Download PDFInfo
- Publication number
- TWI546770B TWI546770B TW102108216A TW102108216A TWI546770B TW I546770 B TWI546770 B TW I546770B TW 102108216 A TW102108216 A TW 102108216A TW 102108216 A TW102108216 A TW 102108216A TW I546770 B TWI546770 B TW I546770B
- Authority
- TW
- Taiwan
- Prior art keywords
- node
- index
- tree
- primitive
- primitives
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/52—Parallel processing
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Processing Or Creating Images (AREA)
Description
本申請案係2012年3月9日所提出,標題為「FULLY PARALLEL IN-PLACE CONSTRUCTION OF 3D ACCELERATION STRUCTURES ON A GPU」的第61/609,156號臨時專利申請案之轉換、並主張其優先權與權利,該專利的整體此被納入作為參考。
本發明係關於建構一階層樹,尤其是關於並列建構二進位基數樹的系統與方法。
近年來,通用計算已經發展出許多方法,即時建構數百萬圖元的層次包圍盒(BVH,bounding volume hierarchie)、八元樹(octrees)以及k-d樹(k-d trees)。某些方法的目標在於運用表面積啟發最大限度提高該結果樹狀的品質,而其他方法則選擇犧牲樹狀品質來提高建構速度。
正確的品質與速度之間的妥協絕大部分取決於應用。樹狀品質在射線追蹤中通常最好,因為相同的加速結構經常重複用於數百萬條射
線。即時廣泛相碰撞偵測以及粒子互動代表另一個極端,其中建構速度最為重要一加速結構在每一時間步驟上都必須重新建構,並且查詢的數量通常相當少。更進一步,例如體素型全域照明以及表面重新建構這類特定應用特別依賴常規八元樹以及k-d樹,在此樹狀品質固定。
將建構速度最大化的現有方法之主要缺點為以順序方式產生節點階層,通常一次一階,因為必須完成每個處理回合才能開始下一回合。這樣限制在樹狀頂端階層上可達成的並列處理數量,並且可導致嚴重未充分利用並列核心。該依序處理已經是目前小工作量的GPU之瓶頸,其需要數萬條獨立的並列執行緒才能完全利用其計算能力。該問題會隨著並列核心數量持續增加而越來越明顯。依序處理的另一個含意為:現有方法以廣度優先順序輸出該階層,即使深度優先順序通常會考慮到最好的資料局部性以及快取命中率。
本發明揭示一種用於將例如層次包圍盒(BVH)、八元樹以及k-d樹這類階層樹的建構內並列處理最大化之電腦實施方法及系統。本發明的具體實施例提供一種快速建構BVH、八元樹以及k-d樹的方法,如此整體效能與可用核心數量成正比,並且該結果資料結構總是在嚴格的深度優先順序內。該創新方法包含以完全資料並列方式建構二進位基數樹,然後使用該二進位基數樹當成一建構體,用於快速建構其他類型的樹。
在一個具體實施例內,揭示一種具有電腦可執行指令可讓一電腦系統執行一方法的非暫態電腦可讀取儲存媒體。該方法包含決定包含
已經索引的圖元節點總數之複數個圖元,其中該等複數個圖元對應至一階層樹的葉節點。該方法包含將該等複數個圖元排序。該方法包含以相對於圖元節點總數要求至多暫時儲存體線性量的方式,來建構該階層樹。該方法也包含以和其一或更多前代節點並列的方式,建構該階層樹的一內部節點。也就是,該階層樹的一或更多內部節點與一或更多其個別前代節點並列建構。
在另一個具體實施例內,揭示一種電腦系統,其包含一處理器以及連結至該處理器並且其內儲存指令的一記憶體,若這些指令由該電腦系統執行時會導致該電腦系統執行一方法。該方法包含判斷內含已索引的圖元節點總數之複數個圖元,其中該等複數個圖元對應至一階層樹的葉節點。該方法包含將該等複數個圖元排序。該方法包含以相對於圖元節點總數要求至多暫時儲存體線性量的方式,來建構該階層樹。該方法也包含以和其一或更多前代節點並列的方式,建構該階層樹的一內部節點。也就是,該階層樹的一或更多內部節點與一或更多其個別前代節點並列建構。
仍舊在另一個具體實施例內,揭示一系統,其包含用於指派Morton碼給內含已索引圖元節點總數的複數個圖元之裝置,其中該等複數個圖元對應至一階層樹的葉節點。該系統包含用於將該等複數個圖元排序之裝置。該系統包含用於以相對於圖元節點總數要求至多暫時儲存體線性量的方式,來建構該階層樹之裝置。該系統也包含用於以和其一或更多前代節點並列的方式,建構該階層樹的一內部節點之裝置。也就是,該階層樹的一或更多內部節點與一或更多其個別前代節點並列建構。
在一個具體實施例內,揭示一種具有電腦可執行指令可讓一
電腦系統執行一方法,從二進位樹建構層次包圍盒的非暫態電腦可讀取儲存媒體。該方法包含提供內含複數個葉節點以及複數個內部節點的二進位樹。每一該等複數個內部節點都唯一關聯於兩個子代節點,其中每一子代節點都包含一內部節點或葉節點。該方法也包含利用從該等複數個葉節點往上朝向一根節點移動該二進位樹,以決定用於該二進位樹內節點的複數個包圍盒,其中每一親代節點都由稍後到達的對應子代節點處理一次。
在另一個具體實施例內,揭示一種從一階層樹結構建構一層次包圍盒的系統。該系統包含一階層樹產生器,用於建構內含複數個葉節點以及複數個內部節點的二進位樹。每一該等複數個內部節點都唯一關聯於兩個子代節點,其中每一子代節點都包含一內部節點或葉節點。該系統也包含用於針對該二進位樹內每一節點產生親代指標器之一關係模組。也就是在建構該二進位樹時,也產生指向來自個別子代節點的一親代節點之親代指標器。該系統也包含一排程器,用於選擇一或更多葉節點由複數個執行緒並列處理。該等葉節點關聯於決定包圍盒的路徑,其中該等路徑從葉節點開始,並且持續往上通過該二進位樹,通過相關聯並且對應的親代節點。該系統也包含一包圍盒產生器,用於利用從該等複數個葉節點往上朝向一根節點移動該二進位樹,以決定用於該二進位樹內節點的複數個包圍盒,其中每一親代節點都由稍後到達的對應子代節點處理一次。該系統也包含一親代節點移動器,用於自動從一第一執行緒上的一第一子代節點移動至一第一親代節點,其中該第一親代節點關聯於該第一子代節點以及一第二子代節點。該系統也包含與該親代節點相關聯的一計數器,用於決定之前在一第二執行緒上是否已經將該第一親代節點移動至該第二子代節
點旁邊。該包圍盒產生器設置成之前在一第二執行緒上已經將該第一親代節點移動至該第二子代節點旁邊時,決定使用該第一執行緒的該第一親代節點之一親代包圍盒。
熟習技術人士閱讀下列具體實施例搭配附圖之詳細說明後,就可瞭解本發明許多具體實施例的這些與其他目的與優點。
100‧‧‧計算系統
110‧‧‧中央處理單元
120‧‧‧圖形處理單元
130‧‧‧顯示畫面
140‧‧‧系統記憶體
160‧‧‧使用者介面
400‧‧‧二進位基數樹
410‧‧‧內部節點索引
420‧‧‧圖元索引
430‧‧‧根節點
440‧‧‧內部節點索引3
445‧‧‧範圍
450‧‧‧圖元索引3
447‧‧‧圓圈
460‧‧‧葉節點索引「1」
470‧‧‧葉節點索引「2」
480‧‧‧圖元索引4
490‧‧‧行
600‧‧‧虛擬碼
700‧‧‧系統
710‧‧‧階層樹產生器
720‧‧‧關係模組
730‧‧‧排程器
740‧‧‧包圍盒產生器
附圖為併入並且構成本說明書的一部份,其中相同的編號描述相同的元件,例示本發明的具體實施例並且在搭配內容說明之後,用來解釋本發明原理。
圖1描述根據本發明的一個具體實施例,適用來實施本方法的示範電腦系統之方塊圖。
圖2為根據本發明的一個具體實施例,例示用於並列建構階層樹的一電腦實施方法之流程圖。
圖3為根據本發明一個具體實施例,在一順序二進位基數樹建構期間所使用的該基數樹之圖式。
圖4為根據本發明一個具體實施例,用於圖3內首次導入的二進位基數樹之節點階層配置圖。
圖5為根據本發明的一個具體實施例,例示用於並列建構二進位基數樹的一方法之流程圖。
圖6為根據本發明的一個具體實施例,用於建構二進位基數樹的虛擬碼之圖式。
圖7為根據本發明的一個具體實施例,設置來建構BVH的系統方塊圖。
圖8為根據本發明的一個具體實施例,例示用於並列建構BVH的一電腦實施方法之流程圖。
圖9為根據本發明的一個具體實施例,例示用於並列建構BVH,其中由稍後到達的子代節點處理一內部親代節點,的一電腦實施方法之流程圖。
在此將詳細參考本發明的許多具體實施例,附圖內將說明其範例。雖然本發明將結合這些具體實施例來說明,吾人將瞭解這並不用於將本發明限制在這些具體實施例上。相反地,本發明用於涵蓋申請專利範圍領域與精神內所包含之變化、修改與同等配置。更進一步,在下列本發明的詳細說明中,將公佈許多特定細節以提供對本發明有通盤了解。不過,吾人了解在沒有這些特定細節的情況下也可實施本發明。在其他實例中,已知的方法、程序、組件和電路並未詳述,如此就不會模糊本具體實施例的領域。
某些詳細說明部分都以可在電腦記憶體上執行的資料位元上操作之程序、邏輯區塊、處理以及其他符號表示之方式來呈現。這些說明與代表為熟習資料處理技術人士用來將其工作內容灌輸給其他熟習此技術人士的最有效方式。在本申請案中,程序、邏輯區塊、處理等等一般係
認為是導致所要結果的自洽步驟或指令序列。這些步驟為所需的物理量之物理操縱。通常,雖然非必要,不過這些量採用可以儲存、傳輸、結合、比較以及在電腦系統內操縱的電或磁性信號形式。為了時間上方便起見,原則上因為常用,所以這些信號代表交易、位元、數值、元件、符號、字元、樣板、像素等等。
不過,吾人應該瞭解,所有這些與類似詞彙都與適當的物理量相關連,並且僅為適用這些量的便利符號。除非特別聲明,否則從下列討論中可瞭解,整個本詳細說明當中,利用像是「排序」、「決定」、「建構」、「指派」等等詞彙所做的討論都是提及電腦系統或類似電子計算裝置或處理器(像是圖1的系統100)之動作與處理(例如圖2和圖5的流程圖200和500)。電腦系統或類似電子計算裝置操縱並轉換呈現為電腦系統暫存器、記憶體或其他這種資料儲存、傳輸或顯示裝置內實體(電子)量的資料。
圖2為根據本發明具體實施例用於處理資料的電腦實施方法之範例流程圖。雖然在流程圖內說明特定步驟,不過這種步驟僅為示範。也就是,本發明的具體實施例適合執行流程圖內許多其他步驟或步驟變化。
本說明書內描述的本發明具體實施例都在設置用於監控與執行指令之硬體型組件範圍內討論,也就是本發明的具體實施例在微架構的硬體裝置內實施,並且設置用於監控關鍵停止狀況,並且針對電源管理執行適當時脈閘控。
本說明書內描述的其他具體實施例可在位於例如程式模組這類某些電腦可讀取儲存媒體形式上,由一或更多電腦或其他裝置所執行的電腦可執行指令之一般內容內討論。藉由範例並且不受限於此範例,電
腦可讀取儲存媒體可包含非暫態電腦儲存媒體以及通訊媒體。一般而言,程式模組包含常式、程式、物件、組件、資料結構以及執行特定工作或實施特定摘要資料類型等。程式模組的功能性可在許多具體實施例內結合或分散。
電腦儲存媒體包含在任何方法或技術內實施的揮發與非揮發性、可移除與不可移除媒體,用於儲存像是電腦可讀取指令、資料結構、程式模組或其他資料等等資訊。電腦儲存媒體包含但不受限於隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可抹除式可程式編輯ROM(EEPROM)、快閃記憶體或其他記憶體技術、小型碟片ROM(CD-ROM)、數位視訊光碟(DVD)或其他光學儲存裝置、磁匣、磁帶、磁片儲存或其他磁性儲存裝置,或可用於儲存所要資訊以及可存取來擷取這些資訊的其他任何媒體。
通訊媒體可具體實施電腦可執行指令、資料結構以及程式模組,並且包含任何資訊傳遞媒體。藉由範例並且不受限於此範例,通訊媒體包含像是有線網路或直接有線連線的有線媒體,以及像是聲音、射頻(RF)、紅外線以及其他無線媒體的無線媒體。上述任何媒體的通訊也應該包含在電腦可讀取媒體的領域內。
圖1為可實施本發明具體實施例的計算系統100之範例方塊圖。計算系統100廣泛代表可執行電腦可讀取指令的任何單一或多處理器計算裝置或系統。計算系統100的範例包含但不受限於工作站、膝上型電腦、用戶端終端機、伺服器、分散式計算系統、手持式裝置或任何其他計算系統或裝置。在最基本的組態中,計算系統100可包含至少一處理器110以及一系統記憶體140。
中央處理單元(CPU)110以及圖形處理單元(GPU)120都連結至記憶體140。系統記憶體140一般代表可儲存資料及/或其他電腦可讀取指令的任何類型或形式之揮發性或非揮發性儲存裝置或媒體。系統記憶體140的範例包含但不受限於RAM、ROM、快閃記憶體或任何其他合適的記憶體裝置。在圖1的範例中,記憶體140為一共享記憶體,因此該記憶體儲存CPU 110和GPU 120的指令與資料。另外,可以有分開的記憶體分別專用於CPU 110和GPU 120。該記憶體可包含一框架緩衝器,用於儲存驅動顯示畫面130的像素資料。
系統100包含一使用者介面160,在一實施當中其包含一螢幕上游標控制裝置。該使用者介面可包含一鍵盤、一滑鼠及/或一觸控螢幕裝置(一觸控板)。
CPU 110及/或GPU 120一般代表可處理資料或解析並執行指令的任何類型或型式之處理單元。在特定具體實施例內,處理器110及/或120可接收來自軟體應用程式或硬體模組的指令。這些指令可導致處理器110及/或120執行本說明書所描述及/或例示的一或更多範例具體實施例之功能。例如:處理器110及/或120可執行及/或為用於執行(單獨或與其他元件結合)本說明書內描述的一或更多監控、決定、閘控及偵測等等的裝置。處理器110及/或120也可執行及/或為執行本說明書內所描述及/或例示的任何其他步驟、方法或處理之裝置。
在某些具體實施例內,該電腦可讀取媒體內含可載入計算系統100的一電腦程式。然後儲存在該電腦可讀取媒體內的所有或部分該電腦程式可儲存在系統記憶體140及/或儲存裝置的許多部分內。由處理器110及/
或120執行時,已經載入計算系統100的一電腦程式可導致處理器110及/或120執行及/或為執行本說明書內所描述及/或例示的示範具體實施例功能之裝置。此外或另外,本說明書內描述及/或例示的該等範例具體實施例可用韌體及/或硬體實施。
圖2為根據本發明的一個具體實施例,例示用於並列建構階層樹的一電腦實施方法之流程圖200。在另一個具體實施例內,流程圖200在一種電腦系統內實施,該系統包含一處理器以及連結至該處理器並且其內儲存指令的一記憶體,若這些指令由該電腦系統執行時會導致該系統執行用於並列建構階層樹的一方法。仍舊在另一個具體實施例內,用於執行一方法的指令都儲存在一非暫態電腦可讀取儲存媒體內,其具有電腦可執行指令,用於導致一電腦系統執行並列建構階層樹的一方法。流程圖200內描述的該方法可由圖1中電腦系統100的一或更多組件實施。
實際上,階層樹用於圖形實例中,用於加速路徑追蹤、即時射線追蹤、碰撞偵測、光子映射、體素型場景呈現等等。在具體實施例內,以並列方式迅速建構樹狀。也就是在本發明具體實施例內,可從開始就同時處理該階層樹的所有階層。這避免未充份利用,並且讓效能與GPU的大小成正比。
為了清晰起見,圖2的方法以建構層次包圍盒或BVH的範疇來描述,不過此方法也適用於建構點型八元樹以及k-d樹。
在210上,該方法包含決定複數個圖元。這些都相關聯並且
包含已經索引的圖元節點總數。該等複數個圖元對應至已經產生的一階層樹之葉節點。
在一個具體實施例內,每一該等複數個圖元都指派給一Morton碼。例如在BVH的範圍內,利用找出每一圖元邊界方塊的交叉點,針對每一圖元產生一Morton碼,並且尋找相對於該場景邊界方塊的其位元代表。此概念為擴充每一座標的位元,然後將這些位元交錯形成單一位元串。
繼續使用BVH的範例,由位元串X0Y0Z0X1Y1Z1定義一立體(3D)單位立方體內含一已知點的Morton碼,其中該點的x座標呈現為0:X0X1X2等,並且類似用於y和z座標。任意3D圖元的Morton碼可定義在其軸校準邊界方塊(AABB,axis-aligned bounding box)的交叉點。實際上,在具體實施例內,該等Morton碼可限制在30或63個位元,以便儲存為32位元或64位元整數。
在220上,該方法包含根據其Morton碼將該等複數個圖元排序。例如在BVH的情況下,這樣沿著空間填充曲線排列,如此在3D內彼此靠近的圖元可能在排序的順序附近終止。
在230上,該方法包含相對於圖元節點總數要求至多暫時儲存體線性量,來建構該階層樹。也就是,該階層樹以只需要相對於本發明具體實施例內輸入圖元數量的記憶體線性量之方式來建造。此外,在一個具體實施例內,並列建造或建構該階層樹。
在240上,該方法包含以和其一或更多前代節點並列的方式,建構該階層樹的一內部節點。也就是,該階層樹的一或更多內部節點
與一或更多其個別前代節點並列建構。如此在本發明的具體實施例內,以和至少一個前代節點並列方式來建構至少一個節點。
在本發明的具體實施例內,該階層樹的建構由建構一二進位基數樹來執行,這透過Morton碼集合所定義。例如在BVH的情況下,產生一節點階層,其中每一子樹對應至已排序圖元的線性範圍。在先前技術中,一二進位樹常用於索引資料串。在一個具體實施例內,該輸入為圖元的集合,或定義該等葉節點的複數個圖元。在本具體實施例內,該輸入為該等已排序的Morton碼。進一步,該二進位基數樹包含該等圖元節點以及一或更多內部節點。每一內部節點都對應至個別子樹內對應圖元節點的圖元所共享之最長共用前置碼。
圖3為根據本發明的一個具體實施例的一二進位基數樹300之圖式。實際上,基數樹300為包含八個葉節點,索引編號為「0-7」的一已排序二進位基數樹。該等葉節點以字典順序儲存一組5位元金鑰。為了例示,顯示該等葉節點或圖元包含5位元,不過可為任何長度,如先前所描述。該等內部節點代表其共用前置碼。進一步,每一內部節點都涵蓋金鑰的線性範圍,其根據其第一差異位元分割成兩個子範圍,如底下關於圖4所描述。
尤其,已知一組n個金鑰k 0、...、k n-1代表位元串,一二進位基數樹(也稱為Patricia樹)為其共用前置碼的階層呈現。該等金鑰由該等葉節點表示,並且每一內部節點對應至由其個別子樹內該等金鑰共享的該最長共用前置碼,如圖3內所示。
相較於一前置碼樹,其中每一共用前置碼都內含一個內部節點,一基數樹以省略只有一個子代的節點之概念壓縮。因此,具有n個葉節
點的每一二進位基數樹都確實包含n-1個內部節點,如圖3內所示。在一個具體實施例內,一子代節點為一葉節點。在一個具體實施例內,複製金鑰需要特別注意。
尤其是在一個具體實施例內,只考慮已經排定的樹,其中每一節點的子代以及後續該等葉節點都以字典順序排列。這等於需要排序金鑰的順序,這可將每一節點所涵蓋的該等金鑰表示為一線性範圍[i,j]。使用δ(i,j)標示金鑰k i 與k j 之間該最長共用前置碼的長度,該順序暗示δ(i',j')δ(i,j)適用於任何i',j' [i,j]。利用比較其第一和最後金鑰來決定對應至一已知節點的該前置碼,其中保證該等其他金鑰共享該相同前置碼。
實際上,每一內部節點都根據其第一差異位元,即是接在δ(i,j)之後,來分割其金鑰。此位元對於從k i 開始的特定金鑰數量將為零,而剩餘直到k j 的部分為一。該位元為零的最後金鑰之索引標示為「分離位置」,標示為γ [i,j-1]。因為kγ的位元為零並且kγ+1的為一,該分離位置必須滿足δ(γ;γ+1)=δ(i,j)。該結果子範圍已知為[i,γ]和[γ+1,j],並且分別由左和右子代節點進一步分割。
如圖3內所示,該根部對應至金鑰的完整範圍[0;7]。因為k3和k4在其第一位元上不同,該範圍在γ=3上分離,導致子範圍[0,3]和[4,7]。該左子代進一步根據第三位元在γ=1上分離[0,3],並且右子代根據第二位元在γ=4上分離[4,7]。
圖4和圖5為例示後續用於建構次要樹,例如BVH、八元樹、k-d樹等的二進位基數樹建構之圖式。尤其是,圖4為根據本發明一個具體實施例,用於圖3內首次導入的二進位基數樹之節點階層配置圖,並且圖5為
例示用於並列建構二進位基數樹的方法之流程圖。
圖4為根據本發明的一個具體實施例,圖3內首次導入的一已排列二進位基數樹400之圖式,其中該等葉節點已經編號為「0-7」並且關聯於以字典順序排序的一組5位元金鑰(例如Morton碼)。例如:葉節點「1」關聯於一5位元Morton碼「0-0-0-1-0」,並且葉節點「2」關聯於一5位元Morton碼「0-0-1-0-0」。
如圖4內所示,要能夠並列建構二進位基數樹400,透過圖4內顯示的配置建立內部節點索引410與(該等葉節點的)圖元索引420間之連接。也就是,以一方式指派該等內部節點的索引,可以不根據較早結果尋找其子代。尤其是如圖4內所示,每一內部節點都指派給介於「0-6」之間的一索引,並且水平對準該相同索引的一葉節點。例如:內部節點索引3 440水平對準葉節點或圖元索引3 450。
另外,由每一內部節點所涵蓋金鑰(例如葉節點)的該範圍由一水平列指示,並且對應至該等金鑰之間差異的該第一位元之該分離位置由一圓形指示。例如:內部節點索引「3」440關聯於包含葉節點「0-3」的範圍445(由該水平列顯示)。該分離位置由圓圈447顯示,並且指出最高差異位元介於葉節點索引「1」460與「2」470之間。
為了清晰以及例示起見,該等葉節點與該等內部節點都分別儲存在兩個個別陣列L與I之內。圖4內的節點配置已經定義,如此根節點430位於I 0之上,並且根據其個別分離位置指派其子代以及任何內部節點的子代之索引,底下將關於圖5更完整描述。例如:若該左子代涵蓋超過一個金鑰,則其位於I γ上,或若為一葉,則在L γ上。類似地,該右子代位於I γ+1或I γ+1上,
如圖4內所示。
圖4內所示的該節點配置之重要屬性為:屬於每一內部節點的該圖元索引之範圍包含並同時與其第一圖元或葉節點,或其最後圖元或葉節點一致。另外,根節點「0」430位於其範圍[0;n-1]的開頭上,如此任何內部節點的該左子代位於其範圍[i,γ]的末端上,並且右子代位於其範圍[γ+1;j]的開頭上。
圖5為根據本發明的一個具體實施例,例示用於並列建構二進位基數樹的一電腦實施方法之流程圖500。在另一個具體實施例內,流程圖500在一種電腦系統內實施,該系統包含一處理器以及連結至該處理器並且其內儲存指令的一記憶體,若這些指令由該電腦系統執行時會導致該系統執行用於並列建構階層樹的一方法。仍舊在另一個具體實施例內,用於執行一方法的指令都儲存在一非暫態電腦可讀取儲存媒體內,其具有電腦可執行指令,用於導致一電腦系統執行並列建構階層樹的一方法。流程圖500內描述的該方法可由圖1中電腦系統100的一或更多組件實施。
在一個具體實施例內,圖5內描述的該方法擴充圖2的230內所描述之該處理,來建構該階層樹。尤其是,利用分割該圖元或葉節點來產生該節點階層。在一個具體實施例內,由建構一基數樹執行該分割,該樹定義在代表該等葉節點的該組Morton碼之上。更特別是,透過圖3和圖4內所示的該樹狀配置,由在該等內部節點索引與該等葉節點的圖元索引之間建立一連接,執行該節點階層的行建構。也就是,以一方式指派該等內部節點的索引,可以不根據較早結果尋找其子代。在該方式中,在該節點階層配置之間不用執行同步。另外在該方式中,該階層樹的一或更多內部
節點與一或更多其個別前代節點並列建構。
尤其是,為了建構一二進位基數樹,圖5內描述的該處理決定每一內部節點所涵蓋的金鑰範圍,並且決定每一內部節點的子代(在本二進位基數樹內為二)。因為屬於每一內部節點的該圖元索引範圍包含並同時與其第一圖元或葉節點一致,或其最後圖元或葉節點,如上述,決定該範圍的一末端。該範圍的另一末端由找尋相鄰圖元索引所決定。此後,由於該節點配置,利用找出該分割位置來識別該子代,例如圖4內所例示,並且底下有進一步描述。
在一個具體實施例內,使用圖6內例示的虛擬碼600來執行圖5內描述的該處理,其中虛擬碼600建構一二進位基數樹。為了簡化,在虛擬碼600內,δ(i,j)=-1,其中j [0,n-1]。更特別是,在一個具體實施例內,每一內部節點I i 都並列處理。
在510上,針對對應至一內部節點的已知節點索引,圖5的方法包含根據該節點索引,決定該等複數個圖元的對應圖元索引範圍之方向。在該基數樹內,每一內部節點都屬於圖元索引範圍。更特別是,在一已指派索引的內部節點與具有相同索引號碼的一圖元索引之間存在一關係。尤其是,具有相同索引號碼的該圖元索引包含在圖元索引的對應範圍內。進一步,該已知節點索引包含該對應範圍內的一開始圖元索引或一結束圖元索引。
特別是,由相鄰圖元索引決定該範圍的方向。也就是,由找尋該相鄰金鑰k i-1、k i 、k i+1決定該範圍的「方向」。該方向標示為d,如此d=+1表示一範圍開始於i,並且d=-1表示一範圍結束於i。因為每一內部節點
都涵蓋至少兩個金鑰,則由圖5的樹狀結構屬性決定,k i 和k i+d 必須屬於I i-d 。此外,因為同代總是彼此相鄰,所以由圖5的樹狀結構屬性決定k i-d 屬於同代節點I i-d 。
更特別是,根據哪個相鄰圖元具有最多索引匹配來決定一範圍的方向。例如在圖4內,該內部節點索引或「3」440的該範圍以圖元索引或葉節點「3」450開始或結束。利用將該等相鄰索引或葉節點,例如圖元索引「2」470與圖元索引「4」480,與具有和該內部節點相同索引的該圖元索引(例如圖元索引「3」450)相比較,來決定該方向。如此,圖元索引「2」470具有「0-0-1-0-0」的Morton碼順序、圖元索引「3」450具有「0-0-1-0-1」的Morton碼順序並且圖元索引「4」具有「1-0-0-1-1」的Morton碼順序。具有與圖元索引「3」450最匹配的該圖元索引為圖元索引「2」470。如此,範圍445往左的方向包含圖元索引「2」470,這樣範圍445包含圖元索引「0-3」。
例如:在虛擬碼600的行2-3內決定該方向。也就是,屬於I i 的該等金鑰共享一共用前置碼,依照定義,其必須與該同代內的前置碼不同。這暗示該前置碼長度的下緣已知為δmin=δ(i,i-d),如此δ(i,j)>δmin適用在屬於I i 的任何k j 。利用比較δ(i,i-1)與δ(i,i+1)並且選擇δ,如此δ(i,i+d)對應至較大一個,可滿足此條件,如虛擬碼600的行3內所示。
在520上,該方法包含決定該對應範圍的長度。更特別的是,在具體實施例內決定該長度的最大值或上緣。此外,在具體實施例內,利用執行一二進位搜尋來決定該長度的實際值。尤其是,利用搜尋滿足δ(i,i+ld)>δmin的最大l,來決定該範圍的另一端,如虛擬碼600內所提供。在一個
具體實施例內,利用從值「2」開始並且以指數方式遞增該值,直到不再滿足該不等式,來決定該長度的二乘方上緣l max>1,如虛擬碼600的行6-8內所示。一旦已經決定該上緣,則使用該範圍[0;l max-1]內的二進位搜尋來決定該長度「l」。其概念為依序考量1的每一位元,從最高的開始,並且設定為新值無法滿足該不等式以外的位元,如虛擬碼600的行10-13內所示。然後該範圍的另一端已知為j=i+ld。
在530上,為了針對對應至該內部節點的已知索引來決定該子代索引之目的,該方法包含決定該對應範圍內圖元索引之間的最高差異位元。例如:在虛擬碼600內,δ(i,j)標示對應至I i 的該前置碼長度,由δnode標示。這用於利用執行類似用於最大s [0;l-1]滿足δ(i,i+sd)>δnode的二進位搜尋,來找出該分離位置γ,如虛擬碼600的行17-20內所示。若d=+1,則γ由i+sd已知,此為屬於該左子代的最高索引。若d=-1,該值遞減一用於反向索引。
例如:該分離位置用於圖4內的內部節點「43」440。如所示,範圍445的圖元索引「0-3」之間的最高差異位元介於圖元索引「1」460與「2」470之間。也就是,圖元索引「1」460具有「0-0-0-1-0」的Morton碼順序並且圖元索引「2」470具有「0-0-1-0-0」的Morton碼順序。該最高差異位元發生於第三位元上,如行490所示。
另外在540上,該方法包含指派子代節點索引給該已知節點索引,其對應至與上面決定最高差異位元相關聯的該圖元索引。例如在圖6的虛擬碼600內,已知i、j和γ,則I i 的子代涵蓋該等範圍[min(i,j);γ]和[γ+1;max(i;j)]。針對每一子代,其範圍的開頭與末端經過比較,以查明其是否為
一葉,然後根據該節點配置(請參閱圖4)參考索引γ或γ+1上的該對應節點,如圖6中虛擬碼600的行23-24內所示。
在一個具體實施例內,呈現在圖6的虛擬碼600內之該演算法實施於GPU上當成單一核心啟動,其中每一執行緒都負責一個內部節點。假設該等金鑰的長度固定,則可利用計算兩金鑰之間的邏輯XOR並且計數該結果整數內的該前導零位元,有效評估δ(i,j)。
在本發明的具體實施例內,圖1至圖6內建構的該二進位基數樹用於建構次要樹。在一個具體實施例內,根據本發明的一個具體實施例從該二進位基數樹建構一BVH。尤其是,如下建構一組3D圖元的BVH:(1)根據其交叉點指派一Morton碼給每一圖元,(2)排序該等Morton碼,(3)建構一二進位基數樹,以及(4)指派一邊界方塊給每一內部節點。
若所有圖元的該等Morton碼都不重複,請注意,該二進位基數樹在結構上與對應的線性BVH一致,識別該等Morton碼之間的該共用前置碼等同於根據每一位元遞歸對敲該等圖元。複製Morton碼的案例會明確處理,因為圖6的該建構演算法取決於不重複的該等金鑰。在一個具體實施例內,這利用其索引的一位元代表來列舉每一金鑰而達成,即是k0 i=ki_i,其中_表示字串連結。實際上,並不需要確實儲存該等列舉金鑰,因為若評估δ(i;j)時ki=kj,則簡單使用i和j當成回饋就已經足夠。
先前用於線性BVH的方法依賴事先知道位於每一階層上該組節點之事實,以由下而上方式依序計算該邊界方塊。在一個具體實施例內,呈現不同的方式,其中並列處理從葉節點到根節點的路徑。每一執行緒都從一個葉節點開始,使用在基數樹建構期間記錄的親代指標器往上通
過樹狀。使用原子計數器追蹤執行緒,來決定多少執行緒已經造訪每一內部節點,如此該第一執行緒立刻終止,第二個接著處理該節點。這樣每一節點都由一個執行緒確實處理,造成O(n)時間複雜度。只要偵測到一已知內部節點涵蓋的所有剩餘部分都由相同執行緒區塊處理,則使用更快分享的記憶體原子就可減少全體原子數量。
圖1至圖6內建構的該二進位基數樹用於建構次要樹,例如八元樹。要建構一組點的八元樹,則一已知Morton碼的每一3k位元前置碼都直接映射至階層k上的一八元樹節點。利用找尋對應二進位基數樹的邊緣來列舉這些前置碼,如此一邊緣將具有長度δparent的前置碼之親代連接至具有長度δchild的前置碼之子代,代表長度δparent+1、...、δchild的所有子前置碼。除此之外,-除以3。這些計數會在基數樹建構期間評估,然後執行一並列前置碼加總來分配該等八元樹節點。利用找尋每一基數樹節點的上一代,就可發現該等八元樹節點的親代。
該處理由七個步驟構成:(1)計算該等點的Morton碼,(2)排
序該等Morton碼,(3)利用比較每對相鄰的Morton碼來識別複製品,即落在該相同葉節點內的點,(4)使用並列壓縮移除該等複製品,(5)建構一二進位基數樹,(6)執行並列前置碼加總來分配該等八元樹節點,以及(7)找出每一節點的親代。
根據本發明的具體實施例,圖1至圖6內建構的該二進位基數樹用於建構次要樹,例如k-d樹。在一個具體實施例內,由上面步驟5所產生的該基數樹可直接解析為該等點上的一k-d樹。每一內部節點都根據其共用前置碼之後該等Morton碼內下一個位元來分割該等點,這等同於分類在3D
內軸校準平面的兩邊上。長度δ的前置碼對應至與該第d個主軸垂直的平面,其中d=δ mod 3。該平面的位置由0.B d B d+3 ...B δ-31給予,其中B i 代表該前置碼的第i個位元。
在本發明的一個具體實施例內,建構一層次包圍盒(BVH,bounding volume hierarchy)用於一組三維(3D,three dimensional)圖元。在其他具體實施例內,該等圖元可為一任意維度(例如2D、4D以此類推)。在一個實施當中,從先前關於圖1至圖6所討論的該基數樹來建構該BVH。例如:一層次包圍盒用於索引複數個3D圖元,例如三角形。該等圖元群組成節點,並且每一節點都儲存完全內含該底層圖元的一包圍盒。該分組以階層方式重複,如此該根節點涵蓋整個場面。該等包圍盒對於決定額外資訊非常有用,例如執行碰撞偵測或射線追蹤等等時。
在本發明的具體實施例內,一包圍盒完整包含要內含在該盒內的該組圖元。在一個實施當中,該包圍盒包含一軸校準的邊界方塊(AABB,axis aligned bounding box)。
圖7為根據本發明的一個具體實施例,設置來建構BVH的系統700之方塊圖。尤其是,系統700包含一階層樹產生器710,其設置成用於建構內含複數個葉節點以及複數個內部節點的二進位樹。每一該等複數個內部節點都唯一關聯於兩個子代節點,其中每一子代節點都包含一內部節點或葉節點。在一個具體實施例內,該二進位樹為使用先前圖1至圖6內所述該等系統及方法所建構之一基數樹。在其他具體實施例內,任何類型的
二進位樹都適合用於提供一層次給包圍盒結構,例如使用一先前建構的二進位樹或階層來建構多個場景之上的多個層次包圍盒。
該系統700也包含用於針對該二進位樹內每一節點產生親代指標器之一關係模組720。也就是,之前產生的該二進位樹,例如由圖1至圖6的系統及方法所產生,提供子代關係及/或指標器給一特定節點。關係模組720逆轉該關係,如此子代節點關聯於指向個別親代節點的親代指標器。在此方式中,使用由下而上移動方法建構BVH時,則使用該等親代指標器。
該系統700也包含用於針對該二進位樹內節點決定複數個包圍盒之一包圍盒產生器740。尤其是,在該二進位樹內建構個別節點的該等包圍盒時,該二進位樹朝向一根節點形成複數個該樹的葉節點,如此並列處理從該等葉節點至該根節點的路徑。另外,該二進位樹內每一親代節點都由源自於一對應子代節點並稍後到達的執行緒處理一次。
在一個具體實施例內,系統700也包含一排程器730,用於選擇一或更多葉節點由複數個執行緒並列處理。也就是,建構該二進位樹內部節點的包圍盒時,排程器730指派葉節點給該包圍盒產生器740所使用的該等執行緒。例如:排程器730決定哪個執行緒指派給哪個節點,尤其是該二進位樹的哪個葉節點用於建構這些葉節點的包圍盒,以及用於後續親代節點。在一個具體實施例內,該排程器包含在或支援該處理核心及/或包含一圖形處理單元(GPU)的執行緒。
圖8為根據本發明的一個具體實施例,例示用於並列建構BVH的一電腦實施方法800之流程圖。在另一個具體實施例內,流程圖800在一種電腦系統內實施,該系統包含一處理器以及連結至該處理器並且其
內儲存指令的一記憶體,若這些指令由該電腦系統執行時會導致該系統執行用於並列建構BVH的一方法。仍舊在另一個具體實施例內,用於執行一方法來並列建構BVH的指令都儲存在一非暫態電腦可讀取儲存媒體內,其具有電腦可執行指令,用於導致一電腦系統執行並列建構BVH的一方法。流程圖內描述的該方法可由圖1和圖7中系統100和700的一或更多組件實施。
在810上,該方法包含提供一二進位樹。在一個具體實施例內,該二進位樹為使用圖1至圖6中的該等系統及方法所建構之一基數樹。例如:需要相對於圖元節點總數要求至多暫時儲存體線性量來建構該階層樹。也就是,該階層樹以只需要相對於輸入圖元數量的記憶體線性量之方式來建造。更特別是,該二進位樹包含複數個葉節點以及複數個內部節點。每一該等內部節點都唯一關聯於兩個子代節點,其中每一子代節點都包含一葉節點或另一內部節點。
在840上,該方法包含指派一邊界方塊給每一內部節點。每一節點的該包圍盒都已經產生,如此其內含如同該二進位樹內已經建立的該等底層圖元。在一個實施中,利用將該樹從該等複數個葉節點往上朝向一根節點前進,來決定用於該二進位樹內節點的複數個包圍盒,其中並列處理從該等複數個葉節點至該根節點的複數個路徑。另外,每一親代節點都由源自於一對應子代節點並稍後到達的執行緒處理一次。
先前用於建構線性BVH的方法依賴事先知道位於每一階層上該組節點之事實,以由下而上方式依序計算該邊界方塊。也就是,在決定下一層的該等包圍盒之前,每一階層都完成計算。本發明的具體實施例
調整不同的方式,其中並列處理從葉節點到根節點的路徑。因為已知節點之間的關係,因此這可行,即使在不知道其上每一節點的階層。如此,每一執行緒都從一個葉節點開始,使用在基數樹建構期間決定、產生並且記錄的親代指標器往上通過該樹。
在一個具體實施例內,針對該二進位樹內每一節點決定親代指標器。例如:建構該二進位樹時,在一內部節點與其每一子節點之間已經建立一關係。也就是在該二進位樹內,已知子代節點用於對應的親代節點。如此,可決定該逆向關係,如此對於每一節點(例如內部或葉),可決定一對應親代節點,並且可指派。在一個實施當中,針對每一節點,指派一對應親代指標器指向其親代節點。
在一個具體實施例內,已經決定用於該等葉節點的包圍盒。在一個具體實施例內,在移動該二進位樹之前已經決定用於該等葉節點的包圍盒。在另一個具體實施例內,一執行緒拾取或指派來處理該葉節點,用於決定其包圍盒時,決定用於一葉節點的包圍盒。在一個實施中,根據與該對應葉節點或圖元相關聯的三角形頂點,決定用於一葉節點的該包圍盒。
更特別是,圖9為根據本發明的一個具體實施例,例示用於並列建構BVH,其中由稍後到達的執行緒處理一內部親代節點,的一電腦實施方法之流程圖900。在另一個具體實施例內,流程圖900在一種電腦系統內實施,該系統包含一處理器以及連結至該處理器並且其內儲存指令的一記憶體,若這些指令由該電腦系統執行時會導致該系統執行用於並列建構BVH的一方法,其中由一稍後到達的子節點處理一內部、親代節點。仍
舊在另一個具體實施例內,用於執行一方法來並列建構BVH的指令,其中由一稍後到達的子節點處理一內部、親代節點,都儲存在一非暫態電腦可讀取儲存媒體內,其具有電腦可執行指令,用於導致一電腦系統執行並列建構BVH的一方法。流程圖900內描述的該方法可由圖1和圖7中系統100和700的一或更多組件實施。
在一個具體實施例內,使用原子計數器追蹤造訪每一內部節點的執行緒數量。也就是,由與其子節點相關聯的執行緒移動時,每一內部節點都進行微小處理。一第一執行緒至一內部節點立即終止,而該第二執行緒至該內部節點則容許處理該節點來決定其包圍盒。例如:所有計數器都從偽狀態開始,並且在第一次造訪時該計數器遞增來指示一真狀態。造訪該內部節點的一稍後到達執行緒路徑此時讀取該節點上的一真狀態,這指出此為稍後到達的執行緒。在此方式中,隨著該二進位樹沿著從該等葉節點至該根節點的路徑移動,每一節點都確實由一個執行緒處理。在一個具體實施例內,此導致O(n)複雜度。
尤其是,在910上,該方法包含拾取一未處理的葉節點,並設定為由一特定、第一執行緒所處理的該當前節點。該方法也包含沿著源自於一葉節點的路徑,從該第一執行緒上一第一子節點(該當前節點)移動至一第一親代節點。該第一親代節點關聯於一第一子代節點與一第二子代節點。利用處理從葉節點至該根節點的路徑,該二進位樹並列移動,並且該二進位樹內的每一節點都處理一次。
在決策步驟920上,該方法包含決定之前是否已經將該當前執行緒已經處理過的該親代節點移動至其一個子代節點旁邊。尤其是在920
上,決定之前在一不同、第二執行緒上是否已經將該第一親代節點移動至該第二子代節點旁邊。在一個實施當中,使用一計數器嘗試處理該親代節點的該執行緒是否為稍後到達該親代節點的執行緒。其他具體實施例將適用於其他方法,用於決定該執行緒是否關聯於包含該稍後到達子代節點至該親代節點的一路徑。
若決定由一執行緒第一次造訪該親代節點,則該方法前往930,其中遞增一計數器。例如:該計數器初次指示一偽狀態,指出尚未造訪該親代節點。讀取該偽狀態之後,該計數器設定成一真狀態。此後,該執行緒移動至該第一親代節點終止於950上。在該第一親代尚未移動至其子代節點旁邊時發生終止,尤其是,在之前尚未移動至該第二子代節點時。
在此案例中,已經終止的該執行緒在910上選擇另一個未處理的葉節點。處理該新葉節點的該執行緒從該未處理的葉節點開始移動該二進位樹。在一個實施當中,使用先前描述的一排程器選擇該葉節點。在一個具體實施例內,執行緒的終止集中在一包覆基礎上。也就是,一多處理器單元(例如GPU)包含多核心及/或執行緒,其中一包覆包含使用相同指令並列執行的一或更多執行緒(例如32個執行緒)。例如:圖形管線內的指令同時(例如在相同時脈循環上)供應給一包覆內所有該等執行緒。在另一個具體實施例內,用區塊收集包覆,如此以相同方式處理一執行緒區塊內的多個包覆。如此,只要偵測到一已知內部節點涵蓋的所有剩餘部分都由相同執行緒區塊處理,則使用更快分享的記憶體原子就可減少全體原子數量。
另一方面,若決定由關聯於一稍後到達子代節點的一執行緒造訪該親代節點,則在940上,該方法包含使用該第一執行緒決定用於該第
一親代節點的一親代包圍盒。在一個具體實施例內,已經指派的該親代包圍盒完整包含該第一子代節點的一第一包圍盒,以及該第二子代節點的一第二包圍盒。更進一步,在一個具體實施例內,該親代包圍盒包含該第一子代包圍盒與該第二子代包圍盒的合併。在一個算術定義中,該合併包含該第一子代包圍盒與該第二子代包圍盒內含的所有點集合。
在一個特定具體實施例內,該第一子代包圍盒包含一第一軸校準子代包圍盒,或第一子代AABB。另外,該第二子代包圍盒包含一第二子代AABB。該親代包圍盒由指派該第一和第二子代AABB的最小與最大x、y和z值來決定。
例如:該親代包圍盒由指派該第一和第二子代AABB的最小x值和最大x值來決定。也就是,沿著該x軸,選擇來自該第一和第二子代AABB的最小x值當成該親代包圍盒的該最小x值。類似地,選擇來自該第一和第二子代AABB的最大x值當成該親代包圍盒的該最大x值。
另外,該第一和第二子代AABB的最小y值和最大y值指派給該親代包圍盒。也就是,沿著該y軸,選擇來自該第一和第二子代AABB的最小y值當成該親代包圍盒的該最小y值。類似地,選擇來自該第一和第二子代AABB的最大y值當成該親代包圍盒的該最大y值。
另外,該第一和第二子代AABB的最小z值和最大z值指派給該親代包圍盒。也就是,沿著該z軸,選擇來自該第一和第二子代AABB的最小z值當成該親代包圍盒的該最小z值。類似地,選擇來自該第一和第二子代AABB的最大z值當成該親代包圍盒的該最大z值。
流程圖900的該方法繼續960,將該親代節點設定為新的當前
節點。此後,該執行緒處理回到920,決定之前是否已經將該新當前執行緒的該新親代節點移動至其一個子代節點旁邊。在此方式中,該執行緒往上移動通過該二進位樹。
如此根據本發明的具體實施例,描述提供在從二進位樹建構層次包圍盒中最大並列處理的系統及方法。
雖然上面使用特定方塊圖、流程圖以及範例揭示許多具體實施例,不過本說明書中描述及/或例示的每一方塊圖元件、流程圖步驟及/或元件,都可使用廣泛的硬體、軟體或韌體(或任何組合)組態,獨自及/或集中實施。此外,因為可實施許多其他架構來達成相同功能性,所以其他元件內含元件的任何揭露都應該考量當成範例。
本說明書中描述及/或例示的處理參數以及步驟順序僅為範例,可依需求改變。例如:雖然本說明書中例示及/或描述的該等步驟可用特定順序顯示或討論,不過這些步驟並不需要以例示或討論的順序來執行。本說明書中描述及/或例示的許多範例方法也可省略本說明書中描述及/或例示的一或更多步驟,或加額外步驟。
雖然本說明書中已經在全功能計算系統範圍內描述及/或例示許多具體實施例,一或更多這些範例具體實施例可用許多形式分布當成一程式產品,而不管實際上用於執行該分布的電腦可讀取媒體之特定類型。本說明書中揭示的具體實施例也可使用執行特定任務的軟體模組來實施。這些軟體模組可包含描述檔、批次檔或可儲存在一電腦可讀取儲存媒體或計算系統內的其他可執行檔。這些軟體模組可設置一計算系統,執行本說明書所揭示的一或更多範例具體實施例。本說明書中揭示的一或更多
軟體模組可在雲端計算環境下實施。雲端計算環境可透過網際網路提供許多服務與應用程式。透過網路瀏覽器或其他遠端介面,可存取這些雲端服務(例如服務軟體、服務平台、服務基礎設施等等)。本說明書中描述的許多功能可透過遠端桌面環境或任何其他雲端計算環境來提供。
在上面的說明中,為了解釋而參考特定具體實施例做說明。不過,上面例示的討論並非用於專屬或限制本發明於所說明的形式中。許多修改與變化都可以上述為依據。具體實施例經過選擇與說明來最佳闡述本發明原理,並且以許多具體實施例讓其他熟習技術人士對本系統有最佳了解,這些具體實施例都適合特定使用期待。
到此已經說明根據本發明的具體實施例。雖然已經用特定具體實施例說明本發明,吾人應該瞭解,本發明不應受限於這種具體實施例,而是根據下列申請專利範圍來建構。
Claims (9)
- 一種非暫態電腦可讀取儲存媒體,具有電腦可執行指令,用以讓一電腦系統執行一方法,該方法包含:決定包含全部已編入索引的多個圖元節點的複數個圖元,其中該等複數個圖元對應至一階層樹的多個葉節點;排序該等複數個圖元;建構該階層樹,其關於全部的該等圖元節點,要求至多線性數量的暫時儲存體;以及建構該階層樹的一內部節點,以並列於其多個前代節點之至少一前代節點;其中上述建構該階層樹包含:建構包含該等圖元節點以及至少一內部節點的一二進位基數樹,使得各內部節點對應至由一個別子樹內對應多個圖元節點的多個圖元所共享的最長共用前置碼,其中上述建構該二進位基數樹包含:對於對應至一內部節點的一已知節點索引,根據該節點索引決定該等複數個圖元的多個圖元索引之一對應範圍的一方向,其中該已知節點索引包含在該對應範圍內的一開始圖元索引或一結束圖元索引;決定該對應範圍的一長度;決定該對應範圍內多個圖元索引之間的一最高差異位 元;以及對於對應至與該最高差異位元相關聯的該等圖元索引的該已知節點索引,指派多個子代節點索引。
- 如申請專利範圍第1項之電腦可讀取儲存媒體,其中上述在該方法內決定該等複數個圖元包含:指派一Morton碼給每一圖元。
- 如申請專利範圍第1項之電腦可讀取儲存媒體,其中上述在該方法內決定該方向包含:根據哪個相鄰之圖元具有最多索引匹配來決定該方向。
- 如申請專利範圍第1項之電腦可讀取儲存媒體,其中上述在該方法內決定該長度包含:決定用於該長度之一最大值;以及執行一二進位搜尋來決定用於該長度的一實際值。
- 如申請專利範圍第1項之電腦可讀取儲存媒體,其中在該方法中該等子代節點索引之一包含一葉節點。
- 如申請專利範圍第1項之電腦可讀取儲存媒體,其中該方法另包含:將用於該等複數個圖元的多個索引編號;藉由用於該等複數個圖元的相同的編號法則,將用於該至少一內部節點的多個索引編號,其中全部的該至少一內部節點包含全部該等圖 元但減一,並且其中用於一內部節點之一索引號碼的多個圖元索引的一範圍包含該等複數個圖元內之相同的索引號碼。
- 一種電腦系統,包含:一處理器;以及一記憶體,其耦合至該處理器並且其中儲存多個指令,該等指令若由該電腦系統執行,則導致該電腦系統執行一方法,該方法包含:決定包含全部已編入索引的多個圖元節點的複數個圖元,其中該等複數個圖元對應至一階層樹的多個葉節點;排序該等複數個圖元;建構該階層樹,其關於全部的該等圖元節點,要求至多線性數量的暫時儲存體;以及建構該階層樹的一內部節點,以並列於其多個前代節點之至少一前代節點;其中上述建構該階層樹包含:建構包含該等圖元節點以及至少一內部節點的一二進位基數樹,使得各內部節點對應至由一個別子樹內多個圖元所共享的最長共用前置碼,其中上述建構該二進位基數樹包含:對於對應至一內部節點的一已知節點索引,根據該節點索引決定該等複數個圖元的多個圖元索引之一對應範圍的一方向,其中該已知節點索引包含在該對應範圍內的一開始圖元索引或一結束圖元索引; 決定該對應範圍的一長度;決定該對應範圍內多個圖元索引之間的一最高差異位元;以及對於對應至與該最高差異位元相關聯的該等圖元索引的該已知節點索引,指派多個子代節點索引。
- 如申請專利範圍第7項之電腦系統,其中上述在該方法內決定該等複數個圖元包含:指派一Morton碼給每一圖元。
- 如申請專利範圍第7項之電腦系統,其中該方法另包含:根據該基數樹建構一第二樹。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261609156P | 2012-03-09 | 2012-03-09 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201403542A TW201403542A (zh) | 2014-01-16 |
TWI546770B true TWI546770B (zh) | 2016-08-21 |
Family
ID=49113695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102108216A TWI546770B (zh) | 2012-03-09 | 2013-03-08 | 圖形處理單元中3d加速結構之完全並列原地建構 |
Country Status (4)
Country | Link |
---|---|
US (2) | US9965821B2 (zh) |
CN (1) | CN103440238A (zh) |
DE (1) | DE102013204062B4 (zh) |
TW (1) | TWI546770B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9014496B2 (en) * | 2011-08-04 | 2015-04-21 | Arm Limited | Methods of and apparatus for encoding and decoding data in data processing systems |
US9990758B2 (en) * | 2014-03-31 | 2018-06-05 | Intel Corporation | Bounding volume hierarchy generation using a heterogeneous architecture |
US10423693B2 (en) * | 2014-09-15 | 2019-09-24 | Autodesk, Inc. | Parallel processing using a bottom up approach |
US9772849B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Four-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US20160139919A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Machine Level Instructions to Compute a 3D Z-Curve Index from 3D Coordinates |
US20160139924A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Machine Level Instructions to Compute a 4D Z-Curve Index from 4D Coordinates |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
US9984492B2 (en) * | 2015-04-02 | 2018-05-29 | Qualcomm Incorporated | Efficient hierarchy traversal in ray tracing applications |
EP3234922A4 (en) * | 2015-04-21 | 2018-12-05 | Hewlett-Packard Development Company, L.P. | Octree serialization |
KR102537530B1 (ko) * | 2015-10-26 | 2023-05-26 | 삼성전자 주식회사 | 가속 구조를 생성하는 방법 및 장치 |
US10559125B2 (en) * | 2015-12-02 | 2020-02-11 | Samsung Electronics Co., Ltd. | System and method of constructing bounding volume hierarchy tree |
KR102570584B1 (ko) * | 2015-12-02 | 2023-08-24 | 삼성전자 주식회사 | Bvh 트리를 구성하기 위한 방법 및 시스템 |
US11010664B2 (en) * | 2016-02-05 | 2021-05-18 | Deepmind Technologies Limited | Augmenting neural networks with hierarchical external memory |
US10229533B2 (en) * | 2016-11-03 | 2019-03-12 | Mitsubishi Electric Research Laboratories, Inc. | Methods and systems for fast resampling method and apparatus for point cloud data |
CN106776020B (zh) * | 2016-12-07 | 2020-02-21 | 长春理工大学 | 大型三维场景的计算机集群分布式路径跟踪绘制方法 |
US11367160B2 (en) * | 2018-08-02 | 2022-06-21 | Nvidia Corporation | Simultaneous compute and graphics scheduling |
CN109345443A (zh) * | 2018-10-19 | 2019-02-15 | 珠海金山网络游戏科技有限公司 | 数据处理方法和装置、计算设备及存储介质 |
GB2578769B (en) | 2018-11-07 | 2022-07-20 | Advanced Risc Mach Ltd | Data processing systems |
GB2583061B (en) * | 2019-02-12 | 2023-03-15 | Advanced Risc Mach Ltd | Data processing systems |
US11460580B2 (en) * | 2019-06-17 | 2022-10-04 | Nvidia Corporation | Nearest neighbor search using compressed octrees representing high definition maps for autonomous vehicles |
US11023152B2 (en) | 2019-07-12 | 2021-06-01 | Arm Limited | Methods and apparatus for storing data in memory in data processing systems |
CN110990909B (zh) * | 2019-11-29 | 2023-10-20 | 北京仿真中心 | 一种三维cad模型数据处理方法 |
US11335055B2 (en) * | 2020-06-26 | 2022-05-17 | Imagination Technologies Limited | Intersection testing in ray tracing systems with skipping of nodes in sub-trees of hierarchical acceleration structures |
US11380042B2 (en) * | 2020-06-26 | 2022-07-05 | Imagination Technologies Limited | Intersection testing in ray tracing systems using hierarchical acceleration structures with implicitly represented nodes |
US11403803B2 (en) | 2020-06-26 | 2022-08-02 | Imagination Technologies Limited | Hierarchical acceleration structures for use in ray tracing systems |
GB2601792A (en) * | 2020-12-10 | 2022-06-15 | Imagination Tech Ltd | Intersection testing for ray tracing |
CN112657190A (zh) * | 2020-12-28 | 2021-04-16 | 北京像素软件科技股份有限公司 | 一种游戏角色的寻路方法、装置及计算机设备 |
US11914587B2 (en) * | 2021-10-13 | 2024-02-27 | Western Digital Technologies, Inc. | Systems and methods for key-based indexing in storage devices |
US20230118972A1 (en) * | 2021-10-18 | 2023-04-20 | Nvidia Corporation | Scalable parallel construction of bounding volume hierarchies |
DE112022004204T5 (de) * | 2021-10-18 | 2024-07-18 | Nvidia Corporation | Skalierbare parallele Konstruktion von Bounding Volume-Hierarchien |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5826262A (en) * | 1996-03-22 | 1998-10-20 | International Business Machines Corporation | Parallel bottom-up construction of radix trees |
US6421664B1 (en) * | 1999-06-16 | 2002-07-16 | International Business Machines Corporation | Apparatus, program product and method for estimating the number of keys within an index key range |
US6947931B1 (en) * | 2000-04-06 | 2005-09-20 | International Business Machines Corporation | Longest prefix match (LPM) algorithm implementation for a network processor |
US7952583B2 (en) | 2000-06-19 | 2011-05-31 | Mental Images Gmbh | Quasi-monte carlo light transport simulation by efficient ray tracing |
US6694323B2 (en) * | 2002-04-25 | 2004-02-17 | Sybase, Inc. | System and methodology for providing compact B-Tree |
US6904430B1 (en) * | 2002-04-26 | 2005-06-07 | Microsoft Corporation | Method and system for efficiently identifying differences between large files |
US7299317B1 (en) * | 2002-06-08 | 2007-11-20 | Cisco Technology, Inc. | Assigning prefixes to associative memory classes based on a value of a last bit of each prefix and their use including but not limited to locating a prefix and for maintaining a Patricia tree data structure |
US7095423B2 (en) * | 2002-07-19 | 2006-08-22 | Evans & Sutherland Computer Corporation | System and method for combining independent scene layers to form computer generated environments |
GB2391150B (en) | 2002-07-19 | 2005-10-26 | Autodesk Canada Inc | Editing image data |
US8250107B2 (en) | 2003-06-03 | 2012-08-21 | Hewlett-Packard Development Company, L.P. | Techniques for graph data structure management |
US7348975B2 (en) | 2004-12-28 | 2008-03-25 | Intel Corporation | Applications of interval arithmetic for reduction of number of computations in ray tracing problems |
US7512617B2 (en) * | 2004-12-29 | 2009-03-31 | Sap Aktiengesellschaft | Interval tree for identifying intervals that intersect with a query interval |
US20070073761A1 (en) * | 2005-09-29 | 2007-03-29 | International Business Machines Corporation | Continual generation of index advice |
US7539657B1 (en) * | 2005-11-12 | 2009-05-26 | Google Inc. | Building parallel hybrid spill trees to facilitate parallel nearest-neighbor matching operations |
US7728841B1 (en) | 2005-12-19 | 2010-06-01 | Nvidia Corporation | Coherent shader output for multiple targets |
US7737974B2 (en) | 2006-09-27 | 2010-06-15 | International Business Machines Corporation | Reallocation of spatial index traversal between processing elements in response to changes in ray tracing graphics workload |
JP4402120B2 (ja) * | 2007-01-24 | 2010-01-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
US7877258B1 (en) * | 2007-03-29 | 2011-01-25 | Google Inc. | Representing n-gram language models for compact storage and fast retrieval |
GB2452760A (en) * | 2007-09-14 | 2009-03-18 | Data Connection Ltd | Storing and searching data in a database tree structure for use in data packet routing applications. |
US8072460B2 (en) * | 2007-10-17 | 2011-12-06 | Nvidia Corporation | System, method, and computer program product for generating a ray tracing data structure utilizing a parallel processor architecture |
US9245382B2 (en) * | 2008-10-04 | 2016-01-26 | Microsoft Technology Licensing, Llc | User-guided surface reconstruction |
US8610706B2 (en) | 2008-10-04 | 2013-12-17 | Microsoft Corporation | Parallel surface reconstruction |
KR101610194B1 (ko) * | 2008-10-15 | 2016-04-07 | 삼성전자주식회사 | 영상처리를 위한 데이터 처리 장치 및 방법 |
CN101593367B (zh) * | 2009-06-25 | 2011-03-23 | 北京航空航天大学 | 一种基于四叉包围盒树的柔性织物自碰撞检测方法 |
US8669977B2 (en) | 2009-10-01 | 2014-03-11 | Intel Corporation | Hierarchical mesh quantization that facilitates efficient ray tracing |
US8688766B2 (en) * | 2010-03-03 | 2014-04-01 | Thomson Licensing | Method for managing the allocation of data into a peer-to-peer network and peer implementing such method |
US8275805B2 (en) | 2010-03-26 | 2012-09-25 | Intel Corporation | Method of decreasing a total computation time for a visual simulation loop in a virtual world application |
US8665266B2 (en) | 2010-06-23 | 2014-03-04 | The United States Of America, As Represented By The Secretary Of The Navy | Global visualization process terrain database builder |
US8880507B2 (en) * | 2010-07-22 | 2014-11-04 | Brocade Communications Systems, Inc. | Longest prefix match using binary search tree |
US8930391B2 (en) * | 2010-12-29 | 2015-01-06 | Microsoft Corporation | Progressive spatial searching using augmented structures |
US9070208B2 (en) | 2011-05-27 | 2015-06-30 | Lucasfilm Entertainment Company Ltd. | Accelerated subsurface scattering determination for rendering 3D objects |
US8780112B2 (en) * | 2011-06-08 | 2014-07-15 | Pacific Data Images Llc | Coherent out-of-core point-based global illumination |
US20120320073A1 (en) | 2011-06-14 | 2012-12-20 | Obscura Digital, Inc. | Multiple Spatial Partitioning Algorithm Rendering Engine |
US8542939B2 (en) | 2011-08-04 | 2013-09-24 | Arm Limited | Methods of and apparatus for using tree representations for representing arrays of data elements for encoding and decoding data in data processing systems |
US8738595B2 (en) * | 2011-11-22 | 2014-05-27 | Navteq B.V. | Location based full text search |
-
2012
- 2012-12-26 US US13/727,492 patent/US9965821B2/en active Active
- 2012-12-31 US US13/732,103 patent/US9721320B2/en active Active
-
2013
- 2013-03-08 TW TW102108216A patent/TWI546770B/zh not_active IP Right Cessation
- 2013-03-08 DE DE102013204062.8A patent/DE102013204062B4/de active Active
- 2013-03-11 CN CN2013100769828A patent/CN103440238A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102013204062A1 (de) | 2013-10-10 |
CN103440238A (zh) | 2013-12-11 |
US9965821B2 (en) | 2018-05-08 |
US20130235031A1 (en) | 2013-09-12 |
US9721320B2 (en) | 2017-08-01 |
DE102013204062B4 (de) | 2023-01-05 |
TW201403542A (zh) | 2014-01-16 |
US20130235049A1 (en) | 2013-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI546770B (zh) | 圖形處理單元中3d加速結構之完全並列原地建構 | |
EP3435336B1 (en) | Hybrid hierarchy for ray tracing | |
US9396512B2 (en) | Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit | |
US11861786B2 (en) | Determining lighting information for rendering a scene in computer graphics using illumination point sampling | |
Karras | Maximizing parallelism in the construction of BVHs, octrees, and k-d trees | |
EP3002732B1 (en) | Method and apparatus for generating and traversing acceleration structure | |
KR101697238B1 (ko) | 영상 처리 장치 및 방법 | |
EP2927877B1 (en) | Method and apparatus for rendering same regions of multi frames | |
CN102682103A (zh) | 一种面向海量激光雷达点云模型的三维空间索引方法 | |
JP2009534759A (ja) | 瞬時光線追跡 | |
CN104699946B (zh) | 一种游戏场景的管理方法及装置 | |
Hendrich et al. | Parallel BVH construction using progressive hierarchical refinement | |
JP2018073427A (ja) | 加速構造を生成する方法及びその装置 | |
Zirr et al. | Memory-efficient on-the-fly voxelization and rendering of particle data | |
Frolov et al. | Multiple reference octrees for a GPU photon mapping and irradiance caching | |
Madeira et al. | Gpu octrees and optimized search | |
EP3933781B1 (en) | Intersection testing in a ray tracing system | |
KR102570584B1 (ko) | Bvh 트리를 구성하기 위한 방법 및 시스템 | |
Hendrich | Adaptive Acceleration Techniques for Ray Tracing | |
Wang et al. | Research on scene partition optimization and local adaptive rejection methods | |
Borgo et al. | Fast and Simple Agglomerative LBVH Construction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |