TW202209258A - 用於包含光線追蹤的有效圖形處理的設備與方法 - Google Patents
用於包含光線追蹤的有效圖形處理的設備與方法 Download PDFInfo
- Publication number
- TW202209258A TW202209258A TW110125338A TW110125338A TW202209258A TW 202209258 A TW202209258 A TW 202209258A TW 110125338 A TW110125338 A TW 110125338A TW 110125338 A TW110125338 A TW 110125338A TW 202209258 A TW202209258 A TW 202209258A
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- graphics
- ray
- shader
- traversal
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 229
- 238000012545 processing Methods 0.000 title abstract description 189
- 238000007906 compression Methods 0.000 claims description 149
- 230000006835 compression Effects 0.000 claims description 146
- 230000008569 process Effects 0.000 claims description 47
- 239000011159 matrix material Substances 0.000 claims description 35
- 230000033001 locomotion Effects 0.000 claims description 11
- 230000015654 memory Effects 0.000 description 362
- 230000006870 function Effects 0.000 description 169
- 239000010410 layer Substances 0.000 description 118
- 238000012549 training Methods 0.000 description 114
- 238000010801 machine learning Methods 0.000 description 106
- 239000013598 vector Substances 0.000 description 103
- 239000000872 buffer Substances 0.000 description 78
- 238000012360 testing method Methods 0.000 description 62
- 230000001133 acceleration Effects 0.000 description 60
- 238000006073 displacement reaction Methods 0.000 description 55
- 238000009877 rendering Methods 0.000 description 55
- 238000003860 storage Methods 0.000 description 47
- 239000000463 material Substances 0.000 description 43
- 238000013528 artificial neural network Methods 0.000 description 40
- 238000007667 floating Methods 0.000 description 40
- 239000000523 sample Substances 0.000 description 40
- 238000013527 convolutional neural network Methods 0.000 description 35
- 230000006837 decompression Effects 0.000 description 32
- 238000003379 elimination reaction Methods 0.000 description 32
- 230000008030 elimination Effects 0.000 description 31
- 238000004422 calculation algorithm Methods 0.000 description 28
- 239000000758 substrate Substances 0.000 description 27
- 238000004891 communication Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 25
- 238000012546 transfer Methods 0.000 description 25
- 238000013461 design Methods 0.000 description 24
- 238000005070 sampling Methods 0.000 description 23
- 210000004027 cell Anatomy 0.000 description 20
- 238000007726 management method Methods 0.000 description 20
- 238000013139 quantization Methods 0.000 description 20
- 230000009466 transformation Effects 0.000 description 20
- 238000013459 approach Methods 0.000 description 19
- 230000007246 mechanism Effects 0.000 description 19
- 239000003795 chemical substances by application Substances 0.000 description 18
- 230000002829 reductive effect Effects 0.000 description 17
- 238000003491 array Methods 0.000 description 15
- 238000010276 construction Methods 0.000 description 15
- 239000012634 fragment Substances 0.000 description 14
- 230000004044 response Effects 0.000 description 14
- 238000005516 engineering process Methods 0.000 description 13
- 238000013519 translation Methods 0.000 description 13
- 230000014616 translation Effects 0.000 description 13
- 230000008901 benefit Effects 0.000 description 12
- 238000013135 deep learning Methods 0.000 description 12
- 230000008520 organization Effects 0.000 description 12
- 238000011176 pooling Methods 0.000 description 12
- 230000009467 reduction Effects 0.000 description 12
- 230000000903 blocking effect Effects 0.000 description 11
- 238000009395 breeding Methods 0.000 description 11
- 230000001488 breeding effect Effects 0.000 description 11
- 230000009977 dual effect Effects 0.000 description 11
- 238000013507 mapping Methods 0.000 description 11
- 230000001537 neural effect Effects 0.000 description 11
- 238000005192 partition Methods 0.000 description 11
- 239000000203 mixture Substances 0.000 description 10
- 239000000284 extract Substances 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 9
- 230000001360 synchronised effect Effects 0.000 description 9
- 230000007704 transition Effects 0.000 description 9
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 8
- 230000009471 action Effects 0.000 description 8
- 230000004913 activation Effects 0.000 description 8
- 238000001994 activation Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 8
- 238000004519 manufacturing process Methods 0.000 description 8
- 210000002569 neuron Anatomy 0.000 description 8
- 238000012913 prioritisation Methods 0.000 description 8
- 238000013473 artificial intelligence Methods 0.000 description 7
- 238000001514 detection method Methods 0.000 description 7
- 230000003287 optical effect Effects 0.000 description 7
- 239000004065 semiconductor Substances 0.000 description 7
- 238000004088 simulation Methods 0.000 description 7
- 239000000725 suspension Substances 0.000 description 7
- 208000019300 CLIPPERS Diseases 0.000 description 6
- 230000004888 barrier function Effects 0.000 description 6
- 208000021930 chronic lymphocytic inflammation with pontine perivascular enhancement responsive to steroids Diseases 0.000 description 6
- 230000001965 increasing effect Effects 0.000 description 6
- 230000036961 partial effect Effects 0.000 description 6
- 230000002776 aggregation Effects 0.000 description 5
- 238000004220 aggregation Methods 0.000 description 5
- 239000011449 brick Substances 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 5
- 238000013500 data storage Methods 0.000 description 5
- 238000009826 distribution Methods 0.000 description 5
- 239000000686 essence Substances 0.000 description 5
- 230000002452 interceptive effect Effects 0.000 description 5
- 230000000670 limiting effect Effects 0.000 description 5
- 238000013178 mathematical model Methods 0.000 description 5
- 238000007781 pre-processing Methods 0.000 description 5
- 238000000844 transformation Methods 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 238000012935 Averaging Methods 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 230000003190 augmentative effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000001976 improved effect Effects 0.000 description 4
- 230000000977 initiatory effect Effects 0.000 description 4
- 230000000644 propagated effect Effects 0.000 description 4
- 230000000306 recurrent effect Effects 0.000 description 4
- 238000012216 screening Methods 0.000 description 4
- 238000001801 Z-test Methods 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 3
- 238000004880 explosion Methods 0.000 description 3
- 210000000887 face Anatomy 0.000 description 3
- 230000008713 feedback mechanism Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000000873 masking effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002085 persistent effect Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000012800 visualization Methods 0.000 description 3
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 2
- 239000004593 Epoxy Substances 0.000 description 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 2
- 101710092887 Integrator complex subunit 4 Proteins 0.000 description 2
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 2
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 2
- 102100037075 Proto-oncogene Wnt-3 Human genes 0.000 description 2
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 2
- 230000003321 amplification Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000005056 compaction Methods 0.000 description 2
- 238000005094 computer simulation Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 238000010304 firing Methods 0.000 description 2
- 238000009472 formulation Methods 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 238000005286 illumination Methods 0.000 description 2
- 238000003384 imaging method Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000003999 initiator Substances 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 238000003199 nucleic acid amplification method Methods 0.000 description 2
- 238000003909 pattern recognition Methods 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 239000000700 radioactive tracer Substances 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000006403 short-term memory Effects 0.000 description 2
- 239000002356 single layer Substances 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 238000012384 transportation and delivery Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 235000012431 wafers Nutrition 0.000 description 2
- 102000020897 Formins Human genes 0.000 description 1
- 108091022623 Formins Proteins 0.000 description 1
- 206010051602 Laziness Diseases 0.000 description 1
- 241000549095 Paxistima myrsinites Species 0.000 description 1
- 102100040160 Rabankyrin-5 Human genes 0.000 description 1
- 101710086049 Rabankyrin-5 Proteins 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 125000002015 acyclic group Chemical group 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000002146 bilateral effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000002059 diagnostic imaging Methods 0.000 description 1
- 238000004090 dissolution Methods 0.000 description 1
- 238000005315 distribution function Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000005562 fading Methods 0.000 description 1
- 239000000446 fuel Substances 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000001939 inductive effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 239000003921 oil Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000013439 planning Methods 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000002629 repopulating effect Effects 0.000 description 1
- 230000001850 reproductive effect Effects 0.000 description 1
- 230000000979 retarding effect Effects 0.000 description 1
- 210000001525 retina Anatomy 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000005496 tempering Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000002834 transmittance Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- 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/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- 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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/08—Volume 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/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
- G06T3/4007—Scaling of whole images or parts thereof, e.g. expanding or contracting based on interpolation, e.g. bilinear interpolation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/001—Model-based coding, e.g. wire frame
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- 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/12—Bounding box
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Geometry (AREA)
- Multimedia (AREA)
- General Engineering & Computer Science (AREA)
- Medical Informatics (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Artificial Intelligence (AREA)
- Image Generation (AREA)
Abstract
用於包含光線追蹤的有效圖形處理的設備與方法。例如,圖形處理器的一實施例包含:執行硬體邏輯,用以執行圖形命令及描繪影像;介面,用以將該執行硬體邏輯的功能單元耦接至磚片資源;及磚片資源管理器,用以管理所述功能單元對該磚片資源的存取,該執行硬體邏輯的功能單元用以產生具有散列識別碼(ID)的請求,以請求對該磚片資源的一部分的存取,其中該磚片資源管理器用以決定該磚片資源是否存在有為該散列ID所識別的一部分,並且,如果沒有,則分配該磚片資源的一新部分並將該新部分與該散列ID相聯。
Description
本案大致關係於圖形處理器的領域。更明確地說,本案關係於包含光線追蹤實施法的有效圖形處理的設備與方法。
本案主張申請於2020年8月17日的美國臨時申請案第63/066,799號的優先權,該案係被併入於此作參考。
光線追蹤為一種技術,其中光線的傳遞係透過物理為主的描繪加以模擬。當被廣泛使用於電影描繪時,一直到幾年前,它都被認為用於即時演示時,耗用太大資源。在光線追蹤時的主要操作之一為被稱為“光線遍歷”的處理光線場景交集點的可見度查詢,其藉由遍歷與交集在包圍體階層(BVH)中的節點,而計算光線場景交集點。
光柵為一種技術,其中螢幕目標是從一網目的三角形所建立的目標的3D模型建立的。各個三角形的頂點與不同形狀與大小的其他三角形的頂點交集。各個頂點具有在空間中的位置以及有關於顏色、材質與其法線的資訊,該法線係用以決定目標的表面所朝向。光柵單元將該3D模型的三角形轉換為2D螢幕空間中的像素並且各個像素可以根據該頂點資料被指定以初始顏色值。
與
在以下說明中,為了解釋的目的,各種特定細節係被依序描述,以提供下述本發明實施例的全盤了解。然而,明顯地,對於熟習於本技藝者而言,本發明的實施例可以沒有這些部分特定細節的情形下實施。在其他例子中,已知結構與裝置係以方塊圖形式被顯示,以避免模糊了本發明實施的基本原理。
例示圖形處理器架構與資料類型系統概要
圖1為依據實施例之處理系統100的方塊圖。系統100可以使用於單一處理器桌上型系統、多處理器工作站系統、或具有大量處理器102或處理器核心107的伺服器系統。在一實施例中,系統100為加入於系統晶片(SoC)積體電路內的處理平台,以用於例如具有對區域或廣域網路具有線或無線連接能力的物聯網(IoT)內的行動、手持、或嵌式裝置。
在一實施例中,系統100可以包含、耦接、或積集於:伺服器為主遊戲平台;包含遊戲與媒體平台的遊戲機;行動遊戲機、手持遊戲機、或線上遊戲機。在一些實施例中,系統100為行動電話、智慧手機、平板計算裝置、或行動連網裝置,例如有低內儲存容量的膝上型電腦的一部分。處理系統100也可以包含、耦接、或積集於:例如智慧手錶穿戴式裝置的穿戴式裝置;加強有擴增實境(AR)或虛擬實境(VR)特性的智慧眼鏡或衣物,以提供視訊、音訊或觸覺輸出,以補強真實世界視訊、音訊或觸覺經驗,或者,提供文字、音訊、圖形、視訊、全像影像或視訊、或觸覺回授;其他擴增實境(AR)裝置;或其他虛擬實境(VR)裝置。在一些實施例中,處理系統100包含或為電視機或機上盒裝置的一部分。在一實施例中,系統100可以包含、耦接、或積集於自驅載具內,例如,公車、拖曳車、汽車、摩托車或電動機車、飛機或滑翔機(或其任意組合)。自驅載具可以使用系統100,以處理在載具周遭所感應的環境。
在一些實施例中,各個一或更多處理器102可以包含一或更多處理器核心107,以處理當被執行時的指令,以執行用於系統或使用者軟體的操作。在一些實施例中,所述一或更多處理器核心107的至少之一係被組態以處理特定指令集109。在一些實施例中,指令集109可以促成複雜指令集計算(CISC)、精簡指令集計算(RISC)、或經由超長指令字(VLIW)的計算。一或更多處理器核心107可以處理不同指令集109,其可以包含指令以促成其他指令集的仿真。處理器核心107也可以包含其他處理裝置,例如,數位信號處理器(DSP)。
在一些實施例中,處理器102包含快取記憶體104。取決於架構,處理器102可以具有單一內部快取或多階內部快取。在一些實施例中,快取記憶體係為處理器102的各個組件所共享。在一些實施例中,處理器102也使用外部快取(例如,第三階(L3)快取或最後階快取(LLC))(未示出),其可以為處理器核心107間使用已知快取一致性技術加以共享。暫存器檔案106可以額外包含於處理器102內並也可以包含不同類型暫存器,用以儲存不同類型資料(例如,整數暫存器、浮點暫存器、狀態暫存器、及指令指標暫存器)。一些暫存器也可以是通用暫存器,而其他暫存器則可以是針對處理器102的設計所特定者。
在一些實施例中,一或更多處理器102係被耦接至一或更多介面匯流排110,以傳送通訊信號,例如,位址、資料、或控制信號於處理器102與系統100中的其他組件之間。在一實施例中,介面匯流排110可以是處理器匯流排,例如,一版本的直接媒體介面(DMI)匯流排。然而,處理器匯流排並不限於DMI匯流排,並且也可以包含一或更多週邊組件互連匯流排(例如,PCI、快速PCI)、記憶體匯流排、或其他類型介面匯流排。在一實施例中,處理器102包含積集記憶體控制器116與平台控制器集線器130。記憶體控制器116促成於記憶體裝置與系統100的其他組件間之通訊,而平台控制器集線器(PCH)130經由本地I/O匯流排提供至I/O裝置的連接。
記憶體裝置120可以為動態隨機存取記憶體(DRAM)裝置、靜態隨機存取記憶體(SRAM)裝置、快取記憶體裝置、相變記憶體裝置、或一些其他記憶體裝置,其具有適當性能以服務作為處理記憶體。在一實施例中,記憶體裝置120可以操作為用於系統100的系統記憶體,以儲存資料122與指令121,以供當一或更多處理器102執行一應用程式或處理時使用。記憶體控制器116也耦接至選用外部圖形處理器118,其可以與在處理器102中的一或更多圖形處理器108通訊,以執行圖形與媒體操作。在一些實施例中,圖形、媒體及或計算操作可以為加速器112所協助,加速器112為共處理器,其可以被組態以執行特殊化的一組圖形、媒體、或計算操作。例如,在一實施例中,加速器112為矩陣乘法加速器,被用以最佳化機器學習或計算操作。在一實施例中,加速器112為光線追蹤加速器,其可以被用以配合圖形處理器108執行光線追蹤操作。在一實施例中,外部加速器119也可以用以取代或配合加速器112。
在一些實施例中,顯示裝置111可以連接至處理器102。顯示裝置111可以作為在行動電子裝置或膝上型裝置中的一或更多內部顯示裝置或者是經由顯示介面(例如,顯示埠等)所附接的外部顯示裝置。在一實施例中,顯示裝置111可以為頭戴式顯示器(HMD),例如,用於各種虛擬實境(VR)應用或擴增實境(AR)應用中的立體顯示裝置。
在一些實施例中,平台控制器集線器130致能週邊以經由高速I/O匯流排連接至記憶體裝置120與處理器102。I/O週邊包含但並不限於音訊控制器146、網路控制器134、韌體介面128、無線收發器126、觸控感應器125、資料儲存裝置124(例如,非揮發記憶體、揮發記憶體、硬碟機、快閃記憶體、NAND、3D NAND、3D Xpoint等)。資料儲存裝置124可以經由儲存介面(例如,SATA)或週邊匯流排,例如,週邊組件互連匯流排(例如,PCI、快速PCI)連接。觸控感應器125可以包含觸控螢幕感應器、壓力感應器,或指紋感應器。無線收發器126可以是Wi-Fi收發機、藍牙收發機、或行動網路收發機,例如3G、4G、5G或長期演進(LTE)收發機。韌體介面128致能與系統韌體的通訊,並可以例如是統一可擴充韌體介面(UEFI)。網路控制器134可以致能網路連接至有線網路。在一些實施例中,高效能網路控制器(未示出)將耦接至介面匯流排110。在一實施例中,音訊控制器146為多聲道高解析度音訊控制器。在一實施例中,系統100包含選用傳統I/O控制器140,用以耦接傳統(例如,個人系統2 (PS/2))裝置至該系統。平台控制器集線器130也連接至一或更多通用串列匯流排(USB)控制器142,連接至例如鍵盤與滑鼠143組合、攝影機144的輸入裝置,或至其他USB輸入裝置。
將可以了解,所示系統100為例示性並非限制性,因為也可以使用不同組態的其他類型的資料處理系統。例如,記憶體控制器116與平台控制器集線器130的實例可以被積集入分立外部圖形處理器,例如,外部圖形處理器118。在一實施例中,平台控制器集線器130及/或記憶體控制器116可以於所述一或更多處理器102的外部。例如,系統100可以包含外部記憶體控制器116與平台控制器集線器130,其可以被組態為與處理器102通訊的系統晶片組內的記憶體控制器集線器及週邊控制器集線器。
例如,電路板(“滑板(sled)”)可以被使用與設計用以增加熱效率,其上放置有例如CPU、記憶體的組件、或其他組件。在一些例子中,例如處理器的處理組件係被定位於滑板的上側,而例如DIMM的近記憶體係定位於滑板的下側。由於此設計所提供的加強氣流之故,這些組件可以較在典型系統中,以更高頻率與功率位準操作,藉以增加效能。再者,滑板被組態以在機架內盲配合電力與資料通訊電纜,藉以加強其被快速移除、升級、重裝及/或更換的能力。同樣地,由於彼此的間隔增加,位於滑板上的個別組件,例如,處理器、加速器、記憶體、及資料儲存驅動器係被組態以容易地升級。在示出的實施例中,所述組件額外包含硬體認證特性,以認證其真實性。
資料中心可以利用單一網路架構(“組織”),其支援包含乙太與全路徑(Omni-Path)的多數其他網路架構。滑板可以經由光纖耦接至開關,光纖提供較典型對絞纜線(例如,第5類屬、第5e類屬、第6類屬等)為高的頻寬與較低潛時。由於高頻寬、低潛時互連與網路架構,資料中心使用中可以集合資源,例如記憶體、加速器(例如,GPU、圖形加速器、FPGA、ASIC、類神經網路及/或人工智慧加速器等),及資料儲存驅動器,這些資源實體都分散的,並將它們以隨選的方式提供給計算資源(例如,處理器),使得計算資源存取這些所收集的資源如同它們在本地一樣。
電源供應或電源可以提供電壓及/或電流給系統100或於此所述之任何組件或系統。在一例子中,電源供應包含AC至DC(交流至直流)適配器,以插入牆壁插座。此AC電源可以是再生能源(例如,太陽能)電源。在一例子中,電源包含DC電源,例如,外部AC至DC轉換器。在一例子中,電源或電源供應包含無線充電硬體,以經由接近充電場的方式充電。在一例子中,電源可以包含內部電池、交流電供應、運動為主電源供應、太陽能電源供應、或燃料電池電源。
圖2A-2D示出由於此所述實施例所提供的計算系統與圖形處理器。具有與任何於此的其他圖的元件相同元件符號(或名稱)的圖2A-2D的這些元件可以以類似於它處所述的方式加以操作或作用,但並不限於此。
圖2A為處理器200實施例的方塊圖,其具有一或更多處理器核心202A-202N、積集記憶體控制器214、及積集圖形處理器208。處理器200可以包含多達與包括由虛線方塊所代表的額外核心202N的額外核心。各個處理器核心202A-202N包含一或更多內部快取單元204A-204N。在一些實施例中,各個處理器核心已存取一或更多共享快取單元206。內部快取單元204A-204N與共享快取單元206代表在處理器200內的快取記憶體階層。快取記憶體階層可以在各個處理器核心內包含至少一階指令與資料快取,以及,一或更多階共享中階快取,例如第2階(L2)、第3階(L3)、第4階(L4)、或其他階快取,其中,在外部記憶體前的最高階快取被分類為LLC。在一些實施例中,快取一致性邏輯保存在各種快取單元206與204A-204N間的一致性。
在一些實施例中,處理器200也可以包含一組一或更多匯流排控制器單元216與系統代理核心210。所述一或更多匯流排控制器單元216管理一組週邊匯流排,例如,一或更多PCI或快速PCI匯流排。系統代理核心210提供用於各種處理器組件的管理功能。在一些實施例中,系統代理核心210包含一或更多積集記憶體控制器214,以管理對各種外部記憶體裝置(未示出)的存取。
在一些實施例中,一或更多處理器核心202A-202N包含用以同時多線程的支援。在此實施例中,系統代理核心210包含用於在多線程理期間,協調與操作核心202A-202N的組件。系統代理核心210可以額外包含電源控制單元(PCU),其包含邏輯與組件,以調整處理器核心202A-202N與圖形處理器208的電源狀態。
在一些實施例中,處理器200額外包含圖形處理器208,以執行圖形處理操作。在一些實施例中,圖形處理器208耦接該組共享快取單元206以及包含一或更多積集記憶體控制器214的系統代理核心210。在一些實施例中,系統代理核心210也包含顯示控制器211,以驅動圖形處理器輸出至一或更多所耦接的顯示器。在一些實施例中,顯示控制器211也可以是經由至少一互連耦接至該圖形處理器的分開模組,或者,可以積集於該圖形處理器208內。
在一些實施例中,環狀互連單元212被用以耦接至處理器200的內部組件。然而,也可以使用另一互連單元,例如,點對點互連、切換互連、或其他技術,包含本技藝所知的技術。在一些實施例中,圖形處理器208經由I/O鏈路213耦接至環互連212。
例示I/O鏈路213代表多種I/O互連的至少之一,包含有封裝上I/O互連,其促成在各種處理器組件與高效嵌式記憶體模組218,例如,eDRAM模組間的通訊。在一些實施例中,各個處理器核心202A-202N與圖形處理器208可以使用嵌式記憶體模組218作為共享最後階快取。
在一些實施例中,處理器核心202A-202N為執行相同指令集架構的同質核心。在另一實施例中,處理器核心202A-202N以指令集架構(ISA)看來為異質,其中一或更多處理器核心202A-202N執行第一指令集,而其他核心的至少一個執行該第一指令集的次集或不同指令集。在一實施例中,處理器核心202A-202N為以微架構看來為異質,其中具有相對較高功率消耗的一或更多核心耦接至具有較低功率消耗的一或更多電源核心。在一實施例中,處理器核心202A-202N以計算能力看來為異質。另外,處理器200可以實施於一或更多晶片上或作為具有除了其他組件外的示出組件的SoC積體電路。
圖2B為依據於此所述之一些實施例的圖形處理器核心219的硬體邏輯的方塊圖。圖2B的元件中具有與其他圖的元件相同的元件符號(或名稱)者可以以類似於本案所述的方式操作或作用,但也並不限於此。有時稱為核心片(slice)的圖形處理器核心219可以是在模組圖形處理器內的一或多數圖形核心。圖形處理器核心219為一個圖形核心片的例示,並且,於此所述之圖形處理器也可以根據目標功率與效能範圍包含多數圖形核心片。各個圖形處理器核心219可以包含一固定功能方塊230,耦接至也被稱子片的多數子核心221A-221F,其包含多數通用與固定功能邏輯的模組方塊。
在一些實施例中,固定功能方塊230包含幾何/固定功能管線231,例如,在較低效能與/或較低功率圖形處理器實施法中,可以為在該圖形處理器核心219內的所有子核心所共享。在各種實施例中,幾何/固定功能管線231包含3D固定功能管線(例如,以下所述之描述於圖3與圖4的3D管線312)、視訊前端單元、線程繁衍器與線程調度器、及統一回覆緩衝器管理器,其管理統一回覆緩衝器(例如,以下所述之在圖4的統一回覆緩衝器418)。
在一實施例中,固定功能方塊230也包含圖形SoC介面232、圖形微控制器233、及媒體管線234。圖形SoC介面232提供圖形處理器核心219與在系統晶片積體電路內的其他處理器核心間的介面。圖形微控制器233為可程式子處理器,其可被組態以管理在圖形處理器核心219內的各種功能,包含線程調度、排程、及搶先。媒體管線234(例如,圖3與圖4的媒體管線316)包含邏輯,以促成包含影像與視訊資料的多媒體資料的解碼、編碼、預處理、及/或後處理。媒體管線234透過請求實施媒體操作,以計算或取樣在子核心221-221F內的邏輯。
在一實施例中,SoC介面232致能圖形處理器核心219,以與通用應用處理器核心(例如,CPU)及/或SoC內的其他組件通訊,這些組件包含記憶體階層元件,例如,共享最後階快取記憶體、系統RAM、及/或嵌式晶片上或封裝上DRAM。SoC介面232也可以致能與在該SoC內,例如,攝影機成像管線的固定功能裝置通訊,並致能在圖形處理器核心219與SoC內的CPU間共享的全域記憶體原子的使用及/或實施。SoC介面232也可以實施圖形處理器核心219的電源管理控制並致能在圖形核心219的時脈領域與SoC內的其他時脈領域間的介面。在一實施例中,SoC介面232致能從命令串流器與全域線程調度器接收命令緩衝器,這些被組態以提供命令與指令給在圖形處理器內的各個一或更多圖形核心。當將要執行媒體操作時,這些命令與指令可以被調度至媒體管線234,以及,當將要執行圖形處理操作時,這些命令與指令則可以被調度至幾何與固定功能管線(例如,幾何與固定功能管線231、幾何與固定功能管線237)。
圖形微控制器233可以被組態以執行圖形處理器核心219的各種排程及管理工作。在一實施例中,圖形微控制器233可以執行在子核心221A-221F內的執行單元(EU)陣列222A-222F、224A-224F內的各種圖形平行引擎上圖形及/或計算工作負載的排程。在此排程模型中,在包含圖形處理器核心219的SoC的CPU核心上執行的主機軟體可以提交工作負載給多數圖形處理器門鈴之一,這調用在適當圖形引擎上的排程操作。排程操作包含決定哪個工作負載將隨後執行,將工作負載提交給命令串流器、搶先執行於引擎上的現存工作負載、監視工作負載的進程、及當工作負載完成時,通知主機軟體。在一實施例中,圖形微控制器233也可以促成圖形處理器核心219的低電源或閒置狀態,提供圖形處理器核心219無關於作業系統及/或在系統上的圖形驅動器軟體的低電源狀態轉換時,儲存與回復圖形處理器核心219內的暫存器的能力。
圖形處理器核心219可以具有多於或少於所示子核心221A-221F,多達N個模型化子核心。對於每組N子核心,圖形處理器核心219也可以包含共享功能邏輯235、共享及/或快取記憶體236、幾何/固定功能管線237,及額外固定功能邏輯238,以加速各種圖形與計算處理操作。共享功能邏輯235可以包含與圖4的共享功能邏輯420相關的邏輯單元(例如,取樣器、數學、及/或線程間通訊邏輯),這些可以為圖形處理器核心219內的各個N子核心所共享。共享及/或快取記憶體236可以是用於圖形處理器核心219內的該組N子核心221A-221F的最後階快取,並且,也可以作為可為多數子核心所存取的共享記憶體。幾何/固定功能管線237可以在固定功能方塊230內,而不是幾何/固定功能管線231在其內,並可以包含相同或類似邏輯單元。
在一實施例中,圖形處理器核心219包含額外固定功能邏輯238,其可以包含各種固定功能加速邏輯,以供圖形處理器核心219所使用。在一實施例中,額外固定功能邏輯238包含額外幾何管線,以用於純位置著色(position only shading)。在純位置著色中,存在有兩個幾何管線,即在幾何/固定功能管線238、231內的全幾何管線,以及,可以被包含在額外固定功能邏輯238內的額外幾何管線的汰除管線。在一實施例中,汰除管線為全幾何管線的裁剪版。全管線與汰除管線可以執行相同應用的不同實例,各個實例具有分開的上下文。純位置著色可以隱藏丟棄的三角形長汰除執行,致使在一些實例中,著色可以較早完成。例如並且在一實施例中,在額外固定功能邏輯238內的汰除管線邏輯可以並行於主應用執行位置著色並且通常產生較全管線產為快的關鍵結果,因為汰除管線只擷取與著色頂點的位置屬性,而不是對框緩衝器執行像素的光柵掃描與描繪。汰除管線可以使用所產生關鍵結果,以計算所有三角形的可見性資訊,而無關於這些三角形是否被揀選淘汰。全管線(在此實例中,可以被稱為重播管線)可以用掉可見性資訊,以跳過所汰除的三角形,只著色最後傳送至光柵階段的可見三角形。
在一實施例中,額外固定功能邏輯238也可以包含機器學習加速邏輯,例如,固定功能矩陣乘法邏輯,用以實施包含用於機器學習訓練或推理的最佳化。
各個圖形子核心221A-221F包含一組執行資源,其可以被用以回應於圖形引擎、媒體管線或著色程式的請求,而執行圖形、媒體、及計算操作。圖形子核心221A-221F包含多數EU陣列222A-222F、224A-224F、線程調度與線程間通訊(TD/IC)邏輯223A-223F、3D(例如,材質)取樣器225A-225F、媒體取樣器206A-206F、著色器處理器227A-227F、及共享本地記憶體(SLM)228A-228F。EU陣列222A-222F、224A-224F各個包含多數執行單元,其為通用圖形處理單元,能夠在圖形、媒體、或計算操作的服務,包含圖形、媒體,或計算著色程式中,執行浮點與整數/固定點邏輯運算。TD/IC邏輯223A-223F為子核心內的執行單元,執行本地線程調度與線程控制操作,並促成執行於該子核心的執行單元上的線程間的通訊。3D取樣器225A-225F可以讀取材質或其他3D圖形相關資料入記憶體。該3D取樣器可以根據組態的取樣狀態與相關於一給定材質的材質格式,不同地讀取材質資料。媒體取樣器206A-206F可以根據有關於媒體資料的類型與格式,而執行類似讀取操作。在一實施例中,各個圖形子核心221A-221F也可以包含統一3D與媒體取樣器。執行於各個子核心221A-221F內的執行單元上的線程可以使用在各個子核心內的共享本地記憶體228A-228F,以致使執行於線程群組內的線程使用晶片上記憶體上的共同池執行。
圖2C示出圖形處理單元(GPU)239,其包含被安排為多核心群組240A-240N的專用組圖形處理資源。雖然只提供單一多核心群組240A的細節,但將了解的是,其他多核心群組240B-240N也可以裝配有相同或類似組的圖形處理資源。
如所示,多核心群組240A可以包含一組圖形核心243、一組張量核心244、及一組光線追蹤核心245。排程器/調度器241排程與調度圖形線程,以用以執行於各種核心243、244、245上。當執行圖形線程時,一組暫存器檔案242儲存為核心243、244、245所使用的運算元值。例如,這些可以包含用以儲存整數值的整數暫存器、用以儲存浮點值的浮點暫存器、用以儲存緊縮資料元件(整數及/或浮點資料元件)的向量暫存器,以及用以儲存張量/矩陣值的磚片暫存器。在一實施例中,磚片暫存器被實施為向量暫存器的組合集。
一或更多組合第1階(L1)快取與共享記憶體單元247儲存本地位於各個多核心群組240A內的圖形資料,例如材質資料、頂點資料、像素資料、光線資料、包圍體資料等。一或更多材質單元247也可以被用以執行加材質操作,例如,材質映射與取樣。為所有或次組多核心群組240A-240N所共享的第2階(L2)快取253儲存用於多數同時圖形線程的圖形資料與/或指令。如所示,L2快取253可以為多數多核心群組240A-240N所共享。一或更多記憶體控制器248將GPU 239耦接至記憶體249,記憶體可以是系統記憶體(例如,DRAM)及/或專用圖形記憶體(例如,GDDR6記憶體)。
輸入/輸出(I/O)電路250將GPU 239耦接至一或更多I/O裝置252,例如,數位信號處理器(DSP)、網路控制器、或使用者輸入裝置。晶片上互連可以被用以將該I/O裝置252耦接至GPU 239與記憶體249。I/O電路250的一或更多I/O記憶體管理單元(IOMMU)251將該I/O裝置252直接耦接至系統記憶體249。在一實施例中,IOMMU 251管理多組的頁面表,以將虛擬位址映射至系統記憶體249中的實體位址。在此實施例中,I/O裝置252、CPU246、及GPU 239可以共享相同虛擬位址空間。
在一實施法中,IOMMU 251支援虛擬化。在此時,它可以管理第一組頁面表,以映射客/圖形虛擬位址至客/圖形實體位址,以及,第二組頁面表,以映射客/圖形實體位址至系統/主機實體位址(例如,在系統記憶體249內)。各個第一與第二組頁面表的基礎位址可以被儲存在控制暫存器並被換出於上下文開關(例如,使得新上下文被提供有存取相關組頁面表的能力)。雖然未示於圖2C中,但各個核心243、244、245及/或多核心群組240A-240N可以包含轉譯旁看緩衝器(TLB),以快取客虛擬至客實體轉譯、客實體至主機實體轉譯、及客虛擬至主機實體轉譯。
在一實施例中,CPU 246、GPU 239、及I/O裝置252被積集在單一半導體晶片及/或晶片封裝上。所示記憶體249可以積集在相同晶片或者也可以經由晶片外介面耦接至記憶體控制器248。在一實施法中,記憶體249包含GDDR6記憶體,其與其他實體系統級記憶體分享相同的虛擬位址空間,但本發明的基本原理並不限於此特定實施法。
在一實施例中,張量核心244包含特定設計以執行矩陣操作的多數執行單元,矩陣運算為用以執行深度學習操作的基礎計算操作。例如,同時矩陣乘法運算可以被用於類神經網路訓練與推理。張量核心244可以使用各種運算元精度執行矩陣處理,包含單精度浮點(例如,32位元)、半精度浮點(例如,16位元)、整數字元(16位元)、位元組(8位元)、及半位元組(4位元)。在一實施例中,類神經網路實施法由多數訊框中,抽出各個描繪場景的特性,可能組合細節,以建構高品質最終影像。
在深度學習實施法中,平行矩陣乘法工作可以被排程以執行在張量核心244上。尤其,類神經網路的訓練需要相當大量的矩陣點積運算。為了處理N×N×N矩陣乘法的內積公式,張量核心244可以包含至少N點積處理元件。在矩陣乘法開始之前,一整個矩陣被載入磚片暫存器中並且N循環的各個循環中,第二矩陣的至少一行被載入。每個循環中,處理了有N點積。
取決於特定實施法,矩陣元件可以被儲存為不同精度,包含16位元字元、8位元位元組(例如,INT8)及4位元半位元組(例如,INT4)。不同精度模式可以特定用於張量核心244,以確保對於不同工作負載有最有效精度(例如,如推理工作負載,其可以容許量化至位元組或半位元組)。
在一實施例中,光線追蹤核心245為即時光線追蹤與非即時光線追蹤實施法加速了光線追蹤操作。更明確地說,光線追蹤核心245包含光線遍歷/交集電路,用以使用包圍體階層(BVH)執行光線遍歷並識別在BVH體積內包圍的光線與基元間之交集。光線追蹤核心245也可以包含電路,用以執行深度測試與汰除(例如,使用Z緩衝器或類似配置)。在一實施法中,光線追蹤核心245配合於此所述之影像去雜訊技術,執行遍歷與交集操作,其至少一部分被執行於張量核心244上。例如,在一實施例中,張量核心244實行深學習類神經網路,以執行包含本地記憶體9010(及/或系統記憶體)的由光線追蹤核心245所產生的訊框的去雜訊。然而,CPU 246、圖形核心243、及/或光線追蹤核心245也可以執行去雜訊及/或深學習演算法之全部或一部分。
另外,如上所述,去雜訊的一分散手法可以被利用,其中GPU 239為耦接至在網路上或高速互連上的其他計算裝置。在此實施例中,互連計算裝置共享類神經網路學習/訓練資料,以改良整個系統學習來執行不同類型影像訊框及/或不同圖形應用的去雜訊的速度。
在一實施例中,光線追蹤核心245處理所有BVH遍歷及光線基元交集,使圖形核心243不被每光線幾千指令所過負載。在一實施例中,各個光線追蹤核心245包含第一組特殊電路,用以執行包圍盒測試(例如,用於遍歷操作)及第二組特殊電路,用以執行光線-三角形交集測試(例如,交集已經被遍歷的光線)。因此,在一實施例中,多核心群組240A可以簡單地發射光線探針,並且,光線追蹤核心245獨立地執行光線遍歷與交集並返回命中結果(例如,命中、未命中、多次命中等)給線程上下文。其他核心243、244被釋放,以在光線追蹤核心245執行遍歷與交集操作時,執行其他圖形或計算工作。
在一實施例中,各個光線追蹤核心245包含遍歷單元,以執行BVH測試操作,以及,交集單元,其執行光線-基元交集測試。交集單元產生“命中”、“未命中”或“多次命中”反應,將其提供給適當線程。在遍歷與交集操作期間,其他核心(例如,圖形核心243及張量核心244)的執行資源係被釋放,以執行其他形式的圖形工作。
在以下所述之一特定實施例,混合光柵/光線追蹤法係被使用,其中,工作被分散於圖形核心243與光線追蹤核心245之間。
在一實施例中,光線追蹤核心245(及/或其他核心243、244)包含硬體支援,用於光線追蹤指令集,例如,微軟的DirectX光線追蹤(DXR),其包含DispatchRays命令,以及,光線-產生、最近命中、任何命中、及未中著色器,這完成了每個目標的特定組著色器與材質的指定。為光線追蹤核心245、圖形核心243及張量核心244所支援的另一光線追蹤平台為Vulkan 1.1.85。然而,注意,本發明的基本原理並不限定於任何特定光線追蹤ISA。
通常,各種核心245、244、243可以支援光線追蹤指令集,其包含用於光線產生、最近命中、任何命中、光線-基元交集、每基元與階層包圍盒結構、未中、訪問與異常的指令/功能。更明確地說,一實施例包含光線追蹤指令,以執行以下功能:
光線產生-光線產生指令可以針對各個像素、取樣、或其他使用者界定工作指定加以執行。
最近命中-最近命中指令可以執行以找出在場景內的光線與基元的最近交集點。
任何命中-任何命中指令識別出在場景內的光線與基元間的多數交集,可能可識別出新的最近交集點。
交集-交集指令執行光線-基元交集測試並輸出一結果。
每-基元包圍盒結構-此指令在給定基元或基元群四周(例如,當建立新的BVH或其他加速資料結構時)建立包圍盒。
未中-表示光線未命中在場景內的所有幾何,或場景的指定區域。
訪問-表示一光線將遍歷的子體積。
異常-包含各種類型的異常處置器(例如,各種錯誤狀況所調用者)。
圖2D為通用圖形處理單元(GPGPU)270的方塊圖,其可以依據於此所述之實施例被組態為圖形處理器及/或計算加速器。GPGPU 270可以與主機處理器(例如,一或更多CPU 246)與記憶體271、272經由一或更多系統及/或記憶體匯流排而互連。在一實施例中,記憶體271為系統記憶體,其可以與一或更多CPU 246共享,而記憶體272為裝置記憶體,其則GPGPU 270專用。在一實施例中,在GPGPU 270與裝置記憶體272內的組件可以映射入可以為所述一或更多CPU 246所存取的記憶體位址。存取記憶體271與272可以經由記憶體控制器268加以促成。在一實施例中,記憶體控制器268包含內部直接記憶體存取(DMA)控制器269,或者,可以包含邏輯,用以執行在其他情況下為DMA控制器所執行的操作。
GPGPU 270包含多數快取記憶體,包含有:L2快取253、L1快取254、指令快取255、及共享記憶體256,其至少一部分也可以被分割為快取記憶體。GPGPU 270也包含多數計算單元260A-260N。各個計算單元260A-260N包含一組向量暫存器261、純量暫存器262、向量邏輯單元263、及純量邏輯單元264。計算單元260A-260N也可以包含本地共享記憶體265及程式計數器266。計算單元260A-260N可以耦接常數快取267,其可以用以儲存常數資料,這些資料為在核心或著色器程式在GPGPU 270上執行期間不會改變的資料。在一實施例中,常數快取267為純量資料快取並且快取資料可以直接被擷取入純量暫存器262。
在操作期間,一或更多CPU 246可以將命令寫入至GPGPU 270的已經映射入可存取位址空間的暫存器或記憶體中。命令處理器257可以由暫存器或記憶體讀取命令並決定這些命令將在GPGPU 270中如何處理。線程調度器258然後可以被使用以調度線程至計算單元260A-260N,以執行這些命令。各個計算單元260A-260N可以無關於其他計算單元地執行線程。另外,各個計算單元260A-260N可以獨立地組態用於條件式計算並可以條件式輸出計算結果給記憶體。當所提呈命令完成時,命令處理器257可以中斷所述一或更多CPU 246。
圖3A-3C示出於此所述實施例所提供的額外圖形處理器與計算加速器架構的方塊圖。圖3A-3C的元件中具有與本文中其他圖式相同的元件符號(或名稱)者可以以類似於在本文中其他處所述的方式加以操作,但並不作此限定。
圖3A為圖形處理器300的方塊圖,其可以是分立圖形處理單元,或也可以是與多數處理核心積集在一起的圖形處理器,或其他半導體裝置,例如,但並不限於記憶體裝置或網路介面。在一些實施例中,圖形處理器通過記憶體映射的I/O介面與圖形處理器上的暫存器通訊,並與放置於處理器記憶體中的命令通訊。在一些實施例中,圖形處理器300包含記憶體介面314,以存取記憶體。記憶體介面314可以是本地記憶體、一或更多內部快取、一或更多共享外部快取、及/或系統記憶體的介面。
在一些實施例中,圖形處理器300也可以包含顯示控制器302,以驅動顯示輸出資料給顯示器裝置318。顯示控制器302包含用於顯示的一或更多重疊平面的硬體以及多層視訊或使用者界面元件的組合。顯示裝置318可以是內部或外部顯示裝置。在一實施例中,顯示裝置318為頭戴式顯示裝置,例如虛擬實境(VR)顯示裝置或擴增實境(AR)顯示裝置。在一些實施例中,圖形處理器300包含視訊編解碼引擎306,用以在一或更多媒體編碼格式之間作編碼、解碼、或轉碼媒體,這些格式包含但並不限於動態影像專家群(MPEG)格式,例如,MPEG-2,先進視訊編碼(AVC)格式,例如,H.264/MPEG-4 AVC、H.265/ HEVC、開放媒體聯盟(AOMedia)VP8、VP9、以及,動畫與電視工程師協會(SMPTE)421M/VC-1、及聯合照相專家群(JPEG)格式,例如,JPEG,與動畫JPEG(MJPEG)格式。
在一些實施例中,圖形處理器300包含方塊影像轉移(BLIT)引擎304,以執行二維(2D)光柵操作,包含例如位元邊界方塊轉移。然而,在一實施例中,2D圖形操作係使用圖形處理引擎(GPE)310的一或更多組件執行。在一些實施例中,GPE 310為計算引擎,用以執行圖形操作,包含三維(3D)圖形操作及媒體操作。
在一些實施例中,GPE 310包含3D管線312,用以使用作用於3D基元形狀(例如,矩形、三角形等)的處理功能,來執行3D操作,例如描繪三維影像與場景。3D管線312包含可程式與固定功能元件,其執行在該元件內的各種工作及/或對3D/媒體子系統315繁衍執行線程。雖然3D管線312可以用以執行媒體操作,但GPE 310的實施例也包含媒體管線316,其係特定用於執行媒體操作,例如視訊後處理以及影像加強。
在一些實施例中,媒體管線316包含固定功能或可程式邏輯單元,用以執行一或更多特定媒體操作,例如,視訊解碼加速、視訊去交疊、及視訊編碼加速,以替代或代表視訊編解碼引擎306。在一些實施例中,媒體管線316額外地包含線程繁衍單元,用以繁衍線程以執行於3D/媒體子系統315上。繁衍的線程在包含於3D/媒體子系統315的一或更多圖形執行單元上,執行媒體操作的計算。
在一些實施例中,3D/媒體子系統315包含邏輯,用以執行3D管線312以及媒體管線316所繁衍的線程。在一實施例中,管線送出線程執行請求給3D/媒體子系統315,3D/媒體子系統315包含線程調度邏輯,用以仲裁與調度各種請求至可用線程執行資源。執行資源包含一陣列的圖形執行單元,用以處理3D與媒體線程。在一些實施例中,3D/媒體子系統315包含一或更多內部快取,用於線程指令與資料。在一些實施例中,子系統也包含共享記憶體,包含暫存器與可定位記憶體,以在線程間分享資料並儲存輸出資料。
圖3B例示依據於此所述實施例的具有磚片架構的圖形處理器320。在一實施例中,圖形處理器320包含圖形處理引擎叢集322,其具有多數實例的圖3A的圖形處理引擎310,在圖形引擎磚片310A-310D內。各個圖形引擎磚片310A-310D可以經由一組磚片互連323A-323F加以互連。各個圖形引擎磚片310A-310D也可以經由記憶體互連325A-325D連接至記憶體模組或記憶體裝置326A-326D。記憶體裝置326A-326D可以使用任何圖形記憶體技術。例如,記憶體裝置326A-326D可以為圖形雙資料倍率(GDDR)記憶體。在一實施例中,記憶體裝置326A-326D為高頻寛記憶體(HBM)模組,其可以與其個別圖形引擎磚片310A-310D作在晶粒上。在一實施例中,記憶體裝置326A-326D為堆疊記憶體裝置,其可以堆疊在個別圖形引擎磚片310A-310D的上方。在一實施例中,各個圖形引擎磚片310A-310D與相關記憶體326A-326D佇留在分開小晶片上,這些被黏著至基礎晶粒或基礎基板上,如將隨後在圖11B-11D中加以詳述。
圖形處理引擎叢集322可以連接晶片上或封裝上組織互連324。組織互連324可以完成圖形引擎磚片310A-310D與例如視訊編解碼器306與一或更多複製引擎304的組件間之通訊。複製引擎304可以被用以移動資料進出在記憶體裝置326A-326D與圖形處理器320外部的記憶體(例如,系統記憶體)之間。組織互連324也可以用以互連圖形引擎磚片310A-310D。圖形處理器320可以選用地包含一顯示控制器302,以完成與外部顯示裝置318的連接。圖形處理器也可以被組態為圖形或計算加速器。在加速器組態中,顯示控制器302與顯示裝置318可以被省略。
圖形處理器320可以經由主機介面328連接至主機系統。主機介面328可以完成圖形處理器320、系統記憶體、及/或其他系統組件間之通訊。主機介面328可以例如是快速PCI匯流排或其他類型的主機系統介面。
圖3C示出依據於此所述實施例的計算加速器330。計算加速器330可以包含與圖3B的圖形處理器320類似的架構並且最佳化以計算加速。計算引擎叢集332可以包含一組計算引擎磚片340A-340D,其包含最佳用於平行或向量為主通用計算操作的執行邏輯。雖然在一實施例中,一或更多計算引擎磚片340A-340D可以包含邏輯,以執行媒體加速,但在一些實施例中,計算引擎磚片340A-340D並不包含固定功能圖形處理邏輯。計算引擎磚片340A-340D可以經由記憶體互連325A-325D連接至記憶體326A-326D。記憶體326A-326D與記憶體互連325A-325D可以具有與圖形處理器320類似的技術,或者,也可以是不同。圖形計算引擎磚片340A-340D也可以經由一組互連323A-323F互連並可以經由組織互連324連接及/或互連。在一實施例中,計算加速器330包含大L3快取336,其可以被組態成裝置寬快取。計算加速器330也可以經由主機介面328以類似於圖3B的圖形處理器320的方式被連接至主機處理器與記憶體。
圖形處理引擎
圖4為依據一些實施例之圖形處理器的圖形處理引擎410的方塊圖。在一實施例中,圖形處理引擎(GPE)410為示於圖3A中的GPE 310的一版本,並也可以代表圖3B的圖形引擎磚片310A-310D。圖4中具有與本文中任何其他圖式的元件相同元件符號(或名稱)的元件可以以類似於本文它處所述之方式加以操作或動作,但也並不限於此。例如,圖3A的3D管線312與媒體管線316被示出。GPE 410的一些實施例中,媒體管線316為選用並且可能不被明確地包含GPE 410中。例如,在至少一實施例中,分開媒體及/或影像處理器係被耦接至GPE 410。
在一些實施例中,GPE 410耦接或包含一命令串流器403,其提供命令串流給3D管線312及/或媒體管線316。在一些實施例中,命令串流器403耦接至記憶體,其可以是系統記憶體,或一或更多內部快取記憶體與共享快取記憶體。在一些實施例中,命令串流器403由記憶體接收命令並將這些命令送給3D管線312及/或媒體管線316。這些命令係由環狀緩衝器擷取的指引,環狀緩衝器儲存用於3D管線312及媒體管線316的命令。在一實施例中,環狀緩衝器可以額外包含儲存多批次的多命令的批次命令緩衝器。用於3D管線312的命令也可以包含對儲存於記憶體中之資料的參考,例如但並不限於用於3D管線312的頂點及幾何資料及/或用於媒體管線316的影像資料與記憶體目標。3D管線312與媒體管線316處理藉由經由個別管線內的邏輯而執行處理或者藉由調度一或更多執行線程至圖形核心陣列414而處理這些命令與資料。在一實施例中,圖形核心陣列414包含一或更多方塊的圖形核心(例如,圖形核心415A、圖形核心415B),各個方塊包含一或更多圖形核心。各個圖形核心包含一組圖形執行資源,其包含通用與圖形特定執行邏輯,以執行圖形與計算操作,及固定功能材質處理及/或機器學習與人工智慧加速邏輯。
在各種實施例中,3D管線312可以包含固定功能與可程式邏輯,用以藉由處理指令並調度執行線程至圖形核心陣列414,而處理一或更多著色器程式,例如,頂點著色器、幾何著色器、像素著色器、區段著色器、計算著色器、或其他著色器程式。圖形核心陣列414提供在處理這些著色器程式中所使用的統一方塊的執行資源。圖形核心陣列414的圖形核心415A-415B內的多目的執行邏輯(例如,執行單元)包含用於各種3D API著色器語言的支援並可以執行有關於多數著色器的多數同時執行線程。
在一些實施例中,圖形核心陣列414包含執行邏輯,用以執行媒體功能,例如,視訊及/或影像處理。在一實施例中,執行單元包含通用邏輯,其除了圖形處理操作外,也可程式化以執行平行通用計算操作。通用邏輯可以平行或配合在圖1的處理器核心107或圖2A的核心202A-202N內的通用邏輯執行處理操作。
由執行於圖形核心陣列414上的線程所產生的輸出資料可以輸出資料至統一回覆緩衝器(URB)418中的記憶體。URB 418可以儲存用於多數線程的資料。在一些實施例中,URB 418可以被用以將資料發送於執行於圖形核心陣列414上的不同線程之間。在一些實施例中,URB 418可以另外被用於在圖形核心陣列上的線程與共享功能邏輯420內的固定功能邏輯間的同步化。
在一些實施例中,圖形核心陣列414可縮放,使得陣列包含可變數量的圖形核心,各個圖形核心根據目標功率與GPE 410的效能層次,而具有可變數量的執行單元。在一實施例中,執行資源為動態可縮放,使得執行資源可以如所需地致能或去能。
圖形核心陣列414耦接至共享功能邏輯420,其包含於圖形核心陣列中的圖形核心間共享的多數資源。在共享功能邏輯420中的共享功能為硬體邏輯單元,其提供特殊化補充功能給圖形核心陣列414。在各種實施例中,共享功能邏輯420包含但並不限於取樣器421、數學422、及線程間通訊(ITC)423邏輯。另外,一些實施例在共享功能邏輯420內實施一或更多快取425。
共享功能至少當給定特殊化功能的需求不足以包含在圖形核心陣列414內時加以實施。替代地,該特殊化功能的單一實例化被實施為在共享功能邏輯420中的獨立實體,並為圖形核心陣列414內的執行資源所共享。為圖形核心陣列414所共享並被包含在圖形核心陣列414內的精確組功能隨著實施例作改變。在一些實施例中,為圖形核心陣列414所密集使用的在共享功能邏輯420內的特定共享功能可以被包含在圖形核心陣列414內的共享功能邏輯416中。在各種實施例中,在圖形核心陣列414內的共享功能邏輯416可以包含部分或所有在共享功能邏輯420內的邏輯。在一實施例中,在共享功能邏輯420內的所有邏輯元件可以在圖形核心陣列414的共享功能邏輯416內複製。在一實施例中,排除了共享功能邏輯420,而選擇在圖形核心陣列414內的共享功能邏輯416。
執行單元
圖5A-5B示出依據於此所述實施例之利用於圖形處理器核心中之包含一陣列處理元件的線程執行邏輯500。圖5A-5B中具有與本文中的任何其他圖式相同元件符號(或名稱)的元件可以以類似於在本文中所述之方式加以操作或作用,但並不作此限定。圖5A-5B示出線程執行邏輯500的概要,其可以是圖2B的各個子核心221A-221F所示的硬體邏輯的代表。圖5A表示在通用圖形處理器內的執行單元,而圖5B表示可以用於計算加速器內的執行單元。
如於圖5A所示,在一些實施例中,線程執行邏輯500包含著色器處理器502、線程調度器504、指令快取506、可縮放執行單元陣列,其包含多數執行單元508A-508N、取樣器510、共享本地記憶體511、資料快取512、及資料埠514。在一實施例中,可縮放執行單元陣列可以根據工作負載的計算需求,而藉由致能或去能一或更多執行單元(例如,透過508N-1與508N的任一執行單元508A、508B、508C、508D之任一)而動態地縮放。在一實施例中,所包含組件係經由鏈結至各個組件的互連組織加以互連。在一些實施例中,線程執行邏輯500包含一或更多連接至記憶體,例如系統記憶體或快取記憶體,透過指令快取506、資料埠514、取樣器510、及執行單元508A-508N之一或多者。在一些實施例中,各個執行單元(例如,508A)為獨立可程式通用計算單元,其可以執行多數同時硬體線程,同時,平行處理用於各個線程的多數資料元件。在各種實施例中,該陣列的執行單元508A-508N可縮放以包含任何數量的個別執行單元。
在一些實施例中,執行單元508A-508N主要被用以執行著色器程式。著色器處理器502可以處理各種著色器程式並經由線程調度器504調度與著色器程式相關的執行線程。在一實施例中,線程調度器包含邏輯,用以仲裁來自圖形與媒體管線的線程初始請求並實例化所請求的線程於執行單元508A-508N中的一或更多執行單元上。例如,幾何管線可以調度頂點、拼圖、或幾何著色器至用於處理的線程執行邏輯。在一些實施例中,線程調度器504也可以處理執行時間線程,其由執行著色器程式繁衍請求。
在一些實施例中,執行單元508A-508N支援指令集,其包含用於很多標準3D圖形著色器指令的本機支援,使得來自圖形程式館(例如,Direct 3D與OpenGL)的著色器程式係在最小轉譯下被執行。執行單元支援頂點與幾何處理(例如,頂點程式、幾何程式、頂點著色器)、像素處理(例如,像素著色器、區段著色器)與通用處理(例如,計算與媒體著色器)。各個執行單元508A-508N能多派出單指令多資料(SIMD)執行並且面臨較高潛時記憶體存取下,多線程操作也能完成有效執行環境。在各個執行單元內的各個硬體線程具有專用高頻寬暫存器檔案及相關獨立線程狀態。執行被每時鐘多派出至管線,其能作整數、單與雙倍精度浮點運算、SIMD分支能力、邏輯運算、超越運算、及其他雜項運算。於等待來自記憶體或共享功能之一的資料的同時,在執行單元508A-508N內的相依邏輯使得等待線程睡著,直到所要求資料回覆為止。在等待線程睡著同時,硬體資源可以被用於處理其他線程。例如,在與頂點著色器操作相關的延遲期間,執行單元可以執行操作,以用於像素著色器、片段著色器、或另一類型著色器程式,包含不同頂點著色器。各種實施例可以應用以藉由使用單一指令多線程(SIMT)作為使用SIMD的替代或額外於使用SIMD地來使用執行。參考SIMD核心或操作也可以應用至SIMT或結合SIMT以應用至SIMD。
在執行單元508A-508N中的各個執行單元操作於多個陣列的資料元件上。資料元件的數目為“執行大小”,或用於指令的通道數目。執行通道為一邏輯單元,用以執行資料元件存取、遮罩、及指令內的流量控制。通道的數目可能無關於實體算術邏輯單元(ALU)或用於特定圖形處理器的浮點單元(FPU)的數目。在一些實施例中,執行單元508A-508N支援整數與浮點資料類型。
執行單元指令集包含SIMD指令。各種資料元件可以以緊縮資料類型被儲存在暫存器中並且,執行單元將根據元件的資料大小,而處理各種元件。例如,當操作於256位元寬向量時,向量的256位元被儲存在暫存器中,以及執行單元操作向量成為四個分開54位元的緊縮資料元件(四重字元(QW)大小資料元件)、八個分開32位元緊縮資料元件(雙字(DW)大小資料元件)、十六個分開16位元緊縮資料元件(字元(W)大小資料元件)、或三十二個分開8位元資料元件(位元組(B)大小資料元件)。然而,也有可能不同向量寬度與暫存器大小。
在一實施例中,一或更多執行單元可以被組合成熔合執行單元509A-509N,具有為熔合EU所共同的線程控制邏輯(507A-507N)。多數EU可以熔合為EU群組。在熔合EU群組中的各個EU可以被組態以執行分開的SIMD硬體線程。在熔合EU群組中的EU數目可以依據實施例加以變化。另外,各種SIMD寬度可以每EU加以執行,包含但並不限於SIMD8、SIMD16、及SIMD32。各個熔合圖形執行單元509A-509N包含至少兩執行單元。例如,熔合執行單元509A包含第一EU 508A、第二EU 508B、及線程控制邏輯507A,其為第一EU 508A與第二EU 508B所共用。線程控制邏輯507A控制執行於熔合圖形執行單元509A上的線程,允許在熔合執行單元509A-509N內的各個EU使用共同指令指標暫存器執行。
一或更多內部指令快取(例如,506)被包含在線程執行邏輯500內,以快取用於執行單元的線程指令。在一些實施例中,一或更多資料快取(例如,512)係被包含,以在線程執行期間快取線程資料。執行於執行邏輯500上的線程也可以儲存外顯管理資料於共享本地記憶體511中。在一些實施例中,取樣器510被包含以提供用於3D操作的材質取樣以及用於媒體操作的媒體取樣。在一些實施例中,取樣器510包含特殊化材質或媒體取樣功能,以在提供取樣資料給執行單元之前,在取樣處理期間,處理材質或媒體資料。
在執行期間,圖形與媒體管線經由線程繁衍與調度邏輯,將線程啟動請求送給線程執行邏輯500。一旦,一群幾何目標已經被處理並光柵化為像素資料,在著色器處理器502內的像素處理器邏輯(例如,像素著色器邏輯、片段著色器邏輯等)被調用以進一步計算輸出資訊並使得結果被寫至輸出表面(例如,彩色緩衝器、深度緩衝器、模板緩衝器等)。在一些實施例中,像素著色器或片段著色器計算各種頂點屬性的值,這些將被內插於光柵目標上。在一些實施例中,在著色器處理器502內的像素處理器邏輯然後執行一應用程式介面(API)-供應像素或片段著色器程式。為了執行著色器程式,著色器處理器502經由線程調度器504調度線程給執行單元(例如,508A)。在一些實施例中,著色器處理器502使用在取樣器510中的材質取樣邏輯,以存取儲存在記憶體中的材質映圖中的材質資料。對材質資料與輸入幾何資料的算術運算計算了用於各個幾何片段的像素彩色資料,或者,捨去一或更多像素不作進一步處理。
在一些實施例中,資料埠514提供對線程執行邏輯500的記憶體存取機制,以輸出所處理資料給記憶體,在圖形處理器輸出管線上,作進一步處理。在一些實施例中,資料埠514包含或耦接至一或更多快取記憶體(例如,資料快取512),用以經由資料埠,快取資料用於記憶體存取。
在一實施例中,執行邏輯500也包含光線追蹤器505,其可以提供光線追蹤加速功能。光線追蹤器505可以支援光線追蹤指令集,其包含用於光線追蹤的指令/功能。光線追蹤指令集可以類似於或不同於在圖2C中的光線追蹤核心245所支援的光線追蹤指令集。
圖5B示出依據實施例之執行單元508的例示內部細節。圖形執行單元508可以包含指令擷取單元537、通用暫存器檔案陣列(GRF)524、架構暫存器檔案陣列(ARF)526、線程仲裁器522、發送單元530、分支單元532、一組SIMD浮點單元(FPU)534、及在一實施例中,一組專用整數SIMD ALU 535。GRF 524與ARF 526包含該組通用暫存器檔案及與各個同時硬體線程相關的架構暫存器檔案,其可以在圖形執行單元508中作動。在一實施例中,每線程架構狀態被維持在ARF 526中,而在線程執行期間所用的資料被儲存在GRF 524中。包含每線程的指令指標的每一線程的執行狀態可以被保持在ARF 526的特定線程暫存器中。
在一實施例中,圖形執行單元508具有一架構,其係為同時多線程(SMT)與細粒交錯多線程(IMT)的組合。該架構具有模組化架構,其可在設計期間根據同時線程的目標數目與每執行單元的暫存器數目,加以細度諧調,其中執行單元資源被細分於執行多數同時線程的邏輯上。可以為圖形執行單元508所執行的邏輯線程的數目並不限於硬體線程的數目,及多數邏輯線程可以指定給各個硬體線程。
在一實施例中,圖形執行單元508可以共同發出多數指令,其可以各個為不同指令。圖形執行單元線程508的線程仲裁器522可以調度指令至發送單元530、分支單元532、或SIMD FPU 534之一作執行。各個執行線程可以存取在GRF 524內的128通用暫存器,其中各個暫存器可以儲存32位元組,其可被存取為32位元資料元件的SIMD 8-元件向量。在一實施例中,各個執行單元線程存取在GRF 524內的4K 位元組,但實施例並不作此限定,更大或更小的暫存器資源也可以被提供在其他實施例中。在一實施例中,圖形執行單元508被細分為7個硬體線程,其可以獨立地執行計算操作,但每執行單元的線程數目可以依據實施例而加以改變。例如,在一實施例中,可以支援直到16個硬體線程。在一實施例中,其中七個線程可以存取4K位元組,GRF 524可以儲存總數28K位元組。當16線程可以存取4K位元組時,GRF 524可以儲存總數64K位元組。彈性定址模式可以允許暫存器被一起定址,以有效建立較寬暫存器或代表步幅矩形方塊資料結構。
在一實施例中,記憶體操作、取樣器操作、或其他較長潛時系統通訊係被經由為信息傳送發送單元530所執行“發送”指令所調度。在一實施例中,分支指令被調度至專用分支單元532,以促成SIMD發散及最後收斂。
在一實施例中,圖形執行單元508包含一或更多SIMD浮點單元(FPU)534,以執行浮點運算。在一實施例中,FPU 534也支援整數計算。在一實施例中,FPU 534可以SIMD執行多達M數目的32位元浮點(或整數)運算,或SIMD執行多達2M 16位元整數或16位元浮點運算。在一實施例中,至少一FPU提供擴展數學能力,以支援高產出量超越數學函數與雙倍精度54位元浮點。在一些實施例中,也出現一組8位元整數SIMD ALU 535,並可以特別地最佳化以執行與機器學習計算相關的操作。
在一實施例中,圖形執行單元508的多實例陣列可以被實例化於圖形子核心群組中(例如,子切片)。為了縮放性,產品建築師可以選擇每子核心群組的執行單元的準確數目。在一實施例中,執行單元508可以執行指令,通過多數執行通道。在另一實施例中,執行於圖形執行單元508中的每個線程被執行於不同通道上。
圖6示出依據實施例的另一執行單元600。執行單元600可以是計算最佳化的執行單元,例如,可用於如圖3C中的計算引擎磚片340A-340D,但並不限於此。執行單元600的變化例也可以被用於如圖3B中的圖形引擎磚片310A-310D。在一實施例中,執行單元600包含線程控制單元601、線程狀態單元602、指令擷取/預取單元603、及指令解碼單元604。執行單元600額外包含暫存器檔案606,其儲存可以指定給該執行單元內的硬體線程的暫存器。執行單元600額外包含發送單元607及分支單元608。在一實施例中,發送單元607與分支單元608可以類似於圖5B中的圖形執行單元508的發送單元530與分支單元532般地操作。
執行單元600也包含計算單元610,其包含多數不同類型的功能單元。在一實施例中,計算單元610包含ALU單元611,其包含一陣列的算術邏輯單元。ALU單元611可以被組態為執行64位元、32位元、及16位元整數與浮點運算。整數與浮點運算可以同時地執行。計算單元610也可以包含脈動陣列612、及數學單元613。脈動陣列612包含W寬與D深的網路的資料處理單元,其可以被用以脈動方式,執行向量或其他資料平行運算。在一實施例中,脈動陣列612可以被組態以執行矩陣運算,例如矩陣點積運算。在一實施例中,脈動陣列612支援16位元浮點操作,以及,8位元及4位元整數運算。在一實施例中,脈動陣列612可以被組態以加速機器學習操作。在此等實施例中,脈動陣列612可以被組態以支援bfloat 16位元浮點格式。在一實施例中,數學單元613可以被包含,以比ALU單元611有效與低功率方式,執行特定次組的數學運算。數學單元613可以包含數學邏輯的變化例,其可以在由其他實施例所提供的圖形處理引擎的共享功能邏輯(例如,圖4的共享功能邏輯420的數學邏輯422)找到。在一實施例中,數學單元613可以被組態以執行32位元與64位元浮點運算。
線程控制單元601包含邏輯,用以控制在執行單元內的線程的執行。線程控制單元601可以包含線程仲裁邏輯,用以開始、停止、及搶先線程在執行單元600內的執行。線程狀態單元602可以被用以儲存被指定以於執行單元600上執行的線程的線程狀態。當線程被阻擋或閒置時,將線程狀態儲存在執行單元600內完成了這些線程的快速搶先。指令擷取/預取單元603可以由較高階執行邏輯的指令快取(例如,圖5A中之指令快取506)擷取指令。指令擷取/預取單元603也可以根據現正執行線程的分析,發出將載入指令快取的指令的預取請求。指令解碼單元604可以被用以解碼將為計算單元所執行的指令。在一實施例中,指令解碼單元604可以被用作為輔助解碼器,用以將複雜指令解碼為構成微運算。
執行單元600額外包含一暫存器檔案606,其可以為執行於執行單元600上的硬體線程所使用。在暫存器檔案606中的暫存器可以被分割為邏輯,以用以在執行單元600的計算單元610內,執行多數同時線程。可以為圖形執行單元600所執行的邏輯線程數目並不限於硬體線程數目,並且,多數邏輯線程可以被指定給各個硬體線程。暫存器檔案606的大小可以根據所支援硬體線程的數目而在實施例間作改變。在一實施例中,暫存器重命名可以被用以動態分配暫存器給硬體線程。
圖7為依據一些實施例之示出圖形處理器指令格式700的方塊圖。在一或更多實施例中,圖形處理器執行單元支援具有多數格式的指令的指令集。實線方塊示出通常包含在執行單元指令內的組件,而虛線則包含選用或只包含在指令次組內的組件。在一些實施例中,所述與所示的指令格式700為巨集指令,其中它們為被供給至執行單元的指令,相反於,一旦指令被處理時,由指令解碼所造成的微運算。
在一些實施例中,圖形處理器執行單元本機地支援128位元指令格式710的指令。64位元緊縮指令格式730可以根據所選擇指令、指令選項、或運算元數目,為部分指令所使用。本機128位元指令格式710提供對所有指令選項的存取,而部分選項與操作則限於64位元格式730。在64位元格式730中可用的本機指令依實施例而改變。在一些實施例中,指令使用在索引欄713中的一組索引值加以部分緊縮。執行單元硬體根據索引值參考一組緊縮表並使用緊縮表輸出以重建為128位元指令格式710的本機指令。也可以使用其他大小與格式的指令。
對於各個格式,指令運算碼712界定執行單元所將執行的運算。執行單元平行地執行各個指令,通過各個運算元的多數資料元件。例如,回應於加法指令,執行單元對代表材質元件或圖像元件的各個彩色通道,執行同時加法運算。在預設上,執行單元實行各個指令,通過這些運算元的所有資料通道。在一些實施例中,指令控制欄714完成某些執行選項的控制,例如通道選擇(例如,預測)與資料通道順序(例如,拌和)。對於,具有128位元指令格式710的指令,執行大小欄716限制了將被平行執行的資料通道的數目。在一些實施例中,執行大小欄716並不能用於64位元緊縮指令格式730。
一些執行單元指令具有多達三個運算元,包含兩個運算元src0 720與src1 722,以及一個目的地718。在一些實施例中,執行單元支援雙目的地指令,其中目的地之一被隱含。資料調處指令可以具有第三源運算元(例如,SRC2 724),其中指令運算碼712決定源運算元的數目。指令的最後源運算元可以為與指令一起傳送的立即(例如,硬編碼)值。
在一些實施例中,128位元指令格式710包含存取/位址模式欄726,例如,用以指明使用直接暫存器定址模式或間接暫存器定址模式。當使用直接暫存器定址模式時,一或更多運算元的暫存器位址係以位元為單位被直接提供於指令中。
在一些實施例中,128位元指令格式710包含存取/位址模式欄726,其指明用於該指令的位址模式及/或存取模式。在一實施例中,存取模式被用以界定用於該指令的資料存取對準。一些實施例支援包含16位元組對準存取模式與1位元組對準存取模式的存取模式,其中存取模式的位元組對準決定指令運算元的存取對準。例如,當在第一模式時,指令可以使用位元組對準定址,用於源與目的地運算元,以及,當在第二模式時,指令可以使用16位元組對準定址,用於所有源與目的地運算元。
在一實施例中,存取/位址模式欄726的位址模式部決定該指令將使用直接或間接定址。當使用直接暫存器定址模式時,在指令中的位元直接提供一或更多運算元的暫存器位址。當使用間接暫存器定址模式時,一或更多運算元的暫存器位址可以根據在指令中的位址暫存器值或位址立即欄加以計算。
在一些實施例中,指令係根據運算碼712位元欄加以群集,以簡化運算碼解碼740。對於8位元運算碼,位元4、5與6允許執行單元決定運算碼的類型。所示之精準運算碼群組只是一個例子。在一些實施例中,移動與邏輯運算碼群組742包含資料移動與邏輯指令(例如,移動(mov)、比較(cmp))。在一些實施例中,移動與邏輯群組742共用五個最高效位元(MSB),其中,移動(mov)指令係呈現0000xxxxb的格式,及邏輯指令則呈現0001xxxxb的格式。流程控制指令群組744(例如,呼叫、跳躍(jmp))包含呈現0010xxxxb(例如,0x20)格式的指令。雜項指令群組746包含指令的混合,包含呈現0011xxxxb(例如,0x30)格式的同步指令(例如,等待、發送)。平行數學指令群組748包含呈0100xxxxb(例如,0x40)格式的組件狀算術指令(例如,加、乘(mul))。平行數學群組748對於所有資料通道執行平行算術運算。向量數學群組750包含呈現0101xxxxb(例如,0x50)格式的算術指令(例如,dp4)。向量數學群組執行算術,例如,對向量運算元的點積計算。在一實施例中,所示運算碼解碼740可以被用以決定執行單元的哪部分將被用以執行解碼指令。例如,一些實施例也可以被指定為脈動指令,其將為一脈動陣列所執行。例如光線追蹤指令(未示出)的其他指令可以被配送至光線追蹤核心或執行邏輯的切片或分區內的光線追蹤邏輯。
圖形管線
圖8為圖形處理器800的另一實施例的方塊圖。圖8中具有與本案其他圖中相同元件符號(或名稱)的元件可以以在此所述的類似方式操作或動作,但也並不限於此。
在一些實施例中,圖形處理器800包含幾何管線820、媒體管線830、顯示引擎840、線程執行邏輯850、及描繪輸出管線870。在一些實施例中,圖形處理器800為在多核心處理系統內的圖形處理器,該多核心處理系統包含一或更多通用處理核心。圖形處理器係為暫存器寫入至一或更多控制暫存器(未示出)或經由環互連802發送至圖形處理器800的命令所控制。在一些實施例中,環互連802將圖形處理器800耦接至其他處理組件,例如,其他圖形處理器或通用處理器。來自環互連802的命令係為命令串流器803所解譯,串流器供給指令給幾何管線820或媒體管線830的個別組件。
在一些實施例中,命令串流器803指示頂點擷取器805的操作,由記憶體讀取頂點資料並執行由命令串流器803所提供的頂點處理命令。在一些實施例中,頂點擷取器805提供頂點資料給頂點著色器807,其執行對每一頂點的座標空間轉換與照明操作。在一些實施例中,頂點擷取器805與頂點著色器807藉由經由線程調度器831而調度執行線程給執行單元852A-852B,而執行頂點處理指令。
在一些實施例中,執行單元852A-852B為具有用以執行圖形與媒體操作的指令集的一陣列向量處理器。在一些實施例中,執行單元852A-852B具有特定於各個陣列或在陣列間共享的附著L1快取851。快取可以被組態為資料快取、指令快取、或單一快取,其係被分割,以在不同分區包含資料與指令。
在一些實施例中,幾何管線820包含拼圖組件,用以執行3D目標的硬體加速拼圖。在一些實施例中,可程式外殼著色器811組態拼圖操作。可程式域著色器817提供拼圖輸出的後端評估。拼圖器813操作於外殼著色器811的方向並包含特殊目的邏輯,用以根據一粗幾何模型產生一組詳細幾何目標,其係被提供作為至幾何管線820的輸入。在一些實施例中,如果未使用拼圖,則可以跳過拼圖組件(例如,外殼著色器811、拼圖器813、及域著色器817)。
在一些實施例中,完整幾何目標可以為幾何著色器819經由一或多數被調度至執行單元852A-852B的線程所處理,或者,可以直接進行至裁剪器829。在一些實施例中,幾何著色器操作於整個幾何目標上,而不是如同先前階段的圖形管線中的頂點或頂點的貼片上。如果拼圖被去能,則幾何著色器819自頂點著色器807接收輸入。在一些實施例中,如果拼圖單元被去能,則幾何著色器819可為幾何著色程式所程式化,以執行幾何拼圖。
在光柵化之前,裁剪器829處理頂點資料。裁剪器829可以為固定功能裁剪器或者具有裁剪與幾何著色器功能的可程式裁剪器。在一些實施例中,描繪輸出管線870中的光柵器與深度測試組件873調度像素著色器,以將幾何目標轉換為每像素表示法。在一些實施例中,像素著色器邏輯被包含於線程執行邏輯850中。在一些實施例中,應用程式可以跳過光柵器與深度測試組件873,並經由串流出單元823,存取未光柵化頂點資料。
圖形處理器800具有互連匯流排、互連組織、或一些其他互連機制,其允許資料與訊息傳送於該處理器的主要組件之間。在一些實施例中,執行單元852A-852B與相關邏輯單元(例如,L1快取851、取樣器854、材質快取858等)經由資料埠856互連,以執行記憶體存取並與該處理器的描繪輸出管線進行通訊。在一些實施例中,取樣器854、快取851、858與執行單元852A-852B各個具有分開的記憶體存取路徑。在一實施例中,材質快取858也可以被組態為取樣器快取。
在一些實施例中,描繪輸出管線870包含光柵器與深度檢測組件873,其將頂點為主目標轉換為相關像素為主表示法。在一些實施例中,光柵器邏輯包含窗/罩單元,以執行固定功能三角與線光柵化。在一些實施例中,也有相關描繪快取878與深度快取879可用。像素操作組件877對資料執行像素為主操作,雖然在一些實例中,有關於2D操作(例如,位元方塊影像隨著彎曲轉換)的像素操作係為2D引擎841所執行,或者,使用重疊顯示平面,在顯示時間以顯示控制器843加以替換。在一些實施例中,共享L3快取875為所有圖形組件所用,在不使用主系統記憶體下,允許共享資料。
在一些實施例中,圖形處理器媒體管線830包含媒體引擎837與視訊前端834。在一些實施例中,視訊前端834自命令串流器803接收管線命令。在一些實施例中,媒體管線830包含分開命令串流器。在一些實施例中,視訊前端834在將媒體命令送給媒體引擎837之前,先處理媒體命令。在一些實施例中,媒體引擎837包含線程繁衍功能,用以繁衍線程,用以經由線程調度器831調度至線程執行邏輯850。
在一些實施例中,圖形處理器800包含顯示引擎840。在一些實施例中,顯示引擎840在處理器800外部並經由環狀互連802,或一些其他互連匯流排或組織,耦接至圖形處理器。在一些實施例中,顯示引擎840包含2D引擎841與顯示控制器843。在一些實施例中,顯示引擎840包含特殊目的邏輯,其能無關於3D管線操作。在一些實施例中,顯示控制器843耦接顯示裝置(未示出),其可以是系統整合顯示裝置,如同在膝上型電腦中,或經由顯示裝置連接器附接的外部顯示裝置。
在一些實施例中,幾何管線820與媒體管線830可被組態以根據多數圖形與媒體程式介面執行操作,並且,並不特定於任何一種應用程式介面(API)。在一些實施例中,用於圖形處理器的驅動器軟體轉譯特定於一特定圖形或媒體程式庫的API呼叫為可以為圖形處理器所處理的命令。在一些實施例中,支援可以提供用於開放圖形程式庫(OpenGL)、開放計算語言(OpenCL)、及/或Vulkan圖形與計算API,所有這些均來自Khronos集團。在一些實施例中,支援可以被提供用於來自微軟公司的Direct3D程式庫。在一些實施例中,也可以支援這些程式庫的組合。支援也可以提供用於開放來源電腦版本程式庫(OpenCV)。如果由未來API的管線到圖形處理器的管線的映圖可以作出,則也可以支援具有相容3D管線的未來API。
圖形管線程式化
圖9A為顯示依據一些實施例之圖形處理器命令格式900的方塊圖。圖9B為顯示依據一實施例的圖形處理器命令順序910。圖9A中的實線方塊表示大致包含在圖形命令中的組件,而虛線則包含可選用或者只包含在圖形命令次組中的組件。圖9A的例示圖形處理器命令格式900包含資料欄,用以識別客戶902、命令運算碼(運算碼)904、及用於命令的資料906。子運算碼905與命令大小908也包含在一些命令中。
在一些實施例中,客戶902指出圖形裝置中處理該命令資料的客戶單元。在一些實施例中,圖形處理器命令分析器檢測各個命令的客戶欄,以調整命令的進一步處理並配送該命令資料給適當客戶單元。在一些實施例中,圖形處理器客戶單元包含記憶體介面單元、描繪器單元、2D單元、3D單元、及媒體單元。各個客戶單元具有處理該等命令的對應處理管線。一旦該命令為該客戶單元所接收,則該客戶端單元讀取運算碼904,並且,如果有的話,則子運算碼905決定要執行的運算。客戶單元使用在資料欄906中的資訊,執行該命令。對於一些命令,一明確命令大小908係被期待以指明該命令的大小。在一些實施例中,該命令分析器根據該命令運算碼,自動決定至少部分該等命令的大小。在一些實施例中,命令係經由雙字的倍數來對準。也可以使用其他命令格式。
圖9B中的流程圖顯示一例示圖形處理器命令順序910。在一些實施例中,特徵化圖形處理器的實施例的資料處理系統的軟體或韌體使用一版本所示的命令順序,以設立、執行、及終止一組圖形操作。為了例示目的,一取樣命令順序係被顯示與描述,實施例並不限定於這些特定命令或者此命令順序。再者,命令可以在命令順序中,被發出成為批次的命令,使得圖形處理器將至少部分同時處理命令的順序。
在一些實施例中,圖形處理器命令順序910可以以管線沖洗命令912開始,以使得任何作動圖形管線完成該管線的現行未決的命令。在一些實施例,3D管線922與媒體管線924並未同時操作。執行管線沖洗係用以使得作動的圖形管線完成任何未決命令。回應於管線沖洗,用於圖形處理器的命令分析器將暫停命令處理,直到作動繪圖引擎完成未決操作以及相關讀取快取被失效為止。選用地,在描繪快取中任何被標注為“髒”的資料可以被沖洗至記憶體。在一些實施例中,管線沖洗命令912可以被用於管線同步化或者將圖形處理器被置放入低功率狀態之前被使用。
在一些實施例中,當命令順序需要圖形處理器明確地切換於管線之間時,可以使用管線選擇命令913。在一些實施例中,管線選擇命令913在發出管線命令之前,在執行上下文內只需一次,除非該上下文係用以發出用於兩管線的命令。在一些實施例中,只在管線經由管線選擇命令913切換之前,需要管線沖洗命令912。
在一些實施例中,管線控制命令914組態圖形管線用於操作,並被用以規劃3D管線922與媒體管線924。在一些實施例中,管線控制命令914組態用於作動管線的管線狀態。在一實施例中,管線控制命令914係被用於管線同步化並用以在處理一批次命令之前,將資料由作動管線的一或更多快取記憶體清除。
在一些實施例中,回覆緩衝器狀態命令916係被用以組態一組回覆緩衝器,以供個別管線寫入資料。一些管線操作需要將一或更多分配、選擇、或組態回覆緩衝器,以在處理期間,寫入操作將中間資料寫入其中。在一些實施例中,圖形處理器也使用一或更多回覆緩衝器,以儲存輸出資料及執行跨線程通訊。在一些實施例中,回覆緩衝器狀態916包含選擇回覆緩衝器的大小與數目,以用於一組管線操作。
在命令順序中的剩餘命令根據操作的作動管線而有所不同。根據管線決定920,命令順序係被調整用於以3D管線狀態930開始的3D管線922,或者,以媒體管線狀態940開始的媒體管線924。
組態3D管線狀態930的命令包含用於頂點緩衝器狀態、頂點元件狀態、固定色彩狀態、深度緩衝器狀態、及用以在3D基元命令處理前,組態的其他狀態變數的3D狀態設定命令。這些命令的值係至少部分根據該使用中的特定3D API加以決定。在一些實施例中,3D管線狀態930命令也能選擇性地去能或跳過某些管線元件,如果這些元件將不被使用的話。
在一些實施例中,3D基元932命令係被用以提出予以為3D管線所處理的3D基元。將經由3D基元932命令傳送給圖形處理器的命令與相關參數係被轉送給在圖形管線中的頂點擷取功能。頂點擷取功能使用3D基元932命令資料,以產生頂點資料結構。頂點資料結構係被儲存於一或更多回覆緩衝器。在一些實施例中,3D基元932命令被使用以經由頂點著色器對3D基元執行頂點操作。為了處理頂點著色器,3D管線922調度著色器執行線程給圖形處理器執行單元。
在一些實施例中,3D管線922經由執行934命令或事件所觸發。在一些實施例中,暫存器寫入觸發命令執行。在一些實施例中,執行係經由在命令順序中的“執行”或“踢”命令加以觸發。在一實施例中,命令執行係使用管線同步化命令,以沖洗命令順序透過圖形管線加以觸發。3D管線將執行用於3D基元的幾何處理。一旦完成操作,則所得幾何目標被光柵化及像素引擎將所得像素上色。控制像素著色與像素後端操作的其他命令也可以包含以用於這些操作。
在一些實施例中,當執行媒體操作時,圖形處理器命令順序910隨著媒體管線924路徑。通常,用於媒體管線924的特殊用途與規劃方式取決於將要執行的媒體或計算操作。在媒體解碼時,特殊媒體解碼操作可以卸載至媒體管線。在一些實施例中,媒體管線也可以被跳過並且媒體解碼可以使用一或更多通用處理核心所提供的整個或部分資源加以執行。在一實施例中,媒體管線也包含用於通用圖形處理器單元(GPGPU)操作的元件,其中,圖形處理器係被用以使用計算著色器程式執行SIMD向量操作,計算著色器程式並未明確相關於圖形基元的描繪。
在一些實施例中,媒體管線924被以類似於3D管線922的方式組態。一組用以組態媒體管線狀態940的命令在媒體物件命令942之前被調度或置入命令佇列中。在一些實施例中,用於媒體管線狀態940的命令包含用以組態媒體管線元件的資料,其將被用以處理媒體物件。此包含用以組態在該媒體管線內的視訊解碼與視訊編碼邏輯的資料,例如,編碼或解碼格式。在一些實施例中,用於媒體管線狀態940的命令也支援使用一或更多指標,用以“迂迴”狀態元件,其包含一批次狀態設定。
在一些實施例中,媒體物件命令942供給指標至媒體物件,以供媒體管線所處理。媒體物件包含含有將處理的視訊資料的記憶體緩衝器。在一些實施例中,所有媒體管線狀態必須在發出媒體物件命令942前有效。一旦管線狀態被組態或者媒體物件命令942被佇列,則媒體管線924經由執行命令944或等效執行事件(例如,暫存器寫)所觸發。來自媒體管線924的輸出然後可以被3D管線922或媒體管線924所提供的操作作後處理。在一些實施例中,GPGPU操作被以類似於媒體操作的方式組態與執行。
圖形軟體架構
圖10示出依據一些實施例之資料處理系統1000的例示圖形軟體架構。在一些實施例中,軟體架構包含3D圖形應用1010、作業系統1020、及至少一處理器1030。在一些實施例中,處理器1030包含圖形處理器1032及一或更多通用處理器核心1034。圖形應用1010與作業系統1020各個執行於資料處理系統的系統記憶體1050中。
在一些實施例中,3D圖形應用1010包含一或更多著色器程式,包含著色器指令1012。著色器語言指令可以為例如Direct3D的高階著色器語言(HLSL)、OpenGL著色器語言(GLSL)等等的高階著色器語言。應用也包含以機器語言表示的可執行指令1014,其係可適用以為通用處理器核心1034所執行。應用也包含由頂點資料所界定的圖形目標1016。
在一些實施例中,作業系統1020為來自微軟公司的微軟®視窗®作業系統、專用UNIX狀作業系統、或使用Linux核心的變體之開放來源UNIX狀作業系統。作業系統1020可以支援圖形API 1022,例如,Direct3D API、OpenGL API,或Vulkan API。當使用Direct3D API時,作業系統1020使用前端著色器編譯器1024,以編譯任何以HLSL表示的著色器指令1012成為較低階著色器語言。編譯可以是及時(JIT)編譯或應用可以執行著色器預編譯。在一些實施例中,在編譯3D圖形應用1010時,高階著色器被編譯成低階著色器。在一些實施例中,著色器指令1012係被提供成為中間格式,例如,為Vulkan API所使用的標準可攜式中間表示(SPIR)的版本。
在一些實施例中,使用者模式圖形驅動器1026包含後端著色器編譯器xxxx,以將著色器指令1012轉換成硬體特定表示。當使用OpenGL API時,以GLSL高階語言表示的著色器指令1012係被傳送給使用者模式圖形驅動器1026,用以編譯。在一些實施例中,使用者模式圖形驅動器1026使用作業系統核心模式功能1028,與核心模式圖形驅動器1029通訊。在一些實施例中,核心模式圖形驅動器1029與圖形處理器1032通訊,以調度命令與指令。
IP核心實施法
至少一實施例的一或更多態樣可以為儲存在機器可讀媒體上的代表碼所實施,該碼表示及/或界定在積體電路,例如處理器內的邏輯。例如,機器可讀媒體可以包含指令,其表示在處理器內的各種邏輯。當為機器所讀取時,指令可以使得機器製造該邏輯,以執行於此所述的技術。稱為“IP核心”的此等代表係為用於積體電路的可重複使用邏輯單元,其係可以被儲存在有形機器可讀媒體上作為硬體模型,其描述了積體電路的結構。硬體模型可以被供給至各種客戶或製造設施,其將硬體模型載於製造機器上,以製造該積體電路。積體電路可以被製造使得電路配合於此所述的任一實施例執行操作。
圖11A為方塊圖,示出可以用以依據實施例執行操作以製造積體電路的IP核心開發系統1100。IP核心開發系統1100可以被用以產生模型化、可重複使用設計,其可以併入較大設計或被用以建構整個積體電路(例如,SoC積體電路)。設計設施1130可以產生以高階程式化語言(例如,C/C++)表示的IP核心設計的軟體模擬1110。軟體模擬1110可以使用模擬模型1112,來被用來設計、測試及驗證IP核心的行為。模擬模型1112可以包含功能、行為及/或計時模擬。暫存器轉移位準(RTL)設計1115可以然後由模擬模型1112建立或合成。RTL設計1115為積體電路的行為摘要,其模型化數位信號的流動於硬體暫存器之間,包含使用模型數位信號執行的相關邏輯。除了RTL設計1115外,也可以建立、設計或合成在邏輯位準或電晶體層次的較低階設計。因此,初始設計與模擬的特定細節可能變動。
RTL設計1115或等效件可以被設計設施所進一步合成為硬體模型1120,其可以以硬體描述語言(HDL),或一些實體設計資料的其他表示法表示。HDL可以進一步被模擬或測試以驗證IP核心設計。該IP核心設計可以被儲存,以用以輸送至使用非揮發記憶體1140(例如,硬碟、快閃記憶體、或任何非揮發儲存媒體)的第三方製造設施1165。或者,IP核心設計也可以透過有線連接1150或無線連接1160被傳送(例如,經由網際網路)。製造設施1165然後可以製造積體電路,其係至少部分根據該IP核心設計。所製造積體電路可以被組態以依據於此所述之至少一實施例,執行操作。
圖11B示出依據於此所述一些實施例的積體電路封裝組件1170的剖面視圖。積體電路封裝組件1170示出於此所述之一或更多處理器或加速器裝置的實施法。封裝組件1170包含連接至基板1180的多數單元的硬體邏輯1172、1174。邏輯1172、1174可以至少部分實施於可組態邏輯或固定功能邏輯硬體中,並可以包含於此所述之一或更多部分的任一處理器核心、圖形處理器、或其他加速器裝置。各個單元邏輯1172、1174可以被實施在半導體晶粒內並經由互連結構1173耦接至基板1180。互連結構1173可以被組態以將電氣信號發送於邏輯1172、1174與基板1180之間,並可以包含例如但並不限於凸塊或柱的互連。在一些實施例中,互連結構1173可以被組態以配送例如,如與操作邏輯1172、1174有關的輸入/輸出(I/O)信號及/或電源或接地信號的電氣信號。在一些實施例中,基板1180為環氧樹脂為主的積層板。在其他實施例中,基板1180可以包含其他適當類型的基板。封裝組件1170可以經由封裝互連1183被連接至其他電氣裝置。封裝互連1183可以連接至基板1180的表面,以配送電氣信號至其他電氣裝置,例如,主機板、其他晶片組、或多晶片模組。
在一些實施例中,邏輯1172、1174的單元被電耦接至橋接器1182,其被組態以配送電氣信號於邏輯1172、1174之間。橋接器1182可以為密集互連結構,其提供用於電氣信號的路由。橋接器1182可以包含由玻璃或適當半導體材料構成的橋接器基板。電氣路由特性可以被形成在橋接器基板上,以提供在邏輯1172、1174間的晶片至晶片連接。
雖然示出兩單元的邏輯1172、1174與橋接器1182,但於此所述之實施例可以在一或更多晶粒上,包含更多或更少的邏輯單元。所述一或更多晶粒可以為零或更多橋接器所連接,因為當邏輯被包含在單一晶粒上時,橋接器1182可以被排除。或者,多數晶粒或單元邏輯可以被一或更多橋接器所連接。另外,多數邏輯單元、晶粒、與橋接器可以以包含三維組態的其他可能組態連接在一起。
圖11C示出封裝組件1190,其包含多數單元的硬體邏輯晶片組,連接至一基板1180(例如,基礎晶粒)。於此所述之圖形處理單元、平行處理器、及/或計算加速器可以由分開製造的各種小矽晶片構成。在此上下文中,小晶片係為至少部分封裝的積體電路,其包含可區分單元的邏輯,其可以被組合其他小晶片以形成較大封裝。具有不同IP核心邏輯的各種小晶片組可以被組裝成單一裝置。另外,小晶片可以使用主動中介層技術,積集為基礎晶粒或基礎小晶片。於此所述之概念完成在該GPU內的不同形式的IP間的互連與通訊。IP核心可以使用不同製程技術製造並在製造期間構成,以避免集中多數IP至相同製程,特別是以幾個偏好IP集中在大的SoC上時的複雜性。促成了使用多數製程技術改良了上市的時間並能提供符合成本效益的方式,建立多數產品SKU。另外,未聚集的IP更容易經得起獨立電力加閘,在給定工作負載上的未使用組件可以被斷電,以降低整體電力消耗。
硬體邏輯小晶片可以包含特殊目的硬體邏輯小晶片1172、邏輯或I/O小晶片1174、及/或記憶體小晶片1175。硬體邏輯小晶片1172與邏輯或I/O小晶片1174可以至少部分以可組態邏輯或固定功能邏輯硬體加以實施並可以包含處理器核心、圖形處理器、平行處理器、或於此所述之其他加速器裝置之任一的一或更多部分。記憶體小晶片1175可以為DRAM(例如,GDDR、HBM)記憶體或快取(SRAM)記憶體。
各個小晶片可以被製造成為分開半導體晶粒並經由互連結構1173耦接至基板1180。互連結構1173可以被組態以配送電氣信號於各種小晶片與在基板1180內的邏輯之間。互連結構1173可以包含例如但並不限於凸塊或柱的互連。在一些實施例中,互連結構1173可以被組態成配送電氣信號,例如,與邏輯、輸入/輸出(I/O)與記憶體小晶片操作相關的I/O信號及/或電源或接地信號。
在一些實施例中,基板1180為環氧樹脂為主積層板。在其他實施例中,基板1180可以包含其他適當類型的基板。封裝組件1190可以經由封裝互連1183連接至其他電氣裝置。封裝互連1183可以耦接至基板1180的表面,以配送電氣信號至其他電氣裝置,例如,主機板、其他晶片組、或多晶片模組。
在一些實施例中,邏輯或I/O小晶片1174與記憶體小晶片1175可以經由橋接器1187電耦接,其被組態以配送電氣信號於邏輯或I/O小晶片1174與記憶體小晶片1175之間。橋接器1187可以為密集互連結構,其提供用於電氣信號的路由。橋接器1187可以包含由玻璃或適當半導體材料構成的橋接器基板。電氣配送特性可以形成在橋接器基板上,以提供在邏輯或I/O小晶片1174與記憶體小晶片1175間的晶片到晶片連接。橋接器1187也可以被稱為矽橋接器或互連橋接器。例如,在一些實施例中,橋接器1187為嵌式多晶粒互連橋接器(EMIB)。在一些實施例中,橋接器1187可以簡單地由一小晶片至另一小晶片的直接連接。
基板1180可以包含用於I/O 1191、快取記憶體1192、及其他硬體邏輯1193的硬體組件。組織1185可以被嵌於基板1180中,以完成在基板1180內的各種邏輯小晶片與邏輯1191、1193間的通訊。在一實施例中,I/O 1191、組織1185、快取、橋接器、及其他硬體邏輯1193可以被積集入基礎晶粒,其係分層在基板1180的頂部。
在各種實施例中,封裝組合件1190可以包含以組織1185或一或更多橋接器1187互連的較少或較多數量的組件與小晶片。在封裝組合件1190內的小晶片可以被排列成3D或2.5D配置。通常,橋接器結構1187可以被用以促成例如在邏輯或I/O小晶片與記憶體小晶片間的點對點互連。組織1185可以被用以互連各種邏輯及/或I/O小晶片(例如,小晶片1172、1174、1191、1193)與其他邏輯及/或I/O小晶片。在一實施例中,在基板內的快取記憶體1192可以作動為用於封裝組合件1190的總體快取、分散總體快取的一部分、或用於組織1185的專用快取。
圖11D示出依據實施例之包含可互換小晶片1195的封裝組合件1194。可互換小晶片1195可以被組裝為在一或更多基礎小晶片1196、1198上的標準插槽中。基礎小晶片1196、1198可以經由橋接器互連1197耦接,其可以是類似於在此所述之其他橋接器互連,並可以例如是EMIB。記憶體小晶片也可以經由橋接器互連被連接至邏輯或I/O小晶片。I/O與邏輯小晶片可以經由互連組織加以通訊。基礎小晶片可以各個支援用於邏輯或I/O或記憶體/快取之一的標準格式的一或更多插槽。
在一實施例中,SRAM與電源輸送電路可以製造於一或更多基礎小晶片1196、1198中,其可以使用相關於可互換小晶片1195的不同製程技術加以製造,可互換小晶片1195被堆疊在基礎小晶片的上方。例如,基礎小晶片1196、1198可以使用較大製程技術製造,而可互換小晶片可以使用較小製程技術製造。一或更多可互換小晶片1195可以是記憶體(例如,DRAM)小晶片。不同記憶體密度可以根據使用該封裝組合件1194的產品的目標功率及/或效能加以選擇用於封裝組合件1194。另外,具有不同數目類型功能單元的邏輯小晶片可以根據產品的目標功率及/或效能在組裝時加以選擇。另外,包含不同類型IP邏輯核心的小晶片可以被插入可互換小晶片插槽中,以促成可以混合與匹配不同技術IP區塊的混合處理器設計。
例示系統晶片積體電路
圖12-13示出依據於此所述各種實施例,使用一或更多IP核心製造的例示積體電路與相關圖形處理器。除了所示之外,也可以包含其他邏輯和電路,包含額外圖形處理器/核心、週邊界面控制器、或通用處理器核心。
圖12為方塊圖,示出依據實施例使用一或更多IP核心製造的例示系統晶片積體電路1200。例示積體電路1200包含一或更多應用處理器1205(例如,CPU)、至少一圖形處理器1210、並可以額外包含影像處理器1215及/或視訊處理器1220,其任一均可以是來自相同或多數不同設計設施的模組化IP核心。積體電路1200包含週邊或匯流排邏輯,包含USB控制器1225、UART控制器1230、SPI/SDIO控制器1235、及I2S/I2C控制器1240。另外,積體電路可以包含耦接至高解析度多媒體介面(HDMI)控制器1250及行動工業處理器介面(MIPI)顯示介面1255之一或多者的顯示裝置1245。儲存器可以為快閃記憶體子系統1260所提供,其包含有快閃記憶體及快閃記憶體控制器。記憶體介面可以經由用以存取SDRAM或SRAM記憶體裝置的記憶體控制器1265所提供。部分積體電路額外包含嵌式安全引擎1270。
圖13-14為方塊圖,示出依於此所述之實施例的用於SoC內的例示圖形處理器。圖13示出依據實施例之使用一或更多IP核心製造的系統晶片積體電路的例示圖形處理器1310。圖13B示出依據實施例之使用一或更多IP核心製造的系統晶片積體電路的另一例示圖形處理器1340。圖13的圖形處理器1310為低功率圖形處理器核心。圖13B的圖形處理器1340為較高效圖形處理器核心的例子。各個圖形處理器1310、1340可以為圖12的圖形處理器1210的變化。
如於圖13所示,圖形處理器1310包含頂點處理器1305與一或更多片段處理器1315A-1315N(例如,1315A、1315B、1315C、1315D、通過1315N-1、及1315N)。經由分開邏輯,圖形處理器1310可以執行不同著色器程式,使得頂點處理器1305最佳化以執行用於頂點著色器程式的操作,而一或更多片段處理器1315A-1315N執行用於片段或像素著色器程式的片段(例如,像素)著色操作。頂點處理器1305執行3D圖形管線的頂點處理級並產生基元與頂點資料。片段處理器1315A-1315N使用為頂點處理器1305所產生的基元與頂點資料,以產生被顯示於顯示裝置上的框緩衝器。在一實施例中,片段處理器1315A-1315N被最佳化以執行被提供用於OpenGL API的片段著色器程式,其可以被用以執行如同像素著色器程式的類似操作,如同所提供用於Direct 3D API。
圖形處理器1310另外包含一或更多記憶體管理單元(MMU)1320A-1320B、快取1325A-1325B、及電路互連1330A-1330B。一或更多MMU 1320A-1320B提供用於圖形處理器1310的虛擬至實體位址映圖,包含用於頂點處理器1305及/或片段處理器1315A-1315N,這些可以除了參考儲存於一或更多快取1325A-1325B中的頂點或影像/材質資料外,也參考儲存於記憶體中的頂點或影像/材質資料。在一實施例中,所述一或更多MMU 1320A-1320B可以與在該系統內的其他MMU同步,這些包含與圖12的應用處理器1205、影像處理器1215、及/或視訊處理器1220之一或多者相關的一或更多MMU,使得各個處理器1205-1220可以參與共享或統一虛擬記憶體系統。依據實施例,該一或更多電路互連1330A-1330B經由SoC的內部匯流排或直接連接促使圖形處理器1310與SoC內的其他IP核心作成介面。
如於圖14所示,圖形處理器1340包含圖13A的圖形處理器1310一或更多MMU 1320A-1320B、快取1325A-1325B、及電路互連1330A-1330B。圖形處理器1340包含一或更多著色器核心1355A-1355N(例如,1455A、1355B、1355C、1355D、1355E、1355F、通過1355N-1、與1355N),這提供了統一著色器核心架構,其中單一核心或類型或核心可以執行所有類型的可程式著色器核心,包含著色器程式碼,以實行頂點著色器、片段著色器、及/或計算著色器。所呈現的著色器核心的準確數目可以在實施例與實施法間而有所不同。另外,圖形處理器1340包含核心間工作管理器1345,其作動為線程調度器,以調度執行線程至一或更多著色器核心1355A-1355N與磚片單元1358,以加速用於磚片為主描繪的磚片操作,其中用於場景的描繪操作係於影像空間中被細分,例如,以利用在場景內的本地空間一致性或者最佳化內部快取的使用。
光線追蹤與機器學習
如前所述,光線追蹤為圖形處理技術,其中光傳遞係透過實體為主描繪法加以模擬。在光線追蹤中的主要操作之一為處理可見性查詢,其需要在包圍體階層(BVH)中的節點的遍歷與交集測試。
光線-與路徑-追蹤為主的技術藉由追蹤光線與路徑通過每個像素,並使用隨機取樣,以計算前進效應,例如,陰影、光澤度、間接照明等,來計算影像。只使用幾個取樣是很快,但產生多雜訊影像,而使用很多取樣,產生高品質影像,但成本上不可行。
機器學習包含任何電路、程式嗎、或其組合,其能逐漸地改良特定工作的效能或者完成漸進式更準確預測或決定。一些機器學習引擎可以執行這些工作或完成這些預測/決定,而不被外顯地規劃以執行這些工作或完成這些預測/決定。存在有各種機器學習技術,包含(但並不限於)監督或半監督學習、無監督學習、及加強學習。
在過去幾年中,用於即時使用光線-/路徑-追蹤的突破式解決方案來到了“去雜訊”的形式-使用影像處理技術的過程,以由雜訊多、低取樣數的輸入,產生高品質、濾波/去雜訊的影像。最有效去雜訊技術依賴機器學習技術,其中,機器學習引擎學習雜訊多影像看起來為何,是否它已經以更多取樣計算。在一特定實施法中,機器學習係為卷積類神經網路(CNN)所執行;然而,本發明的基本原理並不限於CNN實施法。在此一實施法中,訓練資料係以低取樣數輸入及地面真相加以產生。CNN被訓練以從在該像素旁的雜訊多像素輸入的附近,預測收斂像素。
雖然不完美,但此AI為主去雜訊技術已經證明出奇地有效。然而,該警訊為需要有良好訓練資料,否則該網路可能預測出錯誤結果。例如,如果動畫工作室在過去電影中以陸地上的場景來訓練去雜訊CNN,然後,想要使用被訓練CNN來由在水上的新的電影內景去雜訊框,則去雜訊操作將以次佳方式執行。
針對此問題,學習資料可以於描繪期間動態收集,及例如,CNN的機器學習引擎可以根據其所正執行的資料而加以連續訓練,因此,可針對進行中的工作,連續改良該機器學習引擎。因此,訓練階段可以在執行時間之前仍被實行,並且,持續在執行時間如所需地調整機器學習權重。藉此,為該訓練所需的計算參考資料的高成本可以藉由限制每框或每N個框,學習資料的產生在該影像的子區而避免。尤其,框的雜訊多輸入係被產生,用以以現行網路去雜訊全框。另外,如下所述,一小區域的參考像素被產生並使用以連續訓練。
雖然在此描述CNN實施法,但任何形式之機器學習引擎均可以使用,包含但並不限於系統,其執行監督學習(例如,建立一組資料的數學模型,其包含有輸入與想要的輸出)、無監督學習(例如,其估算某些類型結構的輸入資料)、及/或監督與無監督學習的組合。
現行去雜訊實施法操作於訓練階段與執行時間階段。在訓練階段期間,網路拓樸被界定,其接收具有各種每像素資料通道的一區域的N×N像素,並產生最終像素顏色,資料通道係例如像素顏色、深度、法線、法線偏移、基元ID及反照率。一組“代表”訓練資料係使用一框價值的低取樣數輸入並參考以很高取樣數計算得到“想要”像素顏色加以產生。網路被訓練朝向這些輸入,產生用於該網路的一組“理想”權重。在這些實施法中,參考資料係被用以訓練網路的權重,以將網路的輸出最接近地匹配至想要的結果。
在執行時間,給定預計算理想網路權重被載入及網路被初始化。對於各個框,產生去雜訊輸入(即,與用作訓練的相同)的低取樣數影像。對於各個像素,給定相鄰的像素的輸入運行通過該網路,以預測該“去雜訊”像素顏色,產生去雜訊框。
圖15示出初始訓練實施法。機器學習引擎1500(例如,CNN)接收一N×N像素區域作為高取樣數影像資料1702,具有各種每像素資料通道,例如,像素顏色、深度、法線、法線偏移、基元ID、及反照率並產生最終像素顏色。代表訓練資料係使用一框的低取樣數輸入1501加以產生。網路被朝向這些輸入訓練,產生一組“理想”權重1505,其隨後被機器學習引擎1500所使用以在執行時間去雜訊低取樣數影像。
為了改良以上技術,增加了每框或次組框(例如,每N框,其中N=2、3、4、10、25等)產生新訓練資料的去雜訊階段。更明確地說,如於圖16所示,在各個框中在此被稱為“新參考區域”1602的一或更多區域被選擇,這些區域係以高取樣數被描繪進入分開高取樣數緩衝器1604。低取樣數緩衝器1603儲存低取樣數輸入框1601(包含對應於新參考區域1602的低取樣區域1604)。
新參考區域1602的位置可以被隨機選擇。或者,新參考區域1602的位置可以以針對新框的預定方式(例如,使用在框間之區域的預定移動、限定在框的中心的指定區域等)加以調整。
不管新參考區域如何選擇,其可以為機器學習引擎1600所使用以持續精煉與更新用於去雜訊的訓練權重1605。更明確地說,描繪出來自各個新參考區域1602的參考像素顏色以及來自對應低取樣數區域1607的雜訊多參考像素輸入。補充訓練然後使用高取樣數參考區域1602與對應低取樣數區域1607,執行於機器學習引擎1600上。相對於初始訓練,此訓練係對各個新參考區域1602在執行時間連續執行-藉以確定機器學習引擎1600被準確地訓練。例如,每像素資料通道(例如,像素顏色、深度、法線、法線偏移、等)可以被評估,這些係為機器學習引擎1600所使用以對訓練權重1605作出調整。如同在訓練情況中(圖15),機器學習引擎1600被訓練朝向一組理想權重1605,以將雜訊由低取樣數輸入框1601移除,以產生去雜訊框1620。然而,根據新類型低取樣數輸入框1601的新影像特徵,訓練權重1605被連續更新。
由機器學習引擎1600所執行的再訓練操作可以在圖形處理器單元(GPU)或主機處理器上的背景程序中被同時執行。可以被實施為驅動器組件及/或GPU硬體組件的描繪環路可以連續產生放置於佇列中的新訓練資料(例如,以新參考區域1602形式表示)。執行於GPU或主機處理器上的背景訓練程序可以連續由此佇列讀取新的訓練資料,重新訓練該機器學習引擎1600、並以適當時間間隔以新的權重1605將之更新。
圖17示出此一實施法的例子,其中,背景訓練程序1700係為主機CPU 1710加以實施。更明確地說,背景訓練程序1700使用高取樣數新參考區域1602與對應低取樣數區域1604,連續更新訓練權重1605,藉以更新該機器學習引擎1600。
如於圖18A所示之用於多人線上遊戲的非限定例,不同主機機器1820-1822個別地產生參考區域,背景訓練程序1700A-1700C將之傳送至伺服器1800(例如,遊戲伺服器)。伺服器1800然後使用由各個主機1821-1822所接收的新參考區域、如前所述地更新權重1805執行對機器學習引擎1810訓練。其傳送這些權重1805至主機機器1820,其儲存權重1605A-C,藉以更新各個個別機器學習引擎(未示出)。因為伺服器1800可以在短時間內被提供大量的參考區域,所以,它能有效與精準地更新正被使用者所執行的給定應用(例如,線上遊戲)的權重。
如於圖18B所示,不同主機機器可以產生新的訓練權重(例如,根據如前所述之訓練/參考區域1602),並與伺服器1800(例如遊戲伺服器)或者使用同級共享協定共享新訓練權重。在伺服器上的機器學習管理組件1810使用由各個主機機器上接收的新權重產生一組組合權重1805。例如,組合權重1805可以為由新權重所產生的平均值並被如此所述地連續更新。一旦產生,組合權重1605A-C的備份可以被傳送並儲存在各個主機機器1820-1821,其然後可以使用於此所述之組合權重,以執行去雜訊操作。
半閉合環路更新機制也可以為硬體製造者所使用。例如,參考網路可以包含在硬體製造者所分散的驅動器的一部分中。因為驅動器使用於此所述之技術產生新訓練資料並且連續提出這些回授給硬體製造者,所以硬體製造者使用此資訊,以連續改良其機器學習實施法,以用於下一代驅動器更新。
在例示實施法(例如,在放映場上的批次電影放映中),放映者將新產生訓練區域傳送給專用伺服器或資料庫(在攝影棚放映場中),其隨著時間聚集來自多數描繪節點的資料。在分開機器上的分開程序連續改良了攝影棚的專用去雜訊網路,並且,新描繪工作永遠使用最新的訓練網路。
機器學習方法係被示於圖19中。該方法可以被實施於此所述的架構上,但並不是限定至任何特定系統或圖形處理結構中。
在1901,作為初始訓練階段的一部分,低取樣數影像資料與高取樣數影像資料係被產生用於多數影像框。在1902,機器學習去雜訊引擎係使用高/低取樣數影像資料加以訓練。例如,一組與像素特性相關的卷積類神經網路權重可以依據該訓練加以更新。然而,任何機器學習架構均可以使用。
在1903,在執行時間,低取樣數影像框係被與具有高取樣數的至少一參考區一起產生。在1904,高取樣數參考區係為機器學習引擎及/或分開訓練邏輯(例如,背景訓練模型1700)所使用,以連續地精煉機器學習引擎的訓練。例如,高取樣數參考區可以被組合低取樣數影像的對應部分使用,以持續教導機器學習引擎1904如何最有效執行去雜訊。在CNN實施法中,例如,此可以涉及更新有關於該CNN的權重。
以上所述之多數變化可以被實施,例如,機器學習引擎的回授環組態的方式、產生訓練資料的實體、訓練資料回授到訓練引擎的方式、及改良網路如何提供給描繪引擎。另外,雖然以上所述的例子使用單一參考區執行連續訓練,但也可以使用任何數目的參考區。再者,如前所述,參考區可以為不同大小、可以被用於不同數目的影像框上、並可以使用不同技術(例如,隨機、依據預定態樣等)被定位在影像框內的不同位置。
另外,雖然卷積類神經網路(CNN)係被描述作為機器學習引擎1600的一例子,但本發明之基本原理可以使用任何形式之機器學習引擎加以實施,其能使用新訓練資料持續精煉其結果。其他機器學習實施法例如,但並不限於包含資料處理(GMDH)、長短期記憶體、深儲存計算、深釋放網路、張量深堆疊網路、及深預測編碼網路等等的群組方法。
有效分散去雜訊的設備與方法
如上所述,去雜訊已經變成具有平滑無雜訊影像的即時光線追蹤的重要特性。描繪可以在多數裝置上的分散系統上完成,但就目前而言,現行去雜訊框架均操作於在單一機器上的單一實例上。如果描繪係在多數裝置上完成,則它們可能不必令所有描繪像素都為可存取,而來計算該影像的去雜訊部分。
現呈現與人工智慧(AI)與非AI為主去雜訊技術一起動作的分散去雜訊演算法。影像的區域不是已經分散於分散描繪操作的多數節點上,就是分開並分散開單一框緩衝器。計算足夠去雜訊所需的相鄰區域的鬼域係於需要時由相鄰節點收集,及最終所得磚片係被組合成最終影像。
分散處理
圖20示出執行描繪的多數節點2021-2023。雖然為簡明起見,只有三個節點被顯示,但本發明的基本原理並不限定於任何特定數目的節點。事實上,單一節點也可以被用於實施本發明的某些實施例。
節點2021-2023各個描繪影像的一部分,在本例子中造成區2011-2013。雖然矩形區2011-2013被顯示於圖20中,但任何形狀的區域均可以使用並且任何裝置可以處理任何數目的區域。為節點所需要以執行足夠平滑去雜訊操作的區域被稱為鬼域2011-2013。換句話說,鬼域2001-2003代表在指定品質位準執行去雜訊所需的整個資料。降低品質位準降低鬼域的大小以及所需資料的數目,而提升品質位準,則增加鬼域及所需的對應資料。
如果例如節點2021的節點確實具有指定品質位準去雜訊其區域2011所需的鬼域2001的一部分的本地備份,則該節點將由例如節點2022的一或更多“相鄰”節點取回所需資料,如所示該節點2022具有鬼域2001的一部分。同樣地,如果節點2022確實具有以指定品質位準去雜訊其區域2012所需的鬼域2002的一部分的本地備份,則節點2022將由節點2021取回所需鬼域資料2032。該取回可以透過匯流排、互連、高速記憶體組織、網路(例如,高速乙太)加以執行,或者,甚至可以是在多核心晶片中的晶片上互連,其能夠在多數核心(例如,用以以極端解析度或時變描繪大影像)分散描繪工作。各個節點2021-2023可以包含在圖形處理器內的個別執行單元或者指定組執行單元。
予以發送的資料的特定數量係相關於被使用的去雜訊技術。再者,來自鬼域的資料可以包含需要改良各個個別區域去雜訊所需的任何資料。例如,鬼域資料可以包含影像顏色/波長、強度/α資料、及/或法線。然而,本發明的基本原理並不限於任何特定組的鬼域資料。
其他細節
對於較慢網路或互連,此資料的壓縮可以使用現存通用無損或有損壓縮法加以進行。例子包含但並不限於zlib、gzip、及Lempel-Ziv-Markov鏈演算法(LZMA)。其他特定內容壓縮法也可以藉由標註在框間的光線命中資訊中的Δ(delta)可能相當分散而加以使用,並且,只有有用於該Δ的取樣需要被發送,當節點已經具有由先前框收集的Δ時。這些可以被選擇地推入收集這些取樣i
的節點,或者節點i
可以由其他節點請求取樣。無損壓縮可以用於某資料類型與程式碼,而有損資料被用於其他資料類型。
圖21示出在節點2021-2022間之互動的其他細節。各個節點2021-2022包含光線追蹤描繪電路2081-2082,用以描繪各個影像區域2011-2012與鬼域2001-2002。去雜訊器2100-2111分別對區域2011-2012執行去雜訊操作,各個節點2021-2022係負責用於描繪與去雜訊。例如,去雜訊器2021-2022可以包含電路、軟體、或其任意組合,以分別產生去雜訊區域2121-2122。如所述,當產生去雜訊區域時,去雜訊器2021-2022可能需要依賴由不同節點所擁有的鬼域內的資料(例如,去雜訊器2100可能需要來自節點2022所擁有的鬼域2002的資料)。
因此,去雜訊器2100-2111可能使用來自區域2011-2012與鬼域2001-2002的資料分別產生去雜訊區域2121-2122,其至少一部分係由另一節點接收。區域資料管理器2101-2102可以如於此所述管理來自鬼域2001-2002的資料傳送。壓縮器/解壓縮器單元2131-2132可能執行分別執行在節點2021-2022間交換的鬼域資料的壓縮與解壓縮。
例如,節點2021的區域資料管理器2101可以於來自節點2022的請求時,將來自鬼域2001的資料發送至壓縮器/解壓縮器2131,其將資料壓縮,以產生傳送至節點2022的壓縮資料2106,藉以降低透過互連、網路、匯流排、或其他資料通訊鏈路的頻寬。節點2022的壓縮器/解壓縮器2132然後解壓該壓縮資料2106,以及,去雜訊器2111使用解壓縮鬼資料以產生較只由區域2012來的資料所可能的為高品質的去雜訊區域2012。區域資料管理器2102可以儲存來自鬼域2001的解壓縮資料於快取、記憶體、暫存器檔案或其他儲存器中,以當產生去雜訊區域2122時,可為去雜訊器2111所使用。一類似組的操作可以被執行,以將來自鬼域2002的資料提供給節點2021上的去雜訊器2100,其結合來自區域2011的資料地使用該資料,以產生較高品質去雜訊區域2121。
抓取資料或描繪
如果在例如節點2021-2022的裝置間的連接為慢的(即,低於臨限潛時及/或臨限頻寬),則也可以較快本地描繪鬼域,而不是請求來自其他裝置的結果。這可以藉由在執行時間追蹤網路交易速度與線性外插用於鬼域大小的描繪時間而加以決定。在描繪出整個鬼域為較快的此等情況中,多數裝置可以最後描繪該影像的相同部分。該等鬼域的描繪部分的解析度可以根據基礎區域的變異量與所決定模糊程度加以調整。
負載平衡
靜態及/或動態負載平衡方案可以被使用以分散處理負載於各種節點2021-2023間。對於動態負載平衡,由去雜訊濾波器所決定的變異量可能需要更多時間以去雜訊以及驅動用以描繪該場景的特定區域的取樣數目,而該影像的低變異量與模糊區域需要較少取樣。指定給特定節點的特定區域可以根據來自先前框的資料加以動態調整,或者,當它們被描繪時,被動態通訊於裝置間,使得所有這些裝置具有相同工作量。
圖22示出執行於各個個別節點2021-2022上的監視器2201-2202如何收集效能度量資料,其包含但並不限於:耗用以將資料透過網路介面2211-2212傳送的時間、去雜訊一區域(有與無鬼域資料)所耗用的時間、及描繪各個區域/鬼域所耗用的時間。監視器2201-2202將這些效能度量報告回給管理器或負載平衡器節點2201,其分析所述資料以指出在各個節點2021-2022上的現行工作負載,並且,可能決定處理各種去雜訊區域2121-2122的更有效模式。管理器節點2201然後將新區域的新工作負載依據所檢測的負載分配給節點2021-2022。例如,管理器節點2201可以傳送更多工作給並未有重加載的節點及/或重新分配來自過載的這些節點的工作。另外,負載平衡器節點2201可以傳送重組態命令,以調整為各個節點所執行的描繪及/或去雜訊的特定方式(其中的部分例子係如上所述)。
決定鬼域
鬼域2001-2002的大小與形狀可以根據為去雜訊器2100-2111所實施的去雜訊演算法加以決定。其個別大小可以然後根據被去雜訊的取樣的檢測到的變異量加以動態修改。用於AI去雜訊本身的學習演算法可以用於決定適當區域大小,或者,在其他情況下,例如,雙邊模糊預定濾波器寬度將決定鬼域2001-2002的大小。在使用學習演算法的例示實施法中,機器學習引擎可以被執行在管理器節點2201上及/或機器學習的部分可以被執行在各個個別節點2021-2023(見,例如,圖18A-18B與如上相關文字)。
收集最後影像
最終影像可以藉由收集來自各個節點2021-2023的描繪或去雜訊區域,而不必鬼域或法線的情況下加以產生。在圖22中,例如,去雜訊區域2121-2122被傳送至管理器節點2201的區域處理器2280,其組合這些區域以產生最終去雜訊影像2290,其然後被顯示在顯示器2290上。區域處理器2280可以使用各種2D合成技術以組合這些區域。雖然所示為分開組件,但區域處理器2280與去雜訊影像2290可以被整合至顯示器2290上。各種節點2021-2022可以使用直接發送技術,以傳送去雜訊區域2121-2122與可能使用該區域資料的各種有損與無損壓縮。
AI去雜訊仍為高成本操作並且遊戲移動入雲端。因此,將去雜訊處理分散至多數節點2021-2022可能變成完成用於傳統遊戲或虛擬實境(VR)的即時框率所需者,虛擬實境可能需要更高框速率。電影攝影廠也通常在大放映場描繪,其可以被利用作較快去雜訊。
用以執行分散描繪與去雜訊的例示方法係被顯示在圖23。該方法可以實施於如上所述系統架構的背景中,但並不限於任何特定系統架構。
在2301,圖形工作被調度至多數節點,其執行光線追蹤操作,以描繪影像框的一區域。各個節點可以已經有執行在記憶體中的操作所需要的資料。例如,兩或更多節點可以共享共同記憶體,或這些節點的本地記憶體已經儲存有來自先前光線追蹤操作的資料。或者,或另外地,某些資料可以被傳送至各個節點。
在2302,為指定層次去雜訊所需(即,以可接受層次的效能)“鬼域”係被決定。鬼域包含執行指定層次的去雜訊所需的任何資料,包含由一或更多其他節點所擁有的資料。
在2303,有關於鬼域(或其部分)的資料係在節點間作交換。在2304,各個節點在其個別區域執行去雜訊(例如,使用所交換資料)及在2305,結果係被組合以產生最終去雜訊影像框。
如於圖22所示之管理器節點或主節點可以調度工作給這些節點,並且,然後組合已為這些節點所執行的工作,以產生最終影像框。同儕為主架構可以被使用,其中節點為同儕,其可以交換資料以描繪或去雜訊該最終影像框。
於此所述之節點(如,節點2021-2023)可以是經由高速網路互連的圖形處理計算系統。或者,節點也可以是耦接至高速記憶體組織的個別處理元件。所有這些節點共享共同虛擬記憶體空間及/或共同實體記憶體。或者,這些節點可以是CPU與GPU的組合。例如,於上所述之管理器節點2201可以是CPU及/或執行於CPU上的軟體,及節點2021-2022可以是GPU及執行於GPU上的軟體。各種不同類型的節點可以被使用,仍然符合本發明的基本原理。
例示類神經網路實施法
有很多類型的類神經網路;簡單類型的類神經網路為前饋網路。前饋網路可以被實施為非循環圖,其中,這些節點被排列為多層。典型地,前饋網路拓樸包含輸入層與輸出層,其係為至少一隱藏層所分開。隱藏層將由輸入層所接收的輸入轉換為有用於在輸出層產生輸出的表示法。這些網路節點經由邊緣而被全連接至相鄰層中的節點,但在各個層內的節點間並沒有邊緣。在前饋網路的輸入層的節點處所接收的資料係經由作動功能被傳遞(向前遞)至輸出層的節點,該作動功能根據個別有關於連接這些層的各個邊緣的係數(“權重”),而計算在該網路中的各個後續層的節點的狀態。取決正執行的演算法所表示的特定模型,來自類神經網路演算法的輸出可以採各種形式。
在機器學習演算法可以被用以模型化一特定問題之前,演算法使用訓練資料集加以訓練。訓練類神經網路涉及選擇網路拓樸、使用代表為該網路所模型化的問題的一組訓練資料、及調整該等權重直到網路模型執行對於該訓練資料集的所有實例具有最小誤差。例如,在類神經網路的監督學習訓練程序期間,回應於代表訓練資料集中的實例的輸入之由該網路所產生的輸出係被與用於該實例的“正確”標示輸出作比較,代表該輸出與該標示輸出間之差的錯誤信號係被計算,及當該錯誤信號被向後傳遞通過該網路的這些層時,有關於該等連接的權重係被調整,以最小化該錯誤。當由該訓練資料集的實例所產生的各個輸出的錯誤為最小化時,該網路被認為是“已訓練”。
機器學習演算法的準確性可以被用以訓練該演算法的資料集的品質所顯著影響。訓練程序可以計算密集的並在傳統通用處理器上,可能需要相當大量的時間。因此,平行處理硬體係被使用以訓練很多類型的機器學習演算法。因為所執行的計算以調整在類神經網路中的係數造成它們自然地傾向於平行實施法,所以,這是特別有用於最佳化類神經網路的訓練。明確地說,很多機器學習演算法與軟體應用已經適應以利用在通用圖形處理裝置內的平行處理硬體。
圖24為機器學習軟體堆疊2400的概要圖。機器學習應用2402可以被組態以使用訓練資料集訓練類神經網路或者使用已訓練深類神經網路,以實施機器智慧。機器學習應用2402可以包含用於類神經網路的訓練與推理功能及/或特殊軟體,其可以在佈署之前被用以訓練類神經網路。機器學習應用2402可以實施任何類型的機器智慧,包含但並不限於影像辨識、映圖與地方化、自動導航、語音合成、醫學成像、或語言翻譯。
用於機器學習應用2402的硬體加速可以經由機器學習框架2404加以完成。機器學習框架2404可以實施於於此所述硬體上,例如,處理系統100,包含處理器與在此所述之組件。描述用於圖24的元件具有於本文中的其他圖式的元件相同或類似名稱者描述與其他圖式中相同的元件,並可以以類似的方式操作或作動,並可以包含相同組件,並可以被鏈結至其他實體,如同本文之其他處所述,但並不如此限制。機器學習框架2404可以提供機器學習基元的程式庫。機器學習基元為機器學習演算法所共同執行的基本操作。沒有了機器學習框架2404,機器學習演算法的開發者將需要建立與最佳化與機器學習演算法有關的主計算邏輯,然後,當新平行處理器開發時,再最佳化計算邏輯。相反地,機器學習應用可以被組態以使用機器學習框架2404所提供的基元,來執行必要計算。例示基元包含張量卷積、作動功能、及池化,這些為當訓練卷積類神經網路(CNN)時所執行的計算操作。機器學習框架2404也可以提供基元,以實施為很多機器學習演算法所執行的基本線性代數子程式,例如,矩陣與向量運算。
機器學習框架2404可以處理接收自機器學習應用2402的輸入資料並產生適當輸入給計算框架2406。計算框架2406可以抽出提供給GPGPU驅動器2408的內涵指令,以促使機器學習框架2404經由GPGPU硬體2410利用硬體加速,而不必要機器學習框架2404詳細了解GPGPU硬體2410的架構。另外,計算框架2406可以促成機器學習框架2404的硬體加速,通過各種類型與世代的GPGPU硬體2410。
GPGPU機器學習加速
圖25示出多GPU計算系統2500,其可以是處理系統100的變化例。因此,有關於此所揭露的處理系統100的任何特性揭露也揭露出對應結合的多GPU計算系統2500,但並不作此限定。在圖25中與在本案其他圖中的元件的具有相同或類似名稱的元件也描述在其他圖中的相同元件,並可以以類似方式操作或作用,如本案之其他部分所述,這些可以包含相同組件,並可以鏈結至其他實體,但並不作此限定。多GPU計算系統2500可以包含經由主機介面開關2504耦接至多GPGPU 2506A-D的處理器2502。主機介面開關2504可以例如是PCI快速開關裝置,其將處理器2502耦接至PCI快速匯流排,透過該匯流排處理器2502可以與該組GPGPU 2506A-D通訊。各個多GPGPU 2506A-D可以為上述GPGPU的實例。GPGPU 2506A-D可以經由一組高速點對點GPU至GPU鏈結2516互連。高速GPU至GPU鏈結可以經由專用GPU鏈結連接至各個GPGPU 2506A-D。P2P GPU鏈結2516完成在各個GPGPU 2506A-D間的直接通訊,而不過透過處理器2502所連接的主機介面匯流排的通訊。透過有關於P2P GPU鏈結的GPU至GPU交通,主機介面匯流排可以保留為系統記憶體所存取或與多GPU計算系統2500的其他實例的通訊,例如,經由一或更多網路裝置。不同於經由主機介面開關2504而將GPGPU 2506A-D連接至處理器2502,處理器2502可以包含直接支援P2P GPU鏈結2516以及,因此,被直接連接至GPGPU 2506A-D。
機器學習類神經網路實施法
於此所述之計算架構可以被組態以執行多類型的平行處理,其可以特別適用於訓練及佈署用於機器學習的類神經網路。類神經網路可以被歸納為具有圖形關係的功能網路。如於本技藝所知,有各種類型類神經網路實施法被用於機器學習中。一例示類型的類神經網路為如前所述之前饋網路。
第二例示類型的類神經網路為卷積類神經網路(CNN)。CNN為特殊化前饋類神經網路,用以處理例如影像資料的具有已知格狀拓樸的資料。因此,CNN經常被用於計算視訊與影像辨識應用,但它們也可以用於其他類型的圖案辨識,例如,語音與語言處理。在CNN輸入層中的節點被組織成為一組“過濾器”(在視網膜中找到的接受區所產生的特性檢測器),及各個組的過濾器的輸出被傳遞至該網路的後續層中的節點。用於CNN的計算包含施加卷積數學運算至各個過濾器,以產生該過濾器的輸出。卷積為一種由兩函數所執行的特殊類型的數學運算,以產生第三函數,其係為該兩原始函數之一的修改版本。在卷積網路用語中,該卷積之第一函數可以被稱為輸入,而第二函數可以被稱為卷積核心。輸出可以被稱為特性圖。例如,對卷積層的輸入可以是多維陣列的資料,其界定輸入影像的各種顏色成份。卷核心可以為多維陣列的參數,其中,這些參數係為類神經網路的訓練程序所採用。
遞歸類神經網路(RNN)為前饋類神經網路的族群,其包含在層間的回授連接。RNN藉由跨越類神經網路的不同部分地共享參數資料而完成序列資料的模型化。用於RNN的架構包含循環。當來自RNN的至少一部分的輸出資料被使用作為處理在一順序的後續輸入的回饋時,這些循環代表一變數的現行值對在未來時間其本身值的影響。由於語言資料可以被構成的變化本質,此特性使得RNN特別有用於語言處理。
以下所述之圖表示例示性前饋、CNN、與RNN網路,並且描述分別訓練與佈署各個這些類型網路的一般程序。將可以了解到,這些說明為例示性與非限定性,所示之概念可以大致應用至深度類神經網路與機器學習技術。
上述例示類神經網路可以被用以執行深度學習。深度學習為使用深度類神經網路的機器學習。用於深度學習的深度類神經網路係為人工類神經網路,其係由多數隱藏層構成,相反於淺類神經網路,其只包含單一隱藏層。愈深的類神經網路通常愈計算密集來訓練。然而,網路的額外隱藏層促成多階段的圖案辨識,這造成相對於淺機器學習技術,較少之輸出錯誤。
用於深度學習的深度類神經網路典型包含前端網路,以執行耦接至後端網路的特性辨識,這代表數學模型,其可以根據提供給該模型的特性表示法,來執行操作(例如,目標分類、語音辨識等)。深度學習促成機器學習被執行,而不必為該模型執行手工特性工程。相反地,深度類神經網路可以根據在輸入資料內的統計結構或相關,而學習特性。所學習特性可以被提供給數學模型,其可以將所檢測特性映射至輸出。為網路所使用的數學模型通常針對將執行的特定工作而特殊化,並且,不同的模型將被用以執行不同工作。
一旦建構類神經網路,學習模型可以被應用至該網路,以訓練該網路以執行特性工作。學習模型描述如何在該模型內調整權重,以降低網路的輸出錯誤。錯誤的回傳為用以訓練類神經網路的常用方法。輸入向量被呈現給該網路以供處理。網路的輸出藉由使用損失函數來相較於想要輸出,並且,針對在輸出層中的各個神經元,來計算錯誤值。錯誤值然後回傳,直到各個神經元具有相關錯誤值,其大致表示對原始輸出的貢獻為止。網路然後可以使用例如隨機梯度下降演算法的演算法來由這些錯誤中學習,以更新該類神經網路的權重。
圖26-27示出例示卷積類神經網路。圖26示出在CNN內的各種層。如圖26所示,用以模型影像處理的例示CNN可以接收描述輸入影像的紅、綠及藍(RGB)分量的輸入2602。輸入2602可以為多數卷積層(例如卷積層2604、卷積層2606)所處理。來自多數卷積層的輸出可以選用地為一組全連接層2608所處理。在全連接層中的神經元具有對前一層中的所有啟動的全連接,如同前述之用於前饋網路。來自全連接層2608的輸出可以被用以產生來自該網路的輸出結果。在全連接層2608內的啟動可以使用矩陣乘法而不是卷積加以計算。並非所有CNN實施法均利用全連接層。例如,在一些實施法中,卷積層2606可以產生用於CNN的輸出。
卷積層為稀疏連接,其與全連接層2608中找到的傳統類神經網路組態不同。傳統類神經網路層為全連接,使得每一輸出單元與每個輸入單元互動。然而,卷積層為稀疏連接,因為如所示,一欄的卷積的輸出被輸入至下一層的節點(而不是在該欄的各個節點的個別狀態值)。卷積層相關的核心執行卷積操作,其輸出係被送至下一層。在卷積層內所執行的維度精簡為使得CNN可以縮放以處理大影像的一個面向。
圖27示出在CNN的卷積層內的例示計算階段。至CNN的卷積層2712的輸入可以在卷積層2714的三個階段內處理。該三個階段可以包含卷積階段2716、檢測器階段2718、及池化階段2720。卷積層2714可以然後輸出資料至下一卷積層。網路的最後卷積層可以產生輸出特性圖資料或提供輸入給全連接層,例如,用以產生輸入至CNN的分類值。
在卷積階段2716中,並聯執行幾個卷積以產生一組線性啟動。卷積階段2716可以包含仿射轉換,其可以是被指明為線性轉換加上平移的任何轉換。仿射轉換包含旋轉、平移、縮放、及這些轉換的組合。卷積階段計算連接至輸入的特定區域的函數(例如,神經元)的輸出,所述特定區域可以被決定為相關於該神經元的本地區域。神經元計算在神經元與在本地輸入中神經元所連接的區域的權重間的點積。來自卷積階段2716的輸出界定為卷積層2714的後續階段所處理的一組線性啟動。
線性啟動可以為檢測器階段2718所處理。在檢測器階段2718中,各個線性啟動係為非線性啟動函數所處理。非線性啟動函數增加整體網路的非線性特性,而不影響卷積層的接受域。可以使用幾類型的非線性啟動函數。一特定類型為糾正線性單元(ReLU),其使用被界定為f(x)=max(0,x)的啟動函數,使得啟動被定限至零。
池化階段2720使用池化函數,其以旁邊輸出的摘要統計替換卷積層2706的輸出。池化函數可以被用以將平移不變性引入類神經網路中,使得對輸入的小平移並不會改變池化輸出。在輸入資料中的一特性的出現較該特性的精準位置更重要的情況中,對本地平移的不變性可能較有用。在池化階段2720中,可以使用各種類型的池化函數,包含最大池化、平均池化、及12範數池化。另外,一些CNN實施法並不包含池化階段。相反地,此等實施法替換相較於先前卷積層具有增加步長的額外卷積階段。
來自卷積層2714的輸出可以然後為下一層2722所處理。下一層2722可以為額外卷積層或全連接層2708之一。例如,圖27的第一卷積層2704可以輸出至第二卷積層2706,而第二卷積層可以輸出至全連接層2808的第一層。
圖28示出例示遞歸類神經網路2800。在遞歸類神經網路(RNN)中,網路的先前狀態影響該網路的現行狀態的輸出。RNN可以使用各種函數以各種方式加以建立。RNN的使用通常涉及根據先前連續的輸入,使用數學模型以預測未來。例如,RNN可以被用以執行統計語言模型化,以在給定先前順序的字元下,預測下個將要來臨的字元。所示RNN 2800可以被描述為具有:接收輸入向量的輸入層2802、實行遞歸功能的隱藏層2804、致能先前狀態的“記憶體”的回授機制2805、及輸出結果的輸出層2806。RNN 2800根據時間步階操作。在給定時間步階的RNN的狀態係根據先前時間步階經由回授機制2805所影響。對於給定時間步階,隱藏層2804的狀態係為先前狀態以及在現行時間步階的輸入所界定。在第一時間步階的初始輸入(x1)可以為隱藏層2804所處理。第二輸入(x2)可以為隱藏層2804使用狀態資訊加以處理,該狀態資訊係為在初始輸入(x1)處理期間所決定的。給定狀態可以被計算為s_t=f(Ux_t+Ws_(t-1)),其中U與W為參數矩陣。函數f通常為非線性,例如,雙曲正切函數(Tanh)或整流器函數f(x)=max(0,x)的變化。然而,在隱藏層2804中所用的特定數學函數可以取決RNN 2800的特定實施細節而加以改變。
除了所述基本CNN與RNN網路外,也可以致能這些網路的變化例。一例示RNN變化例為長短期記憶體(LSTM)RNN。LSTM RNN能學習長期相依性,其可以為處理較長語言順序所需。CNN的變化例為卷積深度信念網路,其具有類似於CNN的結構並被以類似於深度信念網路的方式訓練。深度信念網路(DBN)為生殖類神經網路,其係由多數層的隨機(隨機)變數構成。DBN可以使用貪無監督學習逐層地訓練。DBN的學習權重然後可以被用以藉由確定類神經網路的最佳初始組權重,而提供預訓練類神經網路。
圖29示出深度類神經網路的訓練與佈署。一旦給定網路已經針對一工作加以建構,則該類神經網路使用訓練資料集2902加以訓練。各種訓練框架2904已經被佈署以促成訓練程序的硬體加速。例如,上述機器學習框架可以被組態為訓練框架。訓練框架2904可以掛入未訓練類神經網路2906並使未訓練類神經網使用於此所述之平行處理資源來加以訓練,以產生訓練類神經網2908。
為了開始訓練程序,初始權重可以隨機選擇或使用深度信念網路加以預訓練來選擇。訓練循環然後可以以監督或無監督方式加以執行。
監督學習為一種學習方法,例如,其中,當訓練資料集2902包含配對有想要輸出的輸入來作為輸入時,或者,當訓練資料集包含具有已知輸出的輸入及類神經網路的輸出被人工地分級時,訓練係被執行為中介操作。該網路處理這些輸入並將這些結果輸出與一組預期或想要輸出相比較。錯誤然後被傳遞回來通過該系統。訓練框架2904可以調整,以調整控制未訓練類神經網路2906的權重。訓練框架2904可以提供工具,以監視未訓練類神網路2906如何收斂向一模型,其係適用以根據已知輸入資料來產生正確答案。當網路的權重被調整以精煉類神經網路所產生的輸出時,訓練程序重覆地發生。訓練程序可以持續,直到類神經網路到達與訓練類神經網2908所相關的統計想要的準確性為止。訓練類神經網路2908可以然後被佈署以實施任何數量的機器學習操作。
無監督學習為一種學習方法,其中,網路想要使用無標記資料自行訓練。因此,對於無監督學習,訓練資料集2902將包含輸入資料,而無任何相關輸出資料。未訓練類神經網路2906可以學習在無標記輸入內的分組並且可以決定個別輸入將如何相關於整個資料集。無監督訓練可以被用以產生自組織圖,其係為一類型的訓練類神經網路2907,其能執行有用於降低資料維度的操作。無監督訓練也可以用以執行異常檢測,這允許識別出在輸入資料集中偏離資料的正常分佈的資料點。
也可以使用監督與無監督訓練的變化例。半監督學習也是一種技術,其中,在訓練資料集2902中,包含相同分佈的標記與無標記資料的混合。增量學習為監督學習的變化例,其中輸入資料係被連續使用以進一步訓練該模型。增量學習促成該訓練類神經網路2908適用新資料2912,而不忘記在初始訓練期間灌輸在網路內的知識。
不論監督或無監督,用於特定深度類神經網路的訓練程序對於單一計算節點而言,可能太過計算密集。不同於使用單一計算節點,分散式網路計算節點可以被使用以加速該訓練程序。
圖30A為方塊圖,示出分散式學習。分散式學習為一種訓練模型,其使用多數分散式計算節點,例如,上述的節點以執行類神經網路的監督或無監督訓練。分散式計算節點可以各個包含一或更多主機處理器與一或更多通用處理節點,例如高並聯通用圖形處理單元。如所示,分散式學習可以被執行為模型平行機制3002、資料平行機制3004、或模型與資料平行機制的組合。
在模型平行機制3002中,在分散式系統中的不同計算節點可以執行用於單一網路的不同部分的訓練計算。例如,類神經網路的各個層可以為分散式系統的不同處理節點所訓練。模型平行機制的優點包含收縮放特別大的模型的能力。將與類神經網路的不同層相關的計算分割開以完成很大類神經網路的訓練,該很大類神經網路中的所有層的權重將不會配合入單一計算節點的記憶體內。在一些實例中,模型平行機制可以特別有利於執行大類神經網路的無監督訓練。
在資料平行機制3004中,分散式網路的不同節點具有模型的完整實例,以及,各個節點接收該資料的不同部分。來自不同節點的結果然後被組合。雖然對於資料平行機制可能有不同手法,但資料平行訓練手法都需要結合結果以及同步化在各個節點間的模型參數的技術。例示結合資料的手法包含參數平均法與更新為主的資料平行機制。參數平均法訓練在訓練資料的子集上的各個節點並且設定全域參數(例如,權重、偏壓)為來自各個節點的參數的平均值。參數平均法使用維護有參數資料的中央參數伺服器。更新為主的資料平行機制係類似於參數平均法,除了參數不是由節點傳送至參數伺服器外,對模型的更新也被傳送。另外,更新為主資料平行機制可以以去中心化方式加以執行,其中更新被壓縮並傳送於節點之間。
可以實施組合模型與資料平行機制3006,例如,於分散式系統中,其中各個計算節點包含多數GPU。各個節點可以具有完整實例的模型,各個節點內的分開的GPU可以被用以訓練該模型的不同部分。
分散式訓練已經相較於單一機器上的訓練增加了負擔。然而,於此所述之平行處理器與GPGPU可以各個實施不同技術,以降低分散式訓練的負擔,包含技術有完成高頻寬的GPU至GPU資料傳送以及加速遠端資料同步化。
例示機器學習應用
機器學習可以應用以解決各種技術問題,包含但並不限定於電腦視覺、自動駕駛與導航、語音辨識、及語言處理。電腦視覺傳統上為機器學習應用的最活躍研究領域之一。電腦視覺的應用範圍由例如人臉辨識的再製人類視覺能力到建立視覺能力的新分類。例如,電腦視覺應用可以被組態以辨識來自視訊中的可見物體中產生的振動的音波。平行處理器加速機器學習使得電腦視覺應用可以使用顯著大於先前可行訓練資料集加以訓練,並且,使得推論系統可以使用低功率平行處理器加以佈署。
平行處理器加速機器學習具有自駕應用,包含巷道與道路標誌辨識、障礙物迴避、導航、及駕駛控制。加速機器學習技術可以被用以根據對特定訓練輸入作適當反應的資料集,來訓練駕駛模型。於此所述之平行處理器可以完成用於自駕解決方案的愈加複雜類神經網路的快速訓練,並完成低功率推論處理器的佈署在適用以積集入自駕載具的行動平台中。
平行處理器加速深度類神經網路已經完成自動語音辨識(ASR)的機器學習手法。ASR包含在給定輸入音響順序下,建立計算最可能語言順序的函數。使用深度類神經網路的加速機器學習已經完成先前用於ASR的隱藏Markov模型(HMM)與高斯混合模型(GMM)的替換。
平行處理器加速機器學習也可以被用以加速類神經語言處理。自動學習程序可以利用統計推論演算法,以產生對錯誤或不熟悉輸入有抵抗性的模型。例示類神經語言處理器應用包含在人類語言間之自動機器翻譯。
用於機器學習的平行處理平台可以被細分為訓練平台與佈署平台。訓練平台通常高度平行並包含加速多GPU單節點訓練與多節點、多GPU訓練的最佳化。適用以訓練的例示平行處理器包含高平行通用圖形處理單元及/或於此所述之多GPU計算系統。相反地,佈署機器學習平台通常包含較低功率平行處理器,其適用以用於例如相機、自動機器人、及自駕載具的產品中。
圖30B示出適用以使用訓練模型執行推論的例示推論系統晶片(SOC)3100。圖30B中具有與於此所述之其他圖的元件相同或類似的名稱的元件描述與其他圖式中相同的元件,並可以以類似方式操作或動作,並可以包含相同組件,並可以被鏈結至其他實體,如同於此所述,但並不作此限定。SOC 3100可以積集有處理組件,其包含媒體處理器3102、視覺處理器3104、GPGPU 3106及多核心處理器3108。SOC 3100可以額外包含晶片上記憶體3105,其可以完成可為各個這些處理組件所存取的共享晶片上資料池。這些處理組件可以被最佳化為低功率操作,以完成各種機器學習平台的佈署,包含自駕載具與自動機器人。例如,SOC 3100的一種實施法可以被用以作為自駕載具的主控制系統的一部分。當SOC 3100被組態以用於自駕載具中時,SOC係被設計並組態以符合佈置轄區的相關功能安全標準。
在操作時,媒體處理器3102與視覺處理器3104可以配合動作,以加速電腦視覺操作。媒體處理器3102可以完成多個高解析度(例如,4K、8K)視訊串流的低潛時解碼。解碼視訊串流可以被寫入至晶片上記憶體3105中的緩衝器中。視覺處理器3104然後可以對解碼視訊解析並對解碼視訊的訊框執行初步處理操作,以使用訓練影像辨識模型,準備處理訊框。例如,視覺處理器3104可以加速CNN的卷積操作,其係被用以執行高解析度視訊資料的影像辨識,而後端模型計算係為GPGPU 3106所執行。
多核心處理器3108可以包含控制邏輯,用以協助媒體處理器3102與視覺處理器3104所執行的資料傳送與共享記憶體操作的順序化與同步化。多核心處理器3108也可以作動為應用處理器,以執行軟體應用,其可以使用GPGPU 3106的推論計算能力。例如,至少一部分的導航與駕駛邏輯可以被實施為執行在多核心處理器3108上的軟體。此軟體可以直接對GPGPU 3106發出計算工作負載或者計算工作負載可以被發出給多核心處理器3108,其可以至少部分卸載這些操作給GPGPU 3106。
GPGPU 3106可以包含處理叢集,例如在高平行通用圖形處理單元DPLAB00內的低功率組態處理叢集DPLAB06A-DPLAB06H。在GPGPU 3106內的處理叢集可以支援指令,其係被特別最佳化以對訓練類神經網路執行推論計算。例如,GPGPU 3106可以支援指令,以執行低精度計算,例如,8位元與4位元整數向量運算。
光線追蹤架構
在一實施法中,圖形處理器包含電路及/或程式碼,用以執行即時光線追蹤。一專用組的光線追蹤核心可以包含在圖形處理器中,以執行於此所述之各種光線追蹤操作,包含光線遍歷及/或光線交集操作。除了光線追蹤核心外,也可以包含用於執行可程式著色操作的多數組圖形處理核心,以及,用於對張量資料執行矩陣運算的多數組張量核心。
圖31示出一個此圖形處理單元(GPU)3105的例示部分,其包含專用組的被排列為多核心群組3100A-N的圖形處理資源。圖形處理單元(GPU)3105可以為圖形處理器300、GPGPU 1340、及/或任何其他於此所述的圖形處理器的變化例。因此,對於圖形處理器的任何特性的揭露也揭露出與GPU 3105的對應組合,但並不限於此。再者,圖31中具有與於本文所述其他圖相同或類似名稱的元件描述與其他圖相同的元件,並可以以類似方式操作或動作,並可以包含相同組件,並可以鏈結至於本文中其他處所述的其他實體,但並不限於此。雖然只提供單一多核心群組3100A的細節,但可以了解,其他多核心群組3100B-N也可以裝配有相同或類似組的圖形處理資源。
如所示,多核心群組3100A可以包含一組圖形核心3130、一組張量核心3140、及一組光線追蹤核心3150。排程器/調度器3110排程與調度圖形線程,以供於各種核心3130、3140、3150上執行。一組暫存器檔案3120儲存當執行這些圖形線程時,為核心3130、3140、3150所使用的運算元值。這些可以包含例如用以儲存整數值的整數暫存器、用以儲存浮點值的浮點暫存器、用以儲存緊縮資料元件(整數及/或浮點資料元件)的向量暫存器,以及,用以儲存張量/矩陣值的磚片暫存器。磚片暫存器可以被實施為組合成組的向量暫存器。
一或更多第一階(L1)快取與材質單元3160將例如材質資料、頂點資料、像素資料、光線資料、包圍體資料等的圖形資料本地儲存在各個多核心群組3100A中。為所述多核心群組3100A-N的全部或次組所共享的第二階(L2)快取3180儲存用於多數同時圖形線程的圖形資料及/或指令。如所示,L2快取3180可以為多數多核心群組3100A-N所共享。一或更多記憶體控制器3170將GPU 3105耦接至記憶體3198,其可以為系統記憶體(例如,DRAM)及/或本地圖形記憶體(例如,GDDR6記憶體)。
輸入/輸出(IO)電路3195將GPU 3105耦接至例如數位信號處理器(DSP)、網路控制器、或使用者輸入裝的一或更多IO裝置3190。晶片上互連可以被用以將I/O裝置3190耦接至GPU 3105與記憶體3198。IO電路3195的一或更多IO記憶體管理單元(IOMMU)3170將IO裝置3190直接耦接至系統記憶體3198。IOMMU 3170可以管理多數組頁面表,以將虛擬位址映射至系統記憶體3198中的實體位址。另外,IO裝置3190、CPU 3199、及GPU 3105可以共享相同虛擬位址空間。
IOMMU 3170也支援虛擬化。在此時,它可以管理第一組頁面表,以將客/圖形虛擬位址映射至客/圖形實體位址,以及,第二組頁面表,以將客/圖形實體位址映射至系統/主機實體位址(例如,在系統記憶體3198內)。各個第一與第二組頁面表的基礎位址可以儲存在控制暫存器中並在上下文交換被換出(例如,使得新上下文被提供有對相關組頁面表的存取)。雖然未在圖31中示出,但各個核心3130、3140、3150及/或多核心群組3100A-N可以包含變換旁看緩衝器(TLB),以快取客虛擬至客實體變換、客實體至主實體變換、及客虛擬至主實體轉換。
CPU 3199、GPU 3105、及IO裝置3190可以被積集在單一半導體晶片及/或晶片封裝上。所示記憶體3198可以被積集在相同晶片上或者可以經由晶片外介面耦接至記憶體控制器3170。在一實施法中,記憶體3198包含GDDR6記憶體,其分享與其他實體系統級記憶體相同的虛擬記憶體位址空間,但本發明的基本原理並不限於此特定實施法。
張量核心3140可以包含被特殊設計以執行矩陣運算的多數執行單元,這些運算用以執行深度學習操作的基礎計算操作。例如,同時矩陣乘法運算可以被用於類神經網路訓練與推論。張量核心3140可以使用包含單精度浮點(例如,32位元)、半精度浮點(例如,16位元)、整數字元(16位元)、位元組(8位元)、及半位元組(4位元)的各種運算元精度,來執行矩陣處理。類神經網路實施法也可以抽取各個描繪場景的特性,可能組合來自多框的細節,以建構高品質最終影像。
在深度學習實施法中,平行矩陣乘法工作可以被排序以在張量核心3140上執行。特別是,類神經網路的訓練需要大量的矩陣點積運算。為了處理N×N×N矩陣乘法的內積公式化,張量核心3140可以包含至少N點積處理元件。在開始矩陣乘法之前,一整個矩陣被載入磚片暫存器中,以及,每循環中,第二矩陣的至少一行被載入了N循環。各個循環中,有N個點積被處理。
矩陣元件可以取決於特定實施法被儲存為不同精度,包含16位元字元、8位元位元組(例如,INT8)、及4位元半位元組(例如,INT4)。不同精度模式可以針對張量核心3140加以特定,以確保最有效精度被用於不同工作負載中(例如,推論工作負載,可以容許至位元組與半位元組的量化)。
光線追蹤核心3150可以被用以加速用於即時光學追蹤與非即時光線追蹤實施法的光學追蹤操作。更明確地說,光線追蹤核心3150可以包含光線遍歷/交集電路,用以使用包圍體階層(BVH)執行光線追蹤,以及,用以識別在光線以及被包圍在BVH體積內的基元間的交集點。光線追蹤核心3150也可以包含電路,用以執行深度測試與汰除(例如,使用Z緩衝器或類似配置)。在一實施法中,光線追蹤核心3150配合在此所述之影像去雜訊技術,以執行遍歷與交集操作,至少其一部分可被執行在張量核心3140上。例如,張量核心3140可以實施深度學習類神經網路,以執行由光線追蹤核心3150所產生的框的去雜訊。然而,CPU 3199、圖形核心3130、及/或光線追蹤核心3150也可以實施所有或一部分的去雜訊及/或深度學習演算法。
另外,如上所述,去雜訊的分散式手法可以被佈署,其中GPU 3105係在透過網路或高速互連耦接至其他計算裝置的計算裝置之中。互連計算裝置可以額外分享類神經網路學習/訓練資料,以改良整體系統學習的速度,以執行不同類型影像框及/或不同圖形應用的去雜訊。
光線追蹤核心3150可以處理所有BVH遍歷與光線基元交集、解救圖形核心3130不被每個光線千計的指令所過載。每個光線追蹤核心3150可以包含第一組特殊電路,用以執行包圍盒測試(例如,用於遍歷操作)及第二組特殊電路,用以執行光線三角形交集測試(例如,已經遍歷的交集光線)。因此,多核心群組3100A可以簡單地發射光線探頭,及光線追蹤核心3150獨立地執行光線遍歷及交集,並將命中資料(例如,命中、未中、多次命中等)回覆給線程上下文。於光線追蹤核心3150執行遍歷與交集操作的同時,其他核心3130、3140可以自由執行其他圖形與計算工作。
各個光線追蹤核心3150可以包含:遍歷單元,以執行BVH測試操作;以及,交集單元,其執行光線基元交集測試。交集單元然後可以產生“命中”、“未中”、或“多次命中”反應,其提供給適當線程。在遍歷與交集操作期間,其他核心的執行資源(例如,圖形核心3130及張量核心3140)可以自由地執行其他形式的圖形工作。
混合光柵/光線追蹤手法也可以被使用,其中,工作係被分配於圖形核心3130與光線追蹤核心3150之間。
光線追蹤核心3150(及/或其他核心3130、3140)可以包含例如用於微軟的DirectX 光線追蹤(DXR)的光線追蹤指令集的硬體支援,其包含調度光線命令,以及光學產生、最近命中、任何命中,及未中著色器,這完成對於各個目標的特定組著色器與材質的指定。另一種可以為光線追蹤核心3150、圖形核心3130及張量核心3140所支援的光線追蹤平台為Vulkan 1.1.85。然而,注意,本發明的基本原理並不限於任何特定光線追蹤ISA。
通常,各種核心3150、3140、3130可以支援光線追蹤指令集,其包含用於光線產生、最近命中、任何命中、光線基元交集、每基元及階層包圍體結構、未中、拜訪、及異常的指令/功能。更明確地說,光線追蹤指令可以被包含,以執行以下功能:
光線產生-光線產生指令可以針對各個像素、取樣、或其他使用者界定工作指定加以執行。
最近命中-最近命中指令可以被執行以找出在場景內的基元與光線的最近交集點。
任何命中-任何命中指令指出在場景內的一光線與基元間的多數交集點,可能用以指明新的最近交集點。
交集-交集指令執行光線基元交集測試並輸出結果。
每基元包圍盒指令-此指令在給定基元或基元群旁(例如,當建立新BVH或其他加速資料結構時)建立包圍盒。
未中-表示光線未中在場景內的所有幾何,或場景的指定區域。
拜訪-表示光線將遍歷的子體積。
異常-包含各種類型的異常處置器(例如,各種錯誤狀況的引動)。
階層光束追蹤
包圍體階層經常被用以改良對圖形基元與其他圖形目標執行的操作的效率。BVH為一種階層樹結構,其係根據一組幾何目標加以建立。在該樹結構頂部的為根節點,其包圍在給定場景中的所有幾何目標。個別幾何目標被包圍在包圍體內,其形成該樹的葉節點。這些節點然後被群集成小組並被包圍在較大包圍體內。這些隨後也被以遞迴方式群集並包圍在其他更大包圍體內,最後造成在樹的頂端以根節點表示的具有單一包圍體的樹結構。包圍體階層係被用以有效支援各種對多組幾何目標的操作,例如,碰撞檢測、基元汰除、及用於光線追蹤的光線遍歷/交集操作。
在光線追蹤架構中,光線遍歷過BVH,以決定光線-基元交集點。例如,如果光線並未通過BVH的根節點,則光線並未與BVH所包圍的任一基元交集,並且,針對此組基元,該光線不再需要進一步處理。如果光線通過BVH的第一子節點而不是第二子節點,則光線不需針對由第二子節點所包圍的任何基元作測試。以此方式,BVH提供有效機制,以測試光線-基元交集。
稱為“光束”的相鄰光線群組可以針對BVH加以測試,而不是個別的光線。圖32示出為四個不同光線所繪出的例示光束3201。與該四光線所界定的貼片3200相交的光線係被認為在相同光束內。雖然在圖32中的光束3201被以矩形配置的光線界定,但光束可以以各種其他方式(例如,圓形、橢圓等)加以界定,但仍符合本發明的基本原理。
圖33示出GPU 3320的光線追蹤引擎3310如何實施於此所述之光束追蹤技術。更明確地說,光線產生電路3304產生多數光線,用於將要被執行的遍歷與交集操作。然而,不同於針對個別光線執行遍歷與交集操作,遍歷與交集操作係使用為光線階層結構電路3305所產生的階層光束3307加以執行。光束階層係類似於包圍體階層(BVH)。例如,圖34提供主光束3400的例子,其可以被細分為多數不同成分。更明確地說,主光束3400可以被細分為象限(四分體)3401-3404,並且,各個象限本身可以細分為子象限,例如在象限3404內的子象限A-D。主光束可以以各種方式加以細分。例如,主光束可以細分一半(而不是四分體)及各個半分體可以再細分一半,以此類推。不管細分係如何完成,階層結構係以類似於BVH的方式產生,例如,具有表示主光束3400的根節點、第一層子節點,各個子節點以象限3401-3404代表、第二層子節點,用於各種子象限A-D,以此類推。
一旦建構光束階層3307,遍歷/交集電路3306可以使用光束階層3307與BVH 3308來執行遍歷/交集操作。更明確地說,它可以針對BVH與光束中並未與BVH的任何部分交集的汰除部分,測試光束。例如,使用如圖34所示之資料,如果有關於子區3402及3403的子光束並未與BVH或BVH的特定分支交集,則它們可能相對於BVH或分支而被汰除。剩餘部分3401、3404可以藉由執行深度第一搜尋或其他搜尋演算法,針對BVH加以測試。
光線追蹤的方法係顯示於圖35。該方法可以實施在上述圖形處理架構的上下文內,但並未限定至任何特定架構。
在3500,主光束被建構以包含多數光線,並且,在3501,光束被細分並產生階層資料結構,以建立光束階層。操作3500-3501可以被執行為單一積集操作,其由多數光線建立光束階層。在3502,光束階層係被與BVH一起使用,以(從光束階層)汰除光線及/或從BVH汰除節點/基元。在3503,決定用於剩餘光線與基元的光線基元交集點。
在分散式光線追蹤系統中的有損及無損封包壓縮
光線追蹤操作可以被分散至網路上耦接在一起的多數計算節點上。例如,圖36顯示光線追蹤叢集3600,其包含多數光線追蹤節點3610-3613,平行執行光線追蹤操作,可能結合這些結果在這些節點之一節點上。在所示架構中,光線追蹤節點3610-3613係經由閘道被通訊地耦接至客戶端光線追蹤應用3630。
分散式架構的一個困難點為有大數量的封包資料必須被傳送於各個光線追蹤節點3610-3613之間。無損壓縮技術及有損壓縮技術均可以被使用以降低傳送於光線追蹤節點3610-3613間的資料。
為了實施無損壓縮,而不是發送被填入某類型操作的結果的封包,資料或命令係被發送以允許接收節點重組這些結果。例如,隨機取樣區域光與環境光遮蔽(AO)操作並不必然需要方向。因此,傳送節點可以簡單地送出隨機種子,其然後為接收節點所使用以執行隨機取樣。例如,如果場景分散於節點3610-3612,以取樣光1在點p1-p3,只有光ID與原點需要被送至節點3610-3612。各個節點可能然後獨立隨機取樣光。隨機種子可以為接收節點所產生。類似地,對於主光線命中點,環境光遮蔽(AO)與軟陰影取樣可以在節點3610-3612上計算出,而不必等待用於後續框的原始點。另外,如果已知一組光線將進入相同點光源,則指令可以被送出,識別光源給接收節點,其將它應用至該組光線。另一例子中,如果有N個環境光遮蔽光線傳送單一點,則一命令可以被送出,以由此點產生N取樣。
各種額外技術可以應用於有損壓縮。例如,量化因數可以被使用以量化與BVH、基元及光線有關的所有座標值。另外,例如BVH節點與基元的資料所用的32位元浮點值可以被轉換為8位元整數值。在例示實施法中,光線封包的邊界係被以全精度儲存,但個別光線點P1-P3係被傳送為到這些邊界索引偏移。同樣地,多數本地座標系統可以被產生,其中使用8位元整數值作為本地座標。各個這些本地座標系統的原點的位置可以使用全精度(例如,32位元浮點)值加以編碼,有效連接全域與本地座標系統。
不同於將用於各個所產生的每個節點的原始資料發送,此資料可以藉由分組值與儘可能使用可應用元資料而建立隱含光線而加以壓縮。
所有光線資料被封裝,除了單一原點被儲存於所有光線。RayPacket.flags被設定用於
RAYPACKET_COMMON_ORIGIN。當RayPacket被接收時被解封包,原點被由單一原點值填入。
原點只被分享於部分光線
所有光線資料被封裝,除了分享原點的光線之外。對於各個群的特有共享原點,被包裝有運算子,其指明該操作(共享原點)、儲存原點、及遮罩哪些光線共享資訊。此一操作可以在節點間的任何共享值上完成,例如,材料ID、基元ID、原點、方法、法線等。
發送隱含光線
常常,光線資料可以以用以產生它的最小元資訊,在接收端導出。很常見例子為產生多數次光線,以隨機取樣一區域。不同於發送者產生次光線,發送它,及接收者對之操作,發送者也可以發送一命令,一光線需要被以任何附屬資訊產生,以及,該光線係在接收端被產生。當光線需要被發送者所先產生,以決定它要送去哪個接收器時,該光線被產生,及隨機種子可以被送出,以再生完全相同的光線。
例如,為了以64陰影光線取樣一面光源來取樣命中點,所有64光線與來自相同計算N4的區域交集。建立了具有常見原點與法線的光線封包(RayPacket)。如果有想要接收器改變所得像素貢獻,則可以送出更多資料,但對此例子,我們假設只是想要回覆一光線是否命中另一節點資料。光線操作(RayOperation)被建立用於產生陰影光線操作,並將該光ID(lightID)的值指定為被取樣,及隨機數種子。當N4接收光線封包時,它藉由將共享原點資料填入所有光線並根據以隨機數種子所隨機取樣的光ID來設定方向,以產生全填滿光線資料,以產生與原始發送者所產生相同的光線。當結果被回覆時,對於每光線只需要回覆二進制結果,這可以藉由在光線上的遮罩加以處理。
在此例子中,發送原始64光線將使用104位元組*64光線=6656位元組。如果回覆光線以其原始形式送出,則這也將加倍成為13312位元組。使用只發送共同光線原點、法線、及具有種子與ID的光線產生操作的無損壓縮,只有29位元組被送出,8位元組被回覆用於被交集的遮罩。這造成需要在網路上傳送的資料壓縮率為~360:1。這並不包含處理信息本身的負擔,雖然它需要被以一些方式指明,但它將取決於實施法而定。其他操作也可以完成,用以由主光線的像素ID再計算光線原點及方向、根據在光線封包內的範圍,再計算像素ID、及用以再計算值的很多其他可能實施法。類似操作可以被使用,以用於送出的任一單一或群組光線,包含陰影、反射、折射、環境光遮蔽、交集、體積交集、遮影、在路徑追蹤中的彈跳反射等。
圖37示出兩個光線追蹤節點3710-3711的其他細節,其執行光線追蹤封包的壓縮與解壓縮。更明確地說,當第一光線追蹤引擎3730準備將資料發射至第二光線追蹤引擎3731時,光線壓縮電路3720執行光線追蹤資料的有損及/或無損壓縮,如於此所述(例如,將32位元值轉換為8位元值、以指令替代原始資料,以重建資料等等)。壓縮光線封包3701係被由網路介面3725透過本地網路(例如,10Gb/s、100Gb/s乙太網路)被傳送至網路介面3726。光線解壓縮電路然後於適當時解壓縮該光線封包。例如,它可以執行命令,以重建光線追蹤資料(例如,使用隨機種子,以執行用於光操作的隨機取樣)。光線追蹤引擎3731然後使用所接收資料,以執行光線追蹤操作。
在逆向中,光線壓縮電路3741壓縮光線資料、網路介面3726傳送壓縮光線資料於網路上(例如,使用於此所述技術)、光線解壓縮電路3740,於必要時,解壓縮光線資料、及光線追蹤引擎3730使用該資料於光線追蹤操作中。雖然於圖37所示為分開單元,但光線解壓縮電路3740-3741可以分別積集於光線追蹤引擎3730-3731之內。例如,於此點,壓縮光線資料包含重建光線資料的命令,這些命令可以被每個個別光線追蹤引擎3730-3731所執行。
如於圖38所示,光線壓縮電路3720可以包含有損壓縮電路3801,用以執行於此所述之有損壓縮技術(例如,將32位元浮點座標轉換為8位元整數座標),及無損壓縮電路3803,用以執行無損壓縮技術(例如,傳送命令與資料,以允許光線再壓縮電路3821重建該資料)。光線解壓縮電路3721包含有損解壓縮電路3802與無損解壓縮電路3804,用以執行無損解壓縮。
另一例示方法被顯示於圖39。該方法可以被實施於光線追蹤架構上或其他於此所述之架構上,但並不限定於任何特定架構。
在3900,光線資料被接收,其將由第一光線追蹤節點傳送至第二光線追蹤節點。在3901,有損壓縮電路對第一光線追蹤資料執行有損壓縮,及,在3902,無損壓縮電路對第二光線追蹤資料執行無損壓縮。在3903,壓縮光線追蹤資料被傳送至第二光線追蹤節點。在3904,有損/無損解壓縮電路執行光線追蹤資料的有損/無損解壓縮,及在3905,第二光線追蹤節點使用該解壓縮資料執行光線追蹤操作。
具有硬體加速混合光線追蹤的圖形處理器
接著呈現一混合描繪管線,其在圖形核心3130上執行光柵化及在光線追蹤核心3150、圖形核心3130、及/或CPU 3199核心上執行光線追蹤操作。例如,光柵化與深度測試可以執行於圖形核心3130上,代替主光線投射級。光線追蹤核心3150然後可以產生次光線,用以光線反射、折射、及陰影。另外,場景中光線追蹤核心3150(例如,根據如高反射位準的材料特性臨限)將執行光線追蹤操作的某些區域將被選擇,而場景的其他區域將被以在圖形核心3130上的光柵化描繪。此混合實施法可以被用於即時光線追蹤應用-其中潛時為重要事項。
以下所述之光線遍歷架構可以例如使用現存單指令多資料(SIMD)及/或單指令多線程(SIMT)圖形處理器,來執行可程式著色與光線遍歷的控制,而例如BVH遍歷及/或交集的加速重要功能,則使用專用硬體。非一致路徑的SIMD佔用率可以藉由在遍歷期間或在著色前,在特定點重新群組繁衍著色器加以改良。這係藉由使用專用硬體加以完成,該專用硬體自動排序在晶片上的著色器。藉由將一功能分割成在回覆時執行的連續段及在執行前重新分組連續段,而管理遞迴,以改良SIMD佔用率。
可程式控制光線遍歷/交集係藉由將遍歷功能分解成內遍歷與外遍歷而完成,內遍歷可以被實施為固定功能硬體,外遍歷則執行於GPU處理器上並透過使用者界定遍歷著色器完成可程式控制。將遍歷上下文傳送於硬體與軟體間的成本係藉由在內與外遍歷轉換期間,將內遍歷狀態保守地截斷而降低。
光線追蹤的可程式控制可以透過列於下表A中之不同著色器類型加以表示。各個類型,可能有多個著色器。例如,各個材料可以具有不同命中著色器。
表A
著色器類型 | 功能 |
主 | 發動主光線 |
命中 | 雙向反射分配函數(BRDF)取樣,發動次光線 |
任何命中 | 計算α材質幾何的透射率 |
未中 | 計算來自光源的輻射率 |
交集 | 交集定製形狀 |
遍歷 | 實例選擇與轉換 |
可呼叫 | 通用功能 |
遞迴光線追蹤可以為API功能所初始,該API功能命令圖形處理器發動一組主著色器或交集電路,其可以繁衍用於主光線的光線-場景交集點。這隨後繁衍其他著色器,例如,遍歷、命中著色器、或未中著色器。繁衍子著色器的著色器也可以從該子著色器接收回覆值。可呼叫著色器為通用功能,其可以直接為另一著色器所繁衍並也可以回覆值給該呼叫著色器。
圖40示出圖形處理架構,其包含著色器執行電路4000及固定功能電路4010。該通用執行硬體子系統包含:多數單指令多資料(SIMD)及/或單指令多線程(SIMT)核心/執行單元(EU)4001(即,各個核心可以包含多數執行單元)、一或更多取樣器4002、及第一階(L1)快取4003或其他形式的本地記憶體。固定功能硬體子系統4010包含信息單元4004、排程器4007、光線-BVH遍歷/交集電路4005、排序電路4008、及本地L1快取4006。
在操作中,主調度器4009將一組主光線調度至該排程器4007,其將工作排程給執行於SIMD/SIMT核心/EU4001上的著色器。SIMD核心/EU4001可以是上述之光線追蹤核心3150及/或圖形核心3130。主著色器的執行繁衍將要執行的額外工作(例如,為一或更多子著色器及/或固定功能硬體所執行)。信息單元4004分配為該SIMD核心/EU 4001所繁衍的工作給排程器4007(如所需地存取自由堆疊池)、排序電路4008、或光線BVH交集電路4005。如果額外工作被送至排程器4007,則它被排程以供在SIMD/SIMT核心/EU4001上處理。在排程前,排序電路4008可以將光線排序成群組或如此所述之盒(例如,分組具有類似特徵的光線)。光線-BVH交集電路4005使用BVH體積執行光線的交集測試。例如,光線-BVH交集電路4005可以將光線座標與各個層的BVH相比,以識別出為該光線所交集的體積。
著色器可以使用著色器記錄、包含至登錄功能的指標的使用者-分配結構、特定販賣者元資料、及對為SIMD核心/EU 4001所執行的著色器的全域引數加以參考。著色器的各個執行實例係相關於一呼叫堆疊,其可以被用以儲存在母著色器與子著色器間傳送的引數。呼叫堆疊也可以儲存對呼叫回覆時所要執行的連續功能的參考。
圖41示出例示組的指定堆疊4101,其包含主著色器堆疊、命中著色器堆疊、遍歷著色器堆疊、連續功能堆疊、及光線-BVH交集堆疊(其可以如所述為固定功能硬體4010所執行)。新著色器調用可以實行來自自由堆疊池4102的新堆疊。例如,包含在該組指定堆疊內的呼叫堆疊可以是在本地L1快取4003、4006中被快取,以降低存取的潛時。
其中可以有有限數量的呼叫堆疊,各個堆疊具有被分配於記憶體的相鄰區域中的固定最大尺寸“Sstack”。因此,堆疊的基礎位址可以直接由堆疊索引(SID)計算出成為基礎位址=SID*Sstack。當將工作排程給SIMD核心/EU 4001時,堆疊ID可以為排程器4007所分配與解除配置。
主調度器4009可以包含圖形處理器命令處理器,其回應於來自主機(例如,CPU)的調度命令,調度主著色器。排程器4007可以接收這些調度請求,並且,如果它可以將堆疊ID分配給各個SIMD巷道,則在SIMD處理器線程上發動主著色器。堆疊ID可以被由自由堆疊池4102分配,該堆疊池在調度命令開始時被初始化。
執行著色器可以藉由將繁衍信息送給信息單元4004,以繁衍子著色器。此命令包含與該著色器相關的堆疊ID,並且,也包含用於各個作動SIMD巷道的子著色器記錄的指標。母著色器對於一作動巷道只能發出此信息一次。在對所有相關巷道發送繁衍信息後,母著色器可以終止。
執行於SIMD核心/EU 4001上的著色器也可以使用具有保留用於固定功能硬體的著色器記錄指標的繁衍信息,來繁衍例如光線-BVH交集的固定功能工作。如所述,信息單元4004發送繁衍的光線-BVH交集工作至固定功能光線-BVH交集電路4005及可呼叫著色器直接至排序電路4008。排序電路可以以著色器記錄指標來分組所述著色器,以推導出具有類似特徵的SIMD批次。因此,來自不同母著色器的堆疊ID可以為排序電路4008所分組在相同批次中。排序電路4008將群組批次發送給排程器4007,其從圖形記憶體2511或最後階快取(LLC)4020存取該著色器記錄並在處理器線程上,發動著色器。
連續可以被視為可呼叫著色器並也可以參考著色器記錄。當子著色器被繁衍並回覆值給母著色器時,至連續著色器記錄的指標可以被推入至呼叫堆疊4101。當子著色器回覆時,連續著色器記錄然後可以由呼叫堆疊4101爆出,以及,連續著色器可以繁衍。可選地,所繁衍的連續可以類似於可呼叫著色器通過排序單元,並在處理器線程上發動。
如於圖42所示,排序電路4008以著色器記錄指標4201A、4201B、4201n
分組繁衍工作,以建立用於著色的SIMD。在排序批次中的堆疊ID或上下文ID可以由不同調度或不同輸入SIMD巷道分組。分組電路4210可以使用內容可定址記憶體(CAM)結構4201執行排序,該CAM結構包含多數登錄項,各個登錄項被標註有一標籤4201。如所述,標籤4201可以是對應著色器記錄指標4201A、4201B、4201n
。CAM結構4201可以儲存有限數量的標籤(例如,32、64、128等),各個相關於對應於著色器記錄指標的未完成SIMD批次。
對於輸入繁衍命令,各個SIMD巷道具有一對應堆疊ID(如所示,在各個CAM登錄項中,有16上下文ID 0-15)及著色器記錄指標4201A-B、…n
(作為標籤值)。分組電路4210可以比較各個巷道的著色器記錄指標與在CAM結構4201中的標籤4201,以找出匹配批次。如果找到匹配批次,則堆疊ID/上下文ID可以加入該批次。否則,可以建立具有新著色器記錄指標標籤的新登錄項,可能逐出具有未完成批次的較舊登錄項。
當藉由發送解除配置信息給信息單元而排空呼叫堆疊時,執行著色器可以解除配置呼叫堆疊。解除配置信息係被轉接給排程器,其將用於作動SIMD巷道的堆疊ID/上下文ID回覆給空閒池。
現在呈現出用於光線追蹤操作的混合手法,其使用固定功能光線遍歷與軟體光線遍歷的組合。因此,其提供軟體遍歷的彈性並且也維持固定功能遍歷的效率。圖43顯示加速結構,其可以用於混合遍歷,其係為兩層樹,具有單一頂層BVH 4300與幾個底層BVH 4301與4302。右側所示的圖形元件表示內遍歷路徑4303、外遍歷路徑4304、遍歷節點4305、具有三角形的葉節點4306、及具有客製基元的葉節點4307。
在頂層BVH 4300中的具三角形的葉節點4306可以參考三角形、用於客製基元的交集著色器記錄或者遍歷著色器記錄。底層BVH 4301-4302的具有三角形的葉節點4306可以只參考三角形與用於客製基元的交集著色器記錄。這類型的參考被編碼在葉節點4306中。內遍歷4303表示在各個BVH 4300-4302中的遍歷。內遍歷操作包含光線-BVH交集的計算,以及跨BVH結構4300-4302的遍歷係被稱為外遍歷。內遍歷操作可以被有效地實施於固定功能硬體內,而外遍歷操作可以以可程式著色器執行並具有可接受效能。因此,內遍歷操作可以使用固定功能電路4010執行,而外遍歷操作可以使用著色器執行電路4000執行,其包含用以執行可程式著色器的SIMD/SIMT核心/EU 4001。
注意,SIMD/SIMT核心/EU 4001有時在此為了簡明目的被簡稱為“核心”、“SIMD核心”、“EU”、或“SIMD處理器”。同樣地,光線-BVH遍歷/交集電路4005有時被簡稱為“遍歷單元”、“遍歷/交集單元”或“遍歷/交集電路”。當使用替代用語時,用以指明個別電路/邏輯的特定名稱並不改變在此所述之電路/邏輯執行的基本功能。
再者,雖然為了解釋目的,在圖40中被顯示為單一組件,但遍歷/交集單元4005可以包含分開之遍歷單元與分開之交集單元,其各個可以如此所述被實施於電路及/或邏輯中。
當在內遍歷期間光線交集遍歷節點時,遍歷著色器可以被繁衍。排序電路4008可以藉由著色器記錄指標4201A-B、n
來分組這些著色器,以建立SIMD批次,其係為排程器4007所發動,以使SIMD執行於圖形SIMD核心/EU 4001上。遍歷著色器可以以幾方式修改遍歷,完成大範圍的應用。例如,遍歷著色器可以選擇較粗級的細節(LOD)的BVH,或者,將光線轉換,以完成強壯主體轉換。遍歷著色器可以然後繁衍內遍歷,以用於所選擇BVH。
內遍歷藉由遍歷BVH與計算光線-盒與光線-三角交集,而計算光線-BVH交集點。內遍歷係以與著色器相同方式加以繁衍,藉由將一信息送至信息電路4004,其將對應繁衍信息轉送給計算光線-BVH交集的光線-BVH交集電路4005。
用於內遍歷的堆疊可以被本地儲存在固定功能電路4010(例如,在L1快取4006)中。當光線交集對應於遍歷著色器或交集著色器的葉節點時,內遍歷可以終止並且內堆疊被截斷。具有對該光線與BVH的指標的截斷堆疊可以在呼叫著色器所指定的位置被寫入記憶體,並且,然後可以繁衍對應遍歷著色器或交集著色器。如果在內遍歷期間,光線交集任何三角形,則對應命中資訊可以提供給這些著色器作為輸入引數,如於以下碼所示。這些繁衍著色器可以為排序電路4008所分組,以建立用以執行的SIMD批次。
截斷內遍歷堆疊降低了將之溢入記憶體的成本。在高效圖形(2010)第107-111頁所述之“用於無堆疊BVH遍歷的重新開始尾端”所述的手法中,為了截斷該堆疊為在堆疊的頂部的小量登錄項,可以應用42位元重新開始尾端與6位元深度值。重新開始尾端表示在BVH內已經採用的分支,及深度值表示對應於最後堆疊登錄項的遍歷深度。這是足夠資訊,以在後續時間中,回復內遍歷。
當內堆疊空白及沒有BVH節點測試時,內遍歷完成。在此時,外堆疊處置器係被繁衍,這爆出外堆疊的頂部,如果外堆疊不是空白,則重新開始遍歷。
外遍歷可以執行主遍歷狀態機器並可以實施為著色器執行電路4000所執行的程式碼。其在以下條件下,可以繁衍內遍歷查詢:(1)當新光線為命中著色器或主著色器所繁衍時;(2)當遍歷著色器選擇用於遍歷的BVH時;及(3)當外堆疊處置器重新開始用於BVH的內遍歷。
如於圖44所示,在繁衍內遍歷前,空間係分配於呼叫堆疊4405上,以供固定功能電路4010儲存截斷內堆疊4410。對呼叫堆疊與內堆疊的頂部的偏移4403-4404也被維持在遍歷狀態4400中,其也被儲存在記憶體2511中。遍歷狀態4400也包含在世界空間4401與目標空間4402中的光線,以及,用於最近交集基元的命中資訊。
遍歷著色器、交集著色器與外堆疊處置器均為光線-BVH交集電路4005所繁衍。在初始用於第二層BVH的新內遍歷之前,遍歷著色器分配於呼叫堆疊4405上。外堆疊處置器係為一著色器,其負責更新命中資訊及重新開始任何暫停內遍歷工作。外堆疊處置器也負責當遍歷完成時,繁衍命中或未中著色器。當沒有暫停內遍歷查詢繁衍時,遍歷完成。當遍歷完成及找出一交集點時,繁衍出命中著色器;否則,繁衍出未中著色器。
雖然上述混合遍歷方案使用二層BVH階層,但也可以實施在外遍歷實施法中具有對應改變的任意數目的BVH層。
另外,雖然上述的固定功能電路4010係用以執行光線-BVH交集,但其他系統組件也可以被實施在固定功能電路中。例如,上述外堆疊處置器也可以為內部(使用者所看不到)著色器,其也可能被實施於固定功能BVH遍歷/交集電路4005中。此實施法也可以用以減少調度著色器階層數目以及在固定功能交集硬體4005與處理器間之往返。
於此所述之例子致能使用使用者界定功能的可程式著色與光線遍歷控制可以被以較大SIMD效率被執行在現行與未來GPU處理器上。光線遍歷的可程式控制完成幾個重要特性,例如,程序實例化、隨機的細節層的選擇、客製基元交集與遲緩BVH更新。
也提供了一種可程式、多指令多資料(MIMD)光線追蹤架構,其支援命中與交集著色器的臆測執行。更明確地說,架構聚焦於降低有關以上圖40所述的可程式SIMD/SIMT核心/執行單元4001以及在混合光線追蹤架構中的固定功能MIMD遍歷/交集單元4005間的排程與通訊負擔。命中與交集著色器的多數臆測執行方案係被描述如下,其可以由遍歷硬體以單一批次加以調度,避免了幾次遍歷與著色往返。也可以使用用以實施這些技術的專用電路。
本發明之實施例係特別有利於想要來自光線遍歷查詢的多數命中或交集著色器的執行,當沒有專用硬體支援實施下,會造成大量的負擔的使用情況。這些包含但並不限於最近k-命中查詢(發動用於k最接近交集的命中著色器)與多數可程式交集著色器。
於此所述之技術可以被實施為圖40所示(並針對圖40-44說明)之架構的擴充。更明確地說,本發明的現在實施例將建立於此強化架構中,以改良上述使用情況的效能。
混合光線追蹤遍歷架構的效能限制為來自執行單元的發動遍歷查詢的負擔與由光線追蹤硬體調用可程式著色器的負擔。當在相同光線的遍歷期間,多數命中或交集著色器被調用時,此負擔在可程式核心4001與遍歷/交集單元4005間產生“執行往返”。這也另外對排序單元4008施加額外壓力,其需要由個別著色器調用中抽出SIMD/SIMT一致性。
光線追蹤的幾個方面需要可程式控制,其可以透過以上表A所列的不同著色器類型(即,主、命中、任何命中、未中、交集、遍歷、及可呼叫)加以表達。對於各個類型,有多種著色器。例如,各個材料可以具有不同命中著色器。部分這些著色器類型係被界定於現行微軟®
光線追蹤API。
在簡單檢視中,遞迴光線追蹤為API功能所初始,該API功能命令GPU以發動一組主著色器,其可以繁衍光線-場景交集(以硬體及/或軟體實施),用於主光線。這隨後可以繁衍其他著色器,例如,遍歷、命中或未中著色器。繁衍子著色器的著色器也可以接收來自該著色器的回覆值。可呼叫著色器為通用功能,其可以直接為另一著色器所繁衍並也可以將值回覆給該呼叫著色器。
藉由遍歷與交集在包圍體階層(BVH)中的節點,光線遍歷計算光線-場景交集點。近來研究已經顯示計算光線-場景交集點的效率可以藉由使用較適用於固定功能硬體的技術,例如,降精度演算法、BVH壓縮、每光線狀態機器、專用交集管線及客製快取而改良超過一數量級。
示於圖40的架構包含此一系統,其中,一陣列的SIMD/SIMT核心/執行單元4001與固定功能光線追蹤/交集單元4005互動,以執行可程式光線追蹤。可程式著色器係被映射至在執行單元/核心4001上的SIMD/SIMT線程,其中,SIMD/SIMT利用率、執行與資料一致性為最佳效能的重點。光線查詢經常於各種原因而拆散一致性,例如:
‧遍歷發散:BVH遍歷的持續時間在光線有利非同步光線處理間高度改變。
‧執行發散:由相同SIMD/SIMT線程的不同巷道繁衍的光線可能造成不同著色器調用。
‧資料存取發散:命中不同表面的光線取樣不同BVH節點與基元,以及著色器存取例如不同材質。各種其他情況可能使得資料存取發散。
SIMD/SIMT核心/執行單元4001可以是於此所述之核心/執行單元的變化例,包含圖形核心415A-415B、著色器核心1355A-N、圖形核心3130、圖形執行單元608、執行單元852A-B、或任何其他於此所述之核心/執行單元。SIMD/SIMT核心/執行單元4001可以用於替代圖形核心415A-415B、著色器核心1355A-N、圖形核心3130、圖形執行單元608、執行單元852A-B、或任何其他於此所述之核心/執行單元。因此,任何結合圖形核心415A-415B、著色器核心1355A-N、圖形核心3130、圖形執行單元608、執行單元852A-B、或任何其他於此所述之核心/執行單元的特性的揭露也揭露了圖40的SIMD/SIMT核心/執行單元4001的對應結合,但並不限於此。
固定功能光線追蹤/交集單元4005可以藉由個別地與失序地處理各個光線,而克服前兩個挑戰。然而,這打亂SIMD/SIMT群組。因此,排序單元4008負責形成新的一致SIMD/SIMT群組,其著色器調用被再次調度至執行單元。
相較於直接在SIMD/SIMT處理器上實施的純軟體為主光線追蹤實施法,可以容易看出此架構的優點。然而,其中有與在SIMD/SIMT核心/執行單元4001(有時在此簡稱SIMD/SIMT處理器或核心/EU)與MIMD遍歷/交集單元4005間的發信相關的負擔。再者,排序單元4008可能不會由非一致著色器呼叫抽取完美SIMD/SIMT利用。
使用案例可以被識別出,其中在遍歷期間,著色器調用可能特別頻繁。特別對混合MIMD光線追蹤處理器加強說明,以顯著降低在核心/EU 4001與遍歷/交集單元4005間的通訊負擔。這可能特別有利於尋找k-最近交集點及可程式交集著色器的實施法。然而,注意,於此所用之技術並不限於任何特定處理情況。
以下提供在核心/EU 4001與固定功能遍歷/交集單元4005間的光線追蹤上下文切換的高階成本的總結。每當單光線遍歷期間,著色器調用為必要時,多數效能負擔係由這兩上下文切換所造成。
發動光線的各個SIMD/SIMT巷道對與要遍歷的BVH相關的遍歷/交集單元4005產生繁衍信息。資料(光線遍歷上下文)經由繁衍信息與(快取)記憶體被轉發給遍歷/交集單元4005。當遍歷/交集單元4005準備指定新硬體線程給繁衍信息時,它載入遍歷狀態並在BVH上執行遍歷。其中也有設立成本,其需要在BVH上的第一遍歷步驟之前執行。
圖45示出可程式光線追蹤管線的操作流程。包含遍歷4502與交集4503的著色元件可以被實施在固定功能電路中,而其他剩餘元件可以以可程式核心/執行單元實施。
主光線著色器4501將工作發送給遍歷電路於4502,其遍歷現行光線透過BVH(或其他加速結構)。當到達葉節點時,遍歷電路呼叫交集電路於4503,其於識別光線-三角形交集時,調用在4504的任何命中著色器(如所示,其可以提供結果回到遍歷電路)。
或者,遍歷可以在到達葉節點之前終止,及在4507調用最近命中著色器(如果記錄到一命中),或者在4506調用未中著色器(如果有未中)。
如在4505所示,交集著色器可被調用,如果遍歷電路到達客製基元葉節點。客製基元可以是任何非三角形基元,例如,多角形或多面體(例如,四面體、體元、六面體、楔、角錐、或其他“未結構”體)。交集著色器4505對任何命中著色器4504識別在該光線與客製基元間之交集,以實施任何命中處理。
當硬體遍歷4502到達可程式階段,遍歷/交集單元4005可以產生著色器調度信息給相關著色器4505-4507,其對應於用以執行該著色器的執行單元的單一SIMD巷道。因為調度發生於任何順序的光線,並且,它們在所呼叫程式中為發散的,所以,排序單元4008可以累積多數調度呼叫以抽取一致SIMD批次。更新遍歷狀態與選用著色器引數可以為遍歷/交集單元4005所寫入記憶體2511中。
在k-最近交集問題中,最近命中著色器4507係被執行用於前面k個交集。在傳統方式中,這將表示找到最近交集、調用命中著色器、及由命中著色器繁衍新光線,以找出下一最近交集(以光線原點偏移,使得相同交集將不會再次發生)時,會結束光線遍歷。可以容易看出,此實施法對於單一光線將需要k光線繁衍。以任何命中著色器4504、調用所有交集並維持最近交集的一全域名單,使用插入排序操作,來操作的另一實施法。此手法的主要問題為任何命中著色器調用沒有上限。
如所述,交集著色器4505可能調用非三角(客製)基元。取決於交集測試的結果與遍歷狀態(暫停節點與基元交集),相同光線的遍歷可能在執行交集著色器4505後繼續。因此,找出最近命中可能需要對該執行單元的幾個往返。
也可以聚焦於透過改變遍歷硬體與著色器排程模型,而降低交集著色器4505與命中著色器4504、4507的SIMD-MIMD上下文交換。首先,光線遍歷電路4005藉由累積多數可能調用與將之以較大批次調度,而延遲著色器調用。另外,某些可能變成不必要的調用也可以在此階段被汰除。再者,著色器排程器4007可以將來自相同遍歷上下文的多數著色器調用聚集成為單一SIMD批次,這造成單一光線繁衍信息。在一例示實施法中,遍歷硬體4005懸置遍歷線程並等待多數著色器調用的結果。此操作模式在此被稱為“臆測”著色器執行,因為它允許多數著色器的調度,當使用序向調用時,其一部分可能未被呼叫。
圖46A顯示一例子,其中遍歷操作遭遇呈子樹的多數客製基元4650,以及圖46B顯示這是如何以三個交集調度循環C1-C3加以解決。更明確地說,排程器4007可能需要三個循環,以將該工作提呈給SIMD處理器4001,及該遍歷電路4005需要三個循環,以提供結果至排序單元4008。為遍歷電路4005所需之遍歷狀態4601可以被儲存在例如本地快取(例如,L1快取及/或L2快取)的記憶體中。
A. 延遲光線追蹤著色器調用
硬體遍歷狀態4601被管理以允許多數可能交集或命中調用的累積在名單中的方式也可以加以修改。在遍歷期間的給定時間中,在名單中的各個登錄項可以被使用以產生著色器調用。例如,k最接近交集點可以被累積於遍歷硬體4005上及/或記憶體中的遍歷狀態4601中,及如果遍歷完成的話,命中著色器可以每一元件加以調用。對於命中著色器,多數可能交集可以被累積於BVH的子樹中。
對於最近k使用案例,本手法的優點為不用至SIMD核心/EU 4001的k-1往返以及k-1新光線繁衍信息,所有命中著色器係在對遍歷電路4005上的單一遍歷操作期間,由相同遍歷線程所調用。此可能實施法的挑戰為保證命中著色器的執行順序(標準“往返”手法保證最接近交集的命中著色器被首先執行等)是很重要。這可以藉由命中著色器的同步化或者排序的放鬆加以針對。
對於交集著色器使用案例,遍歷電路4005並未事先知道給定著色器將回覆一正交集測試。然而,有可能臆測地執行多數交集著色器,以及如果至少一回覆正命中結果,則它被併入全域最接近命中。特殊實施法需要找出最佳數量的延遲交集測試,以降低調度呼叫的數目,而又避免呼叫太多冗餘交集著色器。
B. 聚合來自遍歷電路的著色器調用
當調度來自相同光線繁衍的多數著色器於遍歷電路4005上時,可以在光線遍歷演算法的流程中建立分支。這對於交集著色器可能有問題,因為其餘的BVH遍歷取決於所有調度交集測試的結果。這表示同步化操作必須等待著色器調用的結果,其對非同步硬體可能是挑戰。
合併著色器呼叫結果的兩重點可以是:SIMD處理器4001、及遍歷電路4005。有關於SIMD處理器4001,多數著色器可以使用標準程式模型,同步化與聚合其結果。一個如此作的相對簡單方式為使用全域原子並聚合結果於記憶體中的共享資料結構中,其中,多數著色器的交集結果可以被儲存。然後,最後著色器可以解析資料結構並回呼遍歷電路4005以持續該遍歷。
也可以實施更有效手法,其限制在該SIMD處理器4001上的多數著色器調用在相同SIMD線程的巷道上執行。交集測試然後使用SIMD/SIMT縮減操作(而不是依據全域原子)本地地降低。此實施法可以依賴在排序單元4008內的新電路,以使得小批次著色器調用停留在相同SIMD批次中。
遍歷線程的執行可以進一步被懸置於遍歷電路4005上。使用傳統執行模型,當著色器在遍歷期間被調度時,遍歷線程被終止及光線遍歷狀態被儲存至記憶體,以允許當執行單元4001處理所述著色器的同時,其他光線繁衍命令被執行。如果遍歷線程只被懸置時,則遍歷狀態並不需要被儲存並可以分開地等待各個著色器結果。此實施法可以包含電路,以避免死鎖並提供足夠硬體利用率。
圖47-48示出一延遲模型的例子,其調用具有三個著色器4701的SIMD核心/執行單元4001上的單一著色器調用。當保留時,所有交集測試係在相同SIMD/SIMT群組內評估。因此,最近交集也可以在可程式核心/執行單元4001上計算。
如所述,所有或一部分的著色器聚合及/或延遲可以為遍歷/交集電路4005及/或核心/EU排程器4007執行。圖47示出在排程器4007內的著色器延遲/聚合器電路4706如何延遲有關於特定SIMD/SIMT線程/巷道的著色器的排程,直到發生指定觸發事件為止。於檢測到觸發事件時,排程器4007將在單一SIMD/SIMT批次中的多數聚合著色器調度至核心/EU 4001。
圖48示出在遍歷/交集電路4005內的著色器延遲/聚合器電路4805如何延遲與特定SIMD線程/巷道相關的著色器的排程,直到發生一指定觸發事件為止。於檢測觸發事件時,遍歷/交集電路4005提呈聚合著色器給在單一SIMD/SIMT批次中的排序單元4008。
然而,注意,著色器與聚合技術可以在各種其他組件內實施,例如,排序單元4008或者可以分散於多數組件上。例如,遍歷/交集電路4005可以執行第一組著色器聚合操作,及排程器4007可以執行第二組著色器聚合操作,以確保用於SIMD線程的著色器被有效排程在核心/EU 4001上。
造成聚合著色器被調度至核心/EU的“觸發事件”可以是例如一特定數量累積著色器或有關於特定線程的最小潛時的處理事件。替代地,或者,外加地,觸發事件可以是一時間事件,例如,由第一著色器延遲開始的某持續時間或者,特定數量的處理器循環。例如,在核心/EU 4001與遍歷/交集單元4005上的現行工作負載的其他變數也可以為排程器4007所評估,以確定何時調度SIMD/SIMT批次的著色器。
本發明的不同實施例可以根據被使用的特定系統架構與應用的需求,而使用以上手法的不同組合加以實施。
光線追蹤指令
以下所述之光線追蹤指令係被包括於CPU 3199與/或GPU 3105所支援的指令集架構(ISA)。如果為CPU所執行,則單一指令多資料(SIMD)指令可以利用向量/緊縮源與目的暫存器,以執行所述操作並可以為CPU核心所解碼與執行。如果為GPU 3105所執行,則指令可以為圖形核心3130所執行。例如,上述之任一執行單元(EU)4001可以執行所述指令。替代地,或外加地,所述指令可以為在光線追蹤核心3150及/或張量核心張量核心3140上的執行電路所執行。
圖49示出用以執行以下述光線追蹤指令的架構。所示架構可以積集於上述一或更多核心3130、3140、3150內(見,例如圖31與相關內文),或者,可以包含在不同處理器架構中。
操作中,指令擷取單元4903由記憶體3198擷取光線追蹤指令4900,及解碼器4995解碼該指令。在一實施法中,解碼器4995解碼指令,以產生可執行操作(例如,微運算或在微編碼核心中的微運算元)。或者,部分或所有光線追蹤指令4900可以在不解碼下執行,並且,因此,並不需要解碼器4904。
在任一實施法中,排程器/調度器4905排程與調度指令(或運算)於一組功能單元(FU)4910-4912上。所示實施法包含:向量FU4910,用以執行單一指令多資料(SIMD)指令,其同時操作儲存在向量暫存器4915中的多數緊縮資料元件;以及,純量FU 4911,用以操作儲存於一或更多純量暫存器4916中的純量值。選用光線追蹤FU 4912可以操作儲存於向量暫存器4915中的緊縮資料值及/或儲存於純量暫存器4916中的純量值。在一沒有專用FU 4912的實施法中,向量FU 4910與可能純量FU 4911可以執行以下所述之光線追蹤指令。
各種FU 4910-4912存取光線追蹤資料4902(例如,遍歷/交集資料)需要執行來自向量暫存器4915、純量暫存器4916及/或本地快取子系統4908(例如,L1快取)的光線追蹤指令4900。FU 4910-4912也可以經由負載及儲存操作,執行對記憶體3198的存取,及快取子系統4908可以獨立地操作以本地快取資料。
雖然光線追蹤指令可以被用以增加光線遍歷/交集與BVH建立的效能,但它們也可以應用至其他領域,例如,高效計算(HPC)與通用GPU(GPGPU)實施法。
在以下說明中,用語雙字有時簡稱dw
並無符號位元組被縮寫為ub
。另外,稱為如下(例如,src0、src1、dest等)的源與目的暫存器可以表示向量暫存器4915,或者,在一些情況中,向量暫存器4915與純量暫存器4916的組合。典型地,如果為指令所使用的源或目的值包含緊縮資料元件(例如,其中源或目的儲存N資料元件),則向量暫存器4915被使用。其他值可以使用純量暫存器4916或向量暫存器4915。
去量化
去量化指令的一例子“去量化”先前量化值。例如,在光學追蹤實施法中,某些BVH子樹可以被量化,以降低儲存與頻寬需求。去量化指令可以採去量化dest src0 src1 src2的形式,其中,源暫存器src0儲存N無符號位元組,源暫存器src1儲存1無符號位元組,源暫存器src2儲存1浮點值,及目的暫存器dest儲存N浮點值。所有這些暫存器可以是向量暫存器4915。或者,src0與dest可以為向量暫存器4915及src1與src2可以為純量暫存器4916。
以下碼序列界定去量化指令的一特定實施法:
在此例子中,Idexp將雙精度浮點值與2的指定整數冪次相乘(即,Idexp(x, exp)=x*2exp
)。在以上碼中,如果有關於現行SIMD資料元件的執行遮罩值(execMask[i])被設定為1,則在src0中的位置i的SIMD資料元件被轉換為浮點值並被乘以在src1中的值的整數冪次(2src1 值
)及此值係被加入至src2中的對應SIMD資料元件。選擇最小或最大
選擇最小或最大指令可以執行每巷道的最小或最大操作(即,回覆一組值的最小或最大),如於位元遮罩中之位元所表示。位元遮罩可以利用向量暫存器4915、純量暫存器4916、或分開組遮罩暫存器(未示出)。以下碼序列界定該最小/最大指令的一特定實施法:sel_min_max dest src0 src1 src2,其中src0儲存N雙字,src1儲存N雙字、src2儲存一雙字,及目的暫存器儲存N雙字。
以下碼序列界定選擇最小/最大指令的一特定實施法:
在此例子中,(1<<i)&src2(以1的左移i與src2和閘運算)的值係被使用以選擇在src0與src1中的第i個資料元件的最小或者在src0與src1中的第i個資料元件的最大。只有與現行SIMD資料元件有關的執行遮罩值(execMask[i])被設定為1時,該操作係被執行用於該第i個資料元件。
混洗索引指令
混洗索引指令可以將任一組輸入巷道複製至輸出巷道。對於32的SIMD寬度,此指令可以以較低通量加以執行。此指令採用形式:shuffle_index dest src0 src1<選用旗標>,其中src0儲存N雙字,src1儲存N無符號位元組(即,索引值),及dest儲存N雙字。
在上述碼中,在src1中的索引指明現行巷道。如果在執行遮罩中的第i值被設定為1,則執行檢查,以確保源巷道是在範圍0至SIMD寬度之內。如果是,則旗標被設定(srcLaneMod)與目的之資料元件i被設定等於src0的資料元件i。如果巷道在範圍內(即,有效),則來自src1的索引值(srcLane0)被使用作為進入src0的索引(dst[i]=src0[srcLane])。
立即混洗上/下/互斥或指令
立即混洗指令可以根據指令的立即值,混洗輸入資料元件/巷道。立即值可以根據立即值的值來指明將輸入巷道移位1、2、4、8、或16位置。選用地,額外純量源暫存器可以被指明為填入值。當源巷道索引無效時,填入值(如果有的話)被儲存至目的的資料元件位置。如果沒有填入值,則資料元件位置被設定為全都0。
旗標暫存器可以被使用作為源遮罩。如果用於源巷道的旗標位元被設定為1,則源巷道可以被標示為無效及指令可以進行。
於此,輸入資料元件/巷道係根據立即值的值而移動1、2、4、8或16位置。暫存器src1為額外純量源暫存器,其係被使用作為填入值,其係當源巷道索引無效時,被儲存在目的之資料元件位置。如果未提供填入值以及源巷道索引為無效,則在目的之資料元件位置被設定為0。旗標暫存器(FLAG)係被使用作為源遮罩。如果用於源巷道之旗標位元被設定為1,則源巷道係被標示為無效及指令如上所述地進行。
間接混洗上/下/互斥或指令
間接混洗指令具有源運算元(src1),其控制由源巷道的映射至目的巷道。間接混洗指令可以採形式:
suffle_<up/dn/xor>dest src0 src1<optional flag>
其中src0儲存N雙字,src1儲存1雙字,及dest儲存N雙字。
因此,間接混洗指令以類似於上述立即混洗指令的方式操作,但源巷道的映射至目的巷道係為源暫存器src1所控制,而不是立即值。
跨巷道最小/最大指令
跨巷道最小/最大指令可以支援浮點與整數資料類型。跨巷道最小指令可以採形式lane_min dest src0及跨巷道最大指令可以採形式lane_max dest src0,其中src0儲存N雙字與dest儲存1雙字。
例如,以下碼序列界定跨巷道最小的一個特定實施法:
在此例子中,在源暫存器的資料元件位置i中的雙字值係與在目的暫存器中的資料元件作比較,及兩值的最小係被複製至目的暫存器。跨巷道最大指令基本上以相同方式操作,唯一差異為在位置i中的資料元件的最大值及目的值被選擇。
跨巷道最小/最大索引指令
跨巷道最小索引指令可以採形式lane_min_index dest src0及跨巷道最大索引指令可以採形式lane_max_index dest src0,其中src0儲存N雙字及dest儲存1雙字。
例如,以下碼序列界定跨巷道最小索引指令的一特定實施法:
在此例子中,目的索引被由0增量至SIMD寬度,跨過目的暫存器。如果執行遮罩位元被設定,則在源暫存器中的位置i的資料元件被複製至暫時儲存位置(tmp)及目的索引被設定至資料元件位置i。
跨巷道排序網路指令
跨巷道排序指令可以以上升順序(sortnet_min)或下降順序(sortnet_max)使用N寬(穩定)排序網路,來排序所有N輸入元件。該指令的最小/最大版本可以分別採形式sortnet_min dest src0與sortnet_max dest src0。在一實施法中,src0與dest儲存N雙字。最小/最大排序係被執行於src0的N雙字上,及上升順序元件(用於最小)或下降順序元件(用於最大)係以其個別排序順序儲存在dest中。界定指令的碼序列的一例子為:
dst=apply_N_wide_sorting_network_min/max(src0)。
跨巷道排序網路索引指令
跨巷道排序網路索引指令可以排序所有N輸入元件,使用N-寬(穩定)排序網路,但以上升順序(sortnet_min)或下降(sortnet_max)回覆該置換索引。指令的最小/最大版本可以採形式sortnet_min_index dest src0與sortnet_max_index dest src0,其中src0與dest各個儲存N雙字。界定該指令的碼序列的一個例子為dst=apply_N_wide_sorting_network_min/max_index(src0)。
執行以上任一指令的方法係被示於圖50。該方法可以被實施在上述的特定處理器架構上,但並不限於任何特定處理器或系統架構。
在5001,主圖形線程的指令係被執行於處理器核心上。此可以例如包含上述任一核心(例如,圖形核心3130)。當光線追蹤工作到達主圖形線程內時,在5002決定光線追蹤指令被卸載至光線追蹤執行電路,其可以為如上有關圖49所述之功能單元(FU)的形式,或者,其可以在如有關圖31所述之專用光線追蹤核心3150中。
在5003,光線追蹤指令被解碼並被由記憶體擷取,及在5005,指令係被解碼成可執行操作(例如,在一實施例,其需要解碼器)。在5004,光線追蹤指令被排程及調度,用以為光線追蹤電路所執行。在5005,光線追蹤指令係為光線追蹤電路所執行。例如,指令可以調度並執行於上述FU上(例如,向量FU 4910、光線追蹤FU 4912等)及/或圖形核心3130或光線追蹤核心3150。
當執行光線追蹤指令完成時,結果被儲存在5006(例如,回存至記憶體3198)及在5007,主圖形線程係被通知。在5008,光線追蹤結果在主線程的上下文中被處理(例如,由記憶體讀出並積集入圖形描繪結果)。
在實施例中,用語“引擎”或“模組”或“邏輯”可以表示、部分是、或包含一特定應用積體電路(ASIC)、電子電路、處理器(共享、專用、或群組)、及/或記憶體(共享、專用、或群組),其執行一或更多軟體或韌體程式、組合邏輯電路、及/或其他提供所述功能的適當組件。在實施例中,引擎、模組或邏輯可以實施為韌體、硬體、軟體、或韌體、硬體與軟體的任意組合。
非同步光線追蹤的設備與方法
本發明的實施例包含固定功能加速電路與通用處理電路的組合,以執行光線追蹤。例如,有關於包圍體階層(BVH)的光線遍歷及交集測試的某些操作可以為固定功能加速電路所執行,而多數執行電路執行各種形式之光線追蹤著色器(例如,任何命中著色器、交集著色器、未中著色器等)。一個實施例包含雙高頻寬儲存記憶庫,其包含用於儲存光線的多數登錄項以及用以儲存BVH節點的對應雙堆疊。在此實施例中,遍歷電路交替於該雙光線記憶庫與堆疊之間,以在各個時鐘循環上處理光線。另外,一個實施例包含優先選擇電路/邏輯,其在內節點、非內節點及基元作區別,並使用此資訊以智慧地優先化BVH節點的處理以及由BVH節點所定界的基元。
一個特定實施例,藉由使用短堆疊以儲存在遍歷操作期間的有限數量的BVH節點,以降低遍歷所需的高速記憶體。此實施例包含堆疊管理電路/邏輯,以有效地爆出與推入登錄項進出該短堆疊,以確保有所需BVH節點可用。另外,遍歷操作藉由對追蹤資料結構執行更新,而被追蹤。當遍歷電路/邏輯暫停時,它可以諮詢追蹤資料結構,以在該BVH內它之前停止的同一位置處開始遍歷操作。並且,維持在資料結構追蹤內的追蹤資料被執行,使得遍歷電路/邏輯可以重新開始。
圖51示出一個實施例,其包含:著色器執行電路4000,用以執行著色器程式碼及處理相關光線追蹤資料4902(例如,BVH節點資料與光線資料);光線追蹤加速電路5110,用以執行遍歷與交集操作;及記憶體3198,用以儲存為RT加速電路5110及著色器執行電路4000所處理的程式碼及相關資料。
在一實施例中,著色器執行電路4000包含多數核心/執行單元4001,其執行著色器程式碼,以執行各種形式之資料平行操作。例如,在一實施例中,核心/執行單元4001可以執行單一指令跨過多數巷道,其中指令的各個實例操作儲存於不同巷道內的資料。在SIMT實施法中,例如,指令的各個實例係相關於不同線程。在執行期間,L1快取儲存用於有效存取的某些光線追蹤資料(例如,最近或經常存取的資料)。
一組主光線可以被調度至排程器4007,其將工作排程給為核心/EU 4001所執行之著色器。核心/EU 4001可以為光線追蹤核心3150、圖形核心3130、CPU核心3199或其他類型的電路,其能執行著色器程式碼者。一或更多主光線著色器5101處理主光線並繁衍其他予以為光線追蹤加速電路5110及/或核心/EU 4001(例如,予以為一或更多子著色器所執行)所執行的工作。由主光線著色器5101所繁衍的新工作或由核心/EU 4001所執行的其他著色器可以分配至排序電路4008,其將光線如此所述排序成群組或盒(例如,將具有類似特徵的光線分組)。排程器4007然後將新工作排程於核心/EU 4001上。
可以被執行的其他著色器包含任何命中著色器4514及最近命中著色器4507,其如上所述地處理命中結果(例如,對於給定光線,分別識別任何命中或最近命中)。未中著色器4506處理光線未中(例如,其中光線並未交集節點/基元)。如所述,各種著色器可以使用著色器記錄加以參考,其可以包含一或更多指標、特定賣者元資料、及全域引數。在一實施例中,著色器記錄係為著色器記錄識別碼(SRI)所識別。在一實施例中,著色器的各個執行實例係相關於一呼叫堆疊5203,其儲存傳送於母著色器與子著色器間的引數。呼叫堆疊5121也可以儲存對持續功能的參考值,當呼叫回覆時,該持續功能被執行。
光線追蹤電路5102遍歷各個光線通過BVH的節點,朝BVH的階層前進(例如,通過母節點、子節點、及葉節點),以指明由該光線所遍歷的節點/基元。光線-BVH交集電路5103執行光線的交集測試、確定在基元上的命中點,並回應於命中,產生結果。遍歷電路5102與交集電路5103可以由一或更多呼叫堆疊5121取回工作。在光線追蹤加速電路5110內,呼叫堆疊5121與相關光線追蹤資料4902可以被儲存於本地光線追蹤快取(RTC)5107或其他本地儲存裝置內,以用以為遍歷電路5102與交集電路5103所有效存取。以下所述之一特定實施例包含高頻寬光線記憶庫(例如,見圖52A)。
光線追蹤加速電路5110可以為於此所述之各種遍歷/交集電路的變化例,包含光學-BVH遍歷/交集電路4005、遍歷電路4502及交集電路4503,及光線追蹤核心3150。光線追蹤加速電路5110可以被用以替代光線-BVH遍歷/交集電路4005、遍歷電路4502及交集電路4503,及光線追蹤核心3150或任何其他用以處理BVH堆疊及/或執行遍歷/交集的電路/邏輯。因此,任何特性與在此所述之光線-BVH遍歷/交集電路4005、遍歷電路4502及交集電路4503,及光線追蹤核心3150的結合揭露也揭示與光線追蹤加速電路5110的對應組合,但並不限於此。
參考圖52A,光線遍歷電路5102的一實施例分別包含第一與第二光線儲存記憶庫5201及5202,其中各個記憶庫包含多數登錄項,用以儲存對應多數由記憶體載入的輸入光線5206。對應第一與第二堆疊5203與5204分別包含由記憶體讀取並被本地儲存以供處理的選擇BVH節點資料5290-5291。如於此所述,在一實施例中,堆疊5203-5204為“短”堆疊,包含有限數量的登錄項,用以儲存BVH節點資料(例如,在一實施例中為6個登錄項)。雖然所示與光線記憶庫5201-5202分開,但堆疊5203-5204也可以維持在對應光線記憶庫5201-5202內。或者,堆疊5203-5204也可以儲存在分開本地記憶體或快取內。
當選擇下一光線與節點供處理時,遍歷處理電路5210的一實施例在兩記憶庫5201-5202與堆疊5203-5204之間交替(例如,以乒乓方式)。例如,遍歷處理電路5210可以在每一時鐘循環上,從交替光線記憶庫/堆疊選擇新光線/BVH節點,藉以確保高效操作。然而,應注意的是,此特定安排並不必要,以來符合本發明的基本原理。
在一實施例中,光線分配器5205根據一組記憶庫分配計數器5220的現行相對值,將輸入光線5206的登錄項分別平衡為第一與第二記憶庫5201-5202。在一實施例中,該記憶庫分配計數器5220維持未遍歷光線的數量之計數於各個第一與第二記憶庫5201-5202中。例如,第一記憶庫分配計數器可以當光線分配器5205將新光線加入第一記憶庫5201時被增量,及當光線被由該第一記憶庫5201處理後被減量。類似地,當光線分配器5205將新光線加入至第二記憶庫5201時,第二記憶庫分配計數器可以增量,及當光線被由該第二記憶庫5201處理後,第二記憶庫分配計數器減量。
在一實施例中,光線分配器5205分配現行光線至與該較小計數值相關的記憶庫。如果兩計數器相等,則光線分配器5205可以選擇任一記憶庫或可以選擇與上一次計數器相等時所選擇之不同的記憶庫。在一實施例,各個光線被儲存在記憶庫5201-5202之一的一登錄項中,及各個記憶庫包含用以儲存多達32光線的32登錄項。然而,本發明的基本原理並不限於這些細節。
圖52B示出在一實施例中執行的四個程序5251-5254,以管理光線儲存記憶庫5201-5202與堆疊5203-5204。在一實施例中,四個程序5251-5254為共同組程式碼(有時在此稱“TraceRay”)的不同實施法或組態。初始程序5251可以被執行以讀取光線5261並執行一新BVH的由上而下遍歷,由該根節點開始。分配(Alloc)功能修改控制位元並對光線追蹤堆疊,發動對應讀取請求。更明確地說,為了分配新登錄項,Alloc設定有效(VLD)位元並重設逐出備妥(Evict_Rdy)位元。在用於該光線的記憶庫登錄項中,資料出現(DP)位元與髒位元被重設。在對應堆疊登錄項中的DP位元被設定。對於對應Hitinfo,DP位元被設定及髒位元被重設。DP位元與和該節點資料相關的著色器記錄識別碼(SRI)DP位元被重設。
實例程序5252在BVH的多節點之一內執行遍歷(除了根節點外),並讀取該光線與先前提呈的命中5262。在一實施例中,當命中著色器之一指明在光線與基元間之命中時,則提呈程序5253執行,以提呈結果、讀取光線、可能命中、及堆疊5263。或者,執行繼續程序5254,以繼續光線的遍歷、讀取光線、提呈命中、及堆疊5264。
在各種環境下,遍歷電路5002必須暫停遍歷操作並儲存現行光線及相關BVH節點,例如,當需要著色器以執行一順序的操作。例如,如果命中透明目標或程序材質,則遍歷電路5002將堆疊5203-5204儲存至記憶體並執行所需著色器。一旦著色器完成處理該命中(或其他資料),則遍歷電路5002由記憶體復原光線記憶庫5201-5202與堆疊5203-5204的狀態。
在一實施例中,遍歷/堆疊追蹤器5248持續監測遍歷與堆疊操作並儲存重新開始資料於追蹤陣列5249中。例如,如果遍歷電路5002已經遍歷節點N、N0、N1、N2及N00,並產生結果,則遍歷/堆疊追蹤器5248將更新追蹤陣列,以表示這些節點的遍歷已經完成及/或表示來自堆疊的下一個將要處理的節點。當遍歷電路5002重新開始時,它由追蹤陣列5249讀取重新開始資料,使得它可以在正確階段重新開始遍歷,而不必再遍歷任一BVH節點(並浪費循環)。儲存在追蹤陣列5249內的重新開始資料有時被稱為“重新開始尾”或“RST”。
如於圖52B所示。各種追蹤光線程序5251-5254經由一或更多功能,管理光線儲存記憶庫5201-5202的分配進出。如所示之用於初始程序5251,配置功能設定在儲存記憶庫登錄項中之有效位元(VLD)(表示該登錄項現包含有效光線)及重設(Rst)逐出備妥旗標(表示光線資料不應被逐出)。光線功能儲存光線於所選擇的登錄項中並重設該資料出現(DP)位元(表示光線資料被儲存在登錄項中)及髒位元(表示該資料未被修改)。於從儲存記憶庫讀取光線時,堆疊功能設定DP位元並由該堆疊檢索相關BVH節點(例如,在初始程序5251情況中的根節點以及在實例程序5252情況中的另一節點)。命中資訊功能重設該髒位元並設定用於初始功能5251的該DP位元或者將之重設,用於所有其他功能。在一實施例中,命中資訊產生反映光線命中的資料。節點功能重設DP位元與SRI(著色器記錄識別碼)DP,其係為用於著色器記錄識別碼的DP。一實施例執行核心開始指標(KSP)查看,以確保該KSP並不等於零。如果是的話,則不同處置法被實施用於透明四邊形。
在一實施例中,一旦光線登錄項已經被分配於儲存記憶庫5201-5202之一中,則執行一擷取,以由與該光線相關的堆疊檢索節點資料(及可能其他資料)。在一實施例中,堆疊係被維持以用於各個光線,包含用於現行節點的工作組資料,光線正遍歷經過該節點。
當移動至BVH中的下一層(例如,於決定光線交集母節點)時,子節點被排序並推入堆疊5203-5204。子節點依序爆出該堆疊並被個別處理以指明光線所遍歷的子節點(遍歷“命中”)。在一實施例中,堆疊被儲存至記憶體或本地快取/儲存器,只要在RT加速電路5110與著色器4504、4506、4507、5101、5105之間有著交遞。
當包含四邊形或三角形(或其他基元類型)的葉節點為遍歷電路5102所指明時,它將此資訊傳送給交集電路5103,其分別對四邊形或三角形執行交集測試。如果基元不是四邊形或三角形,則在一實施例中,遍歷電路終止遍歷並將控制送回至最近命中著色器4507(如果檢測到命中的話)或者未中著色器4506(如果未檢測到命中的話)。在一實施例中交集電路5103被設計以執行除了四邊形與三角形以外的各種基元(例如,線、弧、圓等)的交集,則遍歷電路5102將用於這些基元的葉節點傳送給交集電路5103。
在一實施例中,當硬體或軟體組件產生讀取請求給記憶體3198或快取時,16位元標籤係被用以提供有關資料類型與請求者的資訊。例如,二位元碼可以指明該請求是用於光線、堆疊資料、命中資料、來自BVH的節點資料、或任何其他類型的資料。當光線、堆疊、與命中資訊已經由記憶體回覆時,則光線被遍歷過一或更多BVH節點及交集測試係如上所述被執行。
一或更多堆疊5203-5204與光線5206係在不同處理階段由記憶體載入。例如,初始處理5251及/或實例處理5252可以需要新BVH被載入,用於遍歷。在這些環境中,堆疊5203-5204可以初始化至BVH的頂節點(或“根”節點)。對於在BVH內的光線連續5254,堆疊5203-5204可以被由記憶體載入並擴充。一旦堆疊5203-5204被準備,則節點資料被由該堆疊擷取(有時在如下被稱為Proc_Node_Fetch的操作)。
在一實施例中,節點資料係藉由發動用於兩非內部(NI)節點與兩內部節點的平行請求而被擷取。圖53示出此一實施例,其中NI節點優先選擇邏輯(PRISEL)5311請求雙NI節點;來自記憶庫0的第一NI節點5301,及來自記憶庫1的第二NI節點5302。同時,內部節點PRISEL邏輯5312請求雙內部節點;來自記憶庫0的第一節點5303及來自記憶庫1的第二節點5304。
在一實施例中,NI節點優先選擇邏輯(PRISEL) 5311優先第一NI節點5301與第二NI節點5302之一,儲存優先化結果於光線追蹤快取(RTC)中。類似地,內部節點PRISEL邏輯5312請求雙內部節點,並從第一內部節點5303與第二內部節點5304選擇一優先化結果。
如果可能,各個實例之優先選擇邏輯5311-5312從不同記憶庫優先化非內部BVH節點5301-5302之一及內部BVH節點5303-5304之一。在一實施例中,只有一個請求被由各個記憶庫(例如,請求5302與5304之一及請求5301與5303之一)選擇。這些請求的發動也可如所示重設堆疊資料出現(DP)位元,使得此登錄項並未回應於節點擷取操作而被檢索。在一實施例中,對於實例擷取操作,當實例請求被送出時,光線資料出現(DP)位元被重設,並當該節點擷取後,光線被轉換時,則最後設定。
在一實施例中,節點_資訊在發送讀取時被寫入,以及,對於讀取請求,位址/標籤被計算如下:
+ curr_stack.child_offset;(注意:在節點上的子偏移永遠相關於現行BVH根節點)
在一實施例中,回覆之節點資料將設定用於節點與堆疊的DP位元。
以下情況可以根據讀取標籤加以區分:
A. 內部節點:此將寫至節點
B. 實例:此將更新用於下一層BVH(1)的rt_ray.rt_ray_ctrl並寫節點結構。
stack.current_node.child_offset→只在實例節點擷取請求本身期間,邏輯檢視、抓取及儲存節點擷取位址
經由光線或經由實例旗標(只有光線旗標非力不透明),保留不透明
經由光線或實例旗標(只有光線旗標非力不透明),保留透明(接受第一命中與結束搜尋或跳過最近命中著色器)保留BVH[0]
rt_ray[0].rt_ray_ctrl.flag[5:4];→經由實例去能三角形汰除(去能交集著色器、汰除不透明或汰除透明)保留BVH[0]
xi. node.node_ctrl=不需要實例
C. 四邊形:此將更新節點如下
根據光線旗標、實例旗標、及幾何旗標,示於圖55A的不透明/透明處置表顯示當節點資料被擷取時將被使用的所得旗標(不透明或透明)。如在表中所示,光線旗標永遠依優先順序。另外,部分狀態為相互排斥。在一實施例中,以排除位元的優先順序,依硬體加以處置。在一實施例中,如果cull_opaque和force_opaque兩者都設定,則相關幾何將自動汰除。
opaque=rt_ray.rt_ray_ctrl.flag[0]∣quad.flag[0];(注意:每BVH層所儲存的光線已經說明實例旗標)
nopaque=rt_ray.rt_ray_ctrl.flag[1]∣~quad.flag[0];
圖55C為一表,顯示依據一實施例之最終汰除。光線旗標為(cull_opaque與force_opaque)或(cull_non_opaque與force_non_opaque)互相排斥。然而,在此等式中,光線旗標也說明可以設定不透明/透明的實例旗標。當實例與幾何兩者可以被遮罩時,只有幾何可以被汰除。
如於圖56所示,在一實施例中,根據上述之汰除與mask_kill設定的評估,在5601或5602決定早退及結果不是在5603被送至節點儲存就是在5604被送至堆疊。
一旦節點資料備妥,則盒/交集測試可以執行。在一實施例中,這是藉由一在此稱為Ray_Text_Proc的程序所完成,該程序具有兩基本同時程序執行,一個填入四邊形/實例(QI),以及,另一個執行盒/交集測試。在圖57所示之實施法中,Ray_Test_Proc發動優先選擇邏輯(PRISEL)5701-5702的兩平行實例;四邊形/實例PRISEL 5701,用以請求與選擇來自記憶庫0的四邊形/實例5711與來自記憶庫1的第二四邊形/實例5712,及內部節點PRISEL 5702,用以請求與選擇來自記憶庫0的內部節點5713與來自記憶庫1的內部節點5714。
在一實施例中,四邊形/實例優先選擇邏輯5701優先化第一QI節點5711與第二QI節點5712之一、儲存優先結果於光線追蹤佇列(RTQ),作進一步處理(例如,交集測試)。類似地,內部節點PRISEL邏輯5702優先化內部BVH節點5713-5714之一,其上執行有光線追蹤遍歷(RTT)盒測試。在一實施例中,由各個記憶庫只選擇一請求(例如,請求5711與5712之一與請求5713與5714之一)。這些請求的發動也可以重設堆疊資料出現(DP)位元,如所示,使得此登錄項並未回應於節點擷取操作而被檢索。在一實施例中,對於實例擷取操作,當實例請求被送出時,光線的資料出現(DP)位元被重設,及當光線在節點擷取後被轉換時,資料出現位元最後設定。
在一實施例中,包含有四邊形/實例(QI)解耦合FIFO以解決時間堆疊FIFO填滿狀態並以推入堆疊FIFO(見,例如圖60中的堆疊FIFO 6001),實施同步更新命中資訊/光線。這被完成,使得在後續處理中,光線/命中資訊有設定的保證資料出現(DP)位元。注意,當與記憶體寫入碰撞時,光線/命中資訊可以可以被指定有一固定高優先順序。
來自RTQ的回覆可以在兩分開介面上造成實例(例如,實例轉換)或四邊形(即,遍歷/交集測試結果)。以下為在一實施例中,用於處理結果的兩個回覆FIFO:
a.實例回覆FIFO:
更新rt_ray.rt_ray_data=rtq_rt_ray_data;
ray_dirty[Entry]=1;
b.四邊形回覆FIFO:
i.如果四邊形為透明及(Tfar
<Prev_
Tfar
)→檢查
SRI_NULL_DP to pop(讀自)四邊形/實例(QI)去耦合FIFO。注意,在一實施例中,自光線追蹤佇列(RTQ)FIFO寫入的命中資訊具有高於MemHitInfo的優先順序。
1. 如果(KSP_NULL=1)→將透明四邊形視為不透明並更新Tfar
。
2. 如果(KSP_NULL!=1)→
◆將可能HitInfo寫至記憶體,將有效位元設定為1。
◆由RTQ讀取T、U、V、葉類型、PrimLeafIndex、及前面。
◆由NodeData讀取PrimIndexDelta、PrimleafPtr。更新來自光線資料的instanceLeafPtr。
◆hitGroupRecPtr被計算如上。
ii.如果四邊形為透明及(Tfar
<Prev
_Tfar
)→
◆以Valid=1更新提呈HitInfo。
◆由RTQ讀取T、U、V、葉類型、PrimLeafIndex、前面。
◆由NodeData讀取PrimIndexDelta、PrimleafPtr。
◆更新來自rt_ray.rt_ray_ctrl的instanceLeafPtr
◆hitGroupRecPtr如上所計算
在一實施例中,來自光線追蹤遍歷(RTT)盒交集測試的回覆可以被推入堆疊0/1(5203/5204)FIFO 6001,以作進一步處理。
圖58與圖59A-B示出使用“短”堆疊(例如堆疊5203或5204,其包含有限數量的本地堆疊登錄項)的BVH-光線處理的例子。短堆疊係被用以保留高速儲存結合智慧節點管理技術,以提供高效的遍歷操作順序。在所示例子中,短堆疊5203包含用於六個BVH節點的登錄項。然而,本發明的基本原理可以使用各種大小的短堆疊加以實施。
操作5949-5972,在BVH遍歷期間,爆出和推入堆疊登錄項。在一實施例中,操作5949-5972係藉由堆疊處理電路5120(見圖51)而執行於堆疊5203上。一特定遍歷順序係被顯示,其由在BVH階0的根BVH節點N 5900開始。
在5949,堆疊5203係以節點N初始,其然後由堆疊爆出並被處理,並造成在BVH的階1的包含子節點N0-N2 5901-5903的命中H0-H2(即,“命中”表示該光線遍歷三個子節點N0-N2 5901-5903)。三個子節點命中5901-5903係根據命中距離加以排序並以該排序順序被推入堆疊5203(操作5950)。因此,在此實施例中,只要評估新的一組子節點時,它們即根據命中距離加以排序並以該排序順序寫入堆疊5203(即,較近的子節點係在該堆疊的頂部)。
第一子節點N0 5901(即,最近子節點)係由堆疊5203爆出並被處理,造成在BVH的階2的三個子節點命中N00-N02 5911-5913(“階”有時被稱為BVH節點的“深度”),其被排序並推入堆疊5203(操作5951)。
子節點N00 5911由堆疊爆出並被處理,造成在BVH的階3的包含單一子節點N000 5920的單一命中(操作5952)。此節點被爆出及處理,造成在階4的六個命中N0000-N0005 5931-5936,其係被排序並推入堆疊5203(操作5953)。為了在短堆疊5203內作出空間,節點N1、N2、N02、N01係被如所示地移除(即,限制短堆疊為六登錄項)。第一排序節點N0000 5931係被爆出並處理,產生在BVH的階5的三個命中N00000-N00002 5931-5933(操作5954)。注意,N0005被移除,以在短堆疊5203上作出空間,用於新節點。
在一實施例中,每次一節點由短堆疊5203移除時,它被存回到記憶體。它將在隨後時間(例如,當依據遍歷操作處理該節點時)被重新載入短堆疊5203。
處理在圖59A上持續,其中在BVH的階5,節點N00001與N00002被爆出並處理(操作5955-5956)。在階4的節點N0001、N0002、N0003、及N0004然後被爆出並處理(操作5957-5960),造成空的短堆疊5203。
因此,爆出操作依據重新開始尾端(RST)造成在根BVH節點的檢索節點N(操作5961)。來自階1的三個子命中N0、N1、N2再次被排序並推入短堆疊(操作5962)。節點N0然後被爆出並處理,隨後節點N00、N000、及N0005(操作5963-5965)。節點N01被爆出並處理(操作5966),隨後節點N02、節點N2、及節點N1(操作5967-5970),再次造成空短堆疊。因此,下一階2節點,N11係被由短堆疊爆出並被處理,造成遍歷(即,因為節點N11並未造成命中)。
如所述,遍歷追蹤器5248的一實施例更新追蹤陣列5249,其指明正被遍歷的BVH階層的每一階中的子節點/次樹。在一實施法中,追蹤陣列5249的長度等於BVH的深度(在所示例子中為6),及在追蹤陣列5249中的每一登錄項包含指明現正被遍歷的子次樹的索引值。在一特定實施法中,對於N寬BVH(即,每一內部節點參考N子節點),在追蹤陣列5249中的每一登錄項包含log2(N)位元值,以指明子節點/次樹。在一實施例中,被指定有較現行子索引為小的索引的子節點/次樹已經被完全遍歷並將因此在重新開始事件中,不再拜訪。在一實施例中,當最後交集子被遍歷時,子索引被設定為最大值,以表示在該堆疊中不再有登錄項。
短遍歷堆疊5203可以儲存堆疊的頂部少數登錄項於圓形陣列中。在一實施法中,在短遍歷堆疊5203中的各個堆疊登錄項包含對節點的偏移、例如節點類型(內部、基元、實例等)的雜項資訊、以及一位元,其表示此子是否在母節點中的最後(最遠)交集子節點。然而,這些特定細節對於符合本發明的基本原理並不是必要的。
圖60示出用以執行如上所述之堆疊管理與遍歷操作的堆疊處理電路/邏輯5120的實施例。堆疊FIFO 6001被載有任何需要處理的子BVH節點6000。例如,當盒測試或四邊形測試為遍歷處理電路5210所完成時,結果被推入堆疊FIFO 6001並被用以更新堆疊5203。例如,這可以包含更新命中資訊,例如,有關於特定命中的該組子節點6000。
堆疊處理電路/邏輯6003自堆疊5203讀取登錄項以及處理各個登錄項所需的資料,包含指示BVH節點是否為內部節點或葉節點以及相關索引資料。如果節點為葉節點/四邊形,則資料可以包含四邊形描述子與索引以及著色器索引資料。堆疊處理電路/邏輯6003然後執行在此所述之堆疊處理操作,例如,識別有關於命中的新節點以及根據命中距離排序這些節點。雖然所示為分開的實體,但堆疊處理電路/邏輯6003可以被積集在遍歷電路5102內。
如所示,當堆疊處理電路/邏輯6003完成來自堆疊5203的各個BVH節點的處理時,它產生堆疊更新6011。例如,在讀取來自堆疊5203的登錄項後,它可以更新各種控制位元,例如,資料出現(DP)位元及有效(VLD)位元。圖60示出逐出備妥及資料出現位元6010被設定。對應堆疊更新6011也可以被送至堆疊5203(例如,允許舊登錄項被移除,以提供空間給新子節點)。
堆疊更新可以經由仲裁電路6012加以控制,該仲裁電路6012在:以現行處理更新6011來更新堆疊5203、以一或更多新BVH子節點,填充來自記憶體的堆疊5203(Mem Fill)、及對來自記憶體,執行初始分配給堆疊(例如,以根節點及一或更多子節點開始)之間作選擇。
在一實施例中,當四邊形/實例/內部節點在堆疊上被處理時,一或更多以下操作可以被執行:
i.由於多個狀況,例如為了新BVH將實例下移、處理命中程序、任何命中著色器等,而逐出堆疊登錄項。
ii.如果堆疊由於命中程序及/或任何命中著色器而逐出,則解除配置光線登錄項。
iii.如果堆疊由於命中程序及/或任何命中著色器而逐出,則解除配置快取登錄項。
iv.如果光線需要被經由實例葉下傳至新BVH,則更新光線控制(只有BVH)。
圖61A-B示出用於組態讀/寫埠及設定控制位元,以用於所有追蹤遍歷結構的表。更明確地說,例示子結構、垂直結構、及讀/寫動作係被顯示用於光線6101、命中6102及堆疊6103。然而,注意,本發明的基本原理並不限於這些特定資料結構/操作。
用於高品質光線追蹤細節層次轉移的設備與方法
在圖形處理架構中,“細節層次”(LOD)可以表示根據例如離攝影機的距離的變數,網目解析度的選擇。LOD技術係被用以降低記憶體消耗並改良例如在遊戲中的幾何鋸齒波的圖形處理功能。例如,當網目遠離使用者的現行觀點時,高解析度網目的細節可能不需要。
在光柵為主實施法中,在LOD間的平滑轉移係使用例如在Lloyd等人於以微軟DirectX光線追蹤實施隨機細節層次(2020年6月15日)所述之“隨機LOD”技術加以完成。沒有了這些隨機技術,在LOD間之轉移可能造成干擾假影,其中當選擇新LOD時,目標在外表上突然變化。使用隨機LOD,在LOD層次間之交互溶解被執行通過隨機指定的像素至在該轉移中所涉及的LOD之一(例如,不是高解析度就是低解析度LOD)。
以上解決方案使用二進制遮罩及二進制比較值,以當由第一LOD(“LOD0”)衰減至第二LOD(“LOD1”)時,完成用於隨機LOD轉移的八個轉移步驟。在此實施法中,8位元光線遮罩與8位元實例遮罩作邏輯及運算,以決定實例是否需要被遍歷。這8位元遮罩與相關逐位元邏輯運算造成有限的LOD轉移能力。例如,當在目標的LOD0與LOD1間轉移時,其中LOD0具有0.25的分數值,及LOD1具有0.75的分數值(根據攝影機距離),用於實例之遮罩將被設定為LOD0以只致能2隨機位元(8位元的0.25)。用於LOD1的實例遮罩將被設定至LOD0的遮罩的二進制補數,具有6位元被致能。對於任何給定光線,在光線遮罩中選擇一隨機位元,以完成不是LOD0(具有0.25的或然率)就是LOD1(具有0.75的或然率)的隨機選擇。然而,因為八位元只有一被選擇,只有8個中間步驟用於在LOD0與LOD1間轉移。
如於圖62所示,在本發明之一實施例中,LOD選擇器6205被提供有N位元比較運算遮罩6220,其係被視為二進制值以確定將要執行的比較運算。所選擇的比較運算係被用以比較參考值,以允許更多轉移LOD步驟。在一實施例中,雖然比較運算被由小於或等於(less_equal)及大於(greater)中選出,但本發明的基本原理並不限定於這些特定比較運算。在一實施法中,8位元被使用(N=8),其中,7個位元界定範圍由[0..127]的無符號整數值,完成了LOD交叉衰減的128個轉移步驟,及1位元表示比較運算(例如,如果設定為0,則執行less_equal運算,及如果被設定為1,則執行大於運算)。在一實施法中,光線比較遮罩6221也可以被提供給LOD選擇器6205,範圍為[0..127]作為額外光線參數。
在以上碼序列中,第一IF宣告測試是否該二進制遮罩允許遍歷現行實例。如果是,則第二IF宣告以實例比較遮罩(例如,比較運算遮罩6220)與光線比較遮罩6221的值來看,來測試模式設定。
回到以上LOD轉移例子,對於具有0.25分數值的LOD0實例,前7個位元被設定至31的值(=int((0.25*127)),及最後位元被設定為0(表示less_equal運算)。對於具有0.75分數值的LOD1的實例,前7個位元被設定至31的值(=int((1.0-0.75)*127)),及最後位元被設定為1(表示大於運算)。因此,對此實施法,如果均勻分佈隨機數被產生於範圍[0..127]作為光線比較遮罩,則將會有多達127轉移步驟,其可以為LOD選擇器6205所選擇以轉移於LOD0與LOD1之間。
雖然以上所述特定細節係被用於解釋的目的,但本發明的基本原理可以以其他細節實施。例如,其他比較運算子可以被利用以替代less_equal與大於,或額外加上。例如,如not_qual、equal、less and greater_equal (大於或等於)的比較運算子也可以使用。一實施法包含光線旗標及實例旗標,其去能作及運算光線遮罩並致能這些位元的使用作為比較遮罩。
本發明的實施例包含固定功能加速電路與通用處理電路的組合,以執行光線追蹤。例如,相關於包圍體(BVH)的光線遍歷及交集測試的某些操作可以為固定功能加速電路執行,而多數執行電路執行各種形式的光線追蹤著色器(例如,任何命中著色器、交集著色器、未中著色器等)。一實施例包含雙高頻寬儲存記憶庫,其包含多數登錄項,用於儲存光線;及對應雙堆疊,以儲存BVH節點。在此實施例中,遍歷電路交替於雙光線記憶庫與堆疊之間,以處理在各個時脈上的光線。另外,一實施例包含優先選擇電路/邏輯,其在內部節點、非內部節點、與基元之間作區分,並使用此資訊以智慧地優先化BVH節點及為該BVH節點所包圍的基元的處理。
加速資料結構壓縮
加速資料結構的建構為有效光線追蹤描繪的最重要步驟之一。近來,在此密集描述之包圍體階層(BVH)加速結構已為最廣泛用於此目的。BVH為階層樹狀結構,其作用以空間索引與組織幾何,使得光線/基元交集查詢可以很有效地解決。解決這些查詢的能力為光線追蹤描繪的最重要操作之一。雖然以下所述之本發明實施例以BVH結構操作,但本發明之基本原理並不限於BVH。這些實施例可以應用至具有類似相關特性的任何其他加速資料結構。
產生BVH典型被稱為“建構”或“建立”BVH。雖然已經有若干BVH建構演算法提出,但由上而下BVH建構法被主要用於完成即時與離線描繪應用的高描繪效率。由上而下BVH建構演算法典型在建構期間維持一或更多暫時陣列。這些陣列保持排序/組織幾何所需的資料,以產生BVH結構。這些陣列在建立期間,讀取及/或寫入多數次(典型BVH階層的每階1-2次)。因為這些陣列經常為相當大的大小,所以,此程序為頻寬密集。因此,例如可以由硬體BVH建立器預期的在BVH中的改良建立計算效能似乎只有有限衝擊,如果沒有針對此頻寬問題的話。
本發明的一實施例包含為很多由上而下BVH建立器所維持的暫時資料的壓縮方案。此壓縮方案的目的為降低BVH建構所需的頻寬,藉以完成更快及更有效BVH建構。然而,注意,本發明的實施例可以被用於其他類型的BVH與其他類型的加速資料結構,例如,kd-樹。
很多由上而下BVH建立器,在BVH建立時,維持兩主要類型的資料:(1)對於涉及在BVH建立中的每個基元的對準軸包圍盒(AABB);及(2)有關於各個基元的無符號整數索引,其指向這些AABB之一,及/或指向產生AABB的原始基元。
本發明之一實施例利用陣列結構(SOA)佈局,以組合各個AABB與單一整數索引。AABB係被維持在一個陣列中,及整數索引維持在第二陣列中。為了完成BVH建構,只有索引陣列必須被重排列。以此方式儲存建立資料形成若干優點。在此佈局方案中,AABB被大量地唯讀,及對於多數建立程序,不會發生AABB寫頻寬。
藉由使用SOA結構,在建立期間,只需要不常壓縮AABB。事實上,取決於實施法,AABB資料只需在建立成為預處理之前被壓縮一次。因為建立係藉由分割索引陣列加以執行,所以本發明的一實施例在該建立的每階重新壓縮它們。
藉由操作於這些陣列的壓縮版,而不是其傳統的未壓縮版,BVH建構所需的頻寬被降低。該些陣列的壓縮版本被暫時儲存,並只被使用於該建立的目的。一旦建立完成,它們被丟棄,留下參考基元的原始輸入名單的BVH。
於此所述壓縮技術的重要特徵為它們是注意快取線的。壓縮陣列兩者都被儲存為固定大小的一陣列壓縮塊,其中該大小為快取線的總數。此數目大於或等於1。各個兩類型陣列的壓縮塊並不需要相同大小。此兩類型的區塊在此被稱為AABB壓縮塊與索引壓縮塊。
注意,本發明的基本原理並不需要區塊的大小為快取線的總數。相反地,這是在此所述幾個選用特性之一。在以下所述之一實施例中,此功能係分別為在表B與D中的變數AABBCompressionBlockSizeBytes與IndexCompressionBlockSizeBytes所控制。
因為每個節點的空間範圍與所參考的基元的數目將大致隨著由上而下建立由樹狀結構的根進行至葉而減少,所以,AABB的不同表示法在不同階段的建構中可能適當。例如,壓縮AABB的準確性可能在樹的上層較不重要,而在下層可能需要更精確表示法以維持合理的樹品質。因此,在接近樹的根使用有損壓縮以最大化頻寬節省並且在下層切換至基元的無壓縮無損表示法是適當的。此將BVH建構分開成至少如圖63所示之至少兩階段:上階段6301,用於在階層的指定層或以上的節點(節點0、1、8)及下階段6302,用於在該指定層以下的節點(節點2-7、9-14)。多層建立可以以此方式進行,整個上層階層(例如,圖63的“上”部分)係在下層中的任何節點建立前被建立,或者,這些層的建立可以交替。如果上層整個在任何下層前建立,則必須在建立的下層分開的節點可以被儲存在一結構上,例如,在隨後階段被分割的佇列。
不同於使用AABB的全精度複製用於下層6302,該方案的另一變化例為在建立期間"再壓縮"AABB,以在建立下層中使用。如此做,幾何可以相對於個別次樹的範圍被壓縮。因為個別次樹通常相較於根節點代表較小的空間範圍,所以,這可以有利於壓縮表示法的準確度,或者壓縮的效率。用於多層壓縮建立的類似圖案在現行研究被觀察。在建構的不同階段間之分割6300可以依據各種節點特徵加以界定。一實施例使用固定數目的基元,以作動為臨限值。
用於本發明之部分實施例中的變化例決定只利用單一層建立。例如,建立資料的單一壓縮表示法可以用以建立整個樹。
I.AABB壓縮
在本發明之一實施例中,至AABB壓縮邏輯(其可以實施為硬體及/或軟體)的輸入為一陣列的未壓縮基元及輸出為一陣列的AABB壓縮塊,其係為固定大小並對準若干快取線。因為在網目的任何特定區域的有效AABB壓縮比係與資料高度相關,所以,一實施例每AABB壓縮塊包裝可變數量的AABB。
如於圖64所示,一實施例的壓縮塊6400係被組織成兩主要部:元資料(MetaData)6401與向量殘留6402。MetaData 6401提供將向量殘留6402解碼成一名單的AABB所需的每塊資訊及常數。向量殘留6402儲存用以表示AABB的整體壓縮資訊。各個這些元件係更詳述如下。
簡單地說,在一實施例中,使用Δ(delta)壓縮。seedVector包含一基礎線組AABB值,及向量殘留6402提供對這些基礎線值的偏移,以重建每個AABB。numResiduals值指明向量殘留6402的數量及residualSizeVector指明殘留6402的大小。
AABB全域壓縮常數
除了儲存在各個壓縮塊6400中的每塊常數外,一組AABB全域壓縮常數也可以儲存有關於在整個壓縮程序中的所有區塊的資訊。這些係針對一特定實施法被總結於表B。
表B
AABB壓縮流程
常數 | 說明 |
NQ{X,Y,Z} | 三個值表示各個三個空間維度中的用於量化頂點分量的位元數 |
AABBCompressionBlockSizeBytes | AABB壓縮塊的位元組大小。此值典型將對準某數量的快取線。 |
maxAABBsPerBlock | 在AABB壓縮塊中允許的AABB的最大數目。此常數係與numResidualVectorsPerPrimitive全域壓縮常數一起決定如於圖64所示numResiduals值所需的位元數。 |
numResidualVectorsPerPrimitive | 此值跟隨用以代表在壓縮塊中的AABB的殘留向量的數目。一般AABB通常有兩個3D向量,min和max。然而,有可能AABB的表示法可以被轉換為具有不同數目向量的結構。此例子係在後段落錯誤 ! 未找到參考源討論 ,其中一對3D向量被轉換為單一6D向量。壓縮演算法有必要跟隨此值,以正確執行若干核心操作。 |
residualNumDimensions | 此常數係被用以跟隨有多少維度殘留向量將點加入AABB壓縮塊。這值是需要的,因為有可能3D AABB資料在壓縮期間被轉換為不同數目的維度。 |
AABB壓縮程序的一實施例涉及依序遞迴通過輸入陣列的基元,並輸出一陣列AABB壓縮塊6400。輸出陣列包含需要以壓縮形式表示之AABB基元的最小數量的AABB壓縮塊6400。
圖65示出依據一特定實施例之程序。如所述,壓縮程序並不限於任何特定架構並可以以硬體、軟體或其任意組合加以實施。
在6501,提供了用於BVH的一陣列基元。在6502,在該陣列中之下一基元(例如,在程序開始的第一基元)係被選擇,及其AABB被評估用於壓縮。如果在6503(例如,根據其mix/max資料)決定AABB配合於現行壓縮塊內,則在6504中,AABB被加入至現行壓縮塊。如所述,這可以包含藉由計算在壓縮塊內至現行基礎向量(例如,seedVector)的距離,而決定用於AABB的殘留值。
在一實施例中,如果基元的AABB並未配合於壓縮塊內,則現行壓縮塊在6510被最終化,並被儲存在輸出陣列內的記憶體中。在6511,使用該基元的AABB,以初始化新的壓縮塊。在一實施例中,基元AABB係被使用作為用於新壓縮塊的種向量。殘留可以根據至新種向量的距離,而被產生用於基元的後續AABB。在一實施法中,被產生用於第二AABB的第一殘留係根據至種向量值的距離值加以決定。用於第三AABB的第二殘留然後根據至第一殘留的距離加以決定。因此,如以下所詳述,儲存有執行差。一旦現行基元被壓縮,則程序回到6502,其中在陣列中的下一基元被選擇用於壓縮。
因此,依序拜訪各個基元,其AABB被決定(例如,成為浮動值)。然後,對AABB執行一連串的操作,以完成壓縮並且壓縮結果被加入至在輸出陣列中的現行AABB壓縮塊。如果壓縮AABB配合,則它被加至現行區塊,及程序移動至下一AABB。如果AABB未配合,則現行AABB壓縮塊被最終化,及新的AABB壓縮塊被初始化於輸出陣列中。以此方式,需要以儲存AABB的壓縮塊數量被最小化。
以下表C中的虛擬碼顯示依據本發明之一特定實施例之AABB壓縮的流程。然而,注意本發明之基本原理並不限於這些細節。
如在虛擬碼佇列中所示,對於每個AABB壓縮塊,整數被寫入分開陣列(blockOffsets)中,其記錄每個AABB壓縮塊在原始基元陣列開始(例如,它包含的第一基元AABB)的位置。blockOffsets陣列係在建立用以解析壓縮塊所代表的原始基元ID期間所使用。
AABB殘留計算
在一實施例中,各個輸入AABB通過一組階段,以在將之加入至壓縮塊之前先壓縮它,造成如圖64所示之向量殘留。該程序被捕捉成為表C的行26上的碼,其中,CompressionCore被使用以將AABB轉換為一名單的壓縮向量。
表C
在一實施例中,AABB的壓縮發生在以下階段:(1)量化、(2)轉換,及(3)預測/Δ編碼。
1.量化
在一實施例中,浮點AABB值首先被量化為每軸使用固定數目位元的無符號整數表示法。量化步驟可以以各種方式執行。例如,在一實施法中,用於各個軸i
的以下值係被決定:
其中Smin
與Smax
為用以將要建立的BVH的整組幾何的最小與最大座標,NB,i
為在第i
軸中的量化柵中的格數目,NQi
對應於在表B中的值,VUmin
與VUmax
為量化AABB中的最小與最大座標,VFmin
與VFmax
為原始浮點AABB的最小與最大座標,及下標i表示給定軸(i
∈{x,y,z})。由於任何浮點計算都可能引入誤差,所以中間值應捨去或捨進,以最小化VUmin
的值及最大化VUmax
的值。這些值也可以被轉換為整數或鉗位至有效範圍,以確保水密AABB常駐在整組幾何的AABB中。
Smin
與Smax
也可以表示次組幾何的範圍(例如,在較大BVH內的次樹)。例如,這可以發生在依據圖63的多層壓縮建立中。
2.轉換
在一實施例中,轉換階段被實施,其中,資料被轉換為更經得起壓縮的形式。雖然可以使用各種轉換,但本發明之一實施例利用在此被稱為位置範圍轉換的新穎轉換,其將VUmin
與VUmax
組合成如下所示的每基元單一6維(6D)向量VT:
其中VUmin
{x,y,z}
與VUmax
{x,y,z}
分別為VUmin
與VUmax
的分量。基本上,此轉換允許AABB的位置與範圍/大小特徵在剩餘壓縮階段中分開處置。如所述,也可以使用其他轉換。
3.預測/Δ編碼
在一實施法中,傳統Δ編碼技術被用以良好壓縮效能。在一實施例中,在各個壓縮塊中的第一向量係被指定為“種”向量並被原樣儲存在AABB壓縮塊6400中,如於圖64所示。對於後續向量,這些值的執行差異被儲存(即,殘留6402)。這對應於預測方案,其中在該順序中的下一輸入向量的預測永遠都是前一輸入向量,及殘留值係為在現行與前一輸入向量間之差。在此實施例中,殘留值6402因此為帶符號值,其需要額外的符號位元。也可以使用各種其他預測/Δ編碼,這些仍符合本發明之基本原理。
一實施例儲存以最小數量所需位元儲存殘留6402,以最大化該壓縮。根據在殘留編碼步驟結束時的殘留值的大小,對於各個向量維度將需要某些數量的位元,以容納在該維度中所遭遇的值的範圍。
有需要的位元數量被儲存在殘留大小向量(RSV)中,如於圖64所示之元資料6401中。對於給定壓縮塊6400而言,RSV為固定的,並且,因此,在特定區塊的給定維度中的所有值對於其殘留6402均使用相同數目的位元。
儲存在RSV的各個元件中的值簡單地就是將殘留值整個範圍儲存在該維度成為帶符號數所需的最小位元數目。在壓縮給定AABB壓縮塊(即,表C的行18-37)期間,容納所有可見向量所需的位元數的執行最大數目前為止被維持。RSV被決定用於各個新加AABB(即,CommitToBlock,表C的行32)並被儲存在壓縮塊的元資料中。
為測試新AABB是否配合入現行區塊(即,TestAddToBlock,表C的行28及在圖65中的操作6503),吾人計算將從加入新AABB發生的所預測新RSV、總和預測RSV向量、及然後將此值乘以殘留值的總數,該殘留值係如果新AABB被加入,存在該區塊中。如果此值係在可用以儲存殘留的預算內(即,小於或等於總區塊大小減去元資料6401大小),則它可以被加入至現行區塊。如果不是,則初始化新的壓縮塊。
熵編碼
本發明之一實施例包含對AABB殘留值計算的額外步驟,其包含在預測/Δ編碼後的殘留的熵編碼。本發明的基本原理並不限於此特定實施法。
預排序/重新排序能力
作為一種選用預處理,輸入幾何可以被排序/重新排序以改良空間一致,這可以改良壓縮效能。排序可以以各種方式加以執行。完成此的方式為使用摩頓碼排序。此排序已經用作為在其他BVH建立器中的主要步驟,以在抽取階層前,提升在幾何中的空間一致。
壓縮AABB可以以任何想要順序被寫入,但如果AABB被重新排序/排序,則將有必要儲存記錄有排序順序的額外陣列的整數。該陣列包含每基元的單一整數索引。此建立可以以用以參考重新排序基元的名單的主索引加以進行。當需要原始基元ID(例如,當葉節點的內容被寫入)時,我們必須使用主索引以查看在該額外陣列中的原始基元ID,以確保該樹正確參考原始輸入幾何名單。
II.AABB解壓縮
在一實施例中,對於整個AABB壓縮塊6400,AABB的解壓縮係被一次執行。殘留資料係首先藉由檢視該壓縮塊6400的元資料6401並根據此資訊解譯所儲存的殘留(例如,藉由將距離值加至種向量與在順序中的先前殘留值)加以重建。然後,執行各個AABB壓縮階段的反轉,以解壓縮由壓縮塊所表示的單精度浮點AABB。
一實施例實行在BVH建立器中的解壓縮步驟的變化例,其利用與壓縮階層輸出配合的降低精度建構技術。此降低精度建立器係被描述於申請於2020年1月17日的申請第16/746,636號的“用於降低精度包圍體階層結構的架構”的共同申請案中,該案被受讓給本案相同的申請人。降低精度建立器於降低精度的整數空間執行多數的計算。因此,本發明之一實施例將於此所述之AABB殘留計算的量化步驟配合在降低精度建立器中所用的量化。然後,AABB可以被解壓縮至只有整數,配合現正為降低精度建立器所處理的節點的座標空間。類似變化可以以一建立器實施,其並未輸出壓縮階層,而是執行頂點的量化。
III.索引壓縮
在本發明之一實施例中,索引陣列被壓縮成為一陣列的索引壓縮塊。圖66示出索引壓縮塊6610的一實施例,其包含元資料6603及索引殘留6602。索引陣列與AABB陣列不同,因為它必須重新壓縮,因為索引在建立程序中被分割/重新排序。
在很多傳統BVH建立器中,索引係被表示為無符號整數,通常每基元具有一索引。索引陣列的目的為指向基元AABB。各個AABB/基元可以在記憶體中分配有固定大小。因此,也可能隨機存取在陣列中的任何特定基元p
或AABBa
。然而,當AABB壓縮造成每一快取線的可變數量的AABB時,在壓縮後,儲存有給定基元的AABB壓縮塊並不容易決定。因此,儲存傳統索引並不與在此所述之AABB壓縮塊相容。
在本發明之一實施例中,用以指明基元AABB的位置的索引技術也允許索引本身的壓縮。兩種新穎技術在以下被稱為區塊偏移索引(BOI)與階層位元向量索引(HBI)。這些索引實施法也可以在本發明之各種實施例中單獨使用或組合使用。另外,依據圖63,兩種索引技術可以被使用作為多層建立的一部分,及兩類型的索引也可以被使用作為相同BVH建立的一部分。這些索引技術允許BVH建立以類似於傳統BVH建立器的方式進行,但以AABB與對應索引陣列兩者的壓縮表示法進行。
全域索引壓縮常數
索引壓縮利用一組全域索引壓縮常數,其適用至所有索引壓縮塊。以下所述之兩索引壓縮方案共用相同全域常數,這被總結如下表D。
表D
區塊偏移索引
常數 | 說明 |
IndexCompressionBlockSizeBytes | 索引壓縮塊以位元組表示的大小。此值將典型配合若干數量的快取線。 |
maxIndicesPerBlock | 在索引壓縮塊中允許的最大索引數。此值決定儲存以給定區塊所表示的索引數所需的位元數。 |
在區塊偏移索引(BOI)中,一般單整數索引被改變為包含兩整數的結構,其一指明壓縮塊6400及另一則包含一偏移,以指明在壓縮塊6400內的基元AABB資料。新資料結構的一實施例係依據以下碼序列加以產生:
於此,blockIdx儲存至AABB壓縮塊的索引,及blockOffset指明在區塊內的特定基元AABB(即,blockIdx與blockOffset結合提供基元AABB的位址)。此資訊足以完全指明在建立期間的壓縮區塊內的特定AABB。
在一實施例中,這些結構之一係為了在BVH建立內的各個基元產生,使得該名單的大小可預期。然而,給定每AABB壓縮塊的可變數目的AABB,則對於這些壓縮塊各個將有可變數的這些索引結構(例如,並不是所有blockOffset的可能值將存在於各個AABB壓縮塊)。因此,為了正確地初始化該陣列的區塊偏移索引,有必要參考blockOffset陣列(見,例如,在表C中的碼序列),可以由其中決定在各個AABB壓縮塊中的基元數,不是以AABB壓縮同時,就是其後的處理。一旦初始化,區塊偏移索引可以基本上以傳統BVH建立器中找到的傳統索引的相同方式加以處理。
用於傳統BVH建立器中的單整數索引大小上典型為4位元組。在一實施例中,對於blockIdx使用26位元及對於blockOffset使用6位元。在替代實施例中,對於各個變數可以使用較小數量的位元,以降低整體記憶體佔用率。在一實施例中,因為用於blockOffset的一固定大小必須被選出,所以,這對每AABB壓縮塊設下基元數量的最大基元數限制。在6位元的情況中,每AABB壓縮塊可以以64基元的最大值表示。
有關於區塊偏移索引的剩餘項目為如何完成壓縮。區塊偏移索引被Δ編碼及依序封裝成索引壓縮塊。每區塊被儘可能封裝多的索引,及每當前一索引壓縮塊到達其容量時,新的索引壓縮塊就開始。這可以以很類似於AABB壓縮塊的方式進行(如於表C所示),造成每一索引壓縮塊有可變數量的索引。
圖66示出一區塊偏移索引壓縮塊6610的例子,除了殘留大小向量與種向量外,其額外包含指明索引數目的元資料6603。在一實施例中,使用兩通道編碼,以用於索引殘留6602,其中blockIdx與blockOffset值係被分開作Δ壓縮。類似於AABB壓縮塊,索引壓縮塊6610儲存於區塊中的索引數的指示、用於殘留的位元數(作為殘留大小向量)、及包含用於blockIdx的第一種向量與用於blockOffset的第二種向量的種向量。索引殘留6602包含由壓縮造成之一對差異值。例如,索引殘留值可以包含:表示在現行輸入blockIdx值與前一輸入blockIdx值間之差的第一差值,以及,表示現行輸入blockOffset值與前一輸入blockOffset值間之差的第二差值。在序列中之第一blockIdx與blockOffset值係被原樣儲存在seedVector欄位中,其表示第一殘留值被計算出的向量。
階層位元向量索引
本發明之一實施例使用被稱為階層位元向量索引(HBI)的另一基元索引壓縮技術,其可以單獨或與區塊偏移索引(BOI)一起結合使用。HBI不像傳統整數索引與BOI,在於單一HBI索引可以一次參考多數基元。事實上,HBI索引可以參考到整個AABB壓縮塊。
此類型索引的擴充結構係被顯示於圖67A-B中。各個HBI索引6700由兩元件構成。blockIdx 6708指向一給定AABB壓縮塊,作為與在區塊偏移索引中對應元件相同的目的。第二元件為位元向量6701,其具有等於在AABB壓縮塊中允許最大數量的AABB(即,maxAABBsPerBlock)的位元數目。在位元向量6701中的各個位元表示是否在AABB壓縮塊中的對應元件為此索引所參考。例如,如果在位元向量中的第三位元為‘1’,則表示該AABB壓縮塊的第三AABB/基元為HBI索引所參考。如果該位元為‘0’,則該AABB/基元並未被參考。
用於位移網目壓縮的設備與方法
本發明之一實施例使用用於可見度查詢的光線追蹤,來執行路徑追蹤,以描繪真實感影像。在此實施法中,光線係由虛擬相機投出並追蹤穿過模擬場景。然後執行隨機取樣,以增量地計算最終影像。在路徑追蹤中的隨機取樣使得雜訊出現在所描繪的影像中,這可以藉由允許更多取樣被產生來加以移除。在此實施法中之取樣可以為由單一光線造成的彩色值。
在一實施例中,用於可見度查詢的光線追蹤操作取決於產生於在預處理階段中的場景基元(例如,三角形、四邊形等)上的包圍體階層(BVH)(或其他3D階層配置)。使用BVH,描繪器可以快速決定在光線與基元間之最近交集點。
當以硬體(例如,如以在此所述之遍歷/交集電路)加速這些光線查詢,記憶體頻寬問題可能由於所擷取三角形資料的數量而產生。幸好,在模型化場景中的很多複雜度係為移置映射所產生,其中,例如細分面的平滑基礎面表示係為使用細分規則作細微拼圖,以產生如於圖69A所示之拼圖網目6991。移置功能6992被應用至細微拼圖網目的各個頂點,其典型不是沿著基礎面的幾何法線位移就是進入任意方向,以產生移置網目6993。被加入該表面的移置量係被限定於範圍內。
本發明之一實施例使用有損水密壓縮,有效地壓縮移置映射網目。更明確地說,此實施法相對於粗基礎網目量化該移置,這可以匹配基礎細分網目。在一實施例中,基礎細分網目的原始四邊形可以使用雙線性內插法加以細分成與移置映射有相同準確度的柵。
圖69B示出壓縮電路/邏輯6900,其依據於此所述之實施例,壓縮移置映射網目6902,以產生壓縮移置網目6910。在所示實施例中,移置映射電路/邏輯6911由基礎細分面產生移置映射網目6902。圖70A示出一例子,其中原始表面7000被細微拼圖,以產生基礎細分面7001。移置功能被應用至基礎細分面7001的頂點,以建立移置映射7002。
回到圖69B,在一實施例中,量化器6912相對於粗基礎網目6903量化移置映射網目6902,以產生包含3D移置陣列6904以及與該粗基礎網目6903相關的基礎座標6905的壓縮移置網目6910。例如,但並不限定,圖70B示出一組差向量d1-d4 7022,其各個與差移置頂點v1-v4相關。
在一實施例中,粗基礎網目7003為基礎細分網目6301。或者,內插器6921使用雙線內插將基礎細分網目的原始四邊形細分為與移置映射相同準確度的一柵。
量化器6912決定由各個粗基礎頂點至對應移置頂點v1-v4的差向量d1-d4 7022並將差向量7022組合成3D移置陣列6904。以此方式,移置柵只使用四邊形的座標(基礎座標6905)及該陣列的3D移置向量6904即可界定。注意,這些3D移置向量6904並不必然匹配用以計算原始移置7002的移置向量,因為模型工具通常不會使用雙線內插以細分該四邊形並施加更複雜細分規則,來建立平滑表面以移置。
如於圖70C所示,兩相鄰四邊形7090-7091之柵將沿著界線7092無縫地交織在一起,四邊形7090-7091兩者將評估完全相同的頂點位置v5-v8。因為沿著相鄰四邊形7090-7901的邊緣7092儲存的移置也相同,所以移置面將不會有任何破裂。此特性特別重要,因為這更明確表示所儲存移置的準確性也可以對整個網目任意降低,造成了低品質的連接移置網目。
在一實施例中,半精度浮點值被用以編碼移置(例如,16位元浮點值)。或者,或外加地,共享指數表示法被使用,其只儲存所有三個頂點分量的一指數與三個尾數。再者,因為移置的範圍通常很良好設界的,所以,一網目的移置可以使用為常數所縮放的固定點座標加以編碼,以取得足夠範圍來編碼所有移置。本發明之一實施例使用平坦三角形,來使用雙線性貼片作為基礎基元,而另一實施例使用三角形對以處置每個四邊形。
依據本發明之一實施例的方法係示於圖71。該方法可以實施在於此所述之架構上,但並不限於任何特定處理器或系統架構。
在7101,移置映射網目係由基礎細分面產生。例如,基元面可以被細微拼圖,以產生基礎細分面。在7102,基礎網目被產生或識別(例如,在一實施例中之基礎細分網目)。
在7103,移置功能係被施加至基礎細分面的頂點,以建立差向量的3D移置陣列。在7104,產生與基礎網目相關的基礎座標。如所述,基礎座標可以被與差向量配合使用,以重建移置柵。在7105,壓縮移置網目被儲存,包含3D移置陣列與基礎座標。
下次,基元被由儲存器或記憶體讀取,在6506決定,移置柵被由壓縮移網目在7103產生。例如,3D移置陣列可以應用至基礎座標,以重建該移置網目。
加強有損移置網目壓縮及用於有損柵基元的硬體BVH遍歷/交集
複雜動態場景正挑戰著即時光線追蹤實施法。程序曲面、外皮動畫等需要三角形的更新及加速在各個框中之結構,甚至在第一光線發動之前。
不同於只使用雙線性貼片作為基礎基元,本發明之一實施例擴充該手法,以支援雙三次四邊形或三角形貼片,其需要在該貼片邊界以水密方式被評估。在一實施法中,位元欄被加入至有損柵基元,其指示是否隱含三角形有效否。一實施例同時也包含一修改硬體塊,其將現行拼圖器擴充以直接產生有損移置網目(例如,如上參考圖69A-71所述者),其然後被儲存至記憶體。
在一實施法中,對BVH遍歷單元的硬體擴充採有損柵基元作為輸入並動態抽出用於隱含參考三角形/四邊形的次組的包圍盒。所抽出包圍盒形式上相容於BVH遍歷單元的光線盒測試電路(例如,以下所述之光線/盒遍歷單元8930)。光線對動態產生包圍盒交集測試的結果被傳送至光線四邊形/三角形交集單元8940,其抽出包含在包圍盒中的相關三角形與將之交集。在一實施例中,“相關”三角形為由該包圍盒所包圍的這些三角形。
一實施法也包含使用間接參考頂點資料(類似於其他實施例),以對有損柵基元擴充,因而,藉由相鄰柵基元的共享頂點資料,來降低記憶體消耗。在一實施例中,修改版本的硬體BVH三角形交集區塊得知輸入為來自有損移置網目的三角形,允許它重覆使用邊緣計算,用於相鄰三角形。也對有損移置網目壓縮加入擴充,以處置運動模糊幾何。
如上所述,假設輸入為任意維度的柵網目,則此輸入柵網目被首先細分為具有固定解析度的較小子柵,例如,4×4頂點,如於圖72所示。
如於圖73所示,在一實施例中,有損4×4柵基元結構(GridPrim)現根據該4×4輸入頂點加以計算。一實施法依據以下碼序列加以操作:
在一實施法中,這些操作消耗100位元組:來自PrimLeafDesc的18位元可以被保留以去能個別三角形,例如,(由上而下,由左而右順序之)000000000100000000b的位元遮罩將去能如於圖74所示之反白三角形7401。
隱含三角形可以是3×3四邊形(4×4頂點)或更多三角形。很多這些隱含三角形和四邊形被縫在一起,以形成網目。該遮罩告訴我們是否要交集該三角形。如果到了一個洞,則撤消經由該4×4柵的個別三角形。這完成更高精準度並顯著降低記憶體用量:~5.5位元組/三角形,這是很緊縮的表示法。相較下,如果線性陣列以全精度儲存,則各個三角形耗用48及64位元組。
如於圖75所示,硬體拼圖器7550將貼片拼圖成三角形以4×4為單元並將之儲存入記憶體,使得BVH可以建立於其上,並它們可以被光線追蹤。在此實施例中,硬體拼圖器7550被修改以直接支援有損移置柵基元。不同於產生個別三角形並將之傳遞給光柵單元,硬體拼圖單元7550可以直接產生有損柵基元並將之儲存於快取(例如,L0/L1快取、專用光線追蹤快取、共享快取等)、本地記憶體(例如,本地高速暫存記憶體)、及/或系統記憶體。
對硬體BVH遍歷單元7550的擴充採用有損柵基元作為輸入並高速抽取包圍盒用於次組的隱含參考三角形/四邊形。在圖76所示之例子中,各個用於各個四邊形的九個包圍盒7601A-7601I係由有損柵抽出並被當為特殊九個寬BVH節點傳送至硬體BVH遍歷單元7550,以執行光線盒交集。
逐個測試所有18個三角形係很昂貴的。參考圖77,一個實施例抽取一個包圍盒7601A至7601I,用於各別四邊形。示於圖77的九個包圍盒7601A至7601I對應於示於圖76的九個四邊形7601A至7601I,但這只是例子,任何數量的三角形均可以被抽出。當一次組的三角形被讀取及包圍盒被計算時,產生了N-寬BVH節點7700-一個子節點7601A-I用於各別四邊形。這結構然後被傳送給硬體遍歷單元7710,其將光線遍歷通過新建構的BVH。因此,在此實施例中,柵基元被使用作為隱含BVH節點,包圍盒可以由該處決定。當產生包圍盒時,它包含兩個三角形。當硬體遍歷單元7710決定一光線遍歷包圍盒7601A-I之一時,相同結構被傳送至光線三角形交集器7715,以決定它已命中包圍盒內的哪目標/三角形。為了決定是否已命中包圍盒,包含光線原點及光線方向的光線資料係被以各個包圍盒7601A-I的最小與最大座標值的觀點加以評估。如果包圍盒已經為光線所命中,則光線三角形交集器7715藉由以包含在包圍盒內的三角形的三角座標的觀點,以評估光線資料,來執行交集測試。
在本發明之一實施例中,這些技術被用作為光線三角形遍歷7710與交集單元7715的預汰除步驟。當三角形可以只使用BVH節點處理單元加以推論時,交集測試顯著較便宜。對於各個交集包圍盒7601A-I,兩個個別三角形被傳送至光線追蹤三角形/四邊形交集單元7715,以執行光線三角形交集測試。
上述柵基元與隱含BVH節點處理技術可以積集於在此所述之任一遍歷/交集單元(例如,以下所述之光線/盒遍歷單元8930)內或使用作為其預處理步驟。
運動模糊操作係類似於模擬在相機中之快門時間。為了光線追蹤此作用,由t0
移動至t1
,有兩個三角形表示法,一個用於t0
及一個用於t1
。在一實施例中,在其間執行內插(例如,在各個所述兩個時間點內插基元表示法於.5)。
例如包圍體階層(BVH)與k-d樹的加速結構的縮小在於它們需要在時間與記憶體中被建立與儲存。一種降低此負擔的方法為利用該加速資料結構的某些壓縮及/或量化,這些係特別適用於BVH,這自然提供保守與增量的編碼。在好的方面,這可以顯著降低加速結構的尺寸,經常是BVH節點大小的一半。在不好的一面,壓縮BVH節點也可能發生負擔,這可能有不同的情況。第一,在遍歷期間解壓縮各個BVH節點就有明顯的成本;第二,尤其是階層式編碼方案,需要追蹤母資訊略微複雜化了堆疊操作;及第三,保守量化邊界表示包圍盒較未壓縮者略微不緊,分別觸發了需要被遍歷與交集的節點與基元上數量的可測增加。
本地量化可以被執行,以降低BVH的大小。n-寬BVH節點包含對準軸包圍盒(AABB),其“n”子係為單精度浮點格式。本地量化表示相對於母AABB的“n”子AABB並儲存以量化,例如8位元格式來儲存這些值,藉以降低BVH節點的大小。
整個BVH的本地量化引入多數負擔因素,(a)去量化AABB較原始單精浮點AABB為粗,因而,對於各個光線引入額外遍歷與交集步驟,及(b)去量化操作本身為高成本,而對各個遍歷步驟增加負擔。因為這些缺點,壓縮BVH只被用於特定應用情況並不常用。
本發明之一實施例利用技術,以如申請於2018年12月28日申請案16/236,185之共同申請案“壓縮包圍體階層的葉節點的設備與方法”所述地壓縮在包圍體階層中的準線(hair)基元的葉節點,該案係受讓給本案的申請人。更明確地說,如於共同申請案所述,幾群的取向基元與母包圍盒儲存在一起,免除了在葉節點中之子指標儲存。取向包圍盒然後使用16位元座標被儲存用於各個基元,該16位元座標係相對母盒的角落被量化。最後,量化法線係被儲存用於各個基元群組,以指示該取向。此手法可以對BVH準線基元造成在頻寬與記憶體佔用率上的顯著降低。
在一些實施例中,藉由儲存母包圍盒及相對於母包圍盒使用較低精度來編碼N子包圍盒(例如,8子),來壓縮BVH節點(例如,用於8-寬BVH)。應用此想法至BVH的各個節點的缺點為當遍歷光線通過此結構時,在每節點引入部分解壓縮負擔,這降低了效能。
針對此問題,本發明之一實施例只有在該BVH的最低層使用壓縮節點。因此,未被壓縮的較高BVH層可以在最佳效能時(即,只有它們很大時,才被用到,但它們數量又很少)被利用,及對較低/最低層的壓縮也很有效率,因為多數BVH的資料是在最低層。
另外,在一實施例中,量化也被應用於儲存取向包圍盒的BVH節點。如以下所討論,這些操作係略微複雜於用於軸對準包圍盒。在一實施法中,使用具有取向包圍盒的壓縮BVH節點被配合上只在BVH的最低層(或較低層)使用壓縮節點。
因此,一實施例藉由引入單一專用層的壓縮葉節點,同時,使用一般未壓縮BVH節點用於內部節點,改良了全壓縮BVH。在此手法背後的動機為幾乎所有壓縮的節省均來自BVH的最低層(更明確地說,用於4-寬及8-寬BVH,作成所有絕大多數的節點),而多數負擔均來自內部節點。因此,引入單層專用“壓縮葉節點”給出幾乎與全壓縮BVH相同(在一些實施例中,甚至更好)的壓縮增益,同時,也維持與未壓縮者幾乎相同的遍歷效能。
圖80示出一例示光線追蹤引擎8000,其執行於此所述之葉節點壓縮與解壓縮操作。在一實施例中,光線追蹤引擎8000包含用於如上所述之一或更多光線追蹤核心的電路。或者,光線追蹤引擎8000可以被實施於該CPU的核心上或其他類型的圖形核心(例如,Gfx核心、張量核心等)上。
在一實施例中,光線產生器8002產生光線,遍歷/交集單元8003追蹤該光線通過包含多數輸入基元8006的場景。例如,如虛擬實境遊戲的應用程式可以產生多串流的命令,輸入基元8006係由該命令產生。遍歷/交集單元8003將光線遍歷通過由BVH建立器8007所產生的BVH 8005,並指明該等光線與一或更多基元8006交集的命中點。雖然所示為單一單元,但遍歷/交集單元8003可以包含耦接至分開交集單元的遍歷單元。這些單元可以被實施為電路、由該GPU或CPU所執行的軟體/命令、或其任意組合。
在一實施例中,BVH處理電路/邏輯8004包含BVH建立器8007,其如於此所述根據在場景中之基元8006間之空間關係產生BVH 8005。另外,BVH處理電路/邏輯8004包含BVH壓縮器8009及BVH解壓縮器8008,用以分別如於此所述壓縮與解壓縮葉節點。為了例示目的,以下說明將針對8-寬BVH(BVH8)。
如於圖81所示,單一8寬BVH節點8100A的一實施例包含8個包圍盒8101-8108及8個(64位元)子指標/參考8110,指向包圍盒/葉資料8101-8108。在一實施例中,BVH壓縮器8025執行編碼,其中8個子包圍盒8101A-8108A係相對於母包圍盒8100A作表示,並被量化為8位元均勻值,如包圍盒葉資料8101B-8108B所示。量化8-寬BVH (QBVH8節8100B)使用例如儲存為兩個3維單精度向量(2×12位元組)的開始及範圍值為BVH壓縮8125所編碼。八個量化子包圍盒8101B-8108B被儲存為2×8位元組,用於包圍盒的每維度的下與上界。注意,此佈局不同於現行實施法,因為該範圍係以全精度加以儲存,這通常提供較密邊界,但需要較多空間。
在一實施例中,BVH解壓縮器8026如下解壓縮QBVH8節點8100B。在維度i
中的解壓縮下界可以藉由QBVH8.starti
+(位元組-至-浮點) QBVH8.loweri
*QBVH8.extendi
所計算,其在CPU 4099上每維度與盒需要5個指令:2負載(start, extend)、位元組-至-整數負載+上轉換、整數-至-浮點轉換、及一個乘-加。在一實施例中,解壓縮係針對所有8個量化子包圍盒8101B-8108B使用SIMD指令並聯完成,這對光線節點交集測試增加約10個指令的負擔,使之至少較標準未解壓縮節點情況貴了兩倍以上。在一實施例中,這些指令係被執行於CPU 4099的核心上。或者,一同等組的指令係為光線追蹤核心4050所執行。
沒有了指標,QBVH8節點需要72位元組,而未壓縮BVH8節點則需要192位元組,這造成2.66x的減縮因數。以8個(64位元)指標,減縮因數降低至1.88x,這使得它必須針對處置葉指標的儲存成本。
在一實施例中,當只壓縮BVH8節點的葉層成為QBVH8節點時,該8個子8101-8108的所有子指標將只參考葉基元資料。在一實施法中,此事實係為將所有參考基元資料直接儲存在QBVH8節點8100B本身之後加以利用,如圖81所示。這允許將QBVH8的全64位元子指標8110降低至只有8位元偏移8122。一實施例中,如果基元資料為固定大小,則偏移8122被完全跳開,因為它們可以直接由交集包圍盒與至QBVH8節點8100B本身的指標的索引加以計算。
當使用由上而下BVH8建立器時,只壓縮BVH8葉層只需要略微修改建立程序。在一實施例中,這些建立修改係在BVH建立器8007中實施。在遞迴建立階段期間,BVH建立器8007追蹤基元的現行數量是否低於某臨限值下。在一實施法中,N×M為臨限值,其中N表示BVH的寬度,及M為在BVH葉內的基元數。對於BVH8節點及例如每葉四個三角形,臨限值為32。因此,在低於32基元的所有次樹,BVH處理電路/邏輯8004將進入特殊碼路徑,其將持續表面積試探(SAH)為主分割程序,但建立單一QBVH8節點8100B。當最終建立QBVH8節點8100B時,BVH壓縮器8009然後收集所有參考基元資料並將之複製緊接在QBVH8節點之後。
由光線追蹤核心8150或CPU 8199所執行的實際BVH8遍歷只略微為葉層壓縮法所影響。基本上,葉層QBVH8節點8100B被視為擴充葉類型(例如,其被標示為葉)。這表示一般BVH8由上而下遍歷持續直到到達QBVH節點8100B為止。在此點,執行了單光線-QBVH節點交集,並對所有其交集子8101B-8108B,個別葉指標被重建並執行一般光線基元交集。
葉層壓縮方案的一實施例甚至允許藉由抽出共同性而作實際基元葉資料的無損壓縮。例如,在壓縮葉BVH(CLBVH)節點內的三角形似乎共享頂點/頂點索引與特性,如同相同目標ID。藉由每CLBVH節點只儲存這些共享特性一次並使用在這些基元內的小本地位元組大小索引,記憶體消耗可以進一步減少。
在一實施例中,使用了用以影響在BVH葉內的共同空間一致性幾何特性的技術,以用於其他更複雜基元類型。例如準線片段的基元係可以用以共享每BVH葉一共同方向。在一實施例中,BVH壓縮器8009實行壓縮方案,其將此共同方向特性列入考量,以有效地壓縮取向包圍盒(OBB),這已經顯示為有用於包圍長對角基元類型。
於此所述之葉層壓縮BVH引入BVH節點量化只有在最低BVH層,因此,允許額外記憶體減少最佳化同時保留未壓縮BVH的遍歷效能。因為只有在最低層的BVH節點被量化,所以,所有其子節點指向葉資料8101B-8108B,其可以被相鄰儲存在一區塊的記憶體中或一或更多快取線8098中。
該想法也可以適用至階層,其使用取向包圍盒(OBB),其典型被用以加速準線基元的描繪。為了例示一特定實施例,在標準8-寬BVH在三角形上的典型例子中的記憶體減縮將被評估。
因為只有量化BVH節點被使用於葉層,所有子指標將實際指向葉資料8101A-8108A。在一實施例中,藉由儲存量化節點8100B與所有葉資料8101B-8108B,其子指向在單一連續區塊記憶體8098,在量化BVH節點8100B中的8個子指標被移除。節省子指標降低了量化節點佈局為:
這只需要72位元組。由於在記憶體/快取8098中的連續佈局,在第i子的子指標可以現在被以下所簡單計算:
childPtr(i)=addr(QBVH8NodeLeaf)+sizeof(QBVH8NodeLeaf)+i*sizeof(LeafDataType)。
因為在BVH的最低層的節點作成超過BVH的整個大小的一半,所以,於此所述之只葉層壓縮提供減縮至0.5+0.5*72/256=原始大小的.64x。
另外,具有較粗邊界的負擔以及解壓縮量化BVH節點本身的成本只發生BVH在葉層(相對於當整個BVH被量化時的所有層)。因此,由於較粗邊界(量化所引入)的相當顯著遍歷與交集負擔係被大大地避免。
本發明實施例的另一優點為改良硬體與軟體預取效率。這是由於所有葉資料被儲存在相對小連續區塊的記憶體或快取線中所造成。
因為在BVH葉層的幾何為空間一致,所以,很可能所有為QBVH8NodeLeaf節點所參考的基元共享共同特性/特徵,例如,objectID、一或更多頂點等。因此,本發明之一實施例更藉由移除基元資料複製,而降低儲存。例如,基元與相關資料在每QBVH8NodeLeaf節點只可以儲存一次,藉以更進一步降低用於葉資料的記憶體消耗。
準線基元的有效定界係如下被描述為藉由利用在BVH葉層的共同幾何特性而實現為顯著記憶體縮減的例子。為了準確定界為細長結構空間取向的準線基元,已知手法係被使用以計算取向包圍盒,以緊密定界該幾何。首先,對準準線方向的座標空間被計算。例如,z-軸可以被決定以指向該準線方向,而x與y軸則垂直於該z-軸。使用此取向空間,則一標準AABB現在可以被用以緊密定界該準線基元。以此一取向定界來交集光線需要首先將該光線轉換入取向空間然後執行標準光線/盒交集測試。
利用此手法的問題為記憶體用量。轉換入取向空間需要9個浮點值,而儲存包圍盒需要額外6個浮點值,總數得到60位元組。
在本發明之一實施例,BVH壓縮器8025壓縮此取向空間以及在空間上彼此接近的多數準線基元的包圍盒。然後,這些壓縮界線可以被儲存在壓縮葉層內,以緊密包圍儲存在該葉內的該準線基元。以下手法被用於一實施例中,以壓縮該取向界線。取向空間可以為正規向量vx 、 vy 、
及vz
所表示,這些係彼此正交。將點p
轉換進入該空間工作,藉由將之投影至這些軸:
因為向量vx 、 vy 、
及vz
被正規化,所以,這些分量為於範圍[-1,1]中。這些向量因此使用8位元帶符號固定點數,而不是使用8位元帶符號整數與固定標度加以量化。產生了以此方式量化的vx
’ 、 vy
’ 、
及vz
’
。此手法降低了所需記憶體,以由36位元(9浮點值)編碼該取向空間至只9位元組(9個固定點數,每個1位元組)。
在一實施例中,取向空間的記憶體消耗藉由利用所有向量彼此正交的事實加以進一步降低。因此,只有兩向量(例如,py
’
及pz
’
)被儲存,及px
’
=cross(py
’,pz
’)
可以被決定,進一步降低所需儲存量只到6位元組。
所保留的是量化AABB在該量化取向空間內。在此的問題為將點p投影至該空間的壓縮座標軸(例如,藉由計算dot(vx
’,p
))得到可能大範圍的值(因為值p典型被編碼為浮點數)。為了該理由,浮點數將被用以編碼該界線,降低可能儲存。
為了解決此問題,本發明之一實施例首先將多數準線基元轉換入一空間,其中,其座標在範圍[0,1/√3]中。這可以藉由決定世界空間軸對準多數準線基元的包圍盒b
並使用先將其向左移位b.
lower的轉換T,然後,在各個座標中縮放1/max(b.size.x, b.size.y, b.size.z)
加以完成:
一實施例確保在此轉換後的幾何停留在範圍[0,1/√3]範圍內,因為然後被轉換點將被投影至量化向量px
’, py
’, pz
’
停留在範圍[-1,1]內。這表示曲線幾何的AABB可以被量化,當使用T轉換然後被轉換入量化取向空間。在一實施例中,8位元帶符號固定點算術被使用。然而,為了精準度理由,16位元帶符號固定點數可以被使用(例如,使用16位元帶符號整數與固定標度來編碼)。這減少了編碼對準軸包圍盒所需的記憶體,由24位元組(6浮點值)至只有12位元組(6字元)加上偏移b.lower
(3浮點)及標度(1浮點),其係為多數準線基元所共享。
例如,一旦定界8準線基元,此實施例降低記憶體消耗由8*60位元組=480位元組至只有8*(6+12)+ 3*4+4=160位元組,這是有3×的縮減。將光線與這些量化取向界線交集的工作為首先使用轉換T將該光線轉換,然後,使用量化vx
’ 、 vy
’ 、
及vz
’
將光線投影。最後,光線與量化AABB交集。
上述胖葉手法提供更壓縮的機會。假設在該胖BVH葉中,有隱含單一float3指標,指向該多數相鄰GridPrims的共享頂點資料,則在各個柵基元中的頂點可以為位元組大小索引(“vertex_index_*”)所間接定址,藉以利用頂點共享。在圖78中,頂點7801-7802被共享-並被以全精度儲存。在此實施例中,共享頂點7801-7802只被儲存一次及指向包含特有頂點的陣列的索引被儲存。因此,每時戳不是儲存48位元組,而是只儲存4位元組。在以下碼序列中索引被使用以指明共用的頂點。
在一實施例中,基元的共享邊緣只被評估一次,以節省處理資源。例如,在圖79中,假設包圍盒由反白四邊形構成。不是個別地交集所有三角形,本發明的一實施例對各個三個共享邊緣執行光線邊緣計算。三光線邊緣計算的結果因此為四個三角形所共享(即,對於各個共享邊緣,只執行一個光線-邊緣計算)。另外,在一實施例中,結果被儲存在晶片上記憶體(例如,可以為交集單元所直接存取的暫用記憶體/快取)。
圖形與資料結構的原子學
“原子”為一組操作,其必須被完成為單一單元。某些原子學將有利於圖形處理效能,特別是當執行計算著色器時。本發明之一實施例包含各種新原子學,以改良圖形處理效能,包含:
․鉗位用原子學
․“z-測試”原子寫入
․“z-測試”原子累積
․環緩衝器的原子學
I.鉗位用原子學
鉗位原子的一實施例指明目的、類型值、及最小與最大鉗位值。例如,鉗位原子可以採形式為:
以上鉗位操作自動將一值加至目的,並且,然後鉗位至指定的最小與最大值(例如,對於任何大於最大值的值,設定至最大值,及對於任何小於最小值的值,設定為最小值)。
鉗位原子值可以是32位元、64位元或任何其他資料大小。再者,鉗位原子學可以操作於各種資料類型,包含但並不限於uint、float、2×fp16、float2、及4×fp16。
II. “Z-測試”散射寫入
Z-測試散射寫入可以用於各種應用,包含例如:
․散射立體圖描繪/立體像素化(例如,用於環境探測);
․散射不全反射陰影圖(RSM)(類似於用於間接照明的不全陰影圖);及
․動態擴散全域照明型態全域照明通過散射“環境探測”更新。
一例示64位元目的暫存器8201係被顯示於圖82A中,儲存有32位元深度值8202及32位元酬載8203。在操作中,如果新浮點深度值小於或等於所儲存浮點值,則以上比較交換命令只交換酬載與深度。在一實施例中,cmpxchg原子學為“遠端”原子學,表示實際比較與原子更新並非為由發出指令的EU所完成,而是由接近儲存該資料的LLC(或記憶體控制器)的邏輯區塊所完成。
用於讀-寫位元組位址緩衝器(RWByteAddressBuffers)的例示高階著色語言(HLSL)本質
HighCompValue為予以與在64位元目的的高32位元相比較的類型。剩餘的被假設為被使用asuint()加以轉換。
所有這些本質採類型“R”的“dest”參數,其可以是資源變數或共享記憶體變數。資源變數為對源資的一純量參考,包含索引或欄位參考。共享記憶體變數為以“groupshared”關鍵字界定的變數。任一情況中,類型必須為uint2或uint64。當“R”為共享記憶體變數類型時,操作係被執行於‘值’變數及為“dest”所參考的共享記憶體暫存器上。當“R”為資源變數類型時,該操作係被執行於‘值’參數及由“dest”所參考的資源位置上。結果被儲存在共享記憶體暫存器或為‘dest’所參考的資源位置上:
III. “Z-測試”散射累積
以下描述關於圖82B-C的兩個實施例。圖82B示出儲存有32位元深度值與32位元酬載值的64位元目的暫存器。圖82C示出儲存有32位元深度值與兩個16位元浮點值的64位元目的。以下為例示原子:
•如果新浮點深度值小於所儲存浮點深度值:
1. 以新的深度值交換所儲存深度值
2. Dest.Payload.lowfp16+=InputPayload.lowfp16
3. Dest.Payload.highfp16+=InputPayload.highfp16
用於RWByteAddressBuffers的新HLSL本質
只有HighCompValue係為予以與在64位元目的的高32位元相比的類型。AddLowVal可以為類型‘float’、‘int’、‘uint’及‘min16float2’:
用於目的R的建議新HLSL本質
環緩衝器(或圓緩衝器)為一種資料結構,其包含單一固定大小緩衝器,其操作如同它被端到端連接。圓緩衝器為經常使用於緩衝資料串流。本發明之一實施例包含用以附加及爆出登錄項進出環緩衝器的原子學。
初始時,AppendIndex與PopFrontIndex為零。為了自動附加與爆出,一實施例用特殊64位元原子學。以這些原子學,GPU線程可以例如在環緩衝器的容量限制內實施生產者-消費者方案。硬體監視器可以喚醒等待在該環緩衝器上的核心。
以下碼序列示出用於依據本發明一實施例以從環緩衝器附加及爆出登錄項的原子操作:
a.環緩衝器附加
b.環緩衝器前爆
c.例示使用情況
i.使用InterlockedAppend初始化具可用數目登錄項的環緩衝器
ii.若干線程執行及使用InterlockedPopFront暫時拾取/分配登錄項
iii.登錄項使用InterlockedAppend回覆給環緩衝器
iv.線程可以決定不等待登錄項並處理此情況。用於多生產者取樣與多消費者取樣的虛擬碼係被示於圖84-85中。
生產者虛擬碼取樣被示於圖84A。於此例中,假設job_entry_ready_buffer
被初始化至全為零,及job_entry_consumed_buffer
被初始化至全為1:
消費者虛擬碼取樣被示於圖84B。於此例中,假設job_entry_ready_buffer
被初始化至全為零及job_entry_consumed_buffer
被初始化至全為1。
圖83A示出依據一實施例實施之例示環緩衝器。環緩衝器爆回操作被顯示,其中N為整數值的登錄項N、N+1等係被爆出並儲存在環緩衝器登錄項0、1等。圖83B示出依據以下碼序列,儲存附加索引值8212與前爆索引值8213的64位元目的暫存器8211:
V.原子乘法運算
乘法原子的一實施例指明目的與類型值。例如,乘法原子可以採形式:
InterlockedMultiply(destination, type value)
在一實施例中,乘法運算原子地將指定資料類型的值乘以在目的中的值,其可以是相同資料類型或不同資料類型。
乘法原子值可以例如但並不限於為4位元、8位元、16位元、32位元及64位元整數及16位元、32位元及64位元浮點值。這些值可以是帶符號或未帶符號。再者,若干平行乘法運算可以根據最小資料元件大小加以執行。例如,浮點乘法電路可以被組態以執行單一32位元浮點乘法或雙16位元浮點乘法。例如Bfloat16或TensorFloat16的格式可以被用以有效地執行平行乘法。同樣地,整數乘法器可以執行單一32位元乘法、雙16位元乘法、四個8位元乘法、或八個4位元乘法。各種其他類型的資料格式與平行運算可以被使用,同時仍符合本發明之基本原理,例如,2×FP16、float2、4×FP16、11_11_10FP與2×11_11_10FP。
這些原子學可以被用於各種目的,包含機器學習操作、加權混合順序獨立透明(OIT)或不透明陰影圖。
用於圖形處理器管理磚片資源的設備與方法
本發明之一實施例改良使用者寫入GPU程式可以快取及再使用儲存於緩衝器或材質中之資料的效率。此實施例也提供大程序計算資源的邏輯表示法,其可以或可不同時實體配合入GPU記憶體。
在本發明之一實施例中,新磚片資源為GPU所界定與管理,在此稱為GPU管理磚片資源或GPU管理緩衝器。在一實施法中,緩衝器或其他磚片儲存資源包含多達N個固定大小區塊的記憶體,其中N為整數值。不同GPU架構可以支援不同最大數量的區塊(N)。
在一實施例中,GPU管理磚片資源被用以有效地在著色器間分享資料-即,其中一著色器作為“生產者”,用於一或更多“消費者”著色器。例如,生產者著色器可以產生程序更新內容,該內容可以為消費者著色器使用,而不必涉及與CPU的互動。另一例子中,在光線追蹤實施法中,各種形式的外皮動畫可能需要於遍歷上作更新。一著色器可能貼皮一小部分的網目,儲存結果於磚片資源中,而沒有CPU干涉。當其他光線追蹤相同部分時,它們可以本地存取在磚片資源的資料,而不存取主記憶體。
圖85A示出用以實施GPU管理磚片資源8531的架構的一實施例。圖形處理器8521包含排程器8510,用以排程著色器8511A-B於該組執行單元4001上。著色器的執行需要存取為資源管理器8512所管理的磚片資源8531。在以下所提供之例子中,一著色器8511A被指定為“生產者”,儲存其結果於磚片資源8531中,及另一著色器8511B為“消費者”,使用由該生產者著色器8511A所產生的結果。因此,生產者著色器8511A需要存取以寫至磚片資源8531,及消費者著色器8511B需要對磚片資源8531讀取存取。然而,應注意生產者/消費者架構並不為符合本發明之基本原理所需要。
在一實施法中,磚片資源8531包含晶片上磚片記憶體或磚片緩衝器,其儲存磚片大小區塊0-(N-1)的資料。“磚片”大小可以根據圖形處理器8521的架構與圖形處理器管線的組態加以改變。在一實施例中,圖形處理管線被組態以使用磚片資源8531以執行磚片為主延遲描繪、磚片為主立即模式描繪、及/或其他形式之磚片為主圖形處理。
在一實施例中,執行單元(EU)4001或其他處理單元使用散列值或其他形式的ID 8501的(例如,在一實施例為64位元散列)要求區塊。資源管理器8512決定該區塊是否存在於包含N固定大小區塊的磚片資源8531中。如果未找到此方塊,則緩衝器管理器8510逐出最近最少使用(LRU)區塊,或者,如果有的話,選擇未使用區塊。回應8502指明被緩衝器管理器8510以給定散列值標示為“已使用”的分配區塊。在一實施例中,旗標也回覆指示該區塊為新的。被替換的最近最少使用區塊損失其所儲存的舊內容。如果區塊已經在那裡,則旗標回覆,指示區塊已存在,及然而它仍被回覆。
雖然被示為在圖形處理器8521內的組件,但磚片資源8531可以被實施在圖形處理器8521外部的記憶體內,例如,系統記憶體或系統級快取內。
某些執行在GPU的EU 4001上的著色器群級8511A-B預先知道需要一區塊記憶體。例如,這些著色器可以一直執行於一波的巷道中。在一實施例中,排程這些著色器8511A-B的執行的排程器8510由系統產生值建構64位元ID/散列。例如,在光線追蹤的上下文中,一實施例使用InstanceID及GeometryID以建構特有的64位元散列。然而,也可以使用各種的其他系統產生的變數。
在此實施例中,排程器8510經由資源管理器8512檢查是否已經有一區塊的磚片資源8531分配給該64位元散列。如果是,則在假設該區塊已經包含快取資料並且可以為著色器所消費的情形下,著色器8511A-B被執行,及著色器被排程於EU 4001上。只要使用被鎖住該區塊的快取資料的著色器正執行,則該資源管理器8512鎖住該區塊的記憶體不再被使用。因為著色器係為一或更多EU 4001所執行,所以,它使用區塊ID8501更新在該磚片資源8531中的區塊,並且,在某些操作中,自資源管理器8512接收回應8502。
在一實施例中,如果排程器8510初始並未找到具有給定64位元散列的區塊,則資源管理器8512找出未使用區塊或使用已經被分配但現未使用的最近最少使用區塊(或其他區塊)。如果它不能找到此一區塊,則它可以延後著色器的執行,直到找到此一可用區塊為止。當區塊可用時,只要著色器正執行並排程該著色器,則磚片資源管理器8512鎖住磚片資源區塊,不再被使用。旗標可以傳送至該著色器,以指示該區塊為空白及該著色器可以使用它以產生並儲存資料。在將資料寫入磚片資源區塊後,著色器可以持續執行,如同,磚片資源區塊及其資料已經變得可用一般。
回到以上消費者/生產者例子,生產者著色器8511A可以被排程,以產生新的區塊或磚片程序資源8531,如果請求散列在該池中並未有效的話。此請求散列可以為一或更多消費者著色器8511B所產生,資源管理器8512將阻擋,直到其請求填滿為止。
在一實施例中,磚片資源區塊被逐出至一固態裝置8515或其他高速儲存媒體。SSD 8515或其他儲存裝置可以本地積集於與圖形處理器8521相同的基板及/或卡上,並可以被組態以在內部圖形處理器8521上下文切換期間,儲存磚片資源區塊及其他資料。
依據一實施例之方法被示於圖85B中。該方法可以實施於上述架構的上下文內,但並不限於任何特定架構。
在8551,排程器評估用以被排程執行的下一個著色器,及在8552,決定予以使用以識別磚片資源區塊(例如,使用一或更多於此所述之技術)的散列ID。在8553,排程器以該散列ID查詢磚片資源管理器。
如果在8554決定區塊已經分配給此散列ID,則在8555,磚片資源管理器鎖定磚資源區塊及,在8556,在執行時,著色器使用磚片資源區塊。磚片資源區塊可以隨後當著色器完成時被解鎖,除非它被以消費者著色器的散列ID鎖住,並且,它將需要在現行(生產者)著色器完成後之資料。在任何情況下,程序回到8551,用以排程下一著色器。
如果在8554,並未有磚片資源區塊被以該散列ID指明,則磚片資源管理器指定磚片資源區域給該散列ID並可以分配旗標給該著色器,以表示它可以使用此磚片資源區塊。如所述,磚片資源管理器可以由磚片資源區塊逐出現行資料,以指定該磚片資源區塊給現行著色器。磚片資源區塊被鎖住於855,及在執行8556期間,著色器使用磚片資源區塊。
GPU管理磚片緩衝器8531可以以各種方式使用。例如,SIMD波的巷道要進入為無束縛行走調度員(如下述)所捆住的相同交集著色器盒。在交集著色器執行之前,硬體由緩衝器管理器8510請求一區塊。
64位元散列可以以不同方式加以產生。例如,在一實施例中,64位元散列為現行光線遍歷實例結合框計數器的InstanceID。如果該區塊為新的,則硬體可以發動使用者計算著色器,執行於該波的巷道內,其然後填滿該區塊(例如,具有外皮三角形)。如果區塊為舊的,則著色器可能不被發動。交集著色器然後可以執行並被提供指標器給該區塊。交集著色器可以然後執行光線/三角形交集及/或可以提供給光線/三角形交集的硬體指令的支援(如於此所述)。或者,該區塊可以被設計只包含三角形。在此情況中,硬體在這些三角形間迭代(不在其間建立BVH),並且,例如可以更新最近命中著色器或呼叫任何命中著色器。各種其他使用情況也可以如上所述利用GPU管理磚片資源8531。
用於有效遲緩BVH建立的設備與方法
複雜動態場景正挑戰著即時光線追蹤實施法。程序曲面、外皮動畫等需要更新在各個框中的三角化及加速結構,甚至在第一光線發動之前。
遲緩建立如同為光線遍歷驅動般評估“隨選”場景元件。框的描繪以如前一框的場景-圖形或階層的粗加速結構開始,然後,漸進地建立用於在遍歷期間為光線所命中的目標的新需要的加速結構。看不到的目標可以由建構程序所有效地排除。然而,這些技術並不容易以現行系統與API加以實施,因為其並未支援計算實例可見性所必要的較高階(即,每目標)可程式性。
本發明的一實施例支援用於即時光線追蹤的多通過遲緩建立(MPLB),其以擴充程式模型解決這些問題。它允許實例級遍歷在各個光線調度期間被追蹤並且只為在描繪時間的可能可見幾何,選擇地建立底層加速結構(BLAS)。類似於部分適應取樣技術,於此所述之MPLB可能需要於相同組像素上的多重光線調度至重新發動光線,至場景的先前未建立部分,但本發明之某些實施例包含技術,用以最小化此負擔,例如,框-對-框一致性與光柵化基元可見性的假設。這些技術可以相較於一次建立器,在建立複雜度上提供顯著的降低,只在遍歷成本中,平均上只有邊際增加。
圖86A示出隨選(或“遲緩”)建立器8607的一實施例,以用以如於此所述執行遲緩建立操作。另外,此實施例包含幾個遍歷懸置電路/邏輯8620,用以懸置光線遍歷。光線遍歷懸置電路/邏輯8620可以以硬體、軟體或其任意組合加以實施。當遍歷被懸置時(如於此所更詳述),光線堆疊儲存器8605儲存被懸置的光線堆疊8610。另外,GPU側命令排程發動遲緩建立工作及在執行單元4001上的光線持續,而不為CPU所監視。遍歷原子也被用以降低著色器負擔。
於未中底層加速結構(BLAS)遭遇器的遍歷懸置
在一實施法中,使用具有遍歷著色器擴充、未中實例(例如,BVH 8005的未中底層加速結構)的程式模型被程式標示,使得它們以被分開的傳送中被識別與更新。然後,不是執行不完全遍歷,就是遍歷被放棄。
為了描繪最終像素,對應像素的主著色器可能需要被重新發動,造成幾項重覆的遍歷及著色器執行操作。在一實施例中,當遍歷懸置時,遍歷懸置邏輯8620將整個光線上下文8610(光線堆積、持續等等)備用至晶片外記憶體8605中。在一實施例中,此遍歷懸置為驅動器所管理的固有功能(例如,SuspendTraversal());然而,本發明的基本原理並不限於此實施法。另外,為CPU 3199所執行的在主機側中的新DispatchRay()變體重新排程來自光線上下文8610的被懸置的光線堆疊,以持續遍歷著色器執行。
用於建立與調度的GPU側命令排程
現行遲緩建立實施法的另一顯著負擔為CPU 3199回讀的持續需求以及BVH建立器8007的條件式排程及於GPU 2505上的光線調度。為了改良效率,在一實施法中,BVH處理電路/邏輯8004與光線遍歷8003非同步地執行BVH建立。於建立工作完成時,光線追蹤引擎8000執行光線調度,以由該光線上下文8610繼續被懸置的光線堆疊。
降低遍歷著色器負擔的遍歷原子學
以現行實施法的一個問題為如果實例為未中(未建立),則幾個光線可能遍歷過它並將之標示,以供遲緩建立器8607更新它。只以一個遍歷著色器調用就可以完成的簡單工作係為幾百或更多調用所重複。遍歷著色器並非資源密集,但它對於發動、執行輸入/輸出功能、及儲存結果有顯著的負擔。
在本發明之一實施例中,未建實例葉可以被標示為“原子”節點。原子節點可以同時只被一光線遍歷。原子節點一旦光線遍歷過它就被鎖住,並且,在遍歷著色器執行結束時解鎖。在一實施例中,遍歷著色器設定節點的狀態為“無效”,這防止在鎖被釋放後光線進入它。這允許遍歷硬體不是跳過該節點,就是暫停該光線的遍歷,而不執行新的遍歷著色器。
在一實施例中,對於原子節點,而不是一般原子語意,某些互斥/條件語意被使用。例如,如果遍歷電路/邏輯8003將光線遍歷至代理節點,則它想要鎖住該節點。如果它因為節點已經鎖住而失敗,則它自動執行“暫停光線”,而不回覆至EU 4001。如果鎖住被成功執行,則遍歷電路/邏輯8003處理代理節點。
以遍歷著色器遲緩建立加速結構
本發明之一實施例依據圖86B所示之處理流程加以操作。藉由概述,隨選建立器8607在被決定為可能可見的幾何實例8660上,建立加速結構。可能可見實例8660為預建立器8655根據來自G-緩衝器8650的主要可見性資料及表示在前一框中的可見性的可見性歷史資料8651加以產生。可能可見實例8660也可以根據可見底層加速結構(BLAS)圖8675加以決定,該圖表示包含可見基元的加速結構的底層節點。在一實施例中,可見BLAS圖8675回應於為遍歷邏輯8670所執行之遍歷操作而持續更新,遍歷邏輯可以包含執行於圖形處理器的執行單元上的專用遍歷電路及/或遍歷著色器。
隨選建立器8607產生加速結構之與可能可見實例8660相關的這些部分。光線產生著色器8678根據加速結構中之遍歷單元8670遍歷經加速結構部分的這些部分,選擇地產生光線。遍歷單元8670通知隨選建立器8607額外加速結構節點,遍歷單元8670需要遍歷。同時,遍歷單元8670更新為光線產生著色器8678(例如,只產生用於未遮罩像素的光線)及可見BLAS圖8675所使用的BLAS像素遮罩8677。
因此,隨選建立器8607選擇地建立於可能可見實例8660上建立底層加速結構,以及,實例可見性係在光線遍歷8670期間被更新。不像先前實施法,本發明之實施例操作於多數通過,以避免複雜光線排程。此想法係類似於最近材質空間著色法,其中可見性驅動標示紋素被使用以避免在最終描繪前的多餘著色。
在操作中,首先建立用於空白實例的BLAS,其係被標示為在先前通過中為可能可見的。在第二通過中,光線產生著色器8678選擇重新發射光線至未完成像素,其中遍歷著色器係被使用以記錄更多可能可見空白實例或完成像素。在各個迭代後未完成像素的數量減少,直到沒有光線遍歷空白實例留下為止。
本發明之一實施例一起使用GPU光柵器及光線追蹤硬體執行混合描繪。這是因為當建立G-緩衝器8650時,容易在場景中取得所有實例的主要可見性。因此,在這些實施例中,預建立器8655藉由有效地使用此資料以建構初始加速結構,來利用混合描繪。在第一迭代前,可能可見實例8660被標示於此預建立試探(如下所討論)。
SkipTraversal()本質被界定以忽略現行實例並在較高層加速結構中持續遍歷。如所述,可見底層加速結構(BLAS)圖8675係被使用以記錄常用於加速結構建立器與遍歷著色器中的實例可見性。如於圖86C所示,可見BLAS圖8675的一實施例包含與各個BLAS ID 8674相關的旗標8676,用以表示實例所稱的BLAS可見性以及兩旗標Built_Full與Built_Empty表示BLAS是否已經建立。另外,布林旗標trav_valid被加入至光線酬載中,以追蹤遍歷狀態,以用以檢查是否到此為止光線已經遭遇空白實例。
在一實施例中,在遍歷著色器中的可見性被保守地更新,因為所有被遍歷實例對於現行光線都是可能可見的。因此,第一工作為對現行實例的對應BLAS,設定可見性旗標為真。也設定可見性歷史(vis_history)旗標為真,以在下一框中再次使用(以上碼序列的第9行)它。再者,遍歷目的地係根據現行實例的狀態(空白或滿)及光線狀態(即,trav_valid值)加以決定。如於圖86D中所示,這被分類成三個狀態8690-8692。
對於空白實例8690,對應像素遮罩被重設(第15行),用以在下一通過中重新射出光線。現行遍歷然後藉由設定在光線酬載中的trav_valid旗標(第16行)而被失效。最後,藉由調用SkipTraversal()而持續TLAS遍歷。
對於滿實例及無效遍歷情況8691,現行實例具有一建立BLAS,但光線至此已經遭遇空白實例(即,trav_valid為假)。因為光線將最後再次射至現行像素,所以,BLAS遍歷可以被跳過(第20行)。
對於滿實例與有效遍歷8692,因為光線通常遍歷加速結構,而沒有空白實例,所以,遍歷著色器擷取現行實例的BLAS並持續遍歷。如果直到遍歷結束,光線仍保持有效性,則光線將正常調用並執行最近命中著色器或未中著色器。
否則,現行通過被終止,這防止硬體光線遍歷的負擔以及用於二次光線的著色器發動。在下一通過中,光線被再次射出只到具有“虛假”遮罩的像素,及用於這些像素的有效遍歷被嘗試。
對於加速結構建立操作,取決於可見性位元遮罩的可見性旗標,實例的BLAS被建立或者空白實例被建立。可能可見實例通常建構BLAS(BUILD_FULL),及不可見實例只計算幾何的包圍盒並將之包裝在TLAS的葉節點中(BUILD_EMPTY)。另兩旗標也用以表示是否BUILD_FULL或BUILD_EMPTY動作已經在先前通過中被執行用於現行目標。藉由檢查這些旗標,用以在建立-遍歷環路的不同迭代中,對相同目的的複製動作可以被避免。
一旦完成用於目標的BLAS建立程序,最終加速結構藉由在這些BLAS上建立TLAS而被建構。TLAS只有在第一通過中被重建並在剩餘的通過中被重裝,因為所有目標的包圍盒可能已經第一通過中被設立。
如上所述,本發明之一實施例執行多數通過,這使得它有時對於相同像素有多餘的發射光線。這是因為現行通過應補償在先前通過中的無效遍歷。這可能造成多餘硬體光線遍歷及著色器調用。然而,一實施例藉由施加一像素遮罩,而限制此遍歷成本的負擔只針對對應於無效遍歷的像素。
然而,不同技術被使用以指明可能可見BLAS(並建立它們),甚至在第一光線遍歷之前(例如,藉由預建立器8655)。使用G-緩衝器8650可以直接標示似乎將為主光線所遍歷的可見實例。再者,假設有很大量的框至框一致性;因此,在先前框中遍歷的實例的BLAS也被預建立。這兩技術的組合大量地降低建立-遍歷迭代的數量。
材料汰除遮罩的設備與方法
現存光線追蹤API使用8位元汰除遮罩,以跳過某些幾何實例的光線遍歷。例如,這被用以防止特定目標被投上陰影,或者,隱藏目標不被反射。這特性允許不同子集的幾何出現在單一加速結構中,這與針對各個子集建立分開加速結構不同。在8位元遮罩中的位元設定然後可以用以平衡遍歷效能與用以維持多數加速結構的資源負擔。例如,如果在遮罩中的位元被設定為0,則對應實例可以被忽略。
描繪引擎可以將多數幾何實例相關至一資產及各個幾何實例可以包含多數材料。然而,現行光線追蹤API只允許以實例的粒度的汰除遮罩的規格。這表示對於不同材料具有多數不同汰除遮罩的資產不能使用標準汰除。作為解決方案,使用任何命中著色器以忽略交集為現行實施法為昂貴及複雜的。
如於圖87所示,本發明之一實施例以每材料為基礎展示這些遮罩控制。更明確地說,一實施法包含N位元材料為主汰除遮罩8701,以跳過幾何實例中有關於某些材料的部分的光線遍歷。在一實施例中,使用8位元材料為主汰除遮罩,但本發明的基本原理並不限於此實施法。相反於現存實施法,材料為主的汰除遮罩8701被展示出並可以為遍歷電路/邏輯8003所利用,以每材料為基礎及以每實例為基礎地作實例汰除。
在一特定實施法中,N位元汰除遮罩8701係被儲存在命中群組8700之內,提供每材料汰除的固定功能並免除了昂貴的任何命中著色器解決方案的需求。如於此所用之“命中群組”8700係為API物件,其包含用以處理在場景中的給定目標的命中光線的一組著色器。該組著色器可以例如包含最近命中著色器、任何命中著色器、及(對於程序幾何)交集著色器。在一實施法中,材料為基礎的汰除遮罩8701係相關於命中群組8700,作為一額外資料片。
為了將汰除遮罩8701與命中群組8700相關,汰除遮罩8701可以被儲存在32位元組著色器記錄內,API提供記錄以供實施使用(例如,如於此所述藉由記錄ID識別)。然而,注意,本發明的基本原理並不限於將汰除遮罩相關至命中群組的任何特定技術。
在一實施例中,遍歷/交集電路8003根據材料為基礎的汰除遮罩8701,直接汰除可能命中。例如,0的遮罩值可以表示具有對應材料的實例應汰除。替代地,或額外地,此行為可以藉由將任何命中著色器注入至驅動器內加以仿真。
幾何影像加速器與方法
幾何影像為將三維(3D)三角形網目映射至二維(2D)維度。更明確地說,幾何影像可以將幾何表示為2D陣列的量化點。例如顏色與法線的對應影像資料也可以利用相同隱含表面參數化被儲存在2D陣列中。由2D陣列所代表的2D三角形網目為具有隱含連接性的頂點位置的規則柵所界定。
在本發明之一實施例中,幾何影像係藉由將3D三角形網目映射至2D平面加以形成,造成由規則柵頂點位置所界定的隱含三角形連接性。所得2D幾何影像可以以在圖形管線內的各種方式加以處理,包含使用紋理圖(mipmap)的下取樣與上取樣。
如於圖88所示,本發明之一實施例藉由在幾何影像域上產生四元樹結構8855,來執行光線追蹤,其中各個四元樹節點8800、8810-8813在2D三角形網目8820的頂點位置上,儲存軸對準包圍盒(AABB)。如所示,各個節點8800、8810-8813儲存有包含一或更多三角形及/或頂點的相關AABB的最小與最大座標。這造成一結構,其中係極端規則化並很容易計算。
一旦AABB被建構於2D三角形網目上,光線追蹤操作可以如有關本發明各實施例所述地使用AABB加以執行。例如,遍歷操作可以執行以決定光線遍歷該BVH的底層節點8810-8813之一。光線可以然後被測試與2D網目的交集以及如於此所述(例如,依據有關於2D三角形網目的材料)所產生與處理的命中結果(如有的話)。
在一實施例中,如所示,儲存/壓縮邏輯8850被組態以壓縮及/或儲存AABB作為雙影像角錐8855,一個儲存最小值及一個儲存最大值。在此實施例中,發展用於幾何影像的不同壓縮方案可以被使用以壓縮最小與最大影像角錐。
如上參考圖88所述之四元樹結構8855、8810-8813可以為BVH建立器8007所產生。或者,四元樹結構可以為不同組的電路及/或邏輯所產生。
光線追蹤的盒-盒測試與加速碰撞檢測的設備與方法
圖89A-B示出依據本發明之一實施例的光線追蹤架構。多數執行單元8910執行著色器及有關於光線追蹤操作的其他程式碼。執行於執行單元(EU)8910之一的“Traceray”功能觸發光線狀態初始器8920,以透過包圍體階層(BVH)(例如,儲存在記憶體緩衝器8918中的堆疊5121中或在本地或系統記憶體3198中的其他資料結構)初始追蹤現行光線(經光線ID/描述碼識別)所需的狀態。
在一實施例中,如果Traceray功能指明一光線,已部分完成先前遍歷操作,然後,狀態初始器8920使用特有光線ID以載入來自記憶體3198中的一或更多緩衝器8918相關光線追蹤資料4902及/或堆疊5121。如所述,記憶體3198可以是晶片上/本地記憶體或快取及/或系統級記憶體裝置。
如有關於其他實施例所討論,追蹤陣列5249可以被維持以儲存用於各個光線的遍歷進程。如果現行光線已經部分遍歷一BVH,則狀態初始器8920可以使用追蹤陣列5249以決定將要重新開始的BVH層/節點。
遍歷及光線盒測試單元8930遍歷光線通過BVH。當基元已經被指明在BVH的葉節點內時,實例/四邊形交集測試器8940測試光線與基元(例如,一或更多基元四邊形)的交集,由積集於圖形處理器的快取階層(如此所示耦接至L1快取8970)內的光線追蹤快取8960檢索相關光線/著色器記錄。實例/四邊形交集測試器8940有時在此被簡稱為交集單元(例如,在圖51中的交集單元5103)。
光線/著色器記錄被提供給線程調度器8950,其至少部分使用於此所述之無束縛線程調度技術,將新線程調度給執行單元8910。在一實施例中,光線/盒遍歷單元8930包含上述的遍歷/堆疊追蹤邏輯5248,其追蹤與儲存在追蹤陣列5249內的各個光線的遍歷進程。
在描繪中的一堆問題可以映射至測試盒與其他包圍體或盒的碰撞(例如,由於重疊)。此盒查詢可以被用以列舉在各種應用中,在查詢包圍盒內的幾何。例如,盒查詢可以被用以收集在光子映射時的光子、列舉所有可能影響查詢點(或查詢區)的光源、及/或搜尋至一些查詢點的最近表面點。在一實施例中,盒查詢操作於與光線查詢相同的BVH結構上;因此,使用者可以追蹤光線通過一些場景,並對相同場景執行盒查詢。
在本發明的一實施例中,有關於光線追蹤硬體/軟體,盒查詢係以類似於光線查詢的方式加以處置,以光線/盒遍歷單元8930使用盒/盒操作而不是光線/盒操作來執行遍歷。在一實施例中,遍歷單元8930可以使用與用於光線/盒操作相同的用於盒/盒操作的組特性,包含但並不限於運動模糊、遮罩、旗標、最近命中著色器、任何命中著色器、未中著色器、及遍歷著色器。本發明之一實施例將一位元加入至各個光線追蹤信息或指令(例如,於此所述之TraceRay),以表示信息/指令係相關於BoxQuery操作。在一實施法中,BoxQuery在同步與非同步光線追蹤模式中均被致能(例如,分別使用標準調度與無束縛線程調度操作)。
在一實施例中,一旦經由該位元設定至BoxQuery模式,光線追蹤硬體/軟體(例如,遍歷單元8930、實例/四邊形交集測試器8940等)將與該光線追蹤信息/指令相關的資料解譯為盒資料(例如,在三維中的最小/最大值)。在一實施例中,遍歷加速結構被如前述地產生與維持,但盒被初始化,以替代用於各個主StackID的光線。
在一實施例中,並未對盒查詢執行硬體實例化。然而,實例化可以以軟體使用遍歷著色器加以仿真。因此,當盒查詢期間,到達一實例節點時,硬體可以處理實例節點為程序節點。因為兩結構的標頭相同,所以,表示硬體將調用儲存在實例節點的標頭中的著色器,它隨後可以持續在實例內的點查詢。
在一實施例中,光線旗標被設定以指示實例/四邊形交集測試器8940將接受第一命中並結束搜尋(例如,ACCEPT_FIRST_HIT_AND_END_SEARCH旗標)。當此光線旗標未設定時,類似於光線查詢,交集子將依據其至查詢盒的距離由前至後進入。當搜尋至一些點的最近幾何時,此遍歷順序顯著地改良效能,如同在光線查詢般。
本發明的一實施例使用任何命中著色器濾出偽陽命中。例如,雖然硬體可能在葉層不執行準確盒/三角形測試,但它將保守地報告所有三角形命中葉節點。再者,當搜尋盒為任何命中著色器所收縮時,硬體可以回覆爆出葉節點的基元為一命中,即使該葉節點盒可能不再與該收縮查詢盒重疊。
如於圖89A所示,盒查詢可能為執行單元(EU)8910送出信息/命令(例如,Traceray)至該硬體加以派出。處理然後如上述地進行-即,通過狀態初始器8920、光線/盒遍歷邏輯8930、實例/四邊形交集測試器8940、及無束縛線程調度器8950。
使用此MemBox佈局,硬體使用box[lower-radius,upper+radius]以執行查詢。因此,在各個維度中,所儲存的邊界在L0 norm延長部分半徑。此查詢半徑可以有用於容易縮小搜尋面積,例如,為了最近點搜尋。
因為MemBox佈局剛重新使用光線原點、光線方向、及MemRay佈局的Tfar
項,所以,在硬體中的資料管理並不需要為光線查詢作改變。相反地,如同光線資料般,資料被儲存在內部儲存器(例如,光線追蹤快取8960及L1快取8970)中,並且,將只為盒/盒測試作不同解譯。
在一實施例中,以下操作係為光線/狀態初始單元8920與光線/盒遍歷單元8930所執行。來自TraceRay信息的額外位元“BoxQueryEnable”被管線化於狀態初始器8920中(影響其跨信息的緊縮),提供BoxQueryEnable設定的指示給各個光線/盒遍歷單元8930。
光線/盒遍歷單元8930儲存“BoxQueryEnable”給各個光線,將作為標籤的此位元與初始光線負載請求一起發送。當請求光線資料被由記憶體介面以BoxQueryEnable設定回覆時,往複計算被旁路並且替代地一不同組態被載入用於RayStore中的所有組件(即,依據盒而不是光線)。
光線/盒遍歷單元8930管線BoxQueryEnable位元至在下的測試邏輯。在一實施例中,光線盒資料路徑被依據以下組態設定加以修改。如果BoxQueryEnable==1,則盒的平面並未改變,因為其根據光線的方向的x、y及z分量的符號加以改變。對於光線盒不必要的光線執行檢查係被旁路。例如,假設查詢盒沒有無限(INF)或非數值(NAN)資料類型,使得這些在資料路徑中的檢查被旁路。
在一實施例中,在以命中決定邏輯處理之前,另一相加操作被執行,以決定值下+半徑(基本上,離開命中的t值)及上-半徑。另外,於命中“實例節點”時(以硬體實例實施法表示),它並不計算任何轉換,而是使用在實例節點中的著色器ID發動交集著色器。
在一實施例中,當BoxQueryEnable被設定時,光線/盒遍歷單元8930並未執行用於任何命中著色器的空(NULL)著色器查看。另外,當BoxQueryEnable被設定時,當有效節點為QUAD、MESHLET類型時,光線/盒遍歷單元8930調用交集著色器,如同它將更新在記憶體中的可能命中資訊後,調用任何命中著色器般。
在一實施例中,示於圖89A中的分開組的各種組件係被提供於各個多核心群組3100A中(例如,在光線追蹤核心3150中)。在此實施法中,各個多核心群組3100A可以平行操作於不同組的光線資料及/或盒資料中,以執行於此所述之遍歷與交集操作。
用於光線追蹤的小網目壓縮與解壓縮的設備與方法
如上所述,“小網目”為透過幾何分割所建立的網目的子集,其根據相關屬性的數目包含若干數目的頂點(例如,16、32、64、256等)。小網目可以被設計以儘可能多地分享頂點,以允許頂點在描繪時被重新使用。此分割可以被預計算,以避免運行時間處理或者可以在每次網目被繪出時,在運行時間動態被執行。
本發明的一實施例執行小網目壓縮,以降低用於底層加速結構(BLAS)的儲存需求。此實施例利用小網目代表小件的具有類似頂點的較大網目的優點,以允許有效壓縮於128B資料區塊內。然而,注意,本發明的基本原理並不限於任何特定區塊尺寸。
小網目壓縮可以在對應包圍體階層(BVH)被建立時,及在BVH消耗點(例如,為光線追蹤硬體區塊)被解壓縮。在如下所述之某些實施例中,小網目解壓縮係被執行於L1快取(有時“LSC單元”)與光線追蹤快取(有時“RTC單元”)之間。如於此所述,光線追蹤快取為光線遍歷/交集硬體所使用的高速本地快取。
在一實施例中,小網目壓縮在硬體中被加速。例如,如果執行單元(EU)路徑支援解壓縮(例如,可能支援遍歷著色器執行),則小網目解壓縮可以整合在L1快取外的共同路徑中。
在一實施例中,信息被使用以初始小網目壓縮至記憶體中的128B區塊。例如,4×64B信息輸入可以被壓縮至128B區塊輸出給著色器。在此實施法中,額外節點類型被加入至BVH中,以表示與壓縮的小網目相關。
圖89B示出小網目壓縮的特定實施法,包含小網目壓縮區塊(RTMC)9030及小網目解壓縮區塊(RTMD)9090,其被整合入光線追蹤叢集中。當新信息被由執行著色器的執行單元8910傳送至光線追蹤叢集(例如,光線追蹤核心3150時)時,小網目壓縮9030被調用。在一實施例中,信息包含四個64B階及128B寫入位址。來自EU 8910的信息指示小網目壓縮區塊9030,何處找到在本地記憶體3198中的頂點與相關小網目資料(及/或取決於實施法的系統記憶體)。小網目壓縮區塊9030然後如此所述地執行小網目壓縮。被壓縮小網目資料然後可以經由記憶體介面9095被儲存在本地記憶體3198及/或被儲存在光線追蹤快取8960,並為實例/四邊形交集測試器8940及/或遍歷/交集著色器所存取。
在圖89B中,小網目集合與解壓縮區塊9090可以集合小網目的壓縮資料並解壓縮資料成為多數64B區塊。在一實施法中,只有解壓縮小網目資料被儲存在L1快取8970。在一實施例中,當根據節點類型(例如,葉節點、壓縮)及基元ID,擷取BVH節點資料的同時,小網目解壓縮被作動。遍歷著色器也可以使用與光線追蹤實施法的剩餘部分相同的語意,存取壓縮小網目。
在一實施例中,小網目壓縮區塊9030接受來自EU 8910的一陣列輸入三角形並產生壓縮128B小網目葉結構。在此結構中的一對連續三角形形成四邊形。在一實施法中,EU信息包含多達14個頂點與三角形,如同在以下的碼序列所表示。壓縮小網目經由記憶體介面9095在信號中所提供的位址處寫入至記憶體。
在一實施例中,小網目解壓縮區塊9090解壓縮來自128B小網目的兩連續四邊形(128B)並且儲存解壓縮資料於L1快取8970中。在L1快取8970中的標籤追蹤各個解壓縮四邊形的索引(包含三角形索引)與小網目位址。光線追蹤快取8960與EU 8910也可以自L1快取8970擷取64B解壓縮四邊形。在一實施例中,EU 8910藉由如下所示將MeshletQuadFetch信息發送至L1快取8960,而擷取解壓縮四邊形。分開的信息也可以發出用於擷取四邊形的第一32位元組與最後32位元組。
著色器可以自四邊形結構存取三角形頂點,如以下所示。在一實施例中,“if”宣告為“sel”指令所替代。
在分配位元作例如幾何特性的固定負擔(例如,旗標及遮罩)後,小網目的資料被加入至壓縮區塊,同時,根據(pos.x, pos.y, pos.z
)相較(base.x ,base.y, base.z
)的差量(delta),計算剩餘的位元預算,其中基礎值包含在名單中的第一頂點的位置。類似地,也可以計算prim-ID差量。因為差量係相較於第一頂點,所以,可以便宜地以低潛時解壓縮。基礎位置與primID以及差量位元的寬度為在資料結構中經常性負擔的一部分。對於偶數三角形的剩餘頂點,位置差量與prim-ID差量被儲存在不同64B區塊中,以將它們平行包裝。
使用這些技術,於經由記憶體介面9095寫出壓縮資料時,BVH建立操作對記憶體消耗較低頻寬。另外,在一實施例中,儲存壓縮小網目於L3快取中允許以相同L3快取大小儲存更多BVH資料。在一可行實施法中,超過50%的小網目係被壓縮成2:1。在使用具有壓縮小網目的BVH時,在記憶體的頻寬節省也造成功率節省。
在計算與光線追蹤管線中的無束縛線程調度與工作群/線程搶先的設備與方法
如上所述,無束縛線程調度(BTD)為在不支援共享本地記憶體(SLM)或記憶體阻障的實施法中,用以解決光線追蹤的SIMD發散問題的方法。本發明的實施例包含支援歸納BTD,其可以被用以針對用於各種計算模型的SIMD發散。在一實施例中,具有線程群組阻障與SLM的任何計算調度可以繁衍無束縛子線程並且所有這些線程可以被再分組並透過BTD調度,以改良效率。在一實施法中,每母體一次只允許一無束縛子線程並且發端線程被允許以與無束縛子線程一起共享其SLM空間。只有當最後收斂母體終止(即,執行EOT)時,SLM與阻障兩者才都被釋放。一特定實施例允許在可呼叫模式內的放大,允許樹遍歷情況具有一個以上的子被繁衍。
圖90圖示出初始組的線程9000,其可以為SIMD管線所同步處理。例如,線程9000可以被同步地調度與執行成為工作群組。然而,在此實施例中,初始組的同步線程9000可以產生多數發散繁衍線程9001,其可以在於此所述的非同步光線追蹤架構內產生其他繁衍線程9011。最後,收斂繁衍線程9021回到原始組的線程9000,其然後持續同步執行,依據追蹤陣列5249如所需地復原上下文。
在一實施例中,藉由保持在執行與完成後(發散後並然後收斂繁衍)的母線程的再續,無束縛線程調度(BTD)功能支援SIMD16與SIMD32模式、可變通用暫存器(GPR)使用、共享本地記憶體(SLM)、及BTD阻障。本發明之一實施例包含硬體管理的實施法,以回復母線程及SLM與阻障資源的軟體管理解參考。
在本發明的一實施例中,以下用語有以下意義:
可呼叫模式:為無束縛線程調度所繁衍的線程在“可呼叫模式”。這些線程可以存取繼承共享本地記憶體空間並且可以選用地在該可呼叫模式中每線程繁衍線程。以此模式,線程並未存取工作群組層級阻障。
工作群組(WG)模式:當線程被以標準線程調度所調度的構成SIMD巷道的相同方式加以執行時,它們被界定為工作群組模式。在此模式中,線程已經存取工作群組層級的阻障,以及共享本地記憶體。在一實施例中,線程調度被回應於“計算助行器”命令加以初始,其初始一只有計算上下文。
普通繁衍:也稱為一般繁衍線程9011(圖90),只要當一可呼叫調用另一可呼叫,則普通繁衍線程被初始化。此等繁衍線程被認為在可呼叫模式中。
發散繁衍:如於圖90所示,當線程由工作群組模式轉移至可呼叫模式時,發散繁衍線程9001被觸發。發散繁衍的引數為SIMD寬度及固定功能線程ID(FFTID),其為子群組-均勻。
收斂繁衍:當線程由可呼叫模式轉移回到工作群組模式時,收斂繁衍線程9021被執行。收斂繁衍的引數為每巷道FFTID,及遮罩表示巷道的堆疊是否為空的。此遮罩必須藉由在回覆處檢查每巷道堆疊指標的值加以動態計算。因為這些可呼叫線程可能遞迴地調用彼此,所以,編譯器必須計算此遮罩。在收斂繁衍中並未具有收斂位元組的巷道將動作如同普通繁衍。
無束縛調度解決在部分實施法中不允許共享本地記憶體或阻障操作中的光線追蹤SIMD發散的問題。另外,在本發明之一實施例中,BTD被用以使用各種計算模型來針對SIMD發散。更明確地說,任何具有線程群組阻障與共享本地記憶體的計算調度可能繁衍無束縛子線程(例如,每母一次一個子線程)並且所有相同線程可以為BTD所再分組與調度以用於更佳效率。此實施例允許發端線程與其子線程共享其共享本地記憶體空間。共享本地記憶體配置與阻障只有當最後收斂母終止(如由線程終止(EOT)指示器指示)時才釋放。本發明之一實施例同時也提供在可呼叫模式內的放大,允許樹遍歷情況具有超過一個子被繁衍。
雖然並未如此限制,但本發明之一實施例被實施在系統上,其中並未由任一SIMD巷道提供支援放大(即,只允許單一未處理SIMD巷道,呈發散或收斂繁衍線程的形式)。另外,在一實施法中,(FFTID, BARRIER_ID, SLM_ID)的32b係在調度線程時被送至BTD致能的調度器8950。在一實施例中,所有這些空間在發送線程及將此資訊送至無束縛線程調度器8950之前被清空。在一實施法中,一次只有一單一上下文為作動。因此,即使在回火FFTID後,不良核心仍不能存取其他上下文的位址空間。
在一實施例中,如果StackID配置被致能,則當線程終止時,共享本地記憶體與阻障將不再解參考。相反地,當線程終止時,它們只被解參考是否所有相關StackID都被釋放。一實施例藉由確保StackID適當地釋放,而防止固定功能線程ID(FFTID)洩漏。
在一實施例中,阻障信息被指明以外顯地由發送線程取出阻障ID。這是必須在無束縛線程調度呼叫後,致能阻障/SLM使用。
圖91示出用以如於此所述執行無束縛線程調度與線程/工作群組搶先的架構的實施例。此實施例的執行單元(EU)8910支援線程執行遮罩9150-9153的直接調處以及各個BTD繁衍信息支援FFTID參考,計數在收斂繁衍9021完成後的母線程的再繁衍。因此,於此所述之光線追蹤電路支援用於BTD繁衍與TraceRay信息的額外信息變體。在一實施例中,BTD致能調度器8950維持在發散繁衍線程9001上的原始SIMD巷道的以(由線程調度所指定的) FFTID計數並計數繁衍線程9021收斂以發動母線程9000的再續。
在執行期間的各種事件可以被計數包含但並不限於普通繁衍9011執行;發散繁衍執行9001;收斂繁衍事件9021;FFTID計數器到達最小臨限(例如,0);及用於(FFTID,BARRIER_ID,SLM_ID)執行的負載。
在一實施例中,共享本地記憶體(SLM)與阻障配置被允許有BTD致能線程(即,給予ThreadGroup語意)。BTD致能線程調度器8950由線程結束(EOT)指示(例如,經由特定信息)解開FFTID釋放與阻障ID釋放。
在一實施例中,為了支援來自計算線程的可呼叫著色器,驅動器管理的緩衝器9170係被使用以儲存無束縛線程調度的工作群組資訊。在一特定實施法中,驅動器管理的緩衝器9170包含多數登錄項,各個登錄項相關於不同的FFTID。
在一實施例中,在狀態初始器8920中,兩位元被分配以指示被因數化用於信息緊縮的管線繁衍類型。對於發散信息,狀態初始器8920也因數分解該信息於FFTID中並管線化各個SIMD巷道至光線/盒遍歷區塊8930或無束縛線程調度器8950。對於收斂繁衍9021,有一FFTID用於信息中的各個SIMD巷道,以及,將FFTID管線化至各個SIMD巷道,用於光線/盒遍歷單元8930或無束縛線程調度器8950。在一實施例中,光線/盒遍歷單元8930也管線化包含收斂繁衍9021的繁衍類型。更明確地說,在一實施例中,光線/盒遍歷單元8930管線化與儲存FFTID與每光線收斂繁衍9021,用於TraceRay信息。
無束縛線程調度器8950也處理線程結束(EOT)信息與三個額外位元:Release_FFTID、Release_BARRIER_ID、Release_SLM_ID。如所述,線程結束(EOT)信息並不必然釋放/解參考所有與這些ID相關的配置,而是只釋放/解參考具有釋放位元設定的配置。典型使用情況為當發散繁衍9001被初始化時,繁衍線程產生EOT信息,但釋放位元並未設定。它在收斂繁衍9021後接續將產生另一EOT信息,但此次則具有設定的釋放位元。只有在此階段,所有按線程的資源將被再循環。
在一實施例中,無束縛線程調度器8950實行新介面以載入FFTID、BARRIER_ID、SLM_ID與巷道計數。它儲存所有此資訊於可FFTID定址的某些數量登錄項深(在一實施例中,max_fftid有144登錄項深)儲存器9121中。在一實施法中,BTD致能調度器8950回應於普通繁衍9011或發散繁衍9001,使用此識別資訊用於各個SIMD巷道、以按FFTID地執行對可FFTID定址儲存器9121的查詢、及如上所述儲存線程資料於排序緩衝器中(見,例如,在圖42中的內容可定址記憶體4201)。這造成在排序緩衝器4201中每SIMD巷道儲存額外數量的資料(例如,24位元)。
於接收收斂繁衍信息時,對於由狀態初始器8920或光線/盒歷區塊8930到無束縛線程調度器8950的各個SIMD巷道,按FFTID計數被減量。當給定母的FFTID計數器變為0時,整個線程被以原始執行遮罩9150-9153排程。續行著色器記錄4201係為在排序電路4008中的收斂繁衍信息所提供。
本發明的不同實施例可以依據不同組態加以操作。例如,在一實施例中,所有為線程所執行的發散繁衍9001必須具有匹配SIMD寬度。另外,在一實施例中,SIMD巷道必須在相關執行遮罩9150-9153內不執行具有收斂遮罩位元設定的收斂繁衍9021,除非一些較早線程已以相同FFTID執行發散繁衍。如果以給定StackID執行發散繁衍9001,則收斂繁衍9021必須發生在下一發散繁衍之前。
如果在線程中的任一SIMD巷道執行發散繁衍,則所有巷道最後必須執行發散繁衍。已經執行發散繁衍的線程可不執行一阻障,或者將發生死鎖。此限制為必須的,以致能在發散控制流程中的繁衍。母次群組不能被再繁衍,直到所有巷道發散並再收斂為止。
在執行任何繁衍之後,線程最後必須終止,以保證順向進行。如果在線程終止前執行多數繁衍,則可能發生死鎖。在一特定實施例中,有以下變體,但本發明的基本原理並不限於此:
˙所有為線程所執行的發散繁衍必須具有匹配SIMD寬度。
˙SIMD巷道必須在相關執行遮罩9150-9153內不執行具有收斂遮罩位元設定的收斂繁衍,除非一些較早線程已經以相同FFTID執行發散繁衍。
˙如果以給定StackID執行發散繁衍,則收斂繁衍必須發生在下一發散繁衍之前。
˙如果在線程內的任一SIMD巷道執行發散繁衍,則所有巷道最後必須執行發散繁衍。已執行發散繁衍的線程可不執行阻障,或將發生死鎖。此限制致能在發散控制流程中的繁衍。母次群組不能被再繁衍,直到所有巷道已經發散及再收斂為止。
˙在執行任何繁衍之後,線程最後必須終止,以保證順向進行。如果在線程終止前,執行多數繁衍,則可能發生死鎖。
在一實施例中,BTD致能調度器8950包含三個搶先邏輯9120,以搶先某些類型的工作負載/線程的執行,以釋放資源供執行其他類型的工作負載/線程。例如,於此所述的各種實施例可以執行計算工作負載及圖形工作負載(包含光線追蹤工作負載)兩者,其可以以不同優先順序執行及/或具有不同潛時需求。針對各個工作負載/線程的需求,本發明的一實施例暫停光線遍歷操作,以釋放用於較高優先工作負載/線程或者將不能符合指定潛時需求的工作負載/線程的執行資源。
如於上參考圖52A-B所述,一實施例使用短堆疊5203-5204以儲存在遍歷操作期間有限數量的BVH節點,以降低遍歷的儲存需求。這些技術可以為圖91中之實施例所使用,其中,光線/盒遍歷單元8930有效推爆登錄項進出短堆疊5203-5204,以確保有需要的BVH節點5290-5291可用。另外,當遍歷操作執行時,遍歷/堆疊追蹤器5248更新在此被稱為追蹤陣列5249的追蹤資料結構,以及相關堆疊5203-5204及光線追蹤資料4902。使用這些技術,當遍歷光線暫停及重新開始時,遍歷電路/邏輯8930可以查閱追蹤資料結構5249並存取相關堆疊5203-5204與光線追蹤資料4902,以開始對在BVH內其離開的相同位置的光線進行遍歷操作。
在一實施例中,線程搶先邏輯9120決定一組遍歷線程(或其他線程類型)將如於此所述何時搶先(例如,以釋放資源用於較高優先工作負載/線程)並通知光線/盒遍歷單元8930,使得它可以暫停處理現行線程之一,以釋放資源,用以處理較高優先線程。在一實施例中,“通知”係在遍歷舊線程完成前,藉由調度指令用於新線程加以簡單執行。
因此,本發明之一實施例包含硬體支援,用以同步光線追蹤,操作於工作群組模式(即,所有線程的工作群組被同步執行),及用以非同步光線追蹤,使用於此所述之無束縛線程調度。這些技術相較於現行系統劇烈地改良效能,現行系統需要在工作群組中的所有線程在執行搶先前完成。相反地,於此所述之實施例可以藉由緊密追蹤遍歷操作、只儲存重新開始所需的資料、及當適當時,使用短堆疊,而執行堆疊層次與線程層次搶先。這些技術至少部分有可能,因為光線追蹤加速硬體及執行單元8910經由持續記憶體結構3198通訊,記憶體結構3198係以每光線層次及每BVH層次加以管理。
當Traceray信息如上述產生並有一搶先請求時,光線遍歷操作可以在各種階段被搶先,包含(1)未開始時,(2)部分完成及被搶先時,(3)在沒有無束縛線程調度下,完成遍歷,及(4)遍歷完成,但具有無束縛線程調度。如果遍歷尚未開始時,則當raytrace信息被回復時,不需要來自追蹤陣列5249的額外資料。如果遍歷被部分完成,則遍歷/堆疊追蹤器5248將讀取追蹤陣列5249,以如所需使用光線追蹤資料4902與堆疊5121,決定何處重新開始遍歷。它也可以使用指定給各個光線的特有ID,以查詢追蹤陣列5249。
如果遍歷完成,及沒有無束縛線程調度,則無束縛線程調度可以使用儲存在追蹤陣列5249的任何命中資訊(及/或其他資料結構4902、5121)加以排程。如果遍歷完成及有一無束縛線程調度,則該無束縛線程被回復及執行被回復,直到完成為止。
在一實施例中,追蹤陣列5249包含一登錄項,用於進行中的光線的各個特有光線ID,及各個登錄項可以包含執行遮罩9150-9153之一用於對應線程。或者,執行遮罩9150-9153可以被儲存在分開資料結構中。在任一實施例中,在追蹤陣列5249中的各個登錄項可以包含或相關於一個1位元值,以表示當光線/盒遍歷單元8930在搶先後回復操作時,對應光線是否需要被重新提示。在一實施法中,此1位元值在線程群組(即,工作群組)內被管理。在光線遍歷開始時,此位元可以被設定為1,並當光線遍歷完成時,可以被重設回到0。
於此所述之技術允許與光線追歷相關的遍歷線程被其他線程(例如,計算線程)所搶先,而不必等待遍歷線程及/或整個工作群組完成,藉以改良有關於高優先及/或低潛時線程的效能。再者,因為於此所述之用於追蹤遍歷進程的技術,所以遍歷線程可以在它離開處被重新開始,節省了很大的處理循環與資源使用量。另外,上述實施例允許工作群組線程繁衍無束縛線程並提供用於再收斂以回到原始SIMD架構狀態的機制。這些技術有效地改良用於光線追蹤的效能及計算線程一數量級。
資料平行光線追蹤的設備與方法
在科學視覺化(也在電影與其他領域)資料集正持續增加到不能為單一節點處理的大小。對於離線演算法(在多數電影中),這是經常透過分頁、快取、及核心外技術加以處置;但當需要互動設定時(例如,用於油氣的視覺化、對於在大資料/HPC環境中的科學視覺化、互動電影內容預覽等),則此即不再可行。在此情況中,有絕對必要使用部分形式之資料平行描繪,其中,資料在多數不同節點上被分割--使得資料被完整性可以被儲存於所有節點--及這些節點合作以描繪所需影像。
本發明的實施例包含用以降低傳送光線的頻寬及/或在資料分配光線追蹤於多數計算節點的上下文的體方塊的設備與方法。例如,圖92示出一光線追蹤叢集9200,包含多數光線追蹤節點9210-9213,其平行執行光線追蹤操作,可能組合這些結果於這些節點之一上。在所示架構中,光線追蹤節點9210-9213經由閘道9220通訊地耦接至客戶側光線追蹤應用9230。
在以下說明中將假設多數節點9210-9213結合保持住光線追蹤資料。各個此些節點9210-9213可以包含一或更多CPU、GPU、FPGA等及計算可以執行在這些資源的個體上或組合上。在一實施例中,計算節點9210-9213透過例如Infiniband、OmniPath、或NVLink的少數例的一些形式的網路9215彼此通訊。因為使用描繪器的應用本身已經分割資料(如同很多原處演算法或平行中間軟體,例如ParaView、Visit等),或者,因為描繪器已經建立其分割,所以資料可以被分區於這些節點9210-9213的記憶體。
為了在此一環境中作平行描繪,有各種的演算法選擇:組成為主手法,其各個節點描繪其本地資料的影像,並使用深度及/或α(alpha)組成結合這些部分結果。資料轉送(或快取)手法對給定節點計算給定光線的(或像素的、路徑的等)操作,檢測何時此光線/像素/路徑需要活在另一節點上的資料,及擷取此隨選資料。光線轉送為主的手法並不轉送資料至需要它的光線上,而是將光線送至擁有該資料的節點上。
在這些選擇中,組成是最簡單的,並最廣泛使用;然而,只能應用於相當簡單描繪效應中,並且,並不能夠用於例如陰影、反射、環境光遮蔽、全域照明、體積散射、體積陰影等。這些更為使用者所經常需要的應用需要一些種類的光線追蹤,其中資料平行描繪不是將資料擷取至光線就是將光線送至資料。兩手法以前已經被使用以及其限制也已相當了解。更明確地說,兩手法有高頻寬需求的缺點,不是藉由送出幾十億光線(作光線轉送),就是令各個節點9210-9213擷取多達幾千兆位元組資料(作資料轉送)、或兩者都是(當使用兩者之組合時)。
雖然網路頻寬顯著提升,但資料大小及/或光線計數也上升,表示在實際上此頻寬很快就是效能的限制因素。事實上,除了很簡單設定外(例如,只有主光線描繪,其中一個也只可以用組成),它經常是互動效能不能達成的唯一因素。
本發明之一實施例核心想法為,實際上,很大部分的資料常常對於給定框沒有關係。例如,在體積描繪中,使用者經常使用“轉送功能”,以反白某些區域的資料,較不感興趣資料設定至全透明。明顯地,只遍歷“無興趣”資料的光線將不需要擷取此資料(或被送至此資料),並且,可以節省個別頻寬。同樣地,對於表面為主光線追蹤,如果光線通過由另一節點所擁有的一區域的空間,但並未實際地交集任一在該處三角形,則它實際上並不需要與其他節點的三角形互動。
一實施例由個別節點延伸“空白空間跳脫”與“包圍體”的概念至資料平行描繪,以使用在此稱為用於節點的資料的“代理”9230-9233的形式。更明確地說,各個節點計算其本身資料的很低記憶體佔用率代理9230-9233,使得此代理提供能力以近似或保守地定界此資料。所有節點9210-9213然後交換其代理9230-9233,使得各個節點具有每隔一個節點的代理。例如,儲存在節點9210上的代理9230將包含來自節點9211-9213的代理資料。當節點需要追蹤光線通過由另一節點擁有的空間區域時,它首先追蹤此光線通過此節點的代理的本身複本。如果該代理保證將不會發生有意義的互動,則它將跳過送出該光線/擷取該資料,藉以節省如此作所需的頻寬。
圖93示出依據本發明一實施例之光線追蹤節點9210的其他細節。體積細分模組9265將體積細分為多數分區,各個分區係為不同節點所處理。工作資料集9360包含用於予以為節點9210所處理的分區的資料。代理產生模組9250根據工作資料集9360產生代理9340。代理9340係被傳送給各個其他光線追蹤節點9211-9213,其使用代理以於此所述地汰除不必要的資料。同樣地,分別產生於節點9211-9213的代理9341-9343係被傳送至節點9210。光線追蹤引擎9315使用本地儲存的工作資料集9360與由各個互連節點9211-9213所提供的代理9341-9343,以執行光線追蹤操作。
圖94示出一例子,其中,在體積描繪的上下文中,給定體積資料集9400係太大而不能被描繪於一個節點上,使得它必須被分割成多數區塊9401-9404(於此例中,2×2組)。如於圖95所示,此邏輯分割體積然後可以被分配至不同節點9210-9213,各個包含該體積的一部分。
傳統上,每次節點想要送出一光線通過另一節點的空間區域時,它必須將此光線送至這些節點,或者擷取這些節點的資料。在圖96中,例如,節點9210追蹤光線,其通過由節點9211-9213所擁有的空間。
如於圖97所示,在一實施例中,各個節點9210-9213各別計算本地代理9240-9243,用於其部分的資料9401-9404,其中代理為任一類型的目標,其在此尺寸(顯著)較小,但允許近似或保守地定界該節點的資料。例如,在一實施例中,各個節點計算經常被稱為“巨格柵”;一較低解析度柵,其中各個格對應於輸入體中的一區域的格,及其中各個此格儲存例如最小與最大純量值於該區域(在單節點描繪的上下文中,這經常被使用於“空間跳脫”)。在所示例子中,各個節點9210-9213計算一此代理9240至9243用於其部分的資料。在一實施例中,所有節點然後交換其個別代理,直到各個節點己用於各個節點的所有代理,如同於圖98所示為止。
如果對於給定轉移函數設定,只有部分的資料值為實際有感興趣者(在意義上,它們並未完全透明),則這可以在代理中被保守檢測(如同傳統的單一節點空間跳脫一般所作)。這被顯示在圖99的區域9940-9943。
另外,因為每個節點具有每隔一節點的代理,所以,各個節點也可以根據這些節點所擁有的代理,而保守定界其他節點區域所感興趣的區域,如同於圖100所示。如果節點9210必須追蹤跨過節點9211-9213的資料區域的光線,則該光線可以被投射至代理及遍歷其上,如同虛線箭頭所示。這表示雖然光線確實通過由節點9210-9212所擁有的空間,但只有節點9212實際包含任意交集區,使得此光線可以被轉送至節點9212,如於圖100的實線箭頭所示,而不必處理在節點9210或送至節點9211(或,在快取上下文中,資料可能只來自節點9210,而不是來自9211與9212兩者)。
依據本發明一實施例之方法係被示於圖101中。該方法可以被實施於上述的架構上下文中,但並不限於任何特定處理或系統架構。
在10101,一體積被邏輯上細分為多數分區(N分區,其中N為整數值)及在10102,與N分區相關的資料被分散至N個不同節點(例如,在一實施例中,每節點一分區)。在10103,各個節點計算用於其分區的代理,並將代理送至其他節點。在10104,使用這些代理,遍歷/交集操作被執行用於現行光線或光線群組(例如,光束),忽略在該等代理內無關於操作的區域(例如,未為光線所遍歷的區域)。如所述,對於給定轉移函數設定,只有部分的資料值為實際有興趣(例如,因為它們未完全透明)。這如同在單一節點空間跳脫中所作,可以在代理中被保守檢測。如果在10105中決定該光線與代理互動,則在10106,光線被送至與代理相關的節點或者資料被由該節點提取。下一光線或光線群組然後在10107選出。
當然,在此所述之實施例取決於實際資料、光線分佈、轉移函數等。然而,對於資料看起來類似於以上提供的例子並非不常見。明顯地,對於造成顯著較少“稀疏”分類後資料集(即,在轉移函數應用後的資料集)的資料集/轉移函數,這些代理將不會有很大助益。然而,在此時,光線似乎將很快終止,並且,因此,不再很頻繁送至這些節點並且不再產生過量頻寛。本質上,最大問題情況為其中多數資料為稀疏的,及其中光線遍歷太多節點,並且,這些為剛好於此所述之技術所特別有效之處。
例子
以下為本發明不同實施例之例示實施法。
例子1。一種設備,包含:拼圖器,用以將輸入貼片拼圖成包含多數互連四邊形的柵基元,各個四邊形包含兩個隱含三角形並與相鄰四邊形共享至少兩頂點;包圍盒產生器,用以建構一包圍盒,以包圍該柵基元的各個四邊形,以產生對應於所述多數互連四邊形的多數包圍盒;及光線遍歷硬體邏輯,用以決定是否一光線遍歷所述多數包圍盒之一或更多;及交集硬體邏輯,用以處理為該光線所遍歷的包圍盒,以決定是否該光線交集由該包圍盒所包圍的該四邊形所表示的該等隱含三角形之一。
例子2。如例子1的設備,其中該柵基元包含形成所述多數互連四邊形的一M×M矩陣的頂點。
例子3。如例子1的設備,其中該包圍盒產生器係積集至該光線遍歷硬體邏輯或包圍體階層(BVH)建立器。
例子4。如例子1的設備,其中對於包含N四邊形的柵基元,該包圍盒產生器係用以產生N-寬BVH節點,其具有與各個四邊形相關的子節點。
例子5。如例子1的設備,其中位元遮罩係根據該柵基元產生,在該位元遮罩中的各個位元相關於所述隱含三角形之一或者所述四邊形之一,其中如果在該位元遮罩中的一位元被設定至0,則所相關的隱含三角形或四邊形被認定為無效。
例子6。如例子1的設備,更包含:運動模糊硬體邏輯,用以內插於第一隱含三角形在第一時間的第一表示法與該第一隱含三角形在第二時間的第二表示法之間。
例子7。如例子1的設備,其中該柵基元為多數柵基元之一,該設備更包含:壓縮硬體邏輯,用以識別所述多數柵基元的共享頂點並用以針對各個共享頂點,只儲存一組頂點資料。
例子8。如例子7的設備,其中該壓縮硬體邏輯係用以產生一索引,指向儲存有該組頂點資料的一陣列。
例子9。如例子8的設備,其中該壓縮硬體邏輯係用以識別所述隱含三角形的一或更多共享邊緣,該壓縮硬體邏輯用以針對各個共享邊緣,儲存單一組邊緣資料。
例子10。一種方法,包含:將輸入貼片拼圖為包含多數互連四邊形的柵基元,各個四邊形包含兩隱含三角形並與相鄰四邊形共享至少兩頂點;建構包圍盒,以包圍該柵基元的各個四邊形,以產生對應於所述多數互連四邊形的多數包圍盒;及決定是否一光線遍歷所述多數包圍盒之一或更多;及處理為該光線所遍歷的包圍盒,以決定是否該光線交集由該包圍盒所包圍的該四邊形所表示的該等隱含三角形之一。
例子11。如例子10的方法,其中該柵基元包含形成所述多數互連四邊形的一M×M矩陣的頂點。
例子12。如例子10的方法,其中該包圍盒產生器被積集至該光線遍歷硬體邏輯及/或包圍體階層(BVH)建立器。
例子13。如例子10的方法,其中對於包含N四邊形的柵基元,該包圍盒產生器係用以產生N-寬BVH節點,其具有與各個四邊形相關的子節點。
例子14。如例子10的方法,其中位元遮罩係根據該柵基元產生,在該位元遮罩中的各個位元係相關於所述隱含三角形之一或所述四邊形之一,其中如果在該位元遮罩中的一位元被設定為0,則所相關的隱含三角形或四邊形係被認定為無效。
例子15。如例子10的方法,其中第一隱含三角形在第一時間的第一表示法與該第一隱含三角形在第二時間的第二表示法。
例子16。如例子10的方法,其中該柵基元為多數柵基元之一,該方法更包含:識別所述多數柵基元之共享頂點並針對各個共享頂點,只儲存一組頂點資料。
例子17。如例子16的方法,更包含:產生一索引,指向儲存有該組頂點資料的一陣列。
例子18。如例子17的方法,更包含:識別所述隱含三角形的一或更多共享邊緣,及針對各個共享邊緣,只儲存單一組邊緣資料。
例子19。一種具有程式碼儲存於其上的機器可讀媒體,當程式碼為機器所執行時,使得該機器用以執行如下操作:將輸入貼片拼圖為包含多數互連四邊形的柵基元,各個四邊形包含兩隱含三角形並與相鄰四邊形共享的至少兩頂點;建構包圍盒,以包圍該柵基元的各個四邊形,以產生對應於所述多數互連四邊形的多數包圍盒;及決定是否一光線遍歷所述多數包圍盒之一或更多;及處理為該光線所遍歷的包圍盒,以決定是否該光線交集由該包圍盒所包圍的該四邊形所表示的該等隱含三角形之一。
例子20。如例子19的機器可讀媒體,其中該柵基元包含形成所述多數互連四邊形的一M×M矩陣的頂點。
例子21。如例子19的機器可讀媒體,其中該包圍盒產生器被積集至該光線遍歷硬體邏輯及/或包圍體階層(BVH)建立器。
例子22。如例子19的機器可讀媒體,其中對於包含N四邊形的柵基元,該包圍盒產生器係用以產生N-寬BVH節點,其具有與各個四邊形相關的子節點。
例子23。如例子19的機器可讀媒體,其中位元遮罩係根據該柵基元產生,在該位元遮罩中的各個位元係相關於所述隱含三角形之一或所述四邊形之一,其中如果在該位元遮罩中的一位元被設定為0,則所相關的隱含三角形或四邊形係被認定為無效。
例子24。如例子19的機器可讀媒體,更包含程式碼,用以使得該機器用以執行如下操作:在第一隱含三角形在第一時間的第一表示法與該第一隱含三角形在第二時間的第二表示法之間內插。
例子25。如例子19的機器可讀媒體,其中該柵基元為多數柵基元之一,該機器可讀媒體更包含程式碼,用以使得該機器用以執行如下操作:識別所述多數柵基元之共享頂點並針對各個共享頂點,只儲存一組頂點資料。
本發明之實施例可以包含已經如上述的各種步驟。這些步驟可以實施於機器可執行指令中,其可以使用以使得通用或特殊目的處理器以執行這些步驟。或者,這些步驟可以為特殊硬體元件所執行,其包含硬體接線邏輯,用以執行這些步驟,或者為程式電腦組件與客製硬體組件的任意組合所執行。
於如此所述,指令可以表示例如特殊應用積體電路(ASIC)組態的硬體的特定組態,以執行某些操作或具有預定功能或軟體指令儲存在實施為非暫態電腦可讀媒體中的記憶體。因此,示於這些圖所示之技術可以使用碼及所儲存資料加以實施並執行於一或更多電子裝置上(例如,終端站、網路元件等)。此等電子裝置使用電腦可讀儲存媒體,例如,非暫態電腦機器可讀儲存媒體(例如,磁碟;光碟;隨機存取記憶體;唯讀記憶體;快閃記憶體裝置;相變記憶體)與暫態電腦機器可讀通訊媒體(例如,電子、光學、聲音或其他形式的傳遞信號-例如,載波、紅外線信號、數位信號等)儲存與通訊(內部及/或透過網路與其他電子裝置)碼與資料。
另外,此等電子裝置典型包含一組一或更多處理器耦至一或更多其他組件,例如,一或更多儲存裝置(非暫態機器可讀儲存媒體)、使用者輸入/輸出裝置(例如,鍵盤、觸控螢幕、及/或顯示器)、及網路連接。該組處理器的耦接至其他組件典型通過一或更多匯流排與橋接器(也稱為匯流排控制器)。儲存裝置與信號承載該網路交通分別表示一或更多機器可讀儲存媒體與機器可讀通訊媒體。因此,給定電子裝置的儲存裝置典型儲存用以執行在該電子裝置的該組一或更多處理器上的碼及/或資料。當然,本發明之實施例的一或更多部分可以使用軟體、韌體、及/或硬體的不同組合加以實施。為了解釋目的,透過此詳細說明,各種特定細節已經被說明,以提供對本發明的全盤了解。然而,明顯地,對於熟習於本技藝者,本發明可以在沒有部分這些特定細節下加以實施。在一些例子中,已知結構與功能並未詳細地說明,以避免模糊了本發明的發明標的。因此,本發明的範圍與精神應由以下之申請專利範圍加以判定。
100:處理系統
102:處理器
104:快取
106:暫存器檔案
107:處理器核心
108:圖形處理器
109:指令集
110:介面匯流排
111:顯示裝置
112:加速器
116:記憶體控制器
118:外部圖形處理器
119:外部加速器
120:記憶體裝置
121:指令
122:資料
124:資料儲存裝置
125:觸控感應器
126:無線收發器
128:韌體介面
130:平台控制器集線器
134:網路控制器
140:傳統I/O控制器
142:USB控制器
143:鍵盤/滑鼠
144:攝影機
146:音訊控制器
200:處理器
202A-N:核心
204A-N:快取單元
206:共享快取單元
208:圖形處理器
210:系統代理核心
211:顯示控制器
212:環
213:I/O鏈路
214:記憶體控制器
216:匯流排控制器單元
218:嵌式記憶體模組
219:圖形處理器核心
206A-F:媒體取樣器
221A-F:子核心
222A-F:EU陣列
223A-F:TD/IC
224A-F:EU陣列
225A-F:3D取樣器
227A-F:著色器處理器
228A-F:SLM
230:固定功能方塊
231:幾何及固定功能管線
232:圖形SoC介面
233:圖形微控制器
234:媒體管線
235:共享功能邏輯
236:共享記憶體/快取記憶體
237:幾何及固定功能管線
238:額外固定功能管線
239:GPU
240A-N:多核心群組
241:排程器/調度器
242:暫存器檔案
243:圖形核心
244:張量核心
245:光線追蹤核心
246:CPU
247:L1快取及材質單元
248:記憶體控制器
249:記憶體
250:I/O
251:I/O記憶體管理單元
252:I/O裝置
253:L2快取
254:L1快取
255:指令快取
256:共享記憶體
257:命令處理器
258:線程調度器
260A-N:計算單元
261:向量暫存器
262:純量暫存器
263:向量邏輯單元
264:純量邏輯單元
265:本地共享記憶體
266:程式計數器
267:常數快取
268:記憶體控制器
269:DMA控制器
270:GPGPU
271:記憶體
272:記憶體
300:圖形處理器
302:顯示控制器
304:影像轉移引擎
306:視訊編解碼器引擎
310:圖形處理引擎
312:3D管線
314:記憶體介面
315:3D/媒體子系統
316:媒體管線
318:顯示裝置
310A-D:圖形引擎磚片
320:圖形處理器
322:圖形處理引擎叢集
323A-F:互連
324:組織互連
325A-D:記憶體互連
326A-D:記憶體
328:主機介面
330:計算加速器
332:計算引擎叢集
336:L3快取
340A-D:計算引擎磚片
403:命令串流器
410:圖形處理引擎
414:圖形核心陣列
415A-B:圖形核心
416:共享功能邏輯
418:統一回覆緩衝器
420:共享功能邏輯
421:取樣器
422:數學
423:線程間通訊
425:快取
500:執行邏輯
502:著色器處理器
504:線程調度器
505:光線追蹤器
506:指令快取
507A-N:線程控制邏輯
508A-N:執行單元
509A-N:熔合執行單元
510:取樣器
511:SLM
512:資料快取
514:資料埠
522:線程仲裁器
524:通用暫存器檔案陣列
526:架構暫存器檔案陣列
530:發送單元
532:分支單元
534:SIMD FPU
535:SIMD ALU
537:指令擷取單元
600:執行單元
601:線程控制
602:線程狀態
603:指令擷取/預取
604:指令解碼
606:暫存器檔案
607:發送
608:分支
610:計算
611:ALU
612:脈動陣列
613:數學
700:圖形處理器指令格式
710:128位元指令
712:運算碼
713:索引
714:控制
716:執行大小
718:目的地
720:SRC0
722:SRC1
724:SRC2
726:存取/位址模式
730:64位元緊縮指令
740:運算碼解碼
742:移動/邏輯
744:流程控制
746:雜項
748:平行數學
750:向量數學
800:圖形處理器
802:環互連
803:命令串流器
805:頂點擷取器
807:頂點著色器
811:外殼著色器
813:拼圖器
817:域著色器
819:幾何著色器
823:串流出
829:裁剪器
830:媒體管線
831:線程調度器
834:視訊前端
837:媒體引擎
840:顯示引擎
841:2D引擎
843:顯示控制器
850:執行邏輯
851:L1快取
852A-B:執行單元
854:取樣器
856:資料埠
858:材質快取
870:描繪器輸出管線
873:光柵器/深度
875:L3快取
877:像素操作
878:描繪快取
879:深度快取
900:圖形處理器命令格式
902:客戶
904:運算碼
905:子運算碼
906:資料
908:命令大小
910:圖形處理器命令順序
912:管線沖洗
913:管線選擇
914:管線控制
916:回覆緩衝器狀態
920:管線
922:3D管線
924:媒體管線
930:3D管線狀態
932:3D基元
934:執行
940:媒體管線狀態
942:媒體物件命令
944:執行
1000:資料處理系統
1010:3D圖形應用
1012:著色器指令
1014:可執行指令
1016:圖形目標
1020:作業系統
1022:圖形API
1024:著色器編譯器
1026:使用者模式圖形驅動器
1027:著色器編譯器
1028:OS核心模式功能
1029:核心模式圖形驅動器
1030:處理器
1032:圖形處理器
1034:通用核心
1050:記憶體
1100:IP核心開發
1110:軟體模擬
1112:模擬模型
1115:暫存器轉移位準設計
1120:硬體模型
1130:設計設施
1140:非揮發記憶體
1150:有線連接
1160:無線連接
1165:製造設施
1170:封裝組件
1172:邏輯
1173:互連結構
1174:邏輯
1175:記憶體
1180:基板
1182:橋接器
1183:封裝互連
1185:組織
1187:橋接器
1190:封裝組件
1191:I/O
1192:快取
1193:邏輯
1195:可互換小晶片
1196:基礎小晶片
1197:橋接器互連
1198:基礎小晶片
1200:SOC積體電路
1205:應用處理器
1210:圖形處理器
1215:影像處理器
1220:視訊處理器
1225:USB
1230:UART
1235:SPI/SDIO
1240:I2S/I2C
1245:顯示裝置
1250:HDMI
1255:MIPI
1260:快閃
1265:記憶體
1270:安全引擎
1305:頂點處理器
1310:圖形處理器
1315A-N:片段處理器
1320A-B:記憶體管理單元
1325A-B:快取
1330A-B:互連
1340:圖形處理器
1345:核心間工作管理器
1355A-N:著色器核心
1358:磚片單元
1500:機器學習引擎
1501:低取樣數訓練資料
1502:高取樣數訓練資料
1505:訓練權重
1600:機器學習引擎
1601:低取樣數輸入框
1602:新參考區
1603:低取樣數緩衝器
1604:低取樣區
1605:持續訓練權重
1610:圖形描繪引擎
1620:去雜訊框
1700:背景訓練
1710:主機CPU
1720:GPU
1800:伺服器
1805:權重
1810:機器學習引擎
1811:機器學習管理
1821:主機
1822:主機
2001:鬼域
2002:鬼域
2003:鬼域
2011:區
2012:區
2013:區
2021:節點
2022:節點
2023:節點
2081:描繪電路
2082:描繪電路
2100:去雜訊器
2101:區域資料管理器
2102:區域資料管理器
2106:壓縮資料
2111:去雜訊器
2121:去雜訊區域
2122:去雜訊區域
2131:壓縮器/解壓縮器
2132:壓縮器/解壓縮器
2201:監視器
2202:監視器
2211:網路介面
2212:網路介面
2280:區域處理器
2290:去雜訊影像
2400:機器學習軟體堆疊
2402:機器學習應用
2404:機器學習框架
2406:計算框架
2408:GPGPU驅動器
2410:GPGPU硬體
2500:多GPU計算系統
2502:處理器
2504:主機介面開關
2506A-D:GPGPU
2516:P2P GPU鏈結
2602:輸入
2604:卷積層
2606:卷積層
2608:全連接層
2712:輸入至卷積層
2714:卷積層
2716:卷積階段
2718:檢測器階段
2720:池化階段
2722:下一層
2800:遞歸類神經網路
2802:輸入層
2804:隱藏層
2805:回授機制
2806:輸出層
2902:訓練資料集
2904:訓練框架
2906:未訓練類神經網路
2908:訓練類神經網路
2912:新資料
2914:結果
3002:模型平行機制
3004:資料平行機制
3006:模型與資料平行機制
3100:系統晶片
3102:媒體處理器
3104:視覺處理器
3105:GPU
3106:GPGPU
3108:多核心處理器
3100A-N:多核心群組
3105:GPU
3110:排程器/調度器
3120:暫存器檔案
3130:圖形核心
3140:張量核心
3150:光線追蹤核心
3160:L1快取與材質單元
3170:記憶體管理單元
3180:L2快取
3190:IO裝置
3195:輸入/輸出電路
3198:記憶體
3199:CPU
3200:貼片
3201:光束
3304:光線產生電路
3305:光線階層建構電路
3306:遍歷/交集電路
3307:光束階層
3308:BVH
3309:BVH建構
3310:光線追蹤引擎
3320:GPU
3400:主光束
3401:象限
3403:象限
3404:象限
3402:象限
3600:光線追蹤叢集
3610:光線追蹤節點
3611:光線追蹤節點
3612:光線追蹤節點
3613:光線追蹤節點
3620:閘道
3630:客戶端光線追蹤應用
3701:壓縮光線
3710:光線追蹤節點
3711:光線追蹤節點
3720:光線壓縮
3721:光線解壓縮
3725:網路介面
3726:網路介面
3730:光線追蹤引擎
3731:光線追蹤引擎
3740:光線解壓縮
3741:光線壓縮
3801:有損壓縮
3802:有損解壓縮
3803:無損壓縮
3804:無損解壓縮
4000:著色器執行電路
4001:核心/執行單元
4002:取樣器
4003:L1快取
4004:信息單元
4005:光線-BVH遍歷/交集
4006:L1快取
4007:排程器
4008:排序電路
4009:主調度器
4010:固定功能電路
4020:最後階快取
4101:指定堆疊
4102:自由堆疊池
4201:內容可定址記憶體
4201A-n:著色器記錄指標
4210:分組電路
4220:群調度
4300:頂層BVH
4301:底層BVH
4302:底層BVH
4303:內遍歷路徑
4304:外遍歷路徑
4305:遍歷節點
4306:具有三角形的葉節點
4307:具有客製基元的葉節點
4400:遍歷狀態
4401:世界空間
4402:目標空間
4403:呼叫堆疊偏移
4404:遍歷偏移
4405:呼叫堆疊
4410:內狀態
4501:主光線著色器
4502:遍歷
4503:交集
4504:任何命中著色器
4505:交集著色器
4506:未中著色器
4507:最近命中著色器
4601:硬體遍歷狀態
4650:客製基元
4701:著色器
4706:著色器延遲/聚合器
4805:著色器延遲/聚合器
4900:光線追蹤指令
4902:光線追蹤資料
4903:擷取
4904:解碼器
4905:排程/調度
4908:快取子系統
4910:向量功能單元
4911:純量功能單元
4912:光線追蹤功能單元
4915:向量暫存器
4916:純量暫存器
5005:交集著色器
5020:堆疊處理
5101:主光線著色器
5102:遍歷
5103:交集
5107:光線追蹤快取
5110:光線追蹤加速電路
5121:堆疊
5201:光線記憶庫
5202:光線記憶庫
5203:堆疊
5204:堆疊
5205:分配器
5206:光線
5210:遍歷處理
5220:記憶庫分配計數器
5248:遍歷/堆疊追蹤器
5249:追蹤陣列
5251:初始
5252:實例
5253:提呈
5254:繼續
5261:讀光線
5262:讀光線及提呈命中
5263:讀光線,可能命中及堆疊
5264:讀光線,提呈命中及堆疊
5290:BVH節點
5291:BVH節點
5301:來自記憶庫0的非內部節點
5302:來自記憶庫1的非內部節點
5303:來自記憶庫0的內部節點
5304:來自記憶庫1的內部節點
5311:非內部節點優先選擇邏輯
5312:內部節點優先選擇邏輯
5701:四邊形/實例優先選擇
5702:內部節點優先選擇
5711:來自記憶庫0的四邊形/實例
5712:來自記憶庫1的四邊形/實例
5713:來自記憶庫0的內部節點
5714:來自記憶庫1的內部節點
6000:將處理BVH節點
6001:堆疊FIFO
6003:堆疊處理
6010:逐出備妥及資料出現位元
6011:堆疊更新
6012:仲裁電路
6201:目標
6205:LOD選擇器
6210:距離
6220:比較運算遮罩
6221:光線比較遮罩
6301:上階段
6302:下階段
6400:壓縮塊
6401:元資料
6402:向量殘留
6602:索引殘留
6603:元資料
6610:索引壓縮塊
6900:壓縮
6901:基礎細分網目
6902:移置映射網目
6903:基礎網目
6904:3D移置陣列
6905:基礎座標
6910:壓縮移置網目
6911:移置映射
6921:內插器
6930:移置柵產生器
6935:移置柵
6991:拼圖網目
6992:移置功能
6993:具移置的網目
6912:量化器
7000:表面
7001:基礎細分面
7002:移置映射
7003:粗基礎網目
7022:差向量
7090:四邊形
7091:四邊形
7092:邊緣
7401:反白三角形
7550:拼圖器
7601A-I:四邊形
7700:N寬BVH節點
7710:遍歷單元
7715:交集器
7801:頂點
7802:頂點
8000:光線追蹤引擎
8002:光線產生器
8003:遍歷/交集
8004:BVH處理
8005:BVH
8006:輸入基元
8007:BVH建立器
8008:BVH解壓縮器
8009:BVH壓縮器
8098:記憶體/快取
8100A,B:BVH節點
8101A,B:葉資料
8102A,B:葉資料
8103A,B:葉資料
8104A,B:葉資料
8105A,B:葉資料
8106A,B:葉資料
8107A,B:葉資料
8108A,B:葉資料
8110:指標/參考
8025:BVH壓縮器
8026:BVH解壓縮器
8122:8位元偏移
8150:光線追蹤核心
8199:CPU
8201:64位元目的暫存器
8202:32位元深度值
8203:32位元酬載
8211:64位元目的暫存器
8212:附加索引值
8213:前爆索引值
8501:ID
8502:回應
8511A,B:著色器
8512:資源管理器
8510:排程器
8515:固態裝置
8521:圖形處理器
8531:磚片資源
8605:堆疊儲存
8607:隨選建立器
8610:光線堆疊
8620:遍歷懸置
8650:G-緩衝器
8651:可見性歷史資料
8655:預建立器
8660:可能可見實例
8670:遍歷電路與著色器
8674:BLAS ID
8675:可見BLAS圖
8676:旗標
8677:BLAS像素遮罩
8678:光線產生著色器
8690:狀態
8691:狀態
8692:狀態
8700:命中群組
8701:材料為主汰除遮罩
8702:幾何實例汰除遮罩
8800:四元樹節點
8810:四元樹結構
8811:四元樹結構
8812:四元樹結構
8813:四元樹結構
8850:儲存/壓縮
8855:雙影像角錐
8910:執行單元
8918:記憶體緩衝器
8920:狀態初始器
8930:光線/盒遍歷單元
8940:交集測試器
8950:線程調度器
8960:光線追蹤快取
8970:L1快取
9000:線程
9001:發散繁衍線程
9011:一般繁衍線程
9021:收斂繁衍線程
9030:小網目壓縮
9090:小網目集合與解壓縮
9095:記憶體介面
9120:線程搶先
9121:可FFTID定址儲存器
9150:線程執行遮罩
9151:線程執行遮罩
9152:線程執行遮罩
9153:線程執行遮罩
9170:驅動器管理的緩衝器
9200:光線追蹤叢集
9210:光線追蹤節點
9211:光線追蹤節點
9212:光線追蹤節點
9213:光線追蹤節點
9215:網路
9220:閘道
9230:客戶側光線追蹤應用
9231:代理
9232:代理
9233:代理
9250:代理產生模組
9265:體積細分模組
9315:光線追蹤引擎
9340:代理
9341:代理
9342:代理
9343:代理
9360:工作資料集
9400:體積資料集
9401:區塊
9402:區塊
9403:區塊
9404:區塊
9240:代理
9241:代理
9242:代理
9243:代理
9940:區域
9941:區域
9942:區域
9943:區域
6700:HBI索引
6701:位元向量
6708:blockIdx
本發明的較佳了解可以由以下的詳細說明配合以下圖式加以取得,其中:
[圖1]為具有含一或更多處理器核心與圖形處理器的處理器的電腦系統實施例的方塊圖;
[圖2A-2D]示出計算系統以及由本發明實施例所提供的圖形處理器;
[圖3A-3C]示出額外圖形處理器與計算加速器架構的方塊圖;
[圖4]為用於圖形處理器的圖形處理引擎的實施例的方塊圖;
[圖5A-5B]為包含一陣列處理元件的線程執行邏輯;
[圖6]為包含一陣列處理元件的線程執行邏輯的方塊圖;
[圖7]示出依據一實施例之圖形處理器執行單元指令格式;
[圖8]為另一實施例的圖形處理器的方塊圖,其包含圖形管線、媒體管線、顯示引擎、線程執行邏輯、及描繪輸出管線;
[圖9A]為示出依據一實施例之圖形處理器命令格式的方塊圖;
[圖9B]為示出依據一實施例之圖形處理器命令順序的方塊圖;
[圖10]示出用於依據一實施例之資料處理系統的例示圖形軟體架構;
[圖11A]示出一例示IP核心開發系統,其可以被用以製造執行依據一實施例的操作的積體電路;
[圖11B-11D]示出包含小晶片與中介層基板的例示封裝配置;
[圖12]示出一例示系統晶片積體電路,其可以使用依據一實施例的一或更多IP核心來製造;
[圖13]示出系統晶片積體電路的例示圖形處理器,其可以使用一或更多IP核心製造;
[圖14]示出系統晶片積體電路的另一例示圖形處理器,其可以使用一或更多IP核心製造;
[圖15]示出用以執行機器學習架構的初始訓練的架構;
[圖16]示出機器學習引擎係如何在執行時間中連續訓練與更新;
[圖17]示出機器學習引擎係如何在執行時間中連續訓練與更新;
[圖18A-18B]示出機器學習資料如何在一網路上共享;及
[圖19]示出訓練機器學習引擎的方法;
[圖20]示出節點交換鬼域資料如何執行分散去雜訊操作;
[圖21]示出影像描繪與去雜訊操作分散於多個節點的架構;
[圖22]示出用於分散描繪與去雜訊的架構的其他細節;
[圖23]示出用以執行分散描繪與去雜訊的方法;
[圖24]示出機器學習方法;
[圖25]示出多數互連通用圖形處理器;
[圖26]示出用於機器學習實施法的一組卷積層與全連接層;
[圖27]示出卷積層的例子;
[圖28]示出在機器學習實施法中的一組互連節點例子;
[圖29]示出一訓練框架,其中有使用訓練資料集學習的類神經網路;
[圖30A]示出模型平行與資料平行的例子;
[圖30B]示出系統晶片(SoC);
[圖31]示出一處理架構,其包含光線追蹤核心與張量核心;
[圖32]示出光束的例子;
[圖33]示出用以執行光束追蹤的設備;
[圖34]示出光束階層的例子;
[圖35]示出執行光束追蹤的方法;
[圖36]示出分散式光線追蹤引擎的例子;
[圖37-38]示出於光線追蹤系統中所執行的壓縮;
[圖39]示出實施於光線追蹤架構中的方法;
[圖40]示出例示混合光線追蹤設備;
[圖41]示出用於光線追蹤操作的堆疊;
[圖42]示出用於混合光線追蹤設備的其他細節;
[圖43]示出包圍體階層;
[圖44]示出一呼叫堆疊與遍歷狀態儲存;
[圖45]示出遍歷與交集的方法;
[圖46A-46B]示出執行某些著色器如何需要多數調度循環;
[圖47]示出單一調度循環如何執行多數著色器;
[圖48]示出單一調度循環如何執行多數著色器;
[圖49]示出用以執行光線追蹤指令的架構;
[圖50]示出用以在線程內執行光線追蹤指令的方法;
[圖51]示出用以非同步光線追蹤的架構的一個實施例;
[圖52A]示出光線遍歷電路的一個實施例;
[圖52B]示出在一實施例中執行的程序,以管理光線儲存庫;
[圖53]示出優先選擇電路/邏輯的一個實施例;
[圖54與圖55A-55B]示出用於本發明之一個實施例中的不同類型的光線追蹤資料,包含旗標、異常及汰除資料;
[圖56]示出用以決定光線追蹤管線的早出(early out)的一個實施例;
[圖57]示出優先選擇電路/邏輯的一個實施例;
[圖58]示出用於光線遍歷操作的例示包圍體階層(BVH);
[圖59A-59B]示出其他遍歷操作;
[圖60]示出用以管理BVH堆疊的堆疊管理電路的一個實施例;
[圖61A-61B]示出執行用於光線、命中以及堆疊的例示資料結構、子結構及操作;
[圖62]示出具有N位元比較運算遮罩的一層細節選擇器的實施例;
[圖63]示出依據本發明一實施例之加速資料結構;
[圖64]示出包含殘留值與元資料的壓縮方塊的一個實施例;
[圖65]示出依據本發明一實施例之方法;
[圖66]示出一方塊偏移索引壓縮方塊的一個實施例;
[圖67A]示出依據本發明一實施例之階層位元向量索引(HBI);
[圖67B]示出依據本發明一實施例之索引壓縮方塊;及
[圖68]示出包含BVH壓縮電路/邏輯及解壓縮電路/邏輯的例示架構;
[圖69A]示出應用至網目的移置功能;
[圖69B]示出用於壓縮網目或小網目的壓縮電路的一個實施例;
[圖70A]示出映射至基礎細分表面上的移置;
[圖70B-70C]示出相對於粗基礎網目的不同向量;
[圖71]示出依據本發明一實施例之方法;
[圖72-74]示出包含多數互連頂點的網目;
[圖75]示出用以產生網目的拼圖器的一個實施例;
[圖76-77]示出一實施例,其中是基於一網目形成有包圍體;
[圖78]示出一分享重疊頂點的網目的實施例;
[圖79]示出在三角形間具有共享邊緣的網目;
[圖80]示出依據一實施例之光線追蹤引擎;
[圖81]示出依據一實施例之BVH壓縮器;
[圖82A-82C]示出64位元暫存器的例示資料格式;
[圖83A-83B]示出用於環緩衝器的索引的一個實施例;
[圖84A-84B]示出用於生產者與消費者的例示環緩衝器原子學;
[圖85A]示出一磚片資源的一個實施例;
[圖85B]示出依據本發明一實施例的方法;
[圖86A]示出包含隨選建立器的BVH處理邏輯的一實施例;
[圖86B]示出用於加速結構的隨選建立器的一實施例;
[圖86C]示出可見底層加速結構圖的一實施例;
[圖86D]示出不同類型的實例與遍歷決定;
[圖87]示出一材料為主的汰除遮罩的一實施例;
[圖88]示出一實施例,其中一四元樹結構被形成在幾何網目上;
[圖89A]示出光線追蹤架構的一實施例;
[圖89B]示出包含小網目壓縮的一實施例;
[圖90]示出多數線程,其包含同步線程、發散繁衍線程、一般繁衍線程及收斂繁衍線程;
[圖91]示出具有無束縛線程調度器的光線追蹤架構的一實施例;
[圖92]示出依據一實施例之光線追蹤叢集;
[圖93-100]示出在多節點光線追蹤實施法中使用代理資料的實施例;
[圖101]示出依據本發明一實施例的方法。
3100A:多核心群組
3100B:多核心群組
3100C:多核心群組
3100N:多核心群組
3105:GPU
3110:排程器/調度器
3120:暫存器檔案
3130:圖形核心
3140:張量核心
3150:光線追蹤核心
3160:L1快取與材質單元
3170:記憶體管理單元
3180:L2快取
3190:IO裝置
3195:輸入/輸出電路
3198:記憶體
3199:CPU
Claims (25)
- 一種設備,包含: 拼圖器,用以將輸入貼片拼圖成包含多數互連四邊形的柵基元,各個四邊形包含兩個隱含三角形並與相鄰四邊形共享至少兩頂點; 包圍盒產生器,用以建構一包圍盒,以包圍該柵基元的各個四邊形,以產生對應於所述多數互連四邊形的多數包圍盒;及 光線遍歷硬體邏輯,用以決定是否一光線遍歷所述多數包圍盒之一或更多;及 交集硬體邏輯,用以處理為該光線所遍歷的包圍盒,以決定是否該光線交集由該包圍盒所包圍的該四邊形所表示的該等隱含三角形之一。
- 如請求項1的設備,其中該柵基元包含形成所述多數互連四邊形的一M×M矩陣的頂點。
- 如請求項1或2的設備,其中該包圍盒產生器係積集入該光線遍歷硬體邏輯或包圍體階層(BVH)建立器。
- 如請求項1至3中之任一項的設備,其中對於包含N四邊形的柵基元,該包圍盒產生器係用以產生N-寬BVH節點,其具有與各個四邊形相關的子節點。
- 如請求項1至4中之任一項的設備,其中位元遮罩係根據該柵基元產生,在該位元遮罩中的各個位元相關於所述隱含三角形之一或者所述四邊形之一,其中如果在該位元遮罩中的一位元被設定至0,則所相關的隱含三角形或四邊形被認定為無效。
- 如請求項1至5中之任一項的設備,更包含:運動模糊硬體邏輯,用以內插於第一隱含三角形在第一時間的第一表示法與該第一隱含三角形在第二時間的第二表示法之間。
- 如請求項1至6中之任一項的設備,其中該柵基元為多數柵基元之一,該設備更包含: 壓縮硬體邏輯,用以識別所述多數柵基元的共享頂點並用以針對各個共享頂點,只儲存一組頂點資料。
- 如請求項7的設備,其中該壓縮硬體邏輯係用以產生一索引,指向儲存有該組頂點資料的一陣列。
- 如請求項8的設備,其中該壓縮硬體邏輯係用以識別所述隱含三角形的一或更多共享邊緣,該壓縮硬體邏輯用以針對各個共享邊緣,儲存單一組邊緣資料。
- 一種方法,包含: 將輸入貼片拼圖為包含多數互連四邊形的柵基元,各個四邊形包含兩隱含三角形並與相鄰四邊形共享至少兩頂點; 建構包圍盒,以包圍該柵基元的各個四邊形,以產生對應於所述多數互連四邊形的多數包圍盒;及 決定是否一光線遍歷所述多數包圍盒之一或更多;及 處理為該光線所遍歷的包圍盒,以決定是否該光線交集由該包圍盒所包圍的該四邊形所表示的該等隱含三角形之一。
- 如請求項10的方法,其中該柵基元包含形成所述多數互連四邊形的一M×M矩陣的頂點。
- 如請求項10或11的方法,其中該包圍盒產生器被積集至該光線遍歷硬體邏輯及/或包圍體階層(BVH)建立器。
- 如請求項10至12中之任一項的方法,其中對於包含N四邊形的柵基元,該包圍盒產生器係用以產生N-寬BVH節點,其具有與各個四邊形相關的子節點。
- 如請求項10至13中之任一項的方法,其中位元遮罩係根據該柵基元產生,在該位元遮罩中的各個位元係相關於所述隱含三角形之一或所述四邊形之一,其中如果在該位元遮罩中的一位元被設定為0,則所相關的隱含三角形或四邊形係被認定為無效。
- 如請求項10至14中之任一項的方法,第一隱含三角形在第一時間的第一表示法與該第一隱含三角形在第二時間的第二表示法。
- 如請求項10至15中之任一項的方法,其中該柵基元為多數柵基元之一,該方法更包含: 識別所述多數柵基元之共享頂點並針對各個共享頂點,只儲存一組頂點資料。
- 如請求項16的方法,更包含: 產生一索引,指向儲存有該組頂點資料的一陣列。
- 如請求項17的方法,更包含: 識別所述隱含三角形的一或更多共享邊緣,及 針對各個共享邊緣,只儲存單一組邊緣資料。
- 一種具有程式碼儲存於其上的機器可讀媒體,當程式碼為機器所執行時,使得該機器用以執行如下操作: 將輸入貼片拼圖為包含多數互連四邊形的柵基元,各個四邊形包含兩隱含三角形並與相鄰四邊形共享至少兩頂點; 建構包圍盒,以包圍該柵基元的各個四邊形,以產生對應於所述多數互連四邊形的多數包圍盒;及 決定是否一光線遍歷所述多數包圍盒之一或更多;及 處理為該光線所遍歷的包圍盒,以決定是否該光線交集由該包圍盒所包圍的該四邊形所表示的該等隱含三角形之一。
- 如請求項19的機器可讀媒體,其中該柵基元包含形成所述多數互連四邊形的一M×M矩陣的頂點。
- 如請求項19或20的機器可讀媒體,其中該包圍盒產生器被積集至該光線遍歷硬體邏輯及/或包圍體階層(BVH)建立器。
- 如請求項19至21中之任一項的機器可讀媒體,其中對於包含N四邊形的柵基元,該包圍盒產生器係用以產生N-寬BVH節點,其具有與各個四邊形相關的子節點。
- 如請求項19至22中之任一項的機器可讀媒體,其中位元遮罩係根據該柵基元產生,在該位元遮罩中的各個位元係相關於所述隱含三角形之一或所述四邊形之一,其中如果在該位元遮罩中的一位元被設定為0,則所相關隱的含三角形或四邊形係被認定為無效。
- 如請求項19至23中之任一項的機器可讀媒體,更包含程式碼,用以使得該機器用以執行如下操作: 在第一隱含三角形在第一時間的第一表示法與該第一隱含三角形在第二時間的第二表示法之間內插。
- 如請求項19至24中之任一項的機器可讀媒體,其中該柵基元為多數柵基元之一,該機器可讀媒體更包含程式碼,用以使得該機器用以執行如下操作: 識別所述多數柵基元之共享頂點並針對各個共享頂點,只儲存一組頂點資料。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063066799P | 2020-08-17 | 2020-08-17 | |
US63/066,799 | 2020-08-17 | ||
US17/133,547 | 2020-12-23 | ||
US17/133,547 US20220051476A1 (en) | 2020-08-17 | 2020-12-23 | Apparatus and method for improving graphics processing performance |
Publications (1)
Publication Number | Publication Date |
---|---|
TW202209258A true TW202209258A (zh) | 2022-03-01 |
Family
ID=78649987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110125338A TW202209258A (zh) | 2020-08-17 | 2021-07-09 | 用於包含光線追蹤的有效圖形處理的設備與方法 |
Country Status (7)
Country | Link |
---|---|
US (2) | US11995767B2 (zh) |
EP (1) | EP4196961A1 (zh) |
CN (2) | CN114078076A (zh) |
DE (2) | DE102021118059A1 (zh) |
NL (1) | NL2028744B1 (zh) |
TW (1) | TW202209258A (zh) |
WO (1) | WO2022039869A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023229762A1 (en) * | 2022-05-27 | 2023-11-30 | Tencent America LLC | Dynamic mesh compression using inter and intra prediction |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) * | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
CN110826706B (zh) * | 2018-08-10 | 2023-10-03 | 北京百度网讯科技有限公司 | 用于神经网络的数据处理方法和装置 |
US11069119B1 (en) * | 2020-02-28 | 2021-07-20 | Verizon Patent And Licensing Inc. | Methods and systems for constructing a shader |
CN116457842A (zh) * | 2020-11-16 | 2023-07-18 | 高通股份有限公司 | 用于高效视频处理的跳跃卷积 |
US11636625B2 (en) * | 2020-12-11 | 2023-04-25 | Qualcomm Incorporated | Image compression and decompression |
US11704860B2 (en) | 2021-05-14 | 2023-07-18 | Nvidia Corporation | Accelerated processing via a physically based rendering engine |
US11830123B2 (en) | 2021-05-14 | 2023-11-28 | Nvidia Corporation | Accelerated processing via a physically based rendering engine |
US11853764B2 (en) | 2021-05-14 | 2023-12-26 | Nvidia Corporation | Accelerated processing via a physically based rendering engine |
US11875444B2 (en) | 2021-05-14 | 2024-01-16 | Nvidia Corporation | Accelerated processing via a physically based rendering engine |
US11908064B2 (en) * | 2021-05-14 | 2024-02-20 | Nvidia Corporation | Accelerated processing via a physically based rendering engine |
US20220377357A1 (en) * | 2021-05-19 | 2022-11-24 | Pony Ai Inc. | Efficient retrieval of sensor data |
GB2608386B (en) * | 2021-06-29 | 2024-05-15 | Imagination Tech Ltd | Transformation of data in a ray tracing system |
US20230185706A1 (en) * | 2021-12-09 | 2023-06-15 | Nvidia Corporation | Asynchronous memory deallocation |
US11861785B2 (en) * | 2022-02-04 | 2024-01-02 | Qualcomm Incorporated | Generation of tight world space bounding regions |
US20230252725A1 (en) * | 2022-02-04 | 2023-08-10 | Qualcomm Incorporated | Bounding volume hierarchy leaf node compression |
US11763523B2 (en) * | 2022-02-04 | 2023-09-19 | Qualcomm Incorporated | Compressed THIT stack for hardware-accelerated GPU ray tracing |
US20230252726A1 (en) * | 2022-02-04 | 2023-08-10 | Qualcomm Incorporated | Compressed traversal stack for gpu ray tracing |
US20230298127A1 (en) * | 2022-03-18 | 2023-09-21 | Intel Corporation | Apparatus and method for biased bvh traversal path |
US20230316615A1 (en) * | 2022-03-31 | 2023-10-05 | Electronic Arts Inc. | Learning character model animations with a layer-wise mixture-of-experts network |
US20240015289A1 (en) * | 2022-07-08 | 2024-01-11 | Tencent America LLC | Adaptive quantization for instance-based mesh coding |
US20240137564A1 (en) * | 2022-10-07 | 2024-04-25 | Tencent America LLC | Fast computation of local coordinate system for displacement vectors in mesh coding |
WO2024086382A1 (en) * | 2022-10-21 | 2024-04-25 | Innopeak Technology, Inc. | Methods and systems for rendering video graphics using scene segmentation |
GB2622292A (en) * | 2023-03-08 | 2024-03-13 | Imagination Tech Ltd | Tessellation methods and systems in ray tracing |
CN117950726A (zh) * | 2024-03-26 | 2024-04-30 | 武汉凌久微电子有限公司 | 基于gpu指令集的spir-v链式操作指令处理方法 |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5263136A (en) | 1991-04-30 | 1993-11-16 | Optigraphics Corporation | System for managing tiled images using multiple resolutions |
US6047088A (en) | 1996-12-16 | 2000-04-04 | Sharp Laboratories Of America, Inc. | 2D mesh geometry and motion vector compression |
US6219058B1 (en) | 1997-09-08 | 2001-04-17 | Intel Corporation | Bin-per-span based representation and communication of graphical data |
US7102646B1 (en) | 1997-11-25 | 2006-09-05 | Nvidia U.S. Investment Company | Demand-based memory system for graphics applications |
US6445390B1 (en) | 1997-12-29 | 2002-09-03 | The United States Of America As Represented By The Adminstrator Of The National Aeronautics And Space Administration | Triangle geometry processing for surface modeling and cartesian grid generation |
US6344852B1 (en) | 1999-03-17 | 2002-02-05 | Nvidia Corporation | Optimized system and method for binning of graphics data |
US7499053B2 (en) | 2000-06-19 | 2009-03-03 | Mental Images Gmbh | Real-time precision ray tracing |
US6734867B1 (en) | 2000-06-28 | 2004-05-11 | Micron Technology, Inc. | Cache invalidation method and apparatus for a graphics processing system |
WO2005081683A2 (en) | 2004-02-12 | 2005-09-09 | Pixar | Method and apparatus for multiresolution geometry caching based on ray differentials |
US7570271B1 (en) | 2006-02-10 | 2009-08-04 | Adobe Systems Incorporated | High speed display of high resolution image |
US7969434B2 (en) | 2006-09-19 | 2011-06-28 | Caustic Graphics, Inc. | Method, apparatus, and computer readable medium for accelerating intersection testing in ray-tracing rendering |
US8139060B2 (en) | 2006-11-28 | 2012-03-20 | International Business Machines Corporation | Ray tracing image processing system |
US8237711B2 (en) | 2007-11-19 | 2012-08-07 | Caustic Graphics, Inc. | Tracing of shader-generated ray groups using coupled intersection testing |
US8963918B2 (en) | 2008-09-30 | 2015-02-24 | Microsoft Corporation | Ray tracing on graphics hardware using kd-trees |
US8570322B2 (en) | 2009-05-12 | 2013-10-29 | Nvidia Corporation | Method, system, and computer program product for efficient ray tracing of micropolygon geometry |
US20110216068A1 (en) | 2010-03-08 | 2011-09-08 | Sathe Rahul P | Edge processing techniques |
GB201104066D0 (en) | 2011-03-09 | 2011-04-20 | Imagination Tech Ltd | Compression of a tessellated primitive index list in a tile rendering system |
US8791945B2 (en) | 2011-05-18 | 2014-07-29 | Intel Corporation | Rendering tessellated geometry with motion and defocus blur |
WO2013101167A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Five-dimensional rasterization with conservative bounds |
US10409445B2 (en) | 2012-01-09 | 2019-09-10 | Activevideo Networks, Inc. | Rendering of an interactive lean-backward user interface on a television |
US9418616B2 (en) | 2012-12-20 | 2016-08-16 | Nvidia Corporation | Technique for storing shared vertices |
US9223789B1 (en) | 2013-03-14 | 2015-12-29 | Amazon Technologies, Inc. | Range retrievals from archived data objects according to a predefined hash tree schema |
GB2506706B (en) | 2013-04-02 | 2014-09-03 | Imagination Tech Ltd | Tile-based graphics |
US9940686B2 (en) | 2014-05-14 | 2018-04-10 | Intel Corporation | Exploiting frame to frame coherency in a sort-middle architecture |
US9928640B2 (en) | 2015-12-18 | 2018-03-27 | Intel Corporation | Decompression and traversal of a bounding volume hierarchy |
US9858704B2 (en) * | 2016-04-04 | 2018-01-02 | Intel Corporation | Reduced precision ray traversal with plane reuse |
US10062206B2 (en) * | 2016-08-30 | 2018-08-28 | Advanced Micro Devices, Inc. | Parallel micropolygon rasterizers |
US10614611B2 (en) * | 2017-04-07 | 2020-04-07 | Intel Corporation | Apparatus and method for implementing bounding volume hierarchy (BVH) operations on tesselation hardware |
US10839475B2 (en) | 2018-04-11 | 2020-11-17 | Intel IP Corporation | Apparatus and method for compressing leaf nodes of a bounding volume hierarchy (BVH) |
US10825230B2 (en) | 2018-08-10 | 2020-11-03 | Nvidia Corporation | Watertight ray triangle intersection |
US11062500B2 (en) | 2018-12-28 | 2021-07-13 | Intel Corporation | Apparatus and method for ray tracing with grid primitives |
US11321910B2 (en) | 2019-04-04 | 2022-05-03 | Intel Corporation | Apparatus and method for reduced precision bounding volume hierarchy construction |
-
2020
- 2020-10-28 US US17/083,123 patent/US11995767B2/en active Active
- 2020-12-23 US US17/133,547 patent/US20220051476A1/en active Pending
-
2021
- 2021-07-09 TW TW110125338A patent/TW202209258A/zh unknown
- 2021-07-13 DE DE102021118059.7A patent/DE102021118059A1/de active Pending
- 2021-07-15 NL NL2028744A patent/NL2028744B1/en active
- 2021-07-16 CN CN202110809488.2A patent/CN114078076A/zh active Pending
- 2021-07-16 DE DE102021118444.4A patent/DE102021118444A1/de active Pending
- 2021-07-20 CN CN202180060436.8A patent/CN116075863A/zh active Pending
- 2021-07-20 WO PCT/US2021/042381 patent/WO2022039869A1/en active Application Filing
- 2021-07-20 EP EP21858783.0A patent/EP4196961A1/en active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023229762A1 (en) * | 2022-05-27 | 2023-11-30 | Tencent America LLC | Dynamic mesh compression using inter and intra prediction |
Also Published As
Publication number | Publication date |
---|---|
CN114078076A (zh) | 2022-02-22 |
DE102021118444A1 (de) | 2022-03-24 |
US11995767B2 (en) | 2024-05-28 |
DE102021118059A1 (de) | 2022-03-10 |
NL2028744B1 (en) | 2022-08-11 |
US20220051476A1 (en) | 2022-02-17 |
WO2022039869A1 (en) | 2022-02-24 |
CN116075863A (zh) | 2023-05-05 |
US20220051466A1 (en) | 2022-02-17 |
EP4196961A1 (en) | 2023-06-21 |
NL2028744A (en) | 2022-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TW202209258A (zh) | 用於包含光線追蹤的有效圖形處理的設備與方法 | |
JP2021149942A (ja) | 変位メッシュ圧縮のための装置及び方法 | |
US20220130097A1 (en) | Apparatus and method for asynchronous ray tracing | |
JP2021149937A (ja) | グラフィックスプロセッサの動き推定回路を使用して非局所平均フィルタリングを実行するための装置及び方法 | |
JP2021149944A (ja) | レイトレーシングパイプラインをスロットリングするための装置及び方法 | |
JP2021149934A (ja) | 安定した短い遅延の並び替え操作を実行するための装置および方法 | |
EP4246449A1 (en) | Apparatus and method for accelerating bvh builds by merging bounding boxes | |
EP4246448A1 (en) | Apparatus and method for acceleration data structure re-braiding with camera position | |
CN115878278A (zh) | 用于树结构数据减少的装置和方法 | |
JP2021149943A (ja) | レイトラバーサルハードウェアにおいてボックスクエリを実行するための装置及び方法 | |
NL2028745B1 (en) | Apparatus and method for efficient graphics processing including ray tracing | |
US11989817B2 (en) | Apparatus and method for high quality ray-traced level of detail transitions | |
EP4246450A1 (en) | Apparatus and method for biased bvh traversal path | |
CN117581267A (zh) | 用于同步光线追踪的栈访问扼制 | |
CN115861517A (zh) | 用于利用着色器调用图分析进行光线追踪的装置和方法 | |
US20230109412A1 (en) | Apparatus and method for stochastic tiled lighting with importance sampling | |
JP7494258B2 (ja) | ツリー構造データ削減のための装置および方法 | |
US12002145B2 (en) | Apparatus and method for efficient graphics processing including ray tracing | |
US20240020911A1 (en) | Apparatus and Method for Routing Data from Ray Tracing Cache Banks | |
US20230298126A1 (en) | Node prefetching in a wide bvh traversal with a stack | |
US20230297508A1 (en) | Apparatus and method for hardware-accelerated texture lookup and interpolation |