CN110827388A - 硬件中树遍历机制的前进和可编程超时的方法 - Google Patents
硬件中树遍历机制的前进和可编程超时的方法 Download PDFInfo
- Publication number
- CN110827388A CN110827388A CN201910490166.9A CN201910490166A CN110827388A CN 110827388 A CN110827388 A CN 110827388A CN 201910490166 A CN201910490166 A CN 201910490166A CN 110827388 A CN110827388 A CN 110827388A
- Authority
- CN
- China
- Prior art keywords
- ray
- traversal
- stack
- coprocessor
- ttu700
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 102
- 230000007246 mechanism Effects 0.000 title claims abstract description 40
- 238000012545 processing Methods 0.000 claims abstract description 137
- 238000012360 testing method Methods 0.000 claims description 151
- 230000008569 process Effects 0.000 claims description 53
- 238000012986 modification Methods 0.000 claims description 17
- 230000004048 modification Effects 0.000 claims description 17
- 230000004044 response Effects 0.000 claims description 16
- 230000000670 limiting effect Effects 0.000 abstract description 88
- 238000007726 management method Methods 0.000 description 53
- 230000001133 acceleration Effects 0.000 description 41
- 230000009466 transformation Effects 0.000 description 34
- 239000012634 fragment Substances 0.000 description 27
- 239000000872 buffer Substances 0.000 description 24
- 238000005192 partition Methods 0.000 description 22
- 238000009877 rendering Methods 0.000 description 19
- 238000004891 communication Methods 0.000 description 17
- 238000013507 mapping Methods 0.000 description 17
- 239000011159 matrix material Substances 0.000 description 17
- 238000012800 visualization Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 16
- 230000006399 behavior Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 13
- 238000003860 storage Methods 0.000 description 13
- 238000004422 calculation algorithm Methods 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 11
- 230000004913 activation Effects 0.000 description 10
- 230000002452 interceptive effect Effects 0.000 description 10
- 239000004926 polymethyl methacrylate Substances 0.000 description 10
- 239000004065 semiconductor Substances 0.000 description 10
- 230000009471 action Effects 0.000 description 9
- 238000013528 artificial neural network Methods 0.000 description 9
- 238000013519 translation Methods 0.000 description 9
- 238000009826 distribution Methods 0.000 description 8
- 238000005286 illumination Methods 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 230000001131 transforming effect Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 239000000463 material Substances 0.000 description 6
- 238000000844 transformation Methods 0.000 description 6
- 230000000007 visual effect Effects 0.000 description 6
- 241001122767 Theaceae Species 0.000 description 5
- 238000013135 deep learning Methods 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000001976 improved effect Effects 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 238000012549 training Methods 0.000 description 5
- 230000007704 transition Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 239000007788 liquid Substances 0.000 description 4
- 238000002156 mixing Methods 0.000 description 4
- 230000002829 reductive effect Effects 0.000 description 4
- 230000010076 replication Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 241000282326 Felis catus Species 0.000 description 3
- 210000004556 brain Anatomy 0.000 description 3
- 238000004040 coloring Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000011521 glass Substances 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 3
- 239000002184 metal Substances 0.000 description 3
- 229910052751 metal Inorganic materials 0.000 description 3
- 210000002569 neuron Anatomy 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000009966 trimming Methods 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 229920005372 Plexiglas® Polymers 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 239000000919 ceramic Substances 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000004883 computer application Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 210000003128 head Anatomy 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- XYDVHKCVOMGRSY-UHFFFAOYSA-N 4-(4-benzylphenyl)-1,3-thiazol-2-amine Chemical compound S1C(N)=NC(C=2C=CC(CC=3C=CC=CC=3)=CC=2)=C1 XYDVHKCVOMGRSY-UHFFFAOYSA-N 0.000 description 1
- 101000928034 Homo sapiens Proteasomal ubiquitin receptor ADRM1 Proteins 0.000 description 1
- 206010028813 Nausea Diseases 0.000 description 1
- 102100036915 Proteasomal ubiquitin receptor ADRM1 Human genes 0.000 description 1
- 241001074085 Scophthalmus aquosus Species 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000005260 alpha ray Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 235000009508 confectionery Nutrition 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 210000004087 cornea Anatomy 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000003745 diagnosis Methods 0.000 description 1
- 238000002059 diagnostic imaging Methods 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 208000002173 dizziness Diseases 0.000 description 1
- 230000035622 drinking Effects 0.000 description 1
- 238000009509 drug development Methods 0.000 description 1
- 238000007876 drug discovery Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 206010025482 malaise Diseases 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 150000002739 metals Chemical class 0.000 description 1
- 239000008267 milk Substances 0.000 description 1
- 210000004080 milk Anatomy 0.000 description 1
- 235000013336 milk Nutrition 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000012900 molecular simulation Methods 0.000 description 1
- 201000003152 motion sickness Diseases 0.000 description 1
- 230000008693 nausea Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 239000003973 paint Substances 0.000 description 1
- 238000001558 permutation test Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- 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
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
- G06N5/046—Forward inferencing; Production systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Image Generation (AREA)
Abstract
本发明提供了一种硬件中树遍历机制的前进和可编程超时的方法。在光线追踪器中,为了防止任何长时间运行的查询挂起图形处理单元,遍历协处理器提供抢占机制,其允许光线停止处理或提前超时。本文描述的示例非限制性实现提供了这样的抢占机制,包括前进保证,以及可以基于时间或基于周期的附加可编程超时选项。这些可编程选项为具有严格定时要求的应用(诸如虚拟现实(VR))的服务质量定时保证提供了手段。
Description
相关申请的交叉引用
本申请涉及以下共同转让的美国专利和专利申请,其全部内容通过引用并入本文:2014年12月8日提交的标题为“树状数据结构的短堆栈遍历(Short Stack Traversalof Tree Data Structures)”的美国申请No.14/563,872;标题为“基于块的层次包围盒(Block-Based Bounding Volume Hierarchy)”的美国专利No.9,582,607;标题为“用于基于块的层次包围盒的相对编码(Relative Encoding For A Block-Based BoundingVolume Hierarchy)”的美国专利No.9,552,664;2015年3月18日提交的标题为“光束追踪(Beam Tracing)”的美国专利No.9,569,559;标题为“基于多个局部坐标系的树状数据结构(Tree Data Structures Based on a Plurality of Local Coordinate Systems)”的美国专利No.10,025,879;2015年6月11日提交的标题为“基于块的几何数据无损压缩(Block-Based Lossless Compression of Geometric Data)”的美国申请No.14/737,343;以及以下与其同时提交的美国申请:
·(卷号:6610-0032/18-AU-0127)标题为“在没有着色器干预的相交口上进行连续层次包围盒遍历的方法(Method for Continued Bounding Volume HierarchyTraversal On Intersection Without Shader Intervention)”;
·(卷号:6610-0033/18-AU-0128),标题为“用于数据路径调度的高速缓存请求的有效分组方法(Method for Efficient Grouping of Cache Requests for DatapathScheduling)”;
·(卷号:6610-0034/18-SC-0141)标题为“鲁棒且高效的多处理器-协处理器接口(A Robust,Efficient Multiprocessor-Coprocessor Interface)”;
·(卷号:6610-0035/18-SC-0144)标题为“树遍历的查询特定行为修改(Query-Specific Behavioral Modification of Tree Traversal)”;
·(卷号6610-0036/18-SC-0145)标题为“保守水密光线三角相交口(Conservative Watertight Ray Triangle Intersection)”;以及
·(卷号6610-0037/18-SC-0149)标题为“处理无序不透明和α光线/图元交点的方法(Method for Handling Out-of-Order Opaque and Α Ray/PrimitiveIntersections)”。
技术领域
本技术涉及计算机图形,更具体地涉及光线追踪器。更具体地,本技术涉及计算机图形处理的硬件加速,包括但不限于光线追踪。更具体地,本文的示例非限制性技术涉及一种基于硬件的遍历协处理器,其有效地遍历加速数据结构,例如,用于实时光线追踪。更具体地,示例非限制性实现涉及使得处理器能够由于诸如抢占或可编程超时的原因而中断协处理器处理光线的机制,以及涉及抢占控制机制,其确保协处理器在响应于抢占请求停止执行之前保证前进。
背景技术
如果你在你之前环顾视觉场景,你会注意到你看到的一些最有趣的视觉效果是由光线与表面相互作用产生的。这是因为光是我们看到的唯一东西。我们看不到对象-我们看到的是对象反射或折射的光。我们可以看到的大多数对象都反射光(对象的颜色由对象反射哪部分光和吸收哪部分光确定)。闪亮的表面,诸如金属表面、光泽表面、陶瓷、液体表面和其他各种对象(甚至是人眼的角膜)都可以作为镜面反射光的镜子。例如,闪亮的金属表面将以与其碰撞(hit)表面时相同的角度反射光。对象还可以通过防止光线到达相对于光源为对象后面的其他表面来投射阴影。如果你环顾四周,你会注意到反射的数量和种类以及阴影的数量、种类和长度取决于许多因素,包括场景中光的数量和类型。单个点光源(例如单个遥远的灯泡)将产生单次反射和硬阴影。面光源(诸如窗户或光板)产生不同种类的反射高光和更柔和的阴影。多个光通常会产生多个反射和更复杂的阴影(例如,三个分离的点光源将产生三个阴影,这些阴影可以根据光相对于对象的位置而重叠)。
如果你在调查场景时移动你的头部,你会注意到反射在位置和形状上发生变化(阴影也一样)。通过改变你的视点,你可以改变你的眼睛检测到的光线的不同角度。这种情况瞬间发生-你移动你的头部则立即改变视觉场景。
喝一杯茶的简单行为是复杂的视觉体验。在你反射房间内的每个光之前,桌子上有光泽的陶瓷杯的各个光泽表面,杯子为每个光投下阴影。杯子中茶的移动表面本身是反光的。你可以看到茶叶表面上的光的小反射图像,甚至是茶叶表面部分的较小反射,在该处液体向上弯曲以与杯壁相交。杯壁还将阴影投射到杯子中的液体表面上。将杯子举到你的嘴处会导致这些反射和阴影随着你的视点的变化而移动和闪烁,并且随着液体表面因运动而变得波动而移动和闪烁。
我们认为这些复杂的反射和阴影是理所当然的。我们的大脑擅长解码阴影和反射的位置、大小和形状,并将它们用作视觉线索。这部分地是我们如何辨别对象相对于彼此的位置、我们如何区分一个对象与另一个对象以及我们如何了解对象的构成。不同的对象表面反射不同。硬金属的镜面(镜子类型)反射创建反射对象的图像,而粗糙表面的漫反射负责颜色并以更柔和的方式照亮对象。根据光照的类型,阴影可以是柔和的、漫射的或硬的和不同的,阴影的长度和方向将取决于光线相对于对象和我们眼睛的角度。
初学艺术家通常不会尝试显示反射或阴影。他们倾向于绘制没有阴影、没有反射或高光的平面场景。过去的计算机图形也是如此。
在过去的30年中,实时计算机图形已经取得了巨大的进步。随着20世纪80年代功能强大的图形处理单元(GPU)的发展,通过提供3D硬件图形管线,实时响应于用户输入基于纹理映射的多边形图元生成3D图形显示成为可能。这种实时图形处理器建立在称为扫描变换光栅化的技术之上,该技术是从单个点或透视图确定可见性的手段。使用这种方法,三维对象从几何图元构成的表面建模,通常是多边形(诸如三角形)。扫描变换过程建立图元多边形顶点并将其投影到视图平面上,并填充图元边缘内部的点。参见例如Foley,Van Dam,Hughes等,计算机图形:原理与实践(Computer Graphics:Principles and Practice)(第2版,Addison-Wesley 1995和第三版,Addison-Wesley 2014)。
长期以来,硬件一直用于确定每个多边形表面应如何着色和纹理映射,以及光栅化着色的、纹理映射的多边形表面以供显示。典型的三维场景通常由数百万个多边形构成。快速的现代GPU硬件可以实时响应于用户输入有效地处理用于每个显示帧(每1/30或1/60秒)的数百万个图元。得到的图形显示已经用于各种实时图形用户界面,包括但不限于增强现实、虚拟现实、视频游戏和医学成像。但传统上,这种交互式图形硬件尚无法准确地建模和描绘反射和阴影。
一些已经在该基本扫描变换光栅化方法上构建了其他技术,以允许实时图形系统在渲染阴影和反射时实现一定量的真实感。例如,纹理映射有时用于模拟3D场景中的反射和阴影。通常完成其的一种方法是从不同视角变换、投影和光栅化对象,将光栅化结果写入纹理映射,并对纹理映射进行采样以提供反射映射、环境映射和阴影。虽然这些技术已被证明是有用且适度成功的,但它们并不是在所有情况下都能很好地工作。例如,所谓的“环境映射”通常可能需要假设环境距离对象无限远。另外,环境映射对象通常可能无法反射自身。参见例如http://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter07.html。这些限制的结果是因为传统的计算机图形硬件-虽然足够快以实现出色的多边形渲染-但却无法执行精确逼真的反射和阴影所需的光可视化。有些人将反射和阴影的光栅/纹理近似比作AM收音机的视觉等效物。
存在另一种图形技术,其确实执行了用于反射和阴影的物理上真实的可见性确定。它被称为“光线追踪”。光线追踪是在20世纪60年代末开发出来的,并在20世纪80年代得到了改进。参见例如Apple,“一些用于固体的着色机器渲染的技术(Some Techniques forShading Machine Renderings of Solids)”(SJCC 1968)第27-45页;Whitted,“用于着色显示的改进的照明模型(An Improved Illumination Model for Shaded Display)”第343-349页,ACM通讯第23卷第6期(1980年6月);以及Kajiya,“渲染方程(The RenderingEquation)”,计算机图形学(SIGGRAPH 1986会议记录,第20卷,第143-150页)。从那时起,光线追踪已经用于非实时图形应用,例如设计和电影制作。任何看过“多莉去哪儿(FindingDory)”(2016)或其他皮克斯动画电影的人都看到了计算机图形的光线追踪方法的结果-即逼真的阴影和反射。参见例如Hery等人,“在皮克斯处迈向双向路径追踪(TowardsBidirectional Path Tracing at Pixar)”(2016)。
光线追踪是在各种渲染算法中使用的图元,包括例如路径追踪和梅特波利斯(Metropolis)光照传输。在示例算法中,光线追踪通过对穿过场景的光传输进行建模以使用射线光学计算所有全局效果(包括例如来自闪亮表面的反射)来模拟光的物理学。在光线追踪的这种使用中,当光线从可能多个光源到视点穿过三维场景时,可以尝试追踪数百或数千个光线中的每一个。通常,这些光线穿过场景相对于眼睛进行追踪,并针对场景中所有几何形状的数据库进行测试。光线可以从光向前追踪到眼睛,或从眼睛向后追踪到光,或者可以追踪它们以查看从虚拟相机开始以及从眼睛开始的路径是否具有清晰的视线。该测试确定最近的交点(以便确定眼睛可见的是什么)或者从对象表面朝向光源追踪光线以确定空间中是否存在阻止光传输到该点的任何干预。因为光线与现实中的光线相似,所以它们提供了许多真实的效果,使用过去三十年来实现的基于光栅的实时3D图形技术是不可能实现该效果的。因为来自场景内每个光源的每个照射光线在穿过场景中的每个对象时被评估,所以得到的图像看起来好像是在现实中拍摄的。因此,这些光线追踪方法长期以来一直用于专业图形应用,例如设计和电影,其中它们已经成为基于光栅的渲染的主导。
光线追踪的主要挑战通常是速度。光线追踪要求图形系统针对每个帧计算和分析入射到构成场景的每个表面(并且可能由其反射)的数百万条光线中的每一条。过去,这种大量的计算复杂性是不可能实时执行的。
现代GPU 3D图形管线在渲染着色的纹理映射表面处如此快速的一个原因是它们有效地使用了相干性。在传统的扫描变换中,假设所有一切都通过公共图像平面中的公共窗口观察并向下投射到单个有利点。每个三角形或其他图元通过图形管线发送并覆盖一些像素。可以为从该三角形渲染的所有像素共享所有相关计算。因此,对应于穿过窗口的相干视线的像素的矩形图块可以对应于在同一流式处理器中以锁步方式运行的线程组。假设落在三角形边缘之间的所有像素被假设是运行相同着色器的相同材料,并从相同纹理获取相邻的纹素组。相反,在光线追踪中,光线可以在公共点(光源或虚拟相机镜头)处开始或结束,但是当它们在场景中传播并与不同材料相互作用时,它们很快发散。例如,每条光线执行搜索以找到最近的对象。可以执行一些高速缓存和结果共享,但由于每条光线可能会碰到不同的对象,因此GPU传统上利用的、与纹理映射、着色三角形有关的相干性类型不存在(例如,不存在一个共同的有利点、窗口和图像平面用于光线追踪)。这使得光线追踪在计算上比其他图形方法更具挑战性-因此在交互的基础上执行起来要困难得多。
已经进行了许多研究以使得追踪光线的过程更加有效和及时。参见例如,Glassner,光线追踪介绍(Ray Tracing Introduction)(Academic Press Inc.,1989)。因为光线追踪中的每条光线本质上独立于其余光线进行评估,所以光线追踪被称为“令人尴尬地平行”。参见例如等人,实时渲染在章节9.8.2,412页(第三版.CRC出版社2008)。如上所述,光线追踪涉及针对场景中的所有对象和表面有效地测试每条光线。称为“加速数据结构”和相关过程的优化允许图形系统在加速数据结构上使用“分而治之(divide-and-conquer)”的方法来建立光线碰撞的表面以及光线未碰撞的表面。每条光线以个性化的方式遍历加速数据结构。这意味着将更多处理器专用于光线追踪可以提供近乎线性的性能提升。随着图形处理系统的并行性的增加,一些人开始设想可以实时执行光线追踪的可能性。例如,2000年中期在萨尔州大学的工作产生了一个早期的用于交互式光线追踪的专用硬件系统,其为使用几何着色器、顶点着色器和光照着色器提供了一定程度的可编程性。参见Woop等人的“RPU:用于实时光线追踪的可编程光线处理单元(RPU:AProgrammable Ray Processing Unit for Real Time Ray Tracing)”(ACM 2005)。作为另一示例,先进的渲染技术基于源自ARM1的AR250/350渲染处理器阵列开发了“RenderDrive(渲染器驱动)”,并通过自定义管线进行增强,以用于光线/三角形相交和SIMD向量和纹理数学,但没有固定功能遍历逻辑。参见例如http://www.graphicshardware.org/previous/www_2001/presentations/Hot3D_D aniel_Hall.pdf。
然后,在2010年,NVIDIA利用NVIDIA GPU和其他高度并行架构的高并行度来开发OptiXTM光线追踪引擎。参见Parker等人的“OptiX:通用光线追踪引擎(OptiX:A GeneralPurpose Ray Tracing Engine)”(ACM Transactions on Graphics,Vol.29,No.4,Article66,July 2010)。除了API(应用程序编程接口)的改进之外,OptiXTM提供的一项改进是改进用于查找光线和场景几何形状之间的交点的加速数据结构。这种加速数据结构通常是由光线追踪遍历算法使用的空间或对象分层,以有效地搜索可能与给定光线相交的图元。OptiXTM提供了许多不同的加速结构类型,可供应用程序选择。节点图中的每个加速结构可以是不同的类型,允许高质量静态结构与动态更新的静态结构的组合。
OptiXTM可编程光线追踪管线提供了显着的进步,但是通常仍然无法在相对便宜的计算平台上为复杂的3D场景提供对用户输入的实时交互响应。从那时起,NVIDIA一直在开发用于光线追踪的硬件加速能力。参见例如US9,582,607;US 9,569,559;US20160070820以及US20160070767。
鉴于用于响应于例如用户输入渲染任意复杂度的高质量图像的真实交互式实时光线追踪图形处理系统的巨大潜力,进一步的工作是可能的并且是期望的。
一些光线处理可能需要太长时间或可能需要中断。
光线追踪通常涉及针对预先构建的加速结构(AS)执行光线相交查询,有时更具体地称为层次包围盒(BVH)。根据AS的构建、场景中的图元数量和光线的方向,遍历通过专门的遍历硬件可能在任何地方进行几个到几百到甚至几千个周期。另外,如果周期或循环无意中(或者甚至故意在危险分子的情况下)编码到BVH中,则遍历可能变为无限。例如,BVH可能定义导致“死循环”的遍历。
为了防止任何长时间运行的查询挂起GPU,示例性实现树遍历单元(TTU)700提供用于抢占的机制,其将允许光线提前超时(timeout)。这里描述的示例非限制性实现提供了这样的抢占机制,包括前进保证,以及基于此构建的附加可编程超时选项。这些可编程选项为具有严格定时要求的应用(诸如,虚拟现实(VR))提供了服务质量定时保证的手段。
附图说明
图1示出了示例性非限制性光线追踪图形系统。
图2A示出了示例性镜面对象。
图2B示出了包围盒(Bounding Volume)内的示例性对象。
图2C示出了图2B的包围盒的示例性盒细分。
图2D、图2E和图2F示出了包围盒的盒细分的示例性进一步水平,以创建层次包围盒(BVH)。
图2G示出了由图元表面组成的对象的示例部分,在这种情况下是三角形。
图3A-图3C示出了用于确定光线是否穿过包含几何形状的包围盒以及光线是否与几何形状相交的示例性简化光线追踪测试。
图4示出了示例性光线追踪流程图。
图5A-图5C示出了示例性不同的光线-图元相交场景。
图6A和图6B示出了纹理映射如何影响光线-图元相交结果的示例。
图7A和图7B示出了光线实例变换。
图8A示出了示例性非限制性层次包围盒(BVH)。
图8B示出了图形或树状的示例性加速数据结构。
图9示出了包括树遍历单元(TTU)的简化示例性非限制遍历协处理器。
图10A示出了示例性非限制性光线追踪着色管线流程图。
图10B和图10C示出了更详细的光线追踪管线。
图11A-图11H合在一起是活动挂图动画,其示出了具有保证前进的TTU抢占机制的粗略类比。
图12示出了TTU响应于接收到抢占信号而执行的示例过程。
图12A示出了前进测试的示例流程图。
图13是可编程TTU光线超时布置的示例非限制性流程图。
图13A是可选可编程TTU光线超时布置的示例非限制性流程图。
图14示出了用于生成图像的示例性流程图。
图15示出了示例性并行处理单元(PPU)。
图16示出了示例性存储器分区单元。
图17示出了图15的并行处理单元内的示例通用处理集群(GPC)。
图18是由图17的GPC实现的图形处理管线的概念图。
图19和图20示出了示例性流式多处理器。
图21是使用图15的PPU实现的处理系统的概念图。
图22展开图21以示出额外的互连设备。
具体实施方式
本文的技术提供硬件能力,其将光线追踪加速到这样的程度,即它将光线追踪的能力带到游戏和其他交互式实时计算机图形,最初在阴影和反射中实现高效质量并最终实现全局照明。在实践中,这意味着通过相同图形渲染系统上的软件可能达到的数量级的因子或更高的因子来加速光线追踪。
更详细地,示例性非限制性技术提供了用于加速光线追踪的专用硬件。在非限制性实施例中,硬件协处理器(本文称为“遍历协处理器”或在一些实施例中称为“树遍历单元”或“TTU”)加速支持交互式光线追踪的某些过程,包括光线-包围盒相交测试、光线-图元相交测试和光线“实例”变换。
在一些非限制性实施例中,遍历协处理器对加速数据结构执行查询,以用于在潜在大规模并行流式多处理器(SM)上运行的进程。遍历协处理器遍历加速数据结构以发现关于给定光线如何与加速数据结构描述或表示的对象交互的信息。对于光线追踪,与例如在运行不同类型的线程(例如,顶点线程和像素线程)的逻辑管线阶段之间执行一次操作的固定功能单元相比,遍历协处理器是可调用的。
在一些非限制性实施例中,加速数据结构包括递归地封装越来越小的包围盒细分的包围盒的层次(层次包围盒或BVH)。最大容量的包围盒可以称为“根节点”。包围盒的这种层次的最小细分(“叶节点”)包含项目(item)。项目可以是定义对象表面的图元(例如,诸如三角形的多边形)。或者,项目可以是球体,其包含作为项目存在的全新级别的世界,因为它尚未添加到BVH(想想猫身上的衣领魅力来自“黑衣人”,其中包含它里面的整个微型星系)。如果项目包括图元,则遍历协处理器针对图元测试光线,以确定与光线相交的对象表面以及沿着光线可见的对象表面。
遍历协处理器针对宽范围的包围盒执行每条光线的测试,并且可以剔除不与该光线相交的任何包围盒。从界定场景中所有一切的根节点开始,遍历协处理器针对较小(可能重叠)的子包围盒测试每条光线,这又界定了BVH的后代分支。光线跟随光线碰撞其他节点的包围盒的子指针,直到达到BVH的叶或终端节点(盒)。一旦遍历协处理器遍历加速数据结构以到达包含几何图元的终端或“叶”节点,它就执行加速的光线-图元相交测试,其确定光线是否与该图元相交(因此与图元定义的对象表面相交)。光线图元测试可以提供有关与光线相交的图元的附加信息,其可用于确定着色和可视化所需的表面的材料属性。通过加速数据结构的递归遍历使得遍历协处理器能够发现与光线相交的所有对象图元,或者与光线相交的最接近的(从视点的角度看)图元(在某些情况下,它是沿着光线的视点唯一可见的图元)。
遍历协处理器还加速每条光线从世界空间到对象空间的变换,以获得图元的越来越精细的包围盒封装,并减少场景上的那些图元的复制。在场景中不同位置、方向和比例下多次复制的对象可以在场景中表示为实例节点,其将世界空间BVH中的包围盒和叶节点与可以应用于世界空间光线的变换相关联,以将其变换为对象坐标空间,以及表示为指向对象空间BVH的指针。这避免了在世界空间中多次复制对象空间BVH数据,从而节省了存储器和相关的存储器访问。实例变换通过将光线变换为对象空间而不是要求将几何形状或层次包围盒变换为世界(光线)空间来提高效率,并且还与图形处理执行的以使图元可视化的附加的传统光栅化过程兼容。
因此,目前公开的非限制性实施例提供了遍历协处理器,3D图形处理管线中的一个或一组流式多处理器SM的新子单元。为了理解遍历协处理器在整体图片中适合的位置,理解大多数或所有现代光线追踪器所采用的算法的一些基本原理可能会有所帮助。但是应该指出的是,本文的技术提供了一种通用能力,用于为在GPU中运行的线程确定沿着指定方向从给定点开始的最近的可见事物,或者两个点之间是否有任何东西。这种能力的一个常见用例是在开始追踪来自已经在三角形上光栅化的点的光线的过程中使用传统扫描变换技术。所公开的技术可以但不一定取代或替代扫描变换技术,并且通常可以增强它并且与扫描变换技术结合使用以增强图像的照片般真实的反射、阴影和其他效果。
光线追踪技术
通常,光线追踪是一种渲染方法,其中光线用于确定场景中各种元素的可见性。光线追踪可用于确定沿光线是否有任何对象可见(例如,测试几何图元上的阴影点与光源上的点之间的遮挡物),并且还可用于评估反射(例如,可以涉及执行遍历以确定沿着视线的最近的可见表面,使得在流式处理器上运行的软件可以评估与被碰撞的内容相对应的材料着色功能-这反过来可以根据相交的对象的材料特性发射一条或更多条附加光线到场景中),以确定沿着光线返回眼睛的光。在经典的Whitted式光线追踪中,光线从视点通过像素网格射入场景,但其他路径遍历也是可能的。通常,针对每条光线,找到最近的对象。然后可以通过将光线从其射到场景中的每个光源并且发现其间是否有任何对象来确定该交点被照亮或处于阴影中。不透明对象阻挡光线,而透明对象则会使光线衰减。其他光线可以从交点产生。例如,如果相交表面是有光泽的或镜面的,则在反射方向上产生光线。光线可以接受相交的第一个对象的颜色,而其又测试阴影的交点。递归地重复该反射过程,直到达到递归限制或后续反弹的潜在贡献低于阈值。也可以在透明固体对象的折射方向上产生光线,并再次递归地评估。参见上文引用的等人。因此,光线追踪技术允许图形系统开发物理上正确的反射和阴影,其不遭受扫描变换技术的限制和伪影。
遍历协处理器
遍历协处理器执行的基本任务是针对场景中的所有图元(在一个实施例中通常是三角形)测试光线,并报告最接近的碰撞(根据沿光线测量的距离)或简单地报告遇到的第一(不一定最近)碰撞,这取决于用例。简捷算法将是O(n)强力搜索。然而,通过预先处理场景几何形状并提前构建合适的加速数据结构,可以将平均情况复杂度降低到O(log n)。在光线追踪中,当使用加速数据结构时,找到光线最接近(或针对阴影任何)交点的时间通常是n个对象的阶数O(log n)。例如,通常用于现代光线追踪加速数据结构的类型的层次包围盒(BVH)通常具有O(log n)搜索行为。
层次包围盒
现代光线追踪器最常使用的加速数据结构是包括嵌入的轴对齐包围盒(AABB)的层次包围盒(BVH)。BVH的叶节点包含要相交测试的图元(例如,三角形)。BVH通常由图形或树形结构数据表示来表示。在这种情况下,遍历协处理器可以称为“树遍历单元”或“TTU”。
给定BVH,光线追踪相当于树搜索,其中光线所访问的树中的每个节点具有用于每个后代分支或叶的包围盒,并且光线仅访问其相应包围盒与光线相交的后代分支或叶。通过这种方式,只有少数图元必须明确地进行相交测试,即那些驻留在与光线相交的叶节点中的图元。在示例性非限制性实施例中,遍历协处理器加速树遍历(包括光线-盒测试)和光线-图元测试两者。作为遍历的一部分,遍历协处理器还可以处理“实例变换”-将光线从世界空间坐标系变换为实例网格(对象空间)的坐标系,例如,以便避免将图元顶点变换到世界空间的计算复杂性。它可以以MIMD(多指令,多数据)方式实现,这意味着在遍历协处理器内部一次独立地处理光线。
示例的非限制性实时交互式光线追踪系统
图1示出了用于使用场景或一个或更多个对象的三维(3D)数据生成图像的示例的实时光线交互式追踪图形系统100。系统100包括输入设备110、一个或更多个处理器120、一个或更多个图形处理单元(GPU)130、存储器140和一个或更多个显示器150。图1中所示的系统可以采用任何形状因素,包括但不限于个人计算机、智能手机或其他智能设备、视频游戏系统、可穿戴虚拟或增强现实系统、基于云的计算系统、车载图形系统,片上系统(SoC)等。
处理器120可以是多核中央处理单元(CPU),其可操作以实时交互式响应于输入设备110而执行应用程序,其输出包括用于在显示器150上显示的图像。显示器150可以是任何种类的显示器,例如固定显示器、头戴式显示器(诸如显示器眼镜或护目镜)、其他类型的可穿戴显示器、手持显示器、车载显示器等。例如,处理器120可以基于从输入设备110(例如,操纵杆、惯性传感器、环境光传感器等)接收的输入执行应用程序,并指示GPU 130生成示出应用程序进展的图像以在显示器150上显示。
基于处理器120上的应用程序的执行,处理器可以发出用于GPU 130的指令,以使用存储在存储器140中的3D数据生成图像。GPU 130包括用于实时加速图像生成的专用硬件。例如,GPU 130能够实时处理用于数千或数百万个图元(多边形)的信息,这是由于GPU能够比传统软件-驱动的CPU更快地执行重复和高度并行的专用计算任务,例如多边形扫描变换。例如,与处理器120不同,其可具有多个核心,具有可一次处理少量软件线程的大量高速缓存存储器,GPU 130可包括数百或数千个处理核心或并行运行的“流式多处理器”(SM)132。
在一个示例性实施例中,GPU 130包括多个可编程流式多处理器(SM)132,以及包括图元引擎134和光栅引擎136的基于硬件的图形管线。GPU 130的这些组件被配置为使用称为“扫描变换光栅化”的技术执行实时图像渲染,以在二维显示器150上显示三维场景。在光栅化中,3D场景的几何构建块(例如,点、线、三角形、四边形、网格等)被映射到显示器的像素(通常通过帧缓冲存储器)。
GPU 130将3D模型的几何构建块(即,诸如三角形之类的多边形图元)变换为2D图像的像素,并为每个像素分配初始颜色值。图形管线可以通过定义或调整像素的颜色值来将着色、透明度、纹理和/或颜色效果应用于图像的部分。最终像素值可以经过抗锯齿、过滤并提供给显示器150以供显示。多年来,许多软件和硬件的改进使用光栅化技术以一个或更多个显示器150上的高显示分辨率(例如4096x2160像素或更高)在实时图形(即每秒30至60帧)所需的帧速率下提高了主观图像质量。
遍历协处理器添加到架构
为了使GPU 130能够以高效的方式实时地执行光线追踪,向GPU提供了耦合到一个或更多个SM 132的遍历协处理器138。遍历协处理器138包括被配置为执行通常在光线追踪算法中利用的操作的硬件组件。遍历协处理器138的目标是将光线追踪中使用的操作加速到这样的程度,即它将光线追踪的能力带到实时图形应用(例如,游戏)中,从而实现高质量的阴影、反射和全局照明。如下面更详细讨论的,遍历协处理器138的结果可以与GPU 130中执行的其他图形相关操作一起使用或作为其替代。
在所示的示例性架构中,称为“遍历协处理器”138的新硬件组件用于加速某些任务,包括但不限于光线追踪。光线追踪是指将光线投射到场景中,并确定该光线是否以及在哪儿与场景的几何形状相交。这种基本的光线追踪可见性测试是计算机图形学中作为各种渲染算法和技术基础的基础图元。例如,光线追踪可以与光栅化和z缓冲一起使用或作为光栅化和z缓冲的替代,用于采样场景几何形状。它还可以用作环境映射和阴影纹理的替代(或与之结合),以产生比通过纹理技术或其他光栅“黑客”实现的更逼真的反射、折射和阴影效果。为了克服可以通过光栅化实现的图像质量的限制,系统100还可以使用光线追踪技术生成整个图像或图像的部分。光线追踪也可以用作基本图元,以精确地模拟基于物理的渲染算法中的光传输,例如路径追踪、光子映射、Metropolis光传输和其他光传输算法。
更具体地,SM 132和遍历协处理器138可以协作,以将光线投射到3D模型中并确定该光线是否以及在何处与模型的几何形状相交。光线追踪直接模拟穿过虚拟环境或场景的光。光线相交的结果与表面纹理、观察方向和/或光照条件一起用于确定像素颜色值。由与遍历协处理器138一起工作的SM 132执行的光线追踪允许计算机生成的图像以与现实世界的照片或视频无法区分的方式捕获阴影、反射和折射。由于光线追踪技术部分地由于需要追踪的大量光线而比光栅化更加计算密集,因此遍历协处理器138能够在硬件中加速该过程的某些计算密集度更高的方面。
在本文的示例非限制性技术中,遍历协处理器138加速光线盒测试和光线图元测试两者。作为遍历的一部分,它还可以处理至少一级实例变换,将光线从世界空间坐标系变换为实例网格的坐标系。在示例非限制性实施例中,遍历协处理器138以MIMD方式完成所有这些操作,这意味着在遍历协处理器内部独立地处理光线一次。
在示例非限制性实施例中,遍历协处理器138作为SM(流式多处理器)132的服务方(协处理器)操作。换句话说,在示例非限制性实施例中,遍历协处理器138不独立地操作,而是遵循SM 132的命令以比SM 132自身执行更有效地执行某些计算密集的光线追踪相关任务。
在所示的示例中,遍历协处理器138通过SM 132指令接收命令并将结果写回SM寄存器文件。对于许多常见用例(例如,具有至多一级实例化的不透明三角形),遍历协处理器138可以服务于光线追踪查询而无需与SM 132进一步交互。更复杂的查询(例如,除了三角形或多级实例化之外涉及经过α测试的三角形、图元),可能需要多次往返。除了追踪光线之外,遍历协处理器138还能够执行更一般的空间查询,其中AABB或两个AABB(我们称之为“波束”)之间的挤压盒(extruded volume)取代光线。因此,虽然遍历协处理器138特别适合于加速与光线追踪相关的任务,但它也可用于执行除光线追踪之外的任务。
除了遍历协处理器138之外,用于支持图1的系统100的示例非限制性技术还为多个单元提供了额外的加速光线追踪增强以及用于BVH构建的大量努力。BVH构建不需要是硬件加速的(尽管在一些非限制性实施例中可以是),而是可以使用在SM 132和/或CPU 120和/或其他开发系统上(例如,在应用程序开发期间)运行的高度优化的软件例程来实现。以下说明描述了遍历协处理器138的软件可见行为、与周围单元(SM 132和存储器子系统)的接口以及作为完整光线追踪解决方案的一部分的附加特征,例如对SM 132组和存储器高速缓存系统的某些增强等。
遍历加速数据结构
加速光线追踪的好方法是使用加速数据结构。加速数据结构以有助于快速确定特定光线很可能与之相交的对象的哪个部分以及快速地拒绝光线不会与之相交的场景的大部分的方式表示对象或场景的3D模型。层次包围盒(BVH)数据结构是一种类型的加速数据结构,其可以帮助减少要测试相交的数量。BVH数据结构表示具有包围盒的场景或对象,并将包围盒细分为越来越小的包围盒,其终止于包含几何图元的叶节点。包围盒是分层的,这意味着最高级别(level)包含它下面的级别,该级别包含它下面的下一级别,依此类推。在一个实施例中,叶节点可能潜在地与层次包围盒中的其他叶节点重叠。
为了说明层次包围盒如何工作,图2A-图2G示出了递归地细分为越来越小层次的包围盒的茶壶。图2A示出了茶壶对象,图2B示出了包围整个茶壶的包围盒202(在这种情况下是盒子、立方体或长方体)。可以通过其顶点有效地限定的包围盒202提供对象的空间位置的指示,并且通常尺寸略大于对象。
加速结构构造的第一阶段获取所引用几何形状的包围盒。这是通过对对象中的每个几何图元执行包围盒程序来实现的,该包围盒程序返回其输入图元的保守轴对齐包围盒,例如图2B中所示的盒202。使用这些包围盒作为加速结构的基本图元,提供了针对任意用户定义的几何形状(包括单个结构内的几种类型的几何形状)追踪光线的必要抽象。因为在图2B中,包围盒202大于并且完全包含茶壶,不与包围盒相交的光线不能与茶壶相交,尽管与包围盒相交的光线可能或可能不与茶壶相交。因为包围盒202容易由其在3D空间中的顶点的x,y,z坐标定义,并且光线由其在3D空间中的x,y,z坐标定义,所以用于确定光线是否与包围盒202相交的光线-包围盒测试是简单的(尽管可以使用一些变换来调整到不同的坐标系,如下面将解释的)。
图2C示出了细分为较小的内含(contained)包围盒的包围盒202。虽然为了说明的目的而在此示出的细分方案是所谓的8进制细分或“八叉树”,其中每个盒被细分为八个统一尺寸的较小盒,许多其他空间层次和细分方案是已知的,例如二进制树、四进制树、k-d树、二进制空间分区(BSP)树和层次包围盒(BVH)树。参见例如USP 9,582,607。
图2C中所示的每个细分的包围盒可以进一步细分。图2D示出了图2C的细分盒204中的一个被进一步细分以提供额外细分的封装的包围盒。如图2D所示,一些细分的包围盒包括茶壶的部分而一些不包括。不包含茶壶的部分的盒不会进一步细分,因为进一步的细分不提供关于茶壶的进一步空间信息。已经细分的包含茶壶的至少一部分的包围盒可以进一步递归地细分-就像Seuss博士的帽子里的猫回来啦(1958年)的帽子里出现的一连串越来越小的猫一样。包含几何形状的包围盒202内的空间的部分被递归地细分,以允许遍历协处理器138使用盒细分来有效地发现几何形状相对于任何给定光线的位置。可以注意到,虽然盒的空间细分或主动细分是可能的,但许多实现将创建提前定义盒和子盒的层次结构。在这种情况下,构建器通常可以从各个三角形向上构建层次,而不是从整个场景向下构建。向上构建意味着你不需要确定某个细分的盒是否包含任何内容,因为根据定义它包含在盒细分层次中位于其下面的内容。
图2E示出了另外的这样的包围盒204细分为另一个较小的内含包围盒206,该包围盒206在该示例中仅包含茶壶的壶嘴加上茶壶的壁上的另一个表面,并且图2F示出了将包围盒206附加细分为更小的内含细分208,该细分208封装茶壶的壶嘴的末端。取决于构建BVH的方式,可以根据需要不断更进一步细分包围盒208-并且遍历协处理器138使图1系统100能够有效地将BVH向下遍历到任何任意细分级别。递归细分的数量和配置将取决于被建模的3D对象的复杂性和配置以及其他因素,例如期望的分辨率、对象距视点的距离等。
在某些细分级别(对于BVH的不同部分可以是不同级别),遍历协处理器138遇到构成被建模的封装对象的几何形状。使用树的类比,连续的盒细分是树干、分枝、树枝和细枝,并且最终在树的尖端即叶上显示几何形状。在这种情况下,图2G显示了由几何图元的示例性网格定义的茶壶壶嘴的表面。所示的几何图元是三角形,但是可以使用其他几何图元,例如四边形、线条、矩形、二次曲面、补丁或熟悉现有技术的人所知的其他几何图元(在一个实施例中,这样的其他类型的图元可以表示为或变换为三角形)。网格中的几何图元表示被建模的对象的3D表面的形状。此处示出的示例是网格,但是所包围的几何形状可以包括不连续的几何形状,例如可能未连接的粒子。在示例性非限制性实施例中,遍历协处理器138还利用该几何形状加速光线相交测试,以快速确定任何给定光线碰撞哪些三角形。确定光线-图元相交包含将每个图元的顶点的空间xyz坐标与光线的xyz坐标进行比较,以确定图元定义的光线和表面是否占据相同的空间。光线-图元相交测试可能是计算密集型的,因为可能要测试许多三角形。例如,在图2G所示的网格中,仅茶壶的壶嘴由超过一百个三角形组成-尽管在一些实现方式中可以更有效地进一步进行盒细分,从而限制在任何此类“叶节点”到类似16或更少的东西的三角形的数量。
如上所述,光线追踪程序确定场景的什么几何图元与光线相交。然而,由于3D场景中的大量图元,测试每个几何图元的相交可能不是有效或可行的。加速数据结构(例如BVH)允许快速确定哪些包围盒可以被忽略,哪些包围盒可以包含相交的几何图元,以及哪些相交的几何图元对于可视化而言是重要的而哪些不是。
光线相交测试
图3A-图3C示出了应用于包括三角形网格320的图2G包围盒208的光线追踪。图3A示出了包括包围盒310和315的虚拟空间中的光线302。为了确定光线302在网格320中是否与一个或更多个三角形相交,每个三角形可以直接针对光线302进行测试。但是为了加速该过程(因为该对象可以包含数千个三角形),首先针对包围盒310和315测试光线302。如果光线302不与包围盒相交,则它不与包围盒内部的任何三角形相交,并且可以针对该光线忽略包围盒内部的所有三角形。因为在图3A中,光线302未碰撞(miss)了包围盒310,所以不需要对该包围盒内的网格320的三角形进行相交测试。虽然包围盒315与光线302相交,但是包围盒315不包含任何几何形状,因此不需要进一步的测试。
另一方面,如果光线(诸如图3B中所示的光线304)与包含几何形状的包围盒310相交,则光线可能与或可能不与包围盒内的几何形状相交,因此需要对几何形状本身执行进一步的测试以找到可能的相交。因为图3B和图3C中的光线304、306与包含几何形状的包围盒310相交,所以需要执行进一步的测试以确定包围盒内部的任何(以及哪些)图元是否相交。在图3B中,对与图元的相交的进一步测试将指示即使光线304穿过包围盒310,它也不与包围盒所包围的任何图元相交(或者,如上所述,包围盒310可以进一步进行盒细分,以便可以使用包围盒相交测试来揭示光线不与任何几何形状相交,或者更具体地,光线可以与哪些图元相交)。
图3C示出了包围盒310与光线306相交并且包含与光线306相交的几何形状的情况。遍历协处理器138测试光线306和各个图元之间的相交,以确定光线与哪些图元相交。
光线追踪操作
图4是概述遍历协处理器138如上所述与一个或更多个SM 132协作执行的示例性光线追踪操作的流程图。图4的操作由遍历协处理器138和与其交互的SM 132协作执行。因此,遍历协处理器138可以从SM 132接收光线的标识,并且遍历状态列举光线必须穿过的一个或更多个BVH中的一个或更多个节点。遍历协处理器138确定光线与BVH数据结构的哪些包围盒(“光线-complet”测试512)相交,并随后确定光线是否与相交的包围盒中的一个或更多个图元相交以及与哪些三角形相交(“光线-图元测试”520)。在示例性非限制性实施例中,“complets”(压缩小树)指定层次包围盒的根节点或内部节点(即,盒),其具有子项(child),子项是其他complet或每个complet的单个类型的叶节点。
首先,遍历协处理器138检查光线的遍历状态。如果遍历协处理器138保持用于光线的堆栈为空,则遍历完成。如果堆栈顶部存在条目,则遍历协处理器138向存储器子系统发出请求以检索该节点。然后,遍历协处理器138执行包围盒测试512以确定BVH数据结构的包围盒是否与SM 132指定的特定光线相交(步骤512、514)。如果包围盒测试确定包围盒未与光线相交(步骤514中为“否”),则不需要对可视化执行任何进一步测试,并且遍历协处理器138可以将该结果返回到请求SM 132。这是因为如果光线未碰撞包围盒(如图3A中关于包围盒310),则光线将不会碰撞被测试的包围盒内的所有其他更小包围盒以及包围盒包含的任何图元。
如果由遍历协处理器138执行的包围盒测试显示包围盒与光线相交(步骤514中为“是”),则遍历协处理器确定包围盒是否可以细分为更小的包围盒(步骤518)。在一个示例性实施例中,遍历协处理器138本身不一定执行任何细分。相反,BVH中的每个节点具有一个或更多个子节点(其中每个子节点是BVH中的叶或分支)。对于每个子节点,都有一个包围盒和一个指向分支或叶节点的指针。当光线使用遍历协处理器138处理节点时,它正在针对节点的子节点的包围盒测试自身。光线只将堆栈条目推送到其堆栈上,用于那些其代表性包围盒被碰撞的分支或叶。当光线在示例性实施例中获取节点时,它不测试节点的包围盒-它针对节点的子节点的包围盒进行测试。遍历协处理器138按照由光线配置确定的顺序将其包围盒被光线碰撞的节点推送到光线的遍历堆栈上。例如,可以按照节点在存储器中出现的顺序或者按照它们沿着光线的长度出现的顺序或以某种其他顺序将节点推送到遍历堆栈。如果存在包围盒的进一步细分(步骤518中为“是”),则访问包围盒的那些进一步细分,并且对每个得到的细分包围盒执行包围盒测试,以确定哪个细分包围盒与光线相交以及哪个不与光线相交。在该递归过程中,可以通过测试514消除一些包围盒,而其他包围盒可以导致通过遍历协处理器138递归地应用步骤512-518来对越来越进一步的细分进行相交测试。
一旦遍历协处理器138确定与光线相交的包围盒是叶节点(步骤518中为“否”),遍历协处理器执行图元(例如,三角形)相交测试520,以确定光线是否与相交的包围盒中的图元相交以及光线与哪些图元相交。因此,遍历协处理器138执行相交的后代分支节点的深度优先遍历,直到到达叶节点。遍历协处理器138处理叶节点。如果叶节点是图元范围,则遍历协处理器138针对光线测试它们。如果叶节点是实例节点,则遍历协处理器138应用实例变换。如果叶节点是项目范围,则遍历协处理器138将它们返回到请求SM 132。在示例性非限制性实施例中,SM 132可以命令遍历协处理器138执行不同种类的光线-图元相交测试并取决于来自应用程序(或应用程序在其上运行的软件堆栈)的操作报告不同的结果,并由SM中继到TTU。例如,SM 132可以命令遍历协处理器138报告由相交测试揭示的最近的可见图元,或者报告与光线相交的所有图元,而不管它们是否是最近的可见图元。SM 132可以将这些不同的结果用于不同类型的可视化。一旦遍历协处理器138完成处理叶节点,就可以有其他分支节点(先前推送到光线的堆栈上)进行测试。
多个相交
更详细地,如图3C所示,任何给定的光线可以与包围盒内的多个图元相交。给定图元内的光线相交是否对可视化产生影响取决于该图元的属性和位置以及SM 132正在执行的可视化过程。例如,图元可以是不透明的、透明的或部分透明的(即半透明的)。不透明的图元将阻挡光线穿过图元,因为眼睛无法透过图元的不透明表面看到。透明图元将允许光线通过(因为眼睛可以透过透明图元看到),但情况可能更复杂。例如,透明图元可能具有镜面特性,这会导致光线的某些部分反射(考虑来自窗玻璃的反射),光线的其余部分通过。其他透明图元用于提供纹理映射到的表面。例如,树的每个个体的叶可以由透明图元建模,叶的图像被纹理映射到该透明图元上。
图5A-图5C示出了使用三个三角形的示例的一些场景,这三个三角形被假设在相同的包围盒中并且每个三角形与光线相交。图5A示出了朝向这三个三角形的光线,其中光线相对于不透明的视点遇到第一个三角形。因为“前方”(从眼睛的光线方向看)相交的三角形是不透明的,所以三角形将阻挡光线,因此光线也不会到达其他三角形,即使光线在空间上与它们相交。在该示例中,在识别出不透明三角形的相交之后,可以忽略(剔除)从视点看的不透明三角形“后面”的三角形,因为“前”不透明三角形沿着光线隐藏了用户视图中的其他三角形。在图5A-图5C中用虚线表示剔除。在这种情况下,遍历协处理器138可能仅需要向SM 132报告第一不透明三角形的标识。
图5B示出了指向相同三个三角形的光线,但是现在最近的可见三角形是部分透明的而不是不透明的。因为最近的可见相交三角形是至少部分透明的,所以光线可以穿过它以碰撞它后面的不透明三角形。在这种情况下,不透明的三角形将通过部分透明的三角形可见,但会阻挡用户沿着光线的第三三角形的视野。本文,遍历协处理器138可以向SM 132报告两个前面三角形的标识,但是不报告第三个被剔除的三角形,即使光线在空间上与该第三三角形相交。在本文发现顺序可能很重要。在α和不透明三角形的情况下,如果首先发现不透明,则遍历协处理器138将不透明三角形返回到具有遍历状态的SM 132,该遍历状态将在α三角形处重新开始测试。虽然本文暗示α意味着透明,但它实际上意味着“将我返回到SM 132并让SM决定如何处理它。”例如,可以根据纹理或函数修剪α三角形,以便三角形的部分被切掉(即,不存在、不透明)。遍历协处理器138不知道SM 132将如何处理α三角形(即,它不处理与修剪的三角形不同的透明三角形)。因此,α三角形可能阻挡或可能不阻挡或着色沿着光线从点到达它们之外的光,并且在示例性实施例中,它们需要SM 132干预来处理/确定那些事物。
图5C示出了光线遇到的前两个三角形是部分透明的场景。因为第一和第二相交三角形是至少部分透明的,所以光线将穿过第一和第二三角形以照射在也相交的第三不透明三角形上。因为第三个相交的三角形是不透明的,它将阻挡光线,并且光线不会照射在第三个三角形后面的任何其他三角形上,即使它们可能在空间上与光线相交。在这种情况下,遍历协处理器138可以将所有三个三角形报告给SM 132,但不需要报告不透明三角形后面的任何其他三角形,因为不透明三角形阻挡光线到达那些附加三角形。
然而,在一些模式中,SM 132可能需要知道与光线相交的所有三角形的身份,而不管它们是不透明的还是透明的。在那些模式中,遍历协处理器138可以简单地执行相交测试并返回光线在空间上与之相交的所有三角形的身份(在这种模式中,遍历协处理器将返回图5A-图5C中所示的所有三种情形的相同相交结果),并允许SM 132对其进行分类-或者在某些情况下命令遍历协处理器138对这些相同的三角形进行更多测试。
如下面将更详细讨论的,当光线与不透明三角形相交时,遍历协处理器138可以在某些操作中被编程以将被测光线的长度减小到不透明三角形相交的位置,因此它将不报告相交三角形“后面”的任何三角形。当确定部分透明三角形与光线相交时,遍历协处理器138将返回光线照射到的更完整的三角形列表以用于可视化,并且请求SM 132可以执行进一步处理以基于例如三角形的任何纹理或其他属性确定光线是否将被阻挡、传递或部分传递以及部分反射。在示例性实施例中,遍历协处理器138不能访问三角形的纹理属性,因此不会尝试确定关于那些属性的可视化。
纹理或其他表面修改
例如,图6A和图6B示出了透明三角形610,其具有应用于三角形的叶的纹理615。人们可以想到一个由树脂玻璃制成的三角形,上面有一片叶贴花。如图6A所示,光线620在所施加的纹理615之外的点处与透明三角形610相交。因为光线620与所施加的纹理615外部的三角形相交,所以纹理将不会阻挡光线620并且光线将会不受阻挡地穿过透明三角形610。这就像是能够透过未经叶贴花覆盖的树脂玻璃三角形的部分看到。注意,在一个示例性实施例中,SM 132进行可见性确定,因为遍历协处理器138不一定能够访问关于叶贴花的信息。遍历协处理器138通过向SM返回光线与之相交的三角形的识别以及关于该三角形的属性的信息来帮助SM 132。
在图6B中,光线630与施加纹理615的透明三角形相交。SM 132将基于纹理615将阻挡光线630还是允许光线630通过来确定遍历协处理器138的后续遍历是否是必要的。如果光线630被纹理615阻挡,则透明三角形610后面的其他三角形(其可能已经与光线630相交)将被纹理阻挡并且不会有助于沿着光线的可视化。在本文的示例性非限制性实施例中,遍历协处理器138不能访问纹理信息,因此它不会尝试加速该确定。遍历协处理器138可以例如将光线和对象内的各种三角形之间的所有相交返回到请求SM 132,然后SM可以使用图元引擎134进行进一步的光线追踪可视化确定。在其他示例性实施例中,遍历协处理器138可以通过与纹理映射单元和图元引擎134内的3D图形管线的其他部分交互来加速这些测试中的一些或全部,以进行必要的可视化确定。
协调变换
图2A-图3C仅涉及单个对象,即茶壶。正如你现在所在的房间包含多个对象一样,大多数3D场景都包含许多对象。例如,包含茶壶的3D场景可能还包含杯子、碟子、牛奶罐、勺子、糖碗等,所有这些都放在桌子上。在3D图形中,这些对象中的每一个通常是独立建模的。然后,图形系统100使用来自处理器120的命令将所有模型以期望的位置、方向和尺寸放在公共场景中以便可视化(就像你将设置和安排用于供应茶的桌子一样)。这意味着SM 132可以命令遍历处理器138相对于场景中的多个对象分析相同的光线。然而,当放入公共场景时这些对象中的每一个将在位置、方向和大小上被变换的事实被遍历协处理器138考虑并加速。在非限制性示例性实施例中,从世界到对象空间的变换与世界空间包围盒一起存储在世界空间BVH中。遍历协处理器138通过将光线从世界(场景)空间变换到对象空间来加速变换过程,以便执行图4所示的测试。特别是,由于几何形状从对象空间到世界(场景)空间的变换是计算密集的,该变换留给图形管线图元引擎134和/或光栅引擎136以作为光栅化的一部分来执行。相反,遍历协处理器138将给定的光线从世界空间变换到由加速数据结构定义的每个对象的坐标系,并在对象空间中执行其测试。
图7A和图7B示出了遍历协处理器138如何将相同的光线变换到三个不同的对象空间。图7A示出了桌子上的三个对象:杯子、茶壶和水罐。这三个对象和一个桌子包含一个存在于世界空间中的场景。也在世界空间中定义的光线从视点发出并与三个对象中的每一个相交。
图7B示出了在对象空间中定义的三个对象中的每一个。这三个对象中的每一个都由存在于相应对象空间中的相应模型定义。在示例性非限制性实施例中,遍历协处理器138在针对对象执行相交测试之前将光线变换到每个对象的对象空间中。为了遍历协处理器138执行相交测试的目的,该“实例变换”节省了将每个对象的几何形状和加速数据结构的相关盒细分从对象空间变换到世界空间的计算工作量。
请求SM 132在一个对象隐藏另一个对象,在另一个对象上投射阴影和/或朝向另一个对象反射光的情况下追踪哪些对象相对于每个个体光线位于哪些其他对象前面并且解析可见性。请求SM 132可以使用遍历处理器138来加速这些测试中的每一个。
示例性树形BVH加速数据结构
图8A和图8B示出了3D场景(图8A)和相应的树形数据结构(图8B)的递归细分的包围盒,其可以由遍历协处理器138访问并且用于由遍历协处理器执行的硬件加速的操作。包围盒的划分可以用分层树形数据结构表示,其中图2B中所示的大包围盒由树的父节点表示,而较小的包围盒由父节点包含的树的子节点表示。最小的包围盒表示为树中的叶节点,并标识包含在这些最小包围盒内的一个或更多个几何图元。
树形数据结构可以存储在遍历协处理器138外部的存储器中,并且基于SM 132向遍历协处理器138发出的查询来检索。树形数据结构包括以层次布置的多个节点。树形结构的根节点N1对应于包围所有三角形O1-O8的包围盒N1。根节点N1可以识别包围盒N1的顶点和根节点的子节点。
在图8A中,包围盒N1被细分为包围盒N2和N3。图8B的树形结构的子节点N2和N3对应于并表示图8A中所示的包围盒N2和N3。树形数据结构中的子节点N2和N3识别空间中各个包围盒N2和N3的顶点。在该特定示例中,每个包围盒N2和N3被进一步细分。包围盒N2被细分为包含的包围盒N4和N5。包围盒N3被细分为包含的包围盒N6和N7。包围盒N7包括两个包围盒N8和N9。包围盒N8包括三角形O7和O8,并且包围盒N9包括叶包围盒N10和N11作为其子包围盒。叶包围盒N10包括图元范围(例如,三角形范围)O10,并且叶包围盒N11包括项目范围O9。图8B的树形结构的各个子节点N4、N5、N6、N8、N10和N11对应于并表示空间中的图8A的包围盒N4、N5、N6、N8、N10和N11。
图8B树仅有三到六层深,使得盒N4、N5、N6、N8、N10和N11构成“叶节点”-即,树中没有子节点的节点。图8A示出了叶节点包围盒N4、N5、N6和N8中的每一个都包含场景中的几何形状的两个三角形。例如,盒细分N4包含三角形O1和O2;盒细分N5包含三角形O3和O4;盒细分N6包含三角形O5和O6;以及盒细分N8包含三角形O7和O8。图8B中所示的树形结构通过将它们与场景几何形状中的适当的三角形O1-O8相关联来表示这些叶节点N4、N5、N6和N7。为了访问该场景几何形状,遍历协处理器138向下遍历图8B的树形数据结构直到叶节点。通常,树的不同部分可以并且将具有不同的深度并且包含不同数量的三角形。与不包含几何形状的盒细分相关联的叶节点不需要在树形数据结构中明确地表示(即,树被“修剪”)。
根据一些实施例,以N7为根的子树可以表示在与对应于节点N1-N3的包围盒不同的坐标空间中定义的一组包围盒或BVH。当包围盒N7与其父包围盒N3处于不同的坐标空间中时,提供遍历以N7为根的子树所必需的光线变换的实例节点N7'可以将树的其余部分连接到以N7为根的子树。实例节点N7'通过定义从N1-N3的坐标空间(例如,世界空间)到N7等的坐标空间(例如,对象空间)的变换,将对应于节点N1-N3的包围盒或BVH与对应于节点N7等的包围盒或BVH连接。
遍历协处理器138的内部结构和操作
图9示出了遍历协处理器138的示例性简化框图,其包括被配置为执行上述加速遍历操作的硬件(下面描述该遍历协处理器138的更详细的实现)。因为图9中所示的遍历协处理器138适于遍历诸如图8A、图8B所示的基于树的加速数据结构,所以它也可以被称为“树遍历单元”或“TTU”700(附图标记700用于指代图1中所示的遍历协处理器138的更详细的非限制性实现)。树遍历操作可以包括,例如,确定光线是否与包围盒和/或树形数据结构(例如,BVH树)的图元相交,这些测试可以涉及将光线变换到对象空间。
TTU 700包括用于确定光线是否与包围盒相交的专用硬件和用于确定光线是否与树形数据结构的图元相交的专用硬件。在一些实施例中,TTU 700可以使用采用所支持的叶节点图元的相交测试的短堆栈遍历以及α图元和不支持的叶节点图元(项目)的中间遍历返回来执行包围盒层次的深度优先遍历。将参考三角形讨论图元的相交,但也可以使用其他几何图元。
更详细地,TTU 700包括相交管理块722、光线管理块730和堆栈管理块740。这些块中的每一个(以及图9中的所有其他块)可以构成由逻辑门、寄存器、硬件嵌入式查找表或其他组合逻辑等实现的专用硬件。
光线管理块730负责管理关于由SM 132指定的到光线管理块的光线的信息并执行关于其的操作。堆栈管理块740与遍历逻辑712结合工作以管理关于遍历BVH加速数据结构的信息并执行与其相关的操作。遍历逻辑712由光线-complet测试块710的结果指示,该光线-complet测试块710根据需要使用实例变换测试由光线管理块730指示的光线与由BVH表示的盒细分之间的相交。光线-complet测试块710经由作为TTU 700的一部分的L0完整缓存752从存储器140中检索关于BVH的附加信息。光线-complet测试块710的结果通知遍历逻辑712关于是否需要进一步递归遍历。当遍历逻辑712从BVH的一个级别遍历到另一个级别时,堆栈管理块740维护堆栈以追踪状态信息,当遍历逻辑遍历到BVH更深处时,堆栈管理块将项目推送到堆栈上,当遍历逻辑在BVH中向上遍历时,堆栈管理块将项目从堆栈中弹出。堆栈管理块740能够在SM请求的任何时间向请求SM 132提供状态信息(例如,中间或最终结果)。
相交管理块722根据需要使用实例变换来管理关于光线和图元之间的相交的信息并执行与其相关的操作。光线图元测试块720经由作为TTU 700的一部分的L0图元高速缓存754根据需要从存储器140中检索关于几何形状的信息。光线-图元测试和变换块720执行的相交测试的结果通知相交管理块722。因此,光线-图元测试和变换块720向相交管理块722提供相交结果,相交管理块722向请求SM 132报告几何碰撞和相交。
堆栈管理单元740检查遍历状态以确定需要检索什么类型的数据以及哪个数据路径(complet或图元)将消耗它。包围盒的相交在TTU 700的光线-complet测试路径中确定,包括一个或更多个光线-complet测试块710和一个或更多个遍历逻辑块712。complet指定包围盒的根节点或内部节点。因此,complet可以为光线-complet测试定义一个或更多个包围盒。TTU 700的光线-complet测试路径识别哪些包围盒与光线相交。需要进一步处理与光线相交的包围盒,以确定与相交的包围盒相关联的图元是否相交。在包括一个或更多个光线-图元测试和变换块720以及一个或更多个相交管理块722的光线-图元测试路径中确定图元的相交。
TTU 700从一个或更多个SM 132接收查询以执行树遍历操作。查询可以请求光线是否与包围盒和/或BVH数据结构中的图元相交。查询可以识别光线(例如,光线的原点、方向和长度)以及BVH数据结构和遍历状态(例如,短堆栈),其包括引用光线去访问的一个或更多个层次包围盒中的节点的一个或更多个条目。查询还可以包括关于光线在遍历期间如何处理特定类型的相交的信息。光线信息可以存储在光线管理块730中。可以基于光线-图元测试的结果更新存储的光线信息(例如,光线长度)。
TTU 700可以请求要从TTU 700外部的存储器中检索的在查询中识别的BVH数据结构。BVH数据结构的检索部分可以被高速缓存在TTU 700内的零级(L0)高速缓存750中,因此,该信息可用于其他时间相干的TTU操作,从而减少了存储器140的访问。光线-complet测试所需的BVH数据结构的部分可以存储在L0complet高速缓存752中,并且光线-图元测试所需的BVH数据结构的部分可以存储在L0图元高速缓存754中。
在所请求的遍历步骤所需的complet信息在complet高速缓存752中可用之后,光线-complet测试块710确定与光线相交的包围盒。在执行该测试时,可以将光线从层次包围盒的坐标空间变换为相对于complet定义的坐标空间。针对与complet的子节点关联的包围盒测试光线。在示例性非限制性实施例中,不针对complet自己的包围盒测试光线,因为(1)TTU 700在测试引用该complet的父包围盒子项时,先前针对类似的包围盒测试了光线,并且(2)complet包围盒的目的是定义一个局部坐标系,其中子包围盒可以用压缩形式表示。如果光线与任何子包围盒相交,则结果被推送到遍历逻辑以确定相应的子指针将被推送到遍历堆栈的顺序(进一步测试可能需要遍历逻辑712向下遍历到BVH的下一级别)。递归地重复这些步骤,直到遇到BVH的相交叶节点。
光线-complet测试块710可以向遍历逻辑612提供光线-complet相交。使用光线-complet测试的结果,遍历逻辑712创建要被推送到堆栈管理块740的堆栈条目。堆栈条目可以指示需要通过光线-complet测试块710进一步测试光线相交的内部节点(即,包括一个或更多个子节点的节点)和/或需要通过光线-图元测试和变换块720测试光线相交的相交叶节点中识别的三角形。光线-complet测试块710可以重复在堆栈中识别的内部节点上的遍历,以确定与光线相交的BVH中的所有叶节点。在示例性非限制性实施例中,光线-complet测试块710执行的精确测试将由模式位、光线操作(见下文)和剔除碰撞来确定,并且TTU700可以将中间结果和最终结果返回到SM 132。
相交的叶节点识别可能或可能不与光线相交的图元。一种选择是TTU 700向SM132提供例如在相交的叶节点中识别的一系列几何形状以进行进一步处理。例如,SM 132自身可以基于TTU 700提供的信息确定所识别的图元是否与光线相交,作为TTU遍历BVH的结果。为了从SM 132卸载该处理并由此使用TTU 700的硬件加速它,堆栈管理块740可以发出对光线-图元和变换块720的请求以对TTU的光线-complet测试块710识别的相交叶节点内的图元执行光线-图元测试。在一些实施例中,SM 132可以发出对光线-图元测试的请求以测试特定范围的图元和变换块720,而不管如何识别该几何形状范围。
在确保所请求的光线-图元测试所需的图元数据在图元高速缓存754中可用之后,光线-图元和变换块710可以使用存储在光线管理块730中的光线信息来确定与光线相交的图元。光线-图元测试块720将确定为与光线相交的图元的标识提供给相交管理块722。
相交管理块722可以将光线-图元测试的结果返回给SM 132。光线-图元测试的结果可以包括相交图元的标识符,交点与光线原点的距离以及关于相交图元的属性的其他信息。在一些实施例中,相交管理块722可以基于来自光线-图元和变换块710的先前相交结果来修改现有的光线-图元测试(例如,通过修改光线的长度)。
相交管理块722还可以追踪不同类型的图元。例如,不同类型的三角形包括在相交时阻挡光线的不透明三角形和在相交时可能阻挡或可能不阻挡光线或者可能需要SM进行额外处理的α三角形。光线是否被透明三角形阻挡可以例如取决于映射到三角形上的一个或更多个纹理、纹理占据的三角形区域(参见图6A和图6B)以及纹理修改三角形的方式。例如,在一些实施例中,透明度(例如,彩色玻璃)需要SM 132追踪透明对象碰撞,因此它们可以以光线参数顺序进行分类和着色,并且通常实际上不阻挡光线。同时,α“修剪”允许基于映射到图元上的纹理的形状来修剪图元的形状-例如,从三角形裁剪出叶形(请注意,在光栅图形中,透明度通常被称为“α混合”,并且修剪被称为“α测试”)。在其他实施例中,TTU700可以将透明碰撞推送到存储器中的队列,以稍后由SM 132处理,并通过向纹理单元发送请求来直接处理经修剪的三角形。每个三角形可以包括指示三角形类型的指示符。相交管理块722被配置为维护用于追踪不同类型的相交三角形的结果队列。例如,结果队列可以将一个或更多个相交的不透明三角形标识符存储在一个队列中,并将一个或更多个透明三角形标识符存储在另一个队列中。
对于不透明三角形,可以在TTU 700中完全确定光线相交,因为不透明三角形的区域阻挡光线穿过三角形的表面。对于透明三角形,在一些实施例中,在TTU 700中不能完全确定光线交点,因为TTU 700基于三角形的几何形状执行相交测试,并且可能无法访问三角形的纹理和/或由纹理占据的三角形区域(在其他实施例中,可以通过图形管线的纹理映射块向TTU提供纹理信息)。为了完全确定三角形是否相交,可以将关于光线-图元和变换块710确定的透明三角形相交的信息发送到SM 132,以便SM完全确定三角形是否影响沿着光线的可见性。
SM 132可以解决光线是否与关联于透明三角形的纹理相交和/或光线是否将被纹理阻挡。在一些情况下,SM 132可以基于该确定将修改的查询发送到TTU 700(例如,如果光线被纹理阻挡则缩短光线)。
在一个实施例中,TTU 700可以被配置为将确定为与光线相交的所有三角形返回到SM 132以进行进一步处理。因为在接口和线程同步方面将每个三角形交点返回到SM 132以进行进一步处理是昂贵的,所以TTU 700可以被配置为隐藏三角形,该三角形是相交的但可证明能够隐藏而不会对结果场景产生功能影响。例如,因为TTU 700具有三角形类型信息(例如,三角形是不透明的还是透明的),所以TTU 700可以使用三角形类型信息来确定沿着光线被另一个相交的不透明三角形遮挡的相交三角形,因此它们不需要包括在结果中,因为它们不会影响沿光线的可见性。如上面参考图5A-图5C所讨论的,如果TTU 700知道一三角形沿着光线被一不透明三角形遮挡,则可以从结果中隐藏被遮挡的三角形而不影响所得场景的可视化。
相交管理块722可以包括结果队列,用于存储将三角形ID和关于光线碰撞三角形的点的信息相关联的碰撞。当确定光线与不透明三角形相交时,三角形的身份和交点到光线原点的距离可以存储在结果队列中。如果确定光线与另一个不透明三角形相交,则如果交点到光线原点的距离大于已存储在结果队列中的相交的不透明三角形的距离,则可以从结果中省略另一个相交的不透明三角形。如果交点到光线原点的距离小于已存储在结果队列中的相交的不透明三角形的距离,则另一个相交的不透明三角形可以替换存储在结果队列中的不透明三角形。在测试了查询的所有三角形之后,可以将存储在结果队列中的不透明三角形信息和交点信息发送到SM 132。
在一些实施例中,一旦识别出不透明三角形交点,相交管理块722可以缩短存储在光线管理块730中的光线,使得在相交的不透明三角形(沿着光线)后面的包围盒(可以包括三角形)不会被识别为与光线相交。
相交管理块722可以将关于相交的透明三角形的信息存储在单独的队列中。存储的关于相交的透明三角形的信息可以被发送到SM 132以供SM解析光线是否与关联于三角形的纹理相交和/或纹理是否阻挡光线。SM可以基于该确定将该确定的结果返回到TTU 700和/或修改查询(例如,如果光线被纹理阻挡则缩短光线)。
示例性光线追踪着色管线
图10A示出了示例性光线追踪着色管线900,其可由SM 132执行并由TTU 700加速。光线追踪着色管线900由SM 132调用光线生成910并向TTU 700发出相应的光线追踪请求开始。光线追踪请求识别投射到场景中的单个光线,并要求TTU 700搜索具有SM 132也指定的加速数据结构的交点。TTU 700遍历(图10A的框920)加速数据结构,以确定光线与盒细分和加速数据结构所代表的关联三角形之间的交点或潜在交点。可以通过在加速数据结构中找到与光线相交的包围盒来识别潜在的交点。不需要检查非相交包围盒的后代。
对于相交的包围盒内的三角形,TTU 700光线-图元测试块720执行相交930过程以确定光线是否与图元相交。TTU 700将交点信息返回到SM 132,其可以响应于交点确定执行“任何碰撞”着色操作940。例如,SM 132可以执行(或使其他硬件执行)针对相交图元的纹理查找,并且基于适当的纹理元素值来决定如何着色使光线可视化的像素。SM 132追踪这样的结果,因为TTU 700可以以任意顺序返回与场景中不同几何形状的多个交点。
或者,可以进一步处理TTU 700确定相交的图元以确定950它们是否应该被着色为未碰撞960或最近的碰撞970。SM 132可以例如指示TTU 700报告指定的几何形状中的最近的碰撞,或者它可以指示TTU报告指定几何形状中的所有碰撞。例如,可以由SM 132实现针对TTU 700基于所实现的环境查找确定相交的图元的“未碰撞”着色操作(例如,通过预先计算的纹理图像的平均来近似反射表面的外观),如图6A和图6B所示。SM 132可以响应于TTU700提供的针对特定对象几何形状的最接近的碰撞报告,基于材料评估和纹理查找来执行最接近的碰撞着色操作以确定最接近的相交图元。
图10B更详细的光线追踪管线流程图示出了用于代表性用例的组件之间的数据流和交互:追踪包含几何图元的场景的光线,其中实例变换在硬件中处理。在一个示例性非限制性实施例中,图10B的光线追踪管线基本上是软件定义的(在示例性实施例中意味着它由SM 132确定)但是通过TTU 700广泛使用硬件加速。关键部件包括SM 132(和计算管线的其余部分)、TTU 700(用作SM的协处理器)以及L1高速缓存和下游存储器系统,TTU从中获取BVH和三角形数据。
图10B中所示的管线示出了可以由开发系统提前执行层次包围盒创建1002。它还示出了光线创建和分发1004由示例性实施例中的SM 132或其他软件执行或控制,如着色(其可包括照明和纹理)。示例性管线包括“顶层(top level)”BVH树遍历1006、光线变换1014、“底层(bottom level)”BVH树遍历1018以及每个由TTU 700执行的光线/三角形(或其他图元)相交1026。不必按所示顺序执行,因为TTU 700和SM 132之间的握手(handshake)确定TTU 700做什么以及以什么顺序进行。
SM 132一次向TTU 700呈现一条或更多条光线。SM 132呈现给TTU 700以进行遍历的每条光线可包括光线的几何参数、遍历状态以及光线的光线标记、模式标记和光线操作信息。在示例性实施例中,光线操作(RayOp)提供或包括辅助算术和/或逻辑测试以抑制、覆盖和/或允许存储交点。SM 132还可以使用遍历堆栈来将某些状态信息传送到TTU 700以用于遍历。可以使用显式遍历堆栈启动新的光线查询。然而,对于某些查询,可以提供少量的堆栈初始化器来开始给定类型的新查询,例如:从complet开始的遍历;光线与一系列三角形的相交;光线与一系列三角形的相交,然后从complet开始的遍历;从三角形缓冲区中获取给定三角形的顶点。在一些实施例中,使用堆栈初始化器而不是显式堆栈初始化提高性能,因为堆栈初始化器需要更少的流式处理器寄存器并减少需要从流式处理器传输到TTU的参数的数量。
在示例性实施例中,SM 132与每个查询(例如,光线)一起呈现的一组模式标记可以至少部分地控制当查询与特定类型的包围盒相交或与特定图元类型的图元相交时TTU700将如何处理查询。SM 132提供给TTU700的模式标记使SM和/或应用程序能够例如通过RayOp指定辅助算术或逻辑测试来抑制、覆盖或允许存储交点。模式标记可以例如使遍历行为能够根据诸如与每个包围盒和/或图元相关联的深度(或距离)、与到原点或光线的距离相关的包围盒或图元的大小等方面而改变。应用程序可以使用此功能来动态地和/或选择性地启用/禁用相交测试的对象集与特定查询集或查询组,例如,以允许在应用程序状态改变时(例如,当门打开或关闭时)使用不同版本的模型,或者提供作为光线长度的函数选择的模型的不同版本以实现细节几何形状级别的形式,或允许来自某些光线类别的特定对象集使某些图层在特定视图中可见或不可见。
除了可以针对光线-complet交点和针对光线-图元交点单独指定模式标记集之外,光线数据结构可以指定其他与RayOp测试相关的参数,例如光线标记、光线参数和RayOp测试。TTU 700可以使用光线标记来控制遍历行为、背面剔除和各种子节点类型的处理的各个方面,这取决于可选的RayOp测试的通过/失败状态。RayOp测试增加了TTU 700容量的灵活性,但代价是复杂性。TTU 700为其正在处理的每个活动光线保留“光线槽”,并且可以在遍历期间将光线标记、模式标记和/或RayOp信息存储在TTU内的相应光线槽缓冲器中。
在图10B所示的示例中,TTU 700执行顶层树遍历1006和底层树遍历1018。在示例性实施例中,BVH的两层遍历使得能够对动态场景变化进行快速光线追踪响应。
光线变换1014通过变换光线提供从顶层树遍历1006到底层树遍历1018的适当过渡,其可以在第一坐标空间(例如,世界空间)中的顶层遍历到底层遍历的BVH的不同坐标空间(例如,对象空间)中使用。在先前的文献中描述了使用两层遍历的示例性BVH遍历技术,参见例如Woop,“动态场景的光线追踪硬件架构(A Ray Tracing Hardware Architecturefor Dynamic Scenes)”,萨尔大学,2004,但是实施例不限于此。
在一些实施例中,顶层遍历(在世界空间中)是在BVH中进行的,其可以响应于场景的变化而动态地重新计算(例如,通过SM 132),并且底层遍历在包围盒的BVH中进行,即使在场景发生变化时仍保持静态或基本静态。用于底层树遍历1018(在对象空间中)的BVH中的包围盒可以包含关于场景几何形状的更详细信息,而不是顶层树遍历1006中使用的相应包围盒,从而避免或至少减少响应于场景变化而修改底层遍历BVH。这有助于加速动态场景的光线追踪。
示例顶层树遍历
TTU 700的顶层树遍历1006从L1高速缓存1012接收complet,并且向光线变换1014提供用于变换的实例或者向SM 132提供未碰撞/结束输出1013以用于由SM(此块也可以基于非叶节点/无碰撞条件递归地操作)处理的最接近的碰撞着色器1015。在顶层树遍历1006中,下一个complet获取步骤1008从存储器和/或高速缓存层次中获取要在步骤1010中测试光线相交的下一个complet,并且在该获取的complet中的包围盒上完成光线-包围盒相交测试。
如上所述,实例节点将一个BVH连接到处于不同坐标系中的另一个BVH。当相交的包围盒的子项是实例节点时,光线变换1014能够从L1高速缓存1016检索适当的变换矩阵。TTU 700使用适当的变换矩阵将光线变换为子BVH的坐标系。已经通过引用并入的美国专利申请No.14/697,480描述了将树中的第一组节点连接到第二组节点的变换节点,其中第一和第二组节点在不同的坐标系中。示例性实施例中的实例节点可以类似于美国申请No.14/697,480中的变换节点。在图10C中所示的TTU 700的替代非实例化模式中,TTU不执行“底”层树遍历1018,并且非实例化的树BVH遍历由框1008、1010执行,例如,仅使用一个堆栈。TTU700可以基于其从BVH和/或查询类型读取的内容在图10B实例化操作和图10C非实例化操作之间切换。例如,特定查询类型可以限制TTU仅使用非实例化操作。在这样的查询中,任何相交的实例节点都将返回给SM。
在一些非限制性实施例中,在获取下一个complet之前,对所获取的complet中的每个包围盒执行步骤1010中的光线-包围盒相交测试。其他实施例可以使用其他技术,例如以深度优先的方式遍历顶层遍历BVH。已通过引用并入的美国专利No.9,582,607描述了可以在示例性实施例中使用的一个或更多个complet结构和内容。美国专利No.9,582,607还描述了complet的示例性遍历。
当确定包围盒与光线相交时,对相交的包围盒的子包围盒(或对它们的参考)保持追踪,以便随后测试与光线的相交和遍历。在示例性实施例中,一个或更多个堆栈数据结构用于追踪随后要测试的子包围盒与光线的相交。在一些示例性实施例中,可以使用小尺寸的遍历堆栈来追踪要由顶层树遍历1006的操作遍历的complet,以及要测试相交的图元,并且可以使用更大的本地堆栈数据结构以追踪底层树遍历1018中的遍历状态。
示例底层树遍历
在底层树遍历1018中,下一个complet获取步骤1022从存储器和/或高速缓存层次1020中获取要在步骤1024中测试光线相交的下一个complet,并在获取的complet中的包围盒上进行光线-包围盒相交测试。如上所述,底层树遍历可以包括其中的包围盒与在上层树遍历中遍历的包围盒处于不同的坐标系中的complet。底层树遍历还接收来自L1高速缓存的complet,并且可以基于无叶/无碰撞条件以及基于未碰撞/结束检测的顶层树遍历1006在其自身内递归地或迭代地操作。可以利用变换到所检索的较低层complet的坐标系的光线来确定光线与较低层BVH中的包围盒的交点。然后将发现与较低层树遍历中与光线相交的叶包围盒提供给光线/三角形交点1026。
底层树遍历1018的叶输出被提供给光线/三角形交点1026(其具有L0高速缓存访问以及经由L1高速缓存1028检索三角形的能力)。L0 complet和三角形高速缓存可以是TTU700内部的小的只读高速缓存。当到达某些叶节点而不遍历实例化的BVH时,光线/三角形交点1026还可以从顶层树遍历1006接收叶输出。
在处理了图元范围中的所有图元之后,交点管理单元检查结果队列的状态并制作分组以发送到堆栈管理单元和/或光线管理单元以更新光线的属性和遍历状态,设置光线的下一个遍历步骤,和/或将光线返回到SM 132(如有必要)。如果结果队列包含在处理图元范围期间发现的不透明或α交点,则交点管理单元将结果队列中最近的不透明交点的参数长度(t)发信号到光线管理单元,以记录为光线的上限以缩短光线。要更新遍历状态以设置光线的下一个遍历步骤,交点管理单元向堆栈管理单元发送一下信号:结果队列中是否存在与图元范围的不透明交点,结果队列中是否存在一个或更多个α交点,结果队列是否已满,是否在图元范围中找到了尚未返回到SM且在结果队列中不存在的额外α交点,以及在SM消耗结果队列的内容之后要测试的光线的图元范围中的下一个α图元的索引(α图元之后范围中的下一个图元的索引,具有来自结果队列中当前图元范围的最高存储器顺序)。
当堆栈管理单元740从交点管理单元722接收到分组时,堆栈管理单元740检查该分组以确定完成遍历步骤所需的下一个动作并开始下一个动作。如果来自交点管理单元722的分组指示在图元范围中已找到不透明交点并且光线模式位指示一旦找到任何交点则该光线将结束遍历,堆栈管理单元740将该光线及其结果队列返回到SM,遍历状态指示遍历已完成(完成标记设置和/或空顶层和底层堆栈)。如果来自交点管理单元722的分组指示结果队列中存在不透明交点或α交点,并且在图元范围(其尚未被返回到SM)处理期间图元范围中还有光线遇到的剩余α交点不存在于结果队列中,则堆栈管理单元740将光线和结果队列返回到SM,其中遍历状态被修改以设置剔除不透明位以防止进一步处理图元范围中的不透明图元并且最高α图元交点从图元范围返回到光线结果队列中的SM之后,图元范围开始索引前进到第一个α图元。如果来自交点管理单元722的分组指示当光线处理了图元范围时没有找到不透明交点或α交点,则堆栈管理单元740将堆栈顶部的条目(对应于完成的图元范围)从活动遍历堆栈中弹出。如果来自堆栈管理单元740的分组指示队列中的不透明交点或者结果队列中存在不透明交点,并且一旦找到任何交点和/或结果队列中存在α交点,则光线模式位不指示光线将完成遍历,但是在结果队列中不存在的图元范围中没有找到剩余的α交点,其尚未返回到SM,堆栈管理单元740从活动遍历堆栈弹出堆栈条目的顶部(对应于完成的图元范围)并修改结果队列的内容,以指示结果队列中存在的所有交点都来自其已完成处理的基本范围。
如果活动堆栈是底部堆栈,并且底部堆栈是空的,则堆栈管理单元740将活动堆栈设置为顶部堆栈。如果顶部堆栈是活动堆栈,并且活动堆栈为空,则堆栈管理单元740将光线及其结果队列返回到SM,其遍历状态指示遍历已完成(完成标记设置和/或空顶层和底层堆栈)。如果活动堆栈包含一个或更多个堆栈条目,则堆栈管理单元740检查顶部堆栈条目并开始下一个遍历步骤。具有与光线的交点的图元和/或图元范围的测试以及将结果返回到SM 132在以下申请中描述:共同未决的美国申请No.16/101,148,标题为“保守的水密光线三角交点(Conservative Watertight Ray Triangle Intersection)”(卷号6610-36(18-SC-0145)),美国申请No.16/101,066,标题为“在没有着色器干预下对交点进行连续层次包围盒遍历的方法(Method for Continued Bounding Volume Hierarchy Traversalon Intersection without Shader Intervention)”(卷号6610-32(18-AU-0127))和美国申请No.16/101,196,标题为“用于处理无序的不透明和α光线/图元交点的方法(Methodfor Handling Out-of-Order Opaque and Alpha Ray/Primitive Intersections)”(卷号6610-37(18-AU-0149)),其全部内容通过引用并入本文。
虽然以上公开内容在计算机图形和可视化的特定上下文中表达,但是光线追踪和所公开的遍历协处理器可以用于除图形和可视化之外的各种应用。非限制性示例性包括用于逼真声音合成的声音传播,声呐系统的模拟,光学元件和系统的设计,粒子传输模拟(例如,用于医学物理学或实验高能物理),一般波传播模拟,与LIDAR数据的比较,用于例如机器人或车辆定位等目的,OptiXTM过去已经用于其中一些应用领域。
示例性实现遍历协处理器提供中断和恢复遍历操作的结构
如上所述,树遍历单元(TTU)700是紧密耦合到SM 132的光线追踪硬件加速器。TTU700通过追踪穿过生成的包括内部节点、实例变换、项目范围和三角形范围的层次包围盒结构(BVH)来操作。内部节点交点进一步遍历层次结构。实例节点交点可以执行硬件加速的实例转换,然后在实例化的子BVH上继续遍历。项目范围返回到SM 132。三角形范围可以使用光线-图元测试(RPT)单元中的TTU 700内部的特定硬件加速来确定光线和特定图元(诸如三角形)之间的交点。
SM 132具有用于抢占的机制,其允许暂停当前在SM上运行的线程束或多个线程束(例如,线程),以便将它们换为用于其他工作。这是用于SM 132的时间片共享的手段,以及响应和防止写得不好的程序的挂起的机制。
当SM 132接收到或生成抢占信号时,该通知也被传递到TTU 700。换句话说,SM132本身可以决定抢占TTU 700的当前任务,或者GPU可以决定抢占SM的当前任务,或SM可以决定换掉工作。在任何情况下,TTU 700都接收抢占信号。然后,TTU 700将干净地停止所有活动光线的执行并向SM 132返回任何中间结果和/或最终结果以及状态信息,当稍后其被提供给TTU时,如果遍历未完成,将允许TTU在其停止位置准确地重新启动查询。
TTU 700中的每条光线基于其自身的遍历要求独立地操作。在需要SM 132干预(例如,项目范围)的相交的情况下,TTU 700向SM 132返回不透明(到SM)blob(二进制大对象)数据,其包括允许查询在其停止位置准确继续的堆栈条目和元信息(meta information)。SM 132不对这种不透明的blob数据做任何事情,除了临时存储它以便保管以及如果/当SM132希望TTU 700恢复对该查询的工作时将其提供回TTU 700。在示例性非限制性实现中,SM132保持TTU 700的不透明blob,因为TTU 700是无状态的-它可以非常快速地执行操作但是不记得它之前已经完成的任何特定任务的任何事情。
TTU 700有点像快速且高效的机器人,其非常快速地执行任务但是不记得他或她之前工作的特定任务。在示例非限制性实现方式中,TTU 700可以部分地完成工作并且将结果返回到SM 132,因此SM可以决定是否让TTU继续做该工作-并且如果是,则是否执行工作的特定方面、子集或扩展。
与软件约定的一部分是在抢占之后能够恢复TTU查询。例如,通常在序列周围将存在外环-但是在TTU 700的情况下,必须存在(在示例非限制性实现方式中)围绕序列的外环。即使没有α三角形、自定义图元等,并且即使几何构成了TTU 700知道如何处理的事物,但由于抢占的可能性,仍然有可能TTU 700的遍历不会完成。因此,即使TTU 700将结果返回给SM 132,在从SM到TTU的后续查询中仍可能有更多工作要做。至少由于这个原因,SM 132对TTU 700做出的任何查询可以采取或涉及多个完成请求的发生。
在示例非限制性实现中,TTU 700通过向堆栈管理单元(SMU)740发送信号来完成此操作,该堆栈管理单元负责在当前步骤完成之后激活下一个遍历步骤。如果设置了抢占信号,则TTU 700将不会激活下一个遍历步骤,但会返回到SM 132。这样,每条光线都可以完成其当前所涉及的遍历步骤-因此“干净停止”。一旦所有光线都停止并且结果返回到SM132,则抢占完成并且在SM中交换相应的线程束。
在所有依存操作完成之前,流式处理器不能落入陷阱(trap)
示例性非限制性实施方式为SM 132提供了一种机制,该机制可以选择性地停止线程束或线程运行,从而导致抢占,从而可以换掉这些线程束以进行其他工作。这是一种时间片化SM 132的方式。同时,在示例非限制性实现方式中,只要存在GPU的其他部分欠SM的未完成的工作,就防止SM 132落入陷阱或被抢占。可以指望纹理映射和其他硬件加速过程在短时间内返回结果。例如,SM 132通常将看到的最长延迟是在存储器负载上。在陷阱之前,SM 132可能等待完成的大多数其他未完成的过程通常具有固定的和短的延迟。
但是,TTU 700是SM 132抢占的挑战,因为SM发送给TTU的任何给定查询可能花费不可预测的时间长度,例如数千甚至数十万个周期来完成,这取决于多种因素,诸如BVH被遍历,查询指定的光线之间的空间关系,与光线相交的几何的种类(例如,α还是不透明),需要多少存储器负载,数据是否已经在高速缓存存储器中(以及如果是这样的话,哪一个),TTU 700内的其他内部调度问题等。TTU 700可能花费相对长的、可变的时间量来完成任何给定的查询的事实产生了风险,在TTU 700花费很长时间来完成查询的某些情况下,SM 132的抢占机制将变得无用,从而防止SM落入陷阱。相反,期望允许SM 132迫使光线操作抢占到TTU 700上,同时确保TTU将以可预测的方式并且在合理的(低延迟)时间量内优雅地抢占。
更详细地,示例非限制性过程可以使用“记分板”来追踪对未完成的TTU 700加载或读取的依赖性。在示例性非限制性实现中,SM 132不能被抢占,直到该数据从TTU 700返回到SM-这通常直到遍历完成才会发生。只要记分板未完成,就不允许SM 132进入陷阱处理程序,因此它就在那里等待。更糟糕的情况是,如果存在包含内部(例如,无限)循环的恶劣结构的BVH,则抢占可能会延迟数十万个周期,甚至更长(例如,BVH树中的指针指向树的根导致树的遍历是无穷无尽的,这意味着图形不再是树)。这可能是由于一个漏洞而发生的或可能构成对系统的恶意攻击,试图无限期地绑定系统。在共享计算机上,这样的循环可能允许攻击者实现拒绝服务攻击,除非提供某种机制来中断遍历。
这种问题的一个潜在解决方案是使用看门狗(watchdog)来杀死TTU 700的需要很长时间才能完成的任务。虽然这种方法可用于保护系统,但它不是非常灵活,并且不能为SM132上运行的软件提供优雅的恢复。
抢占管理
在示例非限制性实现中,SM 132对TTU 700的请求或查询是TTU在进行中可以返回到SM的事情。例如,如果TTU 700在代表光线遍历BVH时遇到α三角形,则TTU可以在遍历中途返回查询结果。参见共同未决的共同相关的美国申请:(卷号:6610-0032/18-AU-127),标题为“在没有着色器干预下对交点进行连续层次包围盒遍历的方法(Method for ContinuedBounding Volume Hierarchy Traversal on Intersection without ShaderIntervention)”;(卷号:6610-0035/18-SC-0144)标题为“树遍历的查询特定行为修改(Query-Specific Behavioral Modification of Tree Traversal)”;以及(卷号6610-0037/18-SC-0149)标题为“处理无序不透明和α光线/图元交点的方法(Method forHandling Out-of-Order Opaque and Alpha Ray/Primitive Intersections)”。因此,查询可以涉及SM 132和TTU 700之间的多个请求;并且存在允许TTU将中间遍历状态返回到SM的机制。示例性非限制性实现利用这种能力来自然地中断遍历并且稍后恢复以便提供进一步的功能-即抢占管理。在这种抢占管理中,SM 132可以抢占整个TTU 700,停止TTU正在进行的所有工作。这意味着TTU 700正在执行的所有光线处理应该停止。SM 132可以出于任何数量的原因命令抢占,包括例如需要重新分配TTU 700以临时执行更多其他重要工作(之后SM可以命令TTU从其停止的地方继续)。
示例性非限制性实现提供前进保证
想象一下,木匠试图在工地上做一份工作。如果木匠在工作日开始时在他开始工作之前需要30分钟来设置他的工具、锯木架、延长线、用品等,以及在工作日结束时30分钟来清理和放置所有的工具,然后在工作25分钟后打断木匠并将他送到另一个工作地点意味着他根本不会完成任何工作。在他需要开始重新拾起之前,木匠甚至都没有完成拆包和设置工具。
类似地,由于启动TTU 700查询和获取第一数据以进行遍历的开销,一系列抢占可能导致竞争工作不能进行前进,因为竞争工作任务不断地相互抢占而他们中的任一方(或任何一方)没有取得进展。
为了避免该问题,在示例非限制性实现中的TTU 700具有前进保证:保证开始查询的每条光线进行至少一个修改遍历堆栈内容的遍历步骤。在示例非限制性实现中,TTU 700因此将延期光线的抢占命令,直到其完成至少一个遍历步骤(在示例非限制性实现中,可以通过入栈(stack push)或出栈(stack pop)来测量))。为了实现前进保证,当存在抢占信号时,忽略光线的初始激活,而不是返回到SM 132,它将按照其堆栈内容的指示激活正确的数据路径。
还可以使用堆栈条目修改来测量遍历步骤。例如,α三角形交点可以修改堆栈上的三角形范围,并且可以将其计数为遍历步骤。但是,在这种情况下,无论如何,α三角形在那个点返回到SM 132,因此它的包含可能有点没有实际意义。见下文。
在示例非限制性实现中,TTU 700的预期行为是即使SM 132在其接收到查询命令之后立即尝试抢占它,它也将完成一些有意义的工作。因此,为了避免TTU 700不前进的情况,示例非限制性实施方式提供前进保证,即如果光线在TTU 700中开始光线遍历,则在它被抢先之前进行至少一个堆栈修改动作。
图11A-图11H示出了类比。在图11A中,表示TTU 700的机器人正在做一些工作,即光线处理遍历步骤。当机器人完成该步骤时,机器人将结果放在堆栈上(图11B)并开始处理下一个遍历步骤(图11C)。当机器人完成下一步时,机器人将这些结果放在堆栈上(图11D)并开始处理下一个遍历操作(图11E)。但是图11E显示机器人接收到命令(来自SM 132-“老板”)以停止工作。机器人不是立即服从抢占命令,而是(因为他知道他应该前进)完成当前的遍历步骤(图11F)并将结果放在堆栈上(图11G)。通过完成该遍历步骤,无论机器人被中断的频率如何,机器人都保证前进(图12的框3002)。
一旦机器人完成遍历步骤并将结果放置在堆栈上,机器人就停止工作(图11H)并将堆栈发送到SM 132以便保管。然后机器人等待进一步的指令(在一些实现方式中,机器人可以立即开始做不同的工作而不是仅仅等待)。
类似地,在示例非限制性实现中,当SM 132想要抢占时,它向TTU 700发送抢占信号(参见图12)。如果TTU 700在接收到SM 132的抢占信号时只是立即停止处理,则可能存在TTU永远不会前进的情况。在设置TTU 700查询并将结果返回到SM 132中涉及有限的开销时间量。人们可能期望比该开销更快地抢占。因此假设SM 132使用TTU 700建立查询,然后很快向TTU发送抢占信号,该信号迫使TTU停止做它正在做的任何事情。TTU 700将响应于抢占信号而停止并将其结果发送回SM 132。如果这种抢占将快速连续地重复发生,则TTU 700将不会前进。相反,与上述木匠一样,TTU 700将花费其所有时间来设置和分解连续查询,并且不会花费任何时间实际执行查询。
为了节省面积,示例非限制性实施方式不直接追踪或试图直接追踪光线是否实际上自上次抢占以来已经前进。当TTU 700接收到抢占信号时,TTU确保任何(每个)有效的光线前进至少一步。通常,通过观察到抢占信号被断言的时间以来每个活动光线已经前进,系统可以保证所有未完成的光线将进行一些前进。可能会有由于重复的抢占TTU并未进行任何前进的不寻常情况,但是设计良好的强大系统应该能够处理这种不寻常的事件而不会失败。
在示例非限制性实现方式中,前进(参见图12框3002)意味着TTU 700可以或将要将某些东西推送到遍历堆栈上,从堆栈中弹出某些东西或者修改已经在堆栈上的条目。在示例非限制性实现中,TTU 700不被认为已经进行了前进,除非并且直到它执行或将执行这些堆栈修改动作中的至少一个。同时,SM 132将延迟抢占,直到在已经执行(或保证执行)构成前进(参见图12,“否”退出到框3002)的这种堆栈修改动作之后TTU 700将状态和结果返回到SM。
基于堆栈的前进保证
在示例非限制性实现方式中,SMU 740内的短堆栈机制告诉TTU 700接下来需要做什么工作。堆栈将具有条目,例如,用于针对BVH中的包围盒测试光线的complet遍历。该堆栈还将具有指定TTU 700用于测试光线的几何(例如,三角形)范围的条目。短堆栈还将包含指示TTU 700需要执行转换的实例节点的条目。堆栈还可以包括需要返回到SM 132的项目范围或节点参考。
在示例非限制性实现中,当TTU 700更深地遍历到BVH数据结构中时complet测试条目将条目推送到堆栈上,并且当TTU在BVH中向上遍历时complet测试条目从堆栈弹出条目。TTU 700针对三角形测试光线的三角形范围部分将修改堆栈条目(因为TTU针对该范围中的指示的特定三角形执行相交测试),或者如果TTU已对该范围中的所有三角形执行了相交测试,则TTU可以从堆栈中弹出已完成的条目。位于顶部(世界空间)堆栈(即,在世界空间中表示)的实例节点将使TTU 700执行到对象空间的变换,之后实例节点将导致条目(即,实例化的BVH的根)被推送到底部(对象空间)堆栈上,因此TTU可以在底部堆栈上继续遍历(例如,在实例节点BVH的子树的对象空间中),同时保持顶部堆栈不变。底部堆栈现在将具有需要被初始化(或者可以通过变换被初始化)的内容,然后由TTU700执行。底部堆栈通常具有需要基于BVH的任何遍历次数针对光线进行测试的complet,并且随着遍历的进行,还将包含三角形范围条目。底部堆栈还可以具有需要返回到SM 132的实例节点和项目范围。
虽然世界空间中的实例节点将继续遍历,但是在示例非限制性实现中,仅仅切换到对象空间不足以证明前进。示例非限制性实现方式使用作为前进的标记的、发布的堆栈的修改以证明例如TTU 700具有:
在光线-complet测试中完成某些操作(即,将一个complet推送到堆栈上以便向下遍历BVH,或刚刚从堆栈中检查出complet的弹出)(参见图12A的方框3012);或者
在三角形相交测试的情况下,从堆栈中弹出三角形范围或修改由堆栈条目表示的三角形范围,在例如α三角形的情况下,其中TTU缩短光线和/或以其他方式限制三角形范围为整个范围的子集(参见图12A,方框3014)。在一个实现中,TTU 700可以在不修改光线的情况下限制三角形范围。例如,假设一个α三角形返回到SM 132。如果SM确定碰撞,则SM可以重新启动采用光线的修改的t范围的查询。在此之前,TTU 700在内部修改三角形范围堆栈条目以指向返回时要测试的下一个三角形。
由于SM 132在查询设置中指定光线的方式,以使得它们总是在世界空间中,所以如果在对象空间中恢复先前查询时示例非限制性TTU 700需要做的第一件事是再次将光线从世界空间转换为对象空间。由于TTU 700是无状态的并且始终以顶部堆栈或世界空间堆栈开始遍历,因此对于实例遍历,始终完成的第一步是实例变换。此步骤不会修改该实例节点条目的遍历堆栈内容,而是将执行从顶部堆栈或世界空间堆栈转移到底部堆栈或对象空间堆栈(变换可以将条目推送到底部堆栈)。因此,在示例非限制性实现中,实例节点仅将TTU处理从顶部(世界空间)堆栈移动到底部(对象空间)堆栈而不改变顶部堆栈上的条目,但尚未将条目推送到底部堆栈。
如果这是自恢复查询以来TTU 700执行的唯一动作,则当重新启动查询时,TTU将需要再次执行相同的动作。由于变换节点不修改实例节点堆栈条目,因此可以进行实例变换,并且对于相同的遍历可以需要任意次数。如果这是前进保证中允许的唯一步骤,那么它不足以进行前进,因为该步骤不会修改遍历堆栈,并且只是在重新启动查询时一次又一次地重复。出于这个原因,在示例非限制性实现中,为了展示前进,实例修改器不被认为是堆栈修改器(参见图12A,框3014,“否”退出并且在继续之后分支到框3012)。因此,在实例转换(例如初始激活)之后的激活也被禁止在抢占时重定向到SM 132。以这种方式,检查底部堆栈或对象空间堆栈,并且在抢占发生之前完成修改该堆栈的至少一个遍历步骤。
光线也可能需要执行一个以上的遍历步骤。在示例非限制性实现中,存在称为自动弹出条目的某些堆栈条目。在示例非限制性实现中,自动弹出条目通常限于要在TTU 700中处理的不透明三角形范围。这些条目的存在是因为用户可以指定减少的堆栈限制,其限制可以返回至SM 132的内容。出于性能原因,我们经常希望在内部超过该堆栈限制,并且针对那些不能在堆栈上留下条目或将额外条目推送到堆栈上的堆栈条目可以安全地完成。保证不透明的三角形范围从堆栈弹出,并且不会为堆栈生成新条目。在堆栈顶部以不透明三角形范围抢占的光线可能需要消耗这些条目中的每一个以适应堆栈限制以返回到SM 132。仅为了简化,一些非限制性实现设计假设所有不透明三角形范围出于抢占的原因被自动弹出-尽管这不是其他实现的功能要求。
在示例非限制性实施方式中的TTU 700内,堆栈管理单元(SMU)740具有控制电路,其查看顶部堆栈条目并决定TTU接下来将做什么。例如,取决于顶部堆栈条目的内容,SMU740可以沿着光线-complet测试710路径或者沿着光线-三角形测试720路径向下发送相应的工作。沿着这些路径中的一个发送这样的工作意味着TTU 700在当前查询中采取另一步骤。或者,SMU 740可以从查询SM 132向接口发送当前光线已完成信号。SMU 740还具有前一次处理的记录-例如,最后一次测试是光线-complet测试还是光线-三角测试。例如,SMU740知道如果最后一个操作是光线-complet测试,则实际上已经采用了遍历步骤,已经进行了前进,并且下一个操作将是从堆栈中弹出一个条目。如果最后一个操作是基于三角形范围的光线-三角形测试,则SMU 740知道它将修改相应的堆栈条目。如果最后一个操作是实例变换,则SMU 740知道它将不会修改堆栈,从而不会声明前进。在这些示例中,SMU 740正在测试的是每条光线都通过激活或完成。
第四种可能的条件是初始光线激活,其来自光线管理单元730。在示例非限制性实施方式中,光线管理单元(RMU)730声明新光线已被激活,并指示SMU 740看顶部堆栈。如上所述,这对于示例非限制性实现中的前进是不够的,因为没有进行堆栈改变。
由于SMU 740知道处理的来源(即,执行的最后一步),SMU可以确定是否已经进行了前进。自从最后的抢占或其他事件以来,TTU 700可能已经进行了多个遍历步骤。这可以保存在一个或更多个标志中。在示例非限制性实现中,为了节省芯片面积,TTU 700不记录该事实。影响是示例非限制性实现可以采取额外的遍历步骤,此时这样的额外步骤对于提供前进保证不是严格必需的。单个遍历步骤通常不是长延迟事件。在其他示例非限制性实现中,已经或将要发生的堆栈更新的类型可以用作前进保证(例如,以确保将更新堆栈以反映已到达或者处理的BVH中的叶节点)。
用于保证前进的示例非限制性实现机制不需要使用堆栈修改本身作为触发器,而是使用“你来自哪里”信息来暗示堆栈修改。因此,示例性实现中的前进保证机制仅需要知道将修改堆栈。它不需要实际观察堆栈修改以证明它发生,也不需要确切地知道堆栈是如何被修改或将要修改的。进行前进确定的SMU 740检查TTU 700的先前状态,这意味着实际上堆栈将被修改。堆栈是一种检查点,其表示在BVH遍历过程中特定光线的位置以及它是如何到达那里的。使用堆栈更新作为前进的指示符的概念很有效,因为堆栈指示TTU 700的真实当前状态,因此使用对该堆栈的更新是指示前进的可靠机制。
在示例非限制性实现中,TTU 700允许SM 132访问并保存TTU的状态。在示例非限制性实现中,TTU 700是无状态的,这意味着一旦它终止特定过程,它就完全“忘记”它做了什么以及它到达了多远。该特征允许高度可扩展性,并且不要求TTU 700具有对主存储器的写访问权。当发生陷阱并且TTU 700已经确认其当前正在处理的每个活动的未完成光线的前进时,SM 132保存该线程或执行槽的TTU 700的状态,即到目前为止TTU遍历的结果和TTU恢复其状态的足够额外信息,并在其停止的地方继续(为此,SM不需要知道TTU在此过程中到达了多远,因为SM正在为被抢占的执行槽/线程保存TTU的状态)。
TTU 700向SM 132返回当前存储的任何碰撞(或多个碰撞)。在大多数抢占情况下,这些是需要以某种方式存储的中间碰撞(在寄存器中或溢出到存储器中)。中间碰撞可能与最终碰撞相同或不同。TTU 700将基于返回的堆栈和光线信息继续遍历。在示例性实施例中,在中间碰撞的情况下由SM 132决定还缩短光线以对应于返回的碰撞(而不是在原点tmax中返回)。
从SM 132的角度来看,由于抢占而导致的TTU 700返回与由于TTU需要SM辅助的TTU返回(例如,α光线、项目范围等)之间没有差异。例外的是,在抢占的情况下,TTU 700可以返回与需要进一步遍历的堆栈配对的未碰撞结果(在示例实施例中,TTU通常在报告未碰撞之前完成遍历)。在示例非限制性实施例中,SM 132陷阱处理程序负责在一般意义上存储该线程的寄存器内容。这些寄存器将包含TTU 700返回的信息,以及SM现有的任何其他信息。线程恢复后,SM 132陷阱处理程序负责恢复这些寄存器的内容。然后,SM 132检查TTU返回并对其进行操作,就好像陷阱没有发生一样。即,如果结果仅是中间结果,则SM 132将该结果存储起来并重新启动查询,使得TTU 700可以在其停止的地方继续。
示例非限制性可编程超时
我们基于该抢占超时和前进保证来实现用户可编程超时。我们详细介绍了两种变体:基于工作和基于周期。这种超时可用于自动中断特定光线的处理。在示例非限制性实现中,TTU范围的超时被保留用于抢占,并且不由针对各个光线的个别超时触发。
可以提供基于该相同机制的用户可编程超时。图形开发人员习惯于对场景建模和控制图形,因此可以保证帧在帧时间内处理,例如16ms(对应于60Hz)。使用光线追踪,情况可能并非如此。如上所述,TTU 700可能需要不可预测的长时间或周期来处理任何给定的光线。例如,给定的光线可能碰巧被许多几何体掠过(例如,图像化平行于桥或沿着链式围栏延伸的光线),使得它将针对大量BVH节点进行测试以确定交点。提供控件以允许开发人员限制处理给定光线的时间量、处理周期或两者。
在示例非限制性实现方式中,计时器与TTU 700处理给定光线所花费的时间相关联,而不与处理场景中的所有光线或者甚至是给定线程束或线程中的所有光线所花费的时间相关联。
例如,在示例性实现中,不是整个TTU 700超时,而是可以由TTU处理的单个光线超时。这种机制可用于控制单条光线的工作量。例如,可以对特定光线的处理时间设置上限。这在虚拟现实中特别有用,虚拟现实需要在一定时间内减少显示延迟并避免VR疾病(可能感觉像晕车)。由于在任意情况下光线遍历可能花费太长时间,因此可能希望在光线遍历将花费的时间长度上设置界限。这可以提供一种方法来放弃系统发射到场景中的光线并且(因为该任务花费太长时间)回退到另一种机制以在较短的时间内绘制图像。
如图13所示,基于工作的超时的一个示例性实现提供每条光线的计数器和每条光线的可编程目标。每当TTU 700针对特定光线执行诸如光线-complet测试或光线-三角测试的动作(遍历步骤)时,TTU就为该光线增加相应的计数器3200。计数器可以计数每个遍历步骤,无论什么类型,或者它可以计数叶节点遍历步骤,或者可以有不同类型的遍历步骤的单独计数器。一旦该计数器3200超过该光线的可编程目标3202,TTU 700就停止光线并将结果发送回SM 132。
因为这是一个干净的停止,如果SM 132调用想要的内核,它可以重新启动光线并让TTU 700完成工作。或者SM 132可以放弃光线并使用不同的方法来完成当前图像的处理。因为每条光线应用这种技术,所以每条光线都可以编程为具有自己的目标值,当超过该目标值时将触发停止执行。在TTU 700阻止它们继续进行之前,不同的光线可以采取不同量的遍历步骤,并且根据正在发生的其他情况向SM 132询问接下来要做什么。
基于工作的超时为用户提供了限制每条光线允许的遍历步骤的数量的手段。在一个示例实施例中,基于工作的超时存储单个值,这节省了面积。此值被初始化为目标值,在每个遍历步骤中递减,并在达到0时触发每光线超时。触发可以在从1到0的转换时发生,因此可以保留0值作为禁用超时的特殊情况。在这种情况下,在1到0转换之后,堆栈顶部的自动弹出条目会将计数器增加回1,以便在处理自动弹出条目后仍然看到1到0的转换。
在替代实施例中,基于工作的超时可以基于彼此比较的两个值。在该双值实施例中,在对光线的查询设置期间,包括附加的N位字段,其指定遍历步骤的目标数目。该目标与该光线的遍历步骤的计数器一起存储在SMU 740中。在初始激活之后的每次激活时(即,在光线-Complet测试或光线-三角形测试数据路径事件之后发生的任何激活),遍历步骤计数器递增。比较器不断地将(递增的)遍历步骤计数器与遍历步骤的目标数目进行比较。当(和如果)遍历计数超过目标时,设置每个光线存在的超时位。当该位被设置时,下一次激活将导致该个体光线超时,就像整个TTU 700被抢占一样。其他光线不受该动作的影响。
在一些实现方式中,执行的遍历步骤的数量(或者在SMU仅存储计数到0的计数器的情况下剩余的步骤的数量)可以作为查询结果的一部分返回到SM 132。这将允许开发者限制跨多个查询对光线执行的步骤的总数(例如,当涉及TTU不能本地处理的α三角形或图元时)。例如,假设开发人员最初将步骤总数限制为100,并且TTU 700仅在α测试的20个步骤后将结果返回到SM 132。如果α测试指示未碰撞,则可能希望将后续查询(遍历的继续)限制为仅80个步骤。类似的方案可以应用于基于周期的超时(下面)。
在示例非限制性实现方式中,不一定需要可编程超时才能遵守抢占前进保证的转换后无超时(no-timeout-after-transform)要求。在示例非限制性实现选择不遵守该示例的情况下,由用户指定至少2个遍历步骤或识别该情况并指定重新启动时的2个遍历步骤。
另外,正如在抢占情况中一样,由于自动弹出条目,遍历步骤的实际数目可能超过遍历步骤的目标数目。
用于编码工作目标的位数不必是特定的任何数量。它也不需要具有1个条目的粒度。也就是说,N位可以被移位或相乘,使得它们可以以不仅仅是可以由N指定的数量为目标。例如,8位允许0到255之间的目标,其中0可以被“禁用”。通过允许这些位的移位,可以以诸如4到1023(增量为4)或8到2048(增量为8)的更高粒度为目标。该移位量也可以按照每条光线进行编程。如果移位是每条光线可编程的,则存储在SMU 740中的每光线目标占所需的所有可能位,而不仅仅是指定的N位。SMU 740中的每光线遍历计数器可具有1的计数粒度。
示例非限制性循环超时
基于周期的超时以与基于工作的超时类似的方式工作,但顾名思义,是基于时间的。SMU 740中的全局计数器(参见图13A,框3302、3304)追踪被定义为某些周期数的“时期(epoch)”,例如1024。SMU 740中的计数器3302提前周期计数直到时期计数被碰撞。然后,时期计数器3304前进1。时期计数器3304粗略地确定该粒度内的当前时间。可以具有时期计数器3304,其中时期被定义为单个周期。在这种情况下,只有一个计数器,不需要两级计数器设计。
对光线的基于周期的超时按照时期进行编程。在写入SMU 740时的查询设置期间,每个光线将当前的时期计数器值添加到其目标的时期数量,允许线程束,并将每条光线的值存储在目标寄存器3306中。
当每光线目标计数器与时期计数器匹配时(即,时期计数器已前进到超时点)(比较器3308),将光线设置为在下一步骤终止。该点之后的操作与先前描述的基于工作的超时的操作相同。
基于周期的超时仅精确到时期加上完成其最后遍历步骤的时间的粒度内,其可包括一些长延迟存储器访问以及任何数量的自动弹出步骤。通过这种方式,基于周期的超时在击中目标方面不如基于工作的超时精确,但仍然有效地将遍历限制到期望的时间帧。
因此,该基于周期的超时通过编程允许光线完成的最大时间长度而不是编程遍历步骤的精确数量来操作。例如,时间长度可以用TTU周期的数量表示。在激活光线时,TTU700将启动计时器3302,其计数经过的TTU周期。一旦计时器超过SM指定的目标周期数,TTU700就停止光线。因为这是一个干净的停止,所以调用SM 132可以继续遍历,如果它选择的话,或者它可能放弃光线,因为它花费太长时间来处理并回退到某些其他机制。
在一个示例性实现中,不是每条光线具有长(例如,64位)计数器,而是可以在所有光线之间共享单个计数器3302。连续周期计数器计算已经过的周期。每当周期计数器计数一定数量的周期(“时期”),例如1024个周期时,时期计数器3304递增1。因此,时期计数器计数时期。SM 132针对每条光线向TTU 700发送SM将在由于超时而停止光线之前允许该光线的时期的数量。例如,如果SM将光线时间值编程为“5”,则将在超时之前提供5x1024个周期(5个“时期”)和6x1024个周期(6个时期)以进行遍历(在此示例中,可以在时期期间的任何时间开始光线)。请注意,干净的停止可以增加更多时间。因此,基于周期的超时不如基于工作的超时准确,但对于许多用途而言可能足够准确。
例如,存在一种用例,其中SM 132已经请求TTU 700处理32条光线,并且一些(例如28条)光线被完成,其中一些落后者(straggler)尚未完成处理。如果这些落后者被编程为早于完全完成而超时,则可以提前返回该请求中的所有光线结果。在这种情况下,完成的光线在TTU 700中释放处理能力,并且SM 132要求TTU恢复尚未完成的光线的处理,同时为TTU发送更多(新的)光线以开始处理。这提供了更高的TTU 700利用率和更高的效率。该示例表明TTU 700在等待落后光线完成处理时可能忙于对其他光线进行工作。因此,虽然SM 132可以选择简单地放弃花费太长时间的光线,但是SM还有另一种选择,即将所有这些落后光线包装在一起并将它们发送回TTU 700以完成。通过将这些落后光线分组在一起,将比SM 132等待所有落后者在第一遍中完成时处理更有效。
基于工作和基于周期的超时允许服务质量类型保证,其对于需要对工作进行硬限制的任何应用都是有用的。额外的可编程超时可以帮助实现虚拟现实(VR)应用中光线追踪等应用的时间保证,并提供确定性的调试机制。例如,虚拟现实(VR)需要一致的帧速率和刷新或者用户体验降级并且最终可能导致用户不适。可能优选的是绘制错误的图像而不是降低刷新率并导致用户经历眩晕或恶心。可编程超时还可以允许单步骤调试模式对硅启动和内部调试有用。抢占机制和前进保证是用于DirectX光线追踪(DXR)和OptiXTM中的光线追踪的TTU 700的有用机制。
其他示例性实现
在其他实施方式中,每当TTU 700在特定光线上前进时,其设置位或标志。这将避免需要额外的步骤来保证进行了前进,代价是与读取和写入附加位或标志相关的附加面积和电路复杂性。
堆栈是有用的但不是实现示例非限制性实现所必需的。例如,无堆栈遍历方法可用于遍历BVH。实际上,图9中所示的示例非限制性TTU 700实现是无堆栈遍历架构和使用可以无限制地增长的堆栈的传统方法之间的混合。在一个示例中,由SMU 740管理的“短堆栈”可以限于当前实现中的N个条目。
管理抢占有助于具有指示TTU 700正在遍历当前BVH的何处的某种机制,以避免必须重新开始并且在抢占之后重复先前的工作(当然这将不提供前进)。
在一些示例非限制性方法中,可以用位追踪替换堆栈,该位追踪指示已经遍历了二进制树、图形等的哪些部分。TTU 700可以使用这种或其他机制来追踪光线正在遍历当前BVH的哪个位置。这样的追踪可以导致TTU 700可以提供给SM 132以便保管的数据对象或其他指示符,并且SM最终将其返回到TTU以使TTU能够在其停止的地方继续。这样的数据将用于两个目的:TTU 700在BVH遍历中的位置的表示以及它是如何到达那里的,并且允许该表示的改变来指示已经进行了前进。
虽然抢占机制使得TTU 700在非限制性实施方式中停止处理所有光线,但是抢占机制可以阻止TTU仅处理光线子集或甚至仅处理单个光线。例如,在非限制性示例性实现中,每个TTU 700可以服务两个或更多个SM 132。如果只有一个SM 132被抢占,则可能希望仅抢占被抢占的SM查询的光线,同时允许TTU 700继续处理来自另一个未被抢占的SM的光线。在其他示例中,SM 132可以提供更精细的控制,其中例如SM 132可以逐个线程地中断其处理,并命令TTU 700停止它为特定线程所做的工作。这将提供更复杂的接口,并且将要求SM 132追踪哪个未完成的光线处理请求与哪个线程相关联。如上所述,使TTU 700内的SMU740追踪哪些未完成的光线与哪些尚未响应的查询相关联可能更有效。在如上所述的超时或周期限制的情况下,在一些应用中,SM 132可以更简单地向TTU 700提供每条光线的目标并允许TTU用其相关目标追踪所有光线。
包括光线追踪的示例性图像生成管线
上述光线追踪和其他能力可以以各种方式使用。例如,除了用于使用光线追踪来渲染场景之外,它们还可以与扫描变换技术结合实现,例如在扫描变换3D模型的几何构建块(即,诸如三角形的多边形图元)以用于生成用于显示的图像(例如,在图1中所示的显示器150上)的上下文中。图14示出了根据实施例的用于处理图元以提供图像的图像像素值的示例性流程图。
如图14所示,可以响应于接收到用户输入而生成3D模型的图像(步骤1652)。用户输入可以是显示图像或图像序列的请求,诸如在与应用程序(例如,游戏应用程序)交互期间执行的输入操作。响应于用户输入,系统使用传统的GPU 3D图形管线执行场景的3D模型几何图元的扫描变换和光栅化(步骤1654)。几何图元的扫描变换和光栅化可以包括例如处理3D模型的图元以使用传统技术(诸如本领域技术人员所公知的照明、变换、纹理映射、光栅化等)来确定图像像素值,下面结合图18讨论。生成的像素数据可以写入帧缓冲器。
在步骤1656中,可以使用TTU硬件加速从光栅化图元上的一个或更多个点追踪一个或更多个光线。可以根据本申请中公开的一种或更多种光线追踪能力来追踪光线。基于光线追踪的结果,可以修改存储在缓冲器中的像素值(步骤1658)。在一些应用中,修改像素值可以例如通过应用更逼真的反射和/或阴影来改善图像质量。使用存储在缓冲器中的修改的像素值显示图像(步骤1660)。
在一个示例中,可以使用关于图15-图17、图19、图20、图21和/或图22描述的处理系统来实现几何图元的扫描变换和光栅化,并且可以由SM 132使用关于图9描述的TTU架构来实现光线追踪,以添加进一步的可视化特征(例如镜面反射、阴影等)。图14仅仅是非限制性示例-SM 132可以自己使用所描述的TTU而无需纹理处理或其他传统3D图形处理来产生图像,或者SM可以采用纹理处理和其他传统3D图形处理而无需所描述的TTU来产生图像。SM还可以根据应用在软件中实现任何期望的图像生成或其他功能,以提供不受纹理映射硬件、树遍历硬件或其他图形管线硬件提供的硬件加速特征界定的任何期望的可编程功能。
包括光线追踪的示例性并行处理架构
上面描述的TTU结构可以在示例性非限制性并行处理系统架构中实现,或者与其相关联,例如下面结合图15-图22所描述的。这种并行处理架构可用于例如实现图1的GPU130。
示例性并行处理架构
图15示出了示例非限制性的并行处理单元(PPU)1700。在一个实施例中,PPU 1700是在一个或更多个集成电路器件上实现的多线程处理器。PPU 1700是设计用于并行处理许多线程的延迟隐藏架构。线程(即,执行线程)是被配置为由PPU 1700执行的指令集的实例化。在一个实施例中,PPU 1700被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成二维(2D)图像数据,用于在显示设备(诸如液晶显示(LCD)设备、有机发光二极管(OLED)设备、透明发光二极管(TOLED)设备、场发射显示器(FED)、场顺序显示器、投影显示器、头戴式显示器或任何其他所需显示器)上显示。在其他实施例中,PPU 1700可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
例如,一个或更多个PPU 1700可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 1700可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等。
PPU 1700可以包括在台式计算机、膝上型计算机、平板计算机、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、车辆、头戴式显示器、手持电子设备等中。在一个实施例中,PPU 1700体现在单个半导体衬底上。在另一个实施例中,PPU 1700与一个或更多个其他器件(例如,附加PPU 1700、存储器1704、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等)一起被包括在片上系统(SoC)中。
在一个实施例中,PPU 1700可以被包括在包括一个或更多个存储器器件1704的图形卡上。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 1700可以是包括在主板的芯片组中的集成图形处理单元(iGPU)或并行处理器。
如图15所示,PPU 1700包括输入/输出(I/O)单元1705、前端单元1715、调度器单元1720、工作分配单元1725、集线器1730、交叉开关(Xbar)1770、一个或更多个通用处理集群(GPC)1750以及一个或更多个分区单元1780。PPU 1700可以经由一个或更多个高速NVLink1710互连连接到主机处理器或其他PPU 1700。PPU 1700可以经由互连1702连接到主机处理器或其他外围设备。PPU 1700还可以连接到包括多个存储器设备1704的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)器件。DRAM器件可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM裸晶(die)堆叠在每个器件内。
NVLink 1710互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 1700,支持PPU 1700和CPU之间的高速缓存一致性以及CPU主控。数据和/或命令可以由NVLink 1710通过集线器1730发送到PPU 1700的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图21更详细地描述NVLink 1710。
I/O单元1705被配置为通过互连1702从主机处理器(未示出)发送和接收通信(即,命令、数据等)。I/O单元1705可以经由互连1702直接与主机处理器通信,或通过一个或更多个中间设备(诸如存储器桥)与主机处理器通信。在一个实施例中,I/O单元1705可以经由互连1702与一个或更多个其他处理器(例如,一个或更多个PPU 1700)通信。在一个实施例中,I/O单元1705实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连1702是PCIe总线。在替代实施例中,I/O单元1705可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元1705对经由互连1702接收的分组进行解码。在一个实施例中,分组表示被配置为使PPU 1700执行各种操作的命令。I/O单元1705按照命令指定将解码的命令发送到PPU 1700的各种其他单元。例如,一些命令可以被发送到前端单元1715。其他命令可以被发送到集线器1730或PPU 1700的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元1705被配置为在PPU 1700的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 1700提供工作量用于处理。工作量可以包括要由那些指令处理的若干指令和数据。缓冲区是存储器中可由主机处理器和PPU 1700两者访问(即,读/写)的区域。例如,I/O单元1705可以被配置为经由通过互连1702发送的存储器请求访问连接到互连1702的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 1700发送指向命令流开始的指针。前端单元1715接收指向一个或更多个命令流的指针。前端单元1715管理一个或更多个流,从流读取命令并将命令转发到PPU 1700的各个单元。
前端单元1715耦合到调度器单元1720,调度器单元1720配置各种GPC 1750以处理由一个或更多个流定义的任务。调度器单元1720被配置为追踪与由调度器单元1720管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 1750,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元1720管理一个或更多个GPC 1750上的多个任务的执行。
调度器单元1720耦合到工作分配单元1725,工作分配单元1725被配置为分派任务以在GPC 1750上执行。工作分配单元1725可以追踪从调度器单元1720接收到的多个调度任务。在一个实施例中,工作分配单元1725为每个GPC 1750管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个槽(例如,32个槽),其包含被指派为由特定GPC 1750处理的任务。活动任务池可以包括多个槽(例如,4个槽),用于正在由GPC 1750主动处理的任务。当GPC 1750完成任务的执行时,该任务从GPC 1750的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 1750上执行。如果GPC 1750上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 1750中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 1750上执行。
工作分配单元1725经由XBar(交叉开关)1770与一个或更多个GPC 1750通信。XBar1770是将PPU 1700的许多单元耦合到PPU 1700的其他单元的互连网络。例如,XBar 1770可以被配置为将工作分配单元1725耦合到特定的GPC 1750。虽然没有明确示出,但PPU 1700的一个或更多个其他单元也可以经由集线器1730连接到XBar 1770。
任务由调度器单元1720管理并由工作分配单元1725分派给GPC 1750。GPC 1750被配置为处理任务并生成结果。结果可以由GPC 1750内的其他任务消耗,经由XBar 1770路由到不同的GPC 1750,或者存储在存储器1704中。结果可以经由分区单元1780写入存储器1704,分区单元1780实现用于从存储器1704读取数据和/或向存储器1704写入数据的存储器接口。结果可以经由NVLink1710发送到另一个PPU 1704或CPU。在一个实施例中,PPU1700包括数目为U的分区单元1780,其等于耦合到PPU 1700的独立且不同的存储器设备1704的数目。下面将结合图16更详细地描述分区单元1780。
在一个实施例中,主机处理器(例如,图1的处理器120)执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序,以调度用于在PPU 1700上执行的操作。在一个实施例中,多个计算机应用程序由PPU 1700同时执行,并且PPU 1700为多个计算机应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(即API调用),其使得驱动程序内核生成一个或更多个任务以由PPU1700执行。驱动程序内核将任务输出到正在由PPU 1700处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括用于执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图19更详细地描述线程和协作线程。
示例性存储器分区单元
MMU 1890提供GPC 1750和分区单元1780之间的接口。MMU 1890可以提供虚拟地址到物理地址的转换,存储器保护和存储器请求的仲裁。在一个实施例中,MMU 1890提供一个或更多个转换后备缓冲器(TLB),用于执行虚拟地址到存储器1704中的物理地址的转换。
图16示出了根据实施例的图15的PPU 1700的存储器分区单元1780。如图16所示,存储器分区单元1780包括光栅操作(ROP)单元1850、二级(L2)高速缓存1860和存储器接口1870。存储器接口1870耦合到存储器1704。存储器接口1870可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 1700包含U个存储器接口1870,每对分区单元1780一个存储器接口1870,其中每对分区单元1780连接到相应的存储器设备1704。例如,PPU 1700可以连接到多达Y个存储器设备1704,例如高带宽存储器堆栈或图形双数据速率,版本5,同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口1870实现HBM2存储器接口并且Y等于U的一半。在一个实施例中,HBM2存储器堆栈与PPU 1700位于相同的物理封装上,与传统的GDDR5SDRAM系统相比,其提供了相当大的功率和面积节省。在一个实施例中,每个HBM2堆栈包括四个存储器裸晶并且Y等于4,HBM2堆栈包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器1704支持单纠错双错误检测(SECDED)纠错码(ECC)以保护数据。ECC为对数据损坏敏感的计算应用程序提供更高的可靠性。可靠性在大规模集群计算环境中尤其重要,其中PPU 1700处理非常大的数据集和/或长时间运行应用程序。
在一个实施例中,PPU 1700实现多级存储器层次。在一个实施例中,存储器分区单元1780支持统一存储器,以为CPU和PPU 1700存储器提供单个统一虚拟地址空间,从而实现虚拟存储器系统之间的数据共享。在一个实施例中,追踪PPU 1700对位于其他处理器上的存储器的访问频率,以确保将存储器页面移动到更频繁地访问页面的PPU 1700的物理存储器。在一个实施例中,NVLink 1710支持地址转换服务,允许PPU 1700直接访问CPU的页表并由PPU 1700提供对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 1700之间或在PPU 1700和CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元1780可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行该传输。在传统系统中,存储器被固定(即,不可分页)以用于多个处理器之间的多个复制引擎操作,从而大大减少了可用存储器。使用硬件页面错误,可以将地址传递给复制引擎,而不必担心存储器页面是否驻留,并且复制过程是透明的。
来自存储器1704或其他系统存储器的数据可以由存储器分区单元1780获取并存储在L2高速缓存1860中,L2高速缓存1860位于芯片上并且在各种GPC 1750之间共享。如图所示,每个存储器分区单元1780包括与相应的存储器设备1704相关联的L2高速缓存1860的一部分。然后,可以在GPC 1750内的各种单元中实现较低级的高速缓存。例如,SM 1840中的每一个可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 1840的专用存储器。可以获取来自L2高速缓存1860的数据并将其存储在每个L1高速缓存中,以便在SM 1840的功能单元中进行处理。L2高速缓存1860被耦合到存储器接口1870和XBar 1770。
ROP单元1850执行与像素颜色有关的图形光栅操作,例如颜色压缩、像素混合等。ROP单元1850还结合光栅引擎1825实现深度测试,接收与来自光栅引擎1825的剔除引擎的像素片段相关联的样本位置的深度。针对深度缓冲器中的对应深度测试与片段关联的样本位置的深度。如果片段通过样本位置的深度测试,则ROP单元1850更新深度缓冲器并将深度测试的结果发送到光栅引擎1825。应当理解,分区单元1780的数量可以不同于GPC 1750的数量,并且因此每个ROP单元1850可以耦合到每个GPC 1750。ROP单元1850追踪从不同GPC1750接收的分组,并且确定由ROP单元1850生成的结果通过Xbar 1770被路由到哪个GPC1750。虽然ROP单元1850被包括在图16中的存储器分区单元1780内,但在其他实施例中,ROP单元1850可以在存储器分区单元1780之外。例如,ROP单元1850可以驻留在GPC 1750或另一单元中。
示例性通用处理群集
图17示出了根据一个实施例的图15的PPU 1700的GPC 1750。如图17所示,每个GPC1750包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 1750包括管线管理器1810、预光栅操作单元(PROP)1815、光栅引擎1825、工作分配交叉开关(WDX)1880、存储器管理单元(MMU)1890以及一个或更多个数据处理集群(DPC)1820。应当理解,图17的GPC 1750可以包括代替图17中所示单元的其他硬件单元或除图17中所示单元之外的其他硬件单元。
在一个实施例中,GPC 1750的操作由管线管理器1810控制。管线管理器1810管理用于处理分配给GPC 1750的任务的一个或更多个DPC 1820的配置。在一个实施例中,管线管理器1810可以配置一个或更多个DPC 1820中的至少一个来实现图形渲染管线的至少一部分。
包括在GPC 1750中的每个DPC 1820包括M管道控制器(MPC)1830、图元引擎1835、一个或更多个SM 1840、一个或更多个纹理单元1842以及一个或更多个TTU 700。SM 1840可以与上述SM 132类似地构造。MPC 1830控制DPC 1820的操作,将从管线管理器1810接收的分组路由到DPC 1820中的适当单元。例如,与顶点相关联的分组可以被路由到图元引擎1835,其被配置为获取与来自存储器1704的顶点相关联的顶点属性。相反,与着色器程序相关联的分组可以被发送到SM 1840。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图15中所示的固定功能图形处理单元被绕过,创建一个更简单的编程模型。在通用并行计算配置中,工作分配单元1725将线程块直接分配和分发给DPC 1820。块中的线程执行相同的程序,在计算中使用唯一的线程ID以确保每个线程生成唯一的结果,使用SM 1840执行程序并执行计算,使用共享存储器/L1高速缓存1970以在线程之间通信,并且使用LSU 1954以通过共享存储器/L1高速缓存1970和存储器分区单元1780读取和写入全局存储器。当配置用于通用并行计算时,SM 1840还可以写入调度器单元1720可以用来在DPC 1820上启动新工作的命令。TTU 700可以用于在通用计算的上下文中加速空间查询。
图形渲染管线
DPC 1820可以被配置为在可编程流式多处理器(SM)1840上执行顶点着色程序,其可以采用TTU 700加速某些着色操作。管线管理器1810还可以被配置为将从工作分配单元1725接收的分组路由到GPC 1750中适当的逻辑单元。例如,一些分组可以被路由到PROP1815和/或光栅引擎1825中的固定功能硬件单元,而其他分组可以被路由到DPC 1820以供图元引擎1835或SM 1840处理。在一个实施例中,管线管理器1810可以配置一个或更多个DPC 1820中的至少一个以实现神经网络模型和/或计算管线。
PROP单元1815被配置为将由光栅引擎1825和DPC 1820生成的数据路由到光栅操作(ROP)单元,其结合图16更详细地描述。PROP单元1815还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎1825包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎1825包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元相关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且未被剔除的片段被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎1825的输出包括例如要由在DPC 1820内实现的片段着色器处理的片段。
更详细地,PPU 1700被配置为接收指定用于处理图形数据的着色器程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形条等。通常,图元包括指定图元的多个顶点的数据(例如,在模型空间坐标系中)以及与图元的每个顶点相关联的属性。PPU 1700可以被配置为使用例如TTU 700作为硬件加速资源来处理图元以生成帧缓冲器(即,用于显示器的每个像素的像素数据)。
应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如系统存储器或存储器1704)。模型数据定义可在显示器上可见的每个对象。如上所述,模型数据还可以定义如上描述的一个或更多个BVH。然后,应用程序对驱动程序内核进行API调用,请求呈现和显示模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行处理模型数据的操作。命令可以引用要在PPU 1700的SM 1840上实现的不同着色器程序,包括顶点着色器、外壳着色器、域着色器、几何着色器、像素着色器、光线生成着色器、光线相交着色器、光线碰撞着色器和光线未碰撞着色器中的一个或更多个(这些着色器对应于DXR API定义的着色器,忽略“最近碰撞”和“任意碰撞”着色器之间的任何区别;参阅https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-ray-tracing/)。例如,SM1840中的一个或更多个可以被配置为执行顶点着色器程序,该顶点着色器程序处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 1840可以被配置为同时执行不同的着色器程序。例如,SM 1840的第一子集可以被配置为执行顶点着色器程序,而SM 1840的第二子集可以被配置为执行像素着色器程序。SM 1840的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存1860和/或存储器1704(参见图16)。在经处理的顶点数据被光栅化(即,从三维数据变换成屏幕空间中的二维数据)以产生片段数据之后,SM 1840的第二子集执行像素着色器以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并写入存储器1704中的帧缓冲器。顶点着色器程序和像素着色器程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到场景的所有模型数据都已被渲染到帧缓冲器。然后,帧缓冲器的内容被发送到显示控制器以在显示设备上显示。
图18是由图15的PPU 1700实现的图形处理管线2000的概念图。图形处理管线2000是被实现为从3D几何数据生成2D计算机生成的图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更有效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线2000接收输入数据2001,其从图形处理管线2000的一个阶段被发送到下一个阶段以生成输出数据2002。在一个实施例中,图形处理管线2000可以表示由API定义的图形处理管线。作为选择,图形处理管线2000可以在前面的附图和/或任何后续附图的功能和架构的上下文中实现。如上面参考图14所讨论的那样,光线追踪可用于改善由几何图元的光栅化生成的图像质量。在一些实施例中,本申请中公开的光线追踪操作和TTU结构可以应用于图形处理管线2000的一个或更多个状态,以改善主观图像质量。
如图18所示,图形处理管线2000包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段2010,顶点着色阶段2020,图元组装阶段2030,几何着色阶段2040,视口缩放、剔除和裁剪(VSCC)阶段2050,光栅化阶段2060,片段着色阶段2070和光栅操作阶段2080。在一个实施例中,输入数据2001包括配置处理单元以实现图形处理管线2000的阶段的命令和由阶段处理的几何图元(例如,点、线、三角形、四边形、三角形条或扇形等)。输出数据2002可以包括被复制到帧缓冲器中的像素数据(即,颜色数据)或存储器中的其他类型的表面数据结构。
数据组装阶段2010接收输入数据2001,其指定高阶表面的顶点数据、图元等。数据组装阶段2010在临时存储或队列中收集顶点数据,例如通过从主机处理器接收包括指向存储器中的缓冲器的指针的命令以及从缓冲器读取顶点数据。然后将顶点数据被发送到顶点着色阶段2020以进行处理。
顶点着色阶段2020通过对每个顶点执行一次一组操作(即,顶点着色器或程序)来处理顶点数据。例如,顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(即,<x,y,z,w>)。顶点着色阶段2020可以操纵各个顶点属性,例如位置、颜色、纹理坐标等。换句话说,顶点着色阶段2020对顶点坐标或与顶点相关联的其他顶点属性执行操作。这些操作通常包括照明操作(即,修改顶点的颜色属性)和变换操作(即,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,通过将坐标乘以将坐标从对象坐标空间变换为世界空间或归一化设备坐标(NCD)空间的矩阵来进行变换。顶点着色阶段2020生成变换的顶点数据,该变换的顶点数据被发送到图元组装阶段2030。
图元组装阶段2030收集由顶点着色阶段2020输出的顶点,并将顶点分组为几何图元,以供几何着色阶段2040处理。例如,图元组装阶段2030可被配置为将每三个连续顶点分组为几何图元(即,三角形),用于发送到几何着色阶段2040。在一些实施例中,特定顶点可以重复用于连续几何图元(例如,三角形条带中的两个连续三角形可以共享两个顶点)。图元组装阶段2030将几何图元(即,关联顶点的集合)发送到几何着色阶段2040。
几何着色阶段2040通过对几何图元执行一组操作(即,几何着色器或程序)来处理几何图元。曲面细分操作可以从每个几何图元生成一个或更多个几何图元。换句话说,几何着色阶段2040可以将每个几何图元细分为两个或更多个几何图元的更精细网格,以供图形处理管线2000的其余部分处理。几何着色阶段2040将几何图元发送到视口SCC阶段2050。
在一个实施例中,图形处理管线2000可以在流式多处理器和顶点着色阶段2020、图元组装阶段2030、几何着色阶段2040、片段着色阶段2070、光线追踪着色器和/或与其相关联的硬件/软件中操作,可以顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段2050可以利用该数据。在一个实施例中,可以将由图形处理管线2000中的一个或更多个阶段处理的图元数据写入高速缓存(例如,L1高速缓存、顶点高速缓存等)。在这种情况下,在一个实施例中,视口SCC阶段2050可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段2050和光栅化阶段2060被实现为固定功能电路。
视口SCC阶段2050执行几何图元的视口缩放、剔除和裁剪。渲染的每个表面与抽象摄像机位置相关联。摄像机位置表示观看者观看场景的位置,并定义包围场景对象的视锥体。视锥体可包括观察平面,后平面和四个裁剪平面。完全在视锥体之外的任何几何图元可以被剔除(即,丢弃),因为该几何图元将不会对最终渲染场景做出贡献。可以裁剪部分位于视锥体内部并且部分位于视锥体外部的任何几何图元(即,变换为包围在视锥体内的新的几何图元)。此外,几何图元可以各自基于视锥体的深度来缩放。然后,将所有可能可见的几何图元发送到光栅化阶段2060。
光栅化阶段2060将3D几何图元转换为2D片段(例如,能够用于显示等)。光栅化阶段2060可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以插入各种属性。光栅化阶段2060还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段2060生成片段数据(即,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被发送到片段着色阶段2070。
片段着色阶段2070通过对每个片段执行一组操作(即,片段着色器或程序)来处理片段数据。片段着色阶段2070可以生成片段的像素数据(即,颜色值),诸如通过使用片段的内插纹理坐标执行照明操作或采样纹理映射。片段着色阶段2070生成发送到光栅操作阶段2080的像素数据。
光栅操作阶段2080可以对像素数据执行各种操作,诸如执行阿尔法测试,模板测试,以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段2080已经完成处理像素数据(即,输出数据2002)时,可以将像素数据写入渲染目标(诸如帧缓冲器、颜色缓冲器等)。
应当理解,除了上述一个或更多个阶段之外或代替上述一个或更多个阶段,可以在图形处理管线2000中包括一个或更多个附加阶段。抽象图形处理管线的各种实现可以实现不同的阶段。此外,在一些实施例中(例如,几何着色阶段2040),可以从图形处理管线中排除上述一个或更多个阶段。其他类型的图形处理管线也考虑在本公开的范围内。此外,图形处理管线2000的任何阶段可以由图形处理器(诸如PPU 200)内的一个或更多个专用硬件单元实现。图形处理管线2000的其他阶段可以由可编程硬件单元(诸如PPU 1700的SM 1840的)实现。
图形处理管线2000可以经由由主机处理器(诸如CPU 120)执行的应用程序来实现。在一个实施例中,设备驱动器可以实现定义可以由应用程序利用以生成用于显示的图形数据的各种功能的应用程序编程接口(API)。设备驱动程序是包括控制PPU 1700的操作的多个指令的软件程序。API为程序员提供抽象,其允许程序员利用专用图形硬件(例如PPU1700)来生成图形数据,而不需要程序员利用PPU 1700的特定指令集。应用程序可以包括被路由到PPU 1700的设备驱动器的API调用。设备驱动器解释API调用并执行各种操作以响应API调用。在某些情况下,设备驱动器可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动器可以至少部分地通过利用CPU和PPU 1700之间的输入/输出接口在PPU 1700上启动操作来执行操作。在一个实施例中,设备驱动器被配置为利用PPU 1700的硬件来实现图形处理管线2000。
可以在PPU 1700内执行各种程序以便实现图形处理管线2000的各个阶段。例如,设备驱动器可以在PPU 1700上启动内核,以在一个SM 1840(或多个SM 1840)上执行顶点着色阶段2020。设备驱动器(或由PPU 1800执行的初始内核)还可以在PPU 1800上启动其他内核,以执行图形处理管线2000的其他阶段,例如几何着色阶段2040和片段着色阶段2070。此外,图形处理管线2000的一些阶段可以在固定单元硬件上实现,例如在PPU 1800内实现的光栅化器或数据汇编器上。可以理解,来自一个内核的结果可以在由SM 1840上的后续内核处理之前通过一个或更多个中间固定功能硬件单元来处理。
示例性流式多处理器
SM 1840包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM1840是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程,其包括线程束)。在一个实施例中,SM 1840实现SIMD(单指令、多数据)体系架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 1840实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使能线程束和线程束中的串行执行之间的并发。在另一个实施例中,为每个个体线程维护程序计数器、调用栈和执行状态,使能在线程束内和线程束之间的所有线程之间的相等并发。当为每个个体线程维护执行状态时,执行相同指令的线程可以收敛并且并行执行以获得最大效率。
图19示出了根据一个实施例的图17的流式多处理器1840。如图19所示,SM 1840包括指令高速缓存1905、一个或更多个调度器单元1910、寄存器文件1920、一个或更多个处理核心1950、一个或更多个特殊功能单元(SFU)1952、一个或更多个加载/存储单元(LSU)1954、互连网络1980、共享存储器/L1高速缓存1970。
如上所述,工作分配单元1725分派任务以在PPU 1700的GPC 1750上执行。任务被分配给GPC 1750内的特定DPC 1820,并且如果任务与着色器程序相关联,则该任务可以被分配给SM 1840。调度器单元1910从工作分配单元1725接收任务并且管理指派给SM 1840的一个或更多个线程块的指令调度。调度器单元1910调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元1910可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心1950、SFU1952和LSU 1954)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的屏障(barrier)(即,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collectivegroup-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(即,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作伙伴并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元1915被配置为向一个或更多个功能单元发送指令。在该实施例中,调度器单元1910包括两个分派单元1915,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元1910可以包括单个分派单元1915或附加分派单元1915。
每个SM 1840包括寄存器文件1920,其提供用于SM 1840的功能单元的一组寄存器。在一个实施例中,寄存器文件1920在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件1920的专用部分。在另一个实施例中,寄存器文件1920在由SM 1840执行的不同线程束之间被划分。寄存器文件1920为连接到功能单元的数据路径的操作数提供临时存储。图20示出了SM 1840中的寄存器文件的示例性配置。
每个SM 1840包括L个处理核心1950。在一个实施例中,SM 1840包括大量(例如128个等)不同的处理核心1950。每个核心1950可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心1950包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心1950中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心对16位浮点输入数据进行运算并与32位浮点进行累加。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA 9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 1840还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU1952。在一个实施例中,SFU 1952可以包括树遍历单元,其被配置为遍历层次树形数据结构。在一个实施例中,SFU 1952可以包括被配置为执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器1704加载纹理映射(例如,纹理像素的2D阵列)并且对纹理映射进行采样以产生经采样的纹理值,用于在由SM 1840执行的着色器程序中使用。在一个实施例中,纹理映射被存储在共享存储器/L1高速缓存1970中。纹理单元实现纹理操作,诸如使用mip映射(即,不同细节层次的纹理映射)的过滤操作。在一个实施例中,每个SM 1740包括两个纹理单元。
每个SM 1840还包括N个LSU 1954,其实现共享存储器/L1高速缓存1970和寄存器文件1920之间的加载和存储操作。每个SM 1840包括互连网络1980,其将每个功能单元连接到寄存器文件1920以及将LSU 1954连接到寄存器文件1920、共享存储器/L1高速缓存1970。在一个实施例中,互连网络1980是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件1920中的任何寄存器,以及将LSU 1954连接到寄存器文件和共享存储器/L1高速缓存1970中的存储器位置。
共享存储器/L1高速缓存1970是片上存储器阵列,其允许数据存储和SM 1840与图元引擎1835之间以及SM 1840中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存1970包括128KB的存储容量并且在从SM 1840到分区单元380的路径中。共享存储器/L1高速缓存1970可以用于高速缓存读取和写入。共享存储器/L1高速缓存1970、L2高速缓存1860和存储器1704中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供了最佳的总体性能。该容量可由不使用共享存储器的程序用作高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存1970内的集成使共享存储器/L1高速缓存1970起到用于流式传输数据的高吞吐量管道的作用,并且同时提供高带宽和对频繁重用数据的低延迟的访问。
图20示出了SM 1840的一个示例性架构。如图17所示,SM 1840可以耦合到一个或更多个纹理单元1842和/或一个或更多个TTU 700。作为性能和区域之间的折衷,一个示例性非限制性实施例可以包括单个纹理单元1842和/或每组SM 1840单个TTU 700(例如,参见图17)。TTU 700可以经由存储器输入-输出中的TTU输入/输出块与SM 1840通信,并且经由专用读取接口与L1高速缓存通信。在一个示例性实施例中,TTU 700仅从主存储器读取并且不写入主存储器。
示例性更详细的TTU架构
如上所述,TTU 700可以是SM 1840的协处理器。与纹理处理器类似,它通过一组SM指令暴露,访问存储器作为L1高速缓存的只读客户端,并返回结果进入SM寄存器文件。与一些纹理处理器不同,对于典型查询,可能需要传入和传出TTU 700的数据量使得在一些实施例中难以在单个指令中指定所有源寄存器和目的地寄存器(并且因为大多数这样的数据每个线程是唯一的,没有纹理头和采样器的TTU模拟)。结果,在一些实施例中,TTU 700通过多指令序列编程。在一些实现中,该序列可以概念化为单个“宏指令”。
同样像纹理单元1842,在一些实现中,TTU 700可以依赖于由软件预先填充的存储器中的某些只读数据结构。这些包括:
--一个或更多个BVH,其中每个BVH例如是轴对齐的包围盒的树,以压缩格式存储,与未压缩的表示相比,其大大减少了存储器通信量。BVH中的每个节点都存储为complet结构,其中一些实现中的大小和对齐与L1高速缓存行的大小和对齐相匹配。优选地,将给定父级的子级complet连续地存储在存储器中,并且以压缩形式存储子指针。
--零个或更多个实例节点,其提供将一个BVH的叶连接到另一个BVH的根的方式。实例节点可以是也对齐的数据结构。该结构可以包含指向子BVH的指针,影响子BVH中的背面剔除行为的标记,以及对应于从顶层BVH(通常为“世界空间”)的坐标系到子BVH(通常为“对象空间”)的坐标系的任意变换矩阵(在齐次坐标中)的前三行的矩阵。在一些实施例中,矩阵的最后一行在一些实现中隐含地为(0,0,0,1)。
--零个或更多个三角形或其他图元缓冲区,包含例如存储为每顶点坐标的三元组或以TTU 700理解的无损压缩格式存储的三角形。此外,可以为每个三角形或其他图元提供α位,指示需要由软件进行特殊处理的三角形,以确定三角形实际上是否与给定光线相交。三角形缓冲区可以组织成块。也可能存在每个三角形力-无-剔除功能位。设置时,该位表示三角形的两侧应被视为相对于剔除的前向或后向,即,不应该剔除三角形,因为光线与“后”而不是“前”相交。最简单的用例是用于表示叶的单个三角形,如果光线在背面上碰撞它,我们仍然可以看到叶。
在一些实施例中,TTU 700是无状态的,意味着在查询之间不在TTU中维持架构状态。同时,在SM 1840上运行软件对要求继续先前的查询通常是有用的,这意味着相关状态应该由TTU 700写入寄存器,然后在寄存器中传递回TTU(通常原地)继续。该状态可以采用遍历堆栈的形式,其追踪BVH遍历的进展。
还可以提供少量堆栈初始化器以开始给定类型的新查询,例如:
·从complet开始遍历
·光线与一系列三角形的交点
·光线与一系列三角形的交点,然后从complet开始遍历
·从三角形缓冲区中获取给定三角形的顶点
·可选支持在“从complet开始的遍历”和“光线与一系列三角形的交点”前面的实例变换。
顶点获取是一种简单查询,其可以由包括堆栈初始化器的请求数据指定而不是其他任何东西。其他查询类型可能需要指定光线或光束,以及堆栈或堆栈初始化器以及描述查询详细信息的各种光线标记。光线由其三坐标原点、三坐标方向以及沿光线的t参数的最小值和最大值给定。另外通过第二原点和方向给定光束。
各种光线标记可用于控制遍历行为、背面剔除和各种子节点类型的处理的各个方面,受制于可选的rayOp测试的通过/失败状态。RayOps为TTU的容量增加了相当大的灵活性。在一些示例性实施例中,RayOps部分引入两个光线标记版本,其可以基于对光线传送的数据的指定操作和存储在complet中的数据来动态选择。为了探索这样的标记,首先要了解BVH中允许的不同类型的子节点,以及TTU 700可以返回SM的各种碰撞类型。示例性节点类型是:
■子complet(即,内部节点)默认情况下,TTU 700通过下降到子complet继续遍历。
■三角形范围,对应于三角形缓冲区内的一组连续三角形
(1)默认情况下,通过三角形相交测试并相应地缩短光线,由TTU 700本地处理光线遇到三角形范围。如果遍历完成并且三角形被碰撞,则默认行为是将三角形ID以及交点的t值和重心坐标返回到SM 1840。这是“三角”碰撞类型。
(2)默认情况下,即使遍历尚未完成,设置了α位的相交三角形也会返回到SM1840。如果软件确定三角形实际上是透明的,则返回的遍历堆栈包含继续遍历所需的状态。
(3)在一些实施例中,光束不支持三角形相交,因此遇到的三角形范围默认返回到SM 1840作为“TriRange”碰撞类型,其包括指向与范围重叠的第一个三角形块的指针,指定范围的参数,以及与叶包围盒交点的t值。
■项目范围,由索引(从存储在complet中的用户提供的“项目范围基础”导出)和项目计数组成。
默认情况下,项目范围作为“ItemRange”碰撞类型返回到SM 1840,其由例如索引、计数和与叶包围盒交点的t值组成。
■实例节点。
在一些实施例中,TTU 700可以通过将光线变换为实例BVH的坐标系来本地处理一级实例化。可以用软件处理附加层的实例化(或每个其他层的实例化,取决于策略)。为此提供“实例节点”碰撞类型,包括指向实例节点的指针和与叶包围盒的交点的t值。在其他实现中,硬件可以处理两层、三层或更多层的实例化。
除了节点特定的碰撞类型之外,还提供了通用的“NodeRef”碰撞类型,其包括指向父complet本身的指针,以及指示与哪个子项相交的ID和该子项与包围盒的交点的t值。
可以针对不正确地形成查询或BVH或者遍历期间遍历遇到问题的情况提供“错误”碰撞类型。
可以为光线或光束未碰撞场景中的所有几何形状的情况提供“无”碰撞类型。
TTU如何处理四种可能节点类型中的每一种由一组节点特定模式标记确定,该标记被设置为给定光线的查询的一部分。上面提到的“默认”行为对应于模式标记被设置为全零的情况。
标记的替代值允许剔除给定类型的所有节点,将给定类型的节点作为NodeRef碰撞类型返回到SM,或者使用它们相应的碰撞类型将三角形范围或实例节点返回到SM,而不是在TTU 700内本地处理它们。
可以提供附加模式标记以用于控制α三角形的处理。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署了具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持处理设备之间的增加的数据传输。
图21是根据一个实施例的使用图15的PPU 1700实现的处理系统1900的概念图。示例性系统1900可以被配置为实现本申请中公开的一种或更多种方法。处理系统1900包括CPU 1930、交换机1910和多个PPU 1700中的每一个以及相应的存储器1704。NVLink 1710提供每个PPU 1700之间的高速通信链路。尽管图21中示出了特定数量的NVLink 1710和互连1702连接,但是到每个PPU 1700和CPU 1930的连接的数量可以改变。交换机1910在互连1702和CPU 1930之间接口。PPU 1700、存储器1704和NVLink 1710可以位于单个半导体平台上以形成并行处理模块1925。在一个实施例中,交换机1912支持在各种不同连接和/或链路之间接口的两个或更多个协议。
在另一个实施例(未示出)中,NVLink 1710在每个PPU 1700和CPU 1930之间提供一个或更多个高速通信链路,并且交换机1912在互连1702和每个PPU 1700之间进行接口。PPU 1700、存储器1704和互连1702可以位于单个半导体平台上以形成并行处理模块1925。在又一个实施例(未示出)中,互连1702在每个PPU 1700和CPU 1930之间提供一个或更多个通信链路,并且交换机1912使用NVLink 1710在每个PPU 1700之间进行接口,以在PPU 1700之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 1710在PPU1700和CPU 1930之间通过交换机1912提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连1702在每个PPU 1700之间直接地提供一个或更多个通信链路。可以使用与NVLink 1710相同的协议将一个或更多个NVLink 1710高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块1925可以被实现为电路板衬底,并且PPU 1700和/或存储器1704中的每一个可以是封装器件。在一个实施例中,CPU 1930、交换机1912和并行处理模块1925位于单个半导体平台上。
在一个实施例中,每个NVLink 1710的信令速率是20到25千兆位/秒,并且每个PPU1700包括六个NVLink 1710接口(如图21所示,每个PPU 1700包括五个NVLink 1710接口)。每个NVLink 1710在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供1700千兆位/秒的数据传输速率。当CPU 1930还包括一个或更多个NVLink 1710接口时,NVLink1710可专门用于如图21所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 1710允许从CPU 1930到每个PPU 1700的存储器1704的直接加载/存储/原子访问。在一个实施例中,NVLink 1710支持一致性操作,允许从存储器1704读取的数据被存储在CPU 1930的高速缓存层次结构中,减少了CPU 1930的高速缓存访问延迟。在一个实施例中,NVLink 1710包括对地址转换服务(ATS)的支持,允许PPU 1700直接访问CPU 1930内的页表。一个或更多个NVLink 1710还可以被配置为以低功率模式操作。
图22示出了示例性系统1965,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统1965可以被配置为实现本申请中公开的一种或更多种方法。
如图所示,提供系统1965,其包括连接到通信总线1975的至少一个中央处理单元1930。通信总线1975可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统1965还包括主存储器1940。控制逻辑(软件)和数据被存储在主存储器1940中,主存储器1940可以采取随机存取存储器(RAM)的形式。
系统1965还包括输入设备1960、并行处理系统1925和显示设备1945,即常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备1960(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统1965。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统1965可以出于通信目的通过网络接口1935耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统1965还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器1940和/或辅助存储中。这些计算机程序在被执行时使得系统1965能够执行各种功能。存储器1940、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统1965可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
机器学习
在处理器(诸如PPU 1700)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在对象识别和分类方面进行训练,以便在识别基本对象、遮挡对象等同时还有为对象分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接的感知器(例如节点)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DLL模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高层的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别存入ATM机中的支票上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 1700支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练低,其是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 1700是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
以上引用的所有专利和出版物均通过引用并入,如同明确阐述一样。
虽然已经结合目前被认为是最实用和优选的实施例描述了本发明,但是应该理解,本发明不限于所公开的实施例,而是相反,旨在涵盖各种实施例。在所附权利要求的精神和范围内包括的修改和等同布置。
Claims (20)
1.一种提供前进保证的可中断协处理器,包括:
层次包围盒遍历电路;以及
控制电路,可操作地耦合到所述层次包围盒遍历电路并且被连接以接收抢占信号,所述控制电路确保所述层次包围盒遍历电路在响应于对所述抢占信号的断言而停止进一步前进之前进行前进。
2.如权利要求1所述的可中断协处理器,其中所述可中断协处理器是无状态的,并且所述控制电路是基于堆栈的。
3.如权利要求1所述的可中断协处理器,其中所述可中断协处理器通过确保改变堆栈的至少一个操作已经执行或将要执行来确认前进。
4.如权利要求1所述的可中断协处理器,其中所述可中断协处理器使用位阵列来追踪遍历。
5.如权利要求1所述的可中断协处理器,其中所述控制电路使用已经发生前进的推断。
6.如权利要求1所述的可中断协处理器,其中所述控制电路使用将发生堆栈修改的推断。
7.如权利要求1所述的可中断协处理器,其中所述控制电路被配置为测试某种类型的前进已经发生。
8.如权利要求7所述的可中断协处理器,其中,所述某种类型包括遍历所述层次包围盒的至少一个叶节点。
9.如权利要求1所述的可中断协处理器,其中,所述控制电路被配置为基于已经由查询指定并且已经达到某阈值的操作来测试计数器是否已经递增或递减。
10.如权利要求1所述的可中断协处理器,其中,所述可中断协处理器被配置为在遍历所述层次包围盒时以可变且不可预测的延迟自主地工作。
11.一种光线追踪设备,包括:
树遍历硬件;以及
可编程超时机制,其监视光线使用树遍历硬件遍历图形的程度,以及如果所述光线使用所述树遍历硬件的量超过所述光线的可编程阈值,则中断所述树遍历硬件。
12.如权利要求11所述的光线追踪设备,其中所述可编程超时机制是基于工作的。
13.如权利要求11所述的光线追踪设备,其中所述可编程超时机制是基于周期的。
14.如权利要求11所述的光线追踪设备,其中所述可编程超时机制是基于时间的。
15.如权利要求11所述的光线追踪设备,其中所述可编程超时机制是基于时期的。
16.如权利要求11所述的光线追踪设备,其中,所述可编程超时机制将不同的光线编程为具有不同的阈值。
17.如权利要求11所述的光线追踪设备,其中,所述可编程超时机制计数所述硬件针对所述光线执行的某些遍历操作的数量。
18.如权利要求17所述的光线追踪设备,其中,所述某些遍历操作包括叶节点遍历。
19.一种光线追踪设备,包括:
存储器,所述存储器存储3D场景的表示;
遍历电路,所述遍历电路可操作地耦合到所述存储器,所述遍历电路被配置为针对所述3D场景的所述表示处理至少一条光线;
抢占电路,所述抢占电路可操作地耦合到所述遍历电路,并且被配置为在抢占所述遍历电路之前确保所述遍历电路在针对所述3D场景处理所述至少一条光线时前进。
20.如权利要求19所述的光线追踪设备,还包括连接到所述遍历电路的至少一个堆栈,并且其中所述抢占电路包括可操作地耦合到所述至少一个堆栈的堆栈管理器,所述堆栈管理器被配置为在抢占所述遍历电路之前确保所述遍历电路修改所述至少一个堆栈。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/101,232 US10885698B2 (en) | 2018-08-10 | 2018-08-10 | Method for programmable timeouts of tree traversal mechanisms in hardware |
US16/101,232 | 2018-08-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110827388A true CN110827388A (zh) | 2020-02-21 |
CN110827388B CN110827388B (zh) | 2024-05-31 |
Family
ID=69185939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910490166.9A Active CN110827388B (zh) | 2018-08-10 | 2019-06-06 | 硬件中树遍历机制的前进和可编程超时的方法 |
Country Status (3)
Country | Link |
---|---|
US (4) | US10885698B2 (zh) |
CN (1) | CN110827388B (zh) |
DE (1) | DE102019103178A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112417746A (zh) * | 2020-11-18 | 2021-02-26 | 中北大学 | 一种基于神经网络预测碰撞检测的方法 |
CN113781624A (zh) * | 2020-06-10 | 2021-12-10 | 辉达公司 | 具有可选的世界空间变换的光线跟踪硬件加速 |
Families Citing this family (123)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2526598B (en) * | 2014-05-29 | 2018-11-28 | Imagination Tech Ltd | Allocation of primitives to primitive blocks |
US11042163B2 (en) | 2018-01-07 | 2021-06-22 | Nvidia Corporation | Guiding vehicles through vehicle maneuvers using machine learning models |
CN110352153B (zh) | 2018-02-02 | 2024-07-19 | 辉达公司 | 自主车辆中用于障碍物躲避的安全程序分析 |
US11789449B2 (en) | 2018-02-09 | 2023-10-17 | Nvidia Corporation | Controlling autonomous vehicles using safe arrival times |
CN111133447B (zh) | 2018-02-18 | 2024-03-19 | 辉达公司 | 适于自主驾驶的对象检测和检测置信度的方法和系统 |
WO2019168869A1 (en) | 2018-02-27 | 2019-09-06 | Nvidia Corporation | Real-time detection of lanes and boundaries by autonomous vehicles |
WO2019178548A1 (en) | 2018-03-15 | 2019-09-19 | Nvidia Corporation | Determining drivable free-space for autonomous vehicles |
WO2019182974A2 (en) | 2018-03-21 | 2019-09-26 | Nvidia Corporation | Stereo depth estimation using deep neural networks |
WO2019191313A1 (en) | 2018-03-27 | 2019-10-03 | Nvidia Corporation | Remote operation of vehicles using immersive virtual reality environments |
US11652827B2 (en) | 2018-06-08 | 2023-05-16 | Nvidia Corporation | Virtualized intrusion detection and prevention in autonomous vehicles |
WO2019241022A1 (en) | 2018-06-13 | 2019-12-19 | Nvidia Corporation | Path detection for autonomous machines using deep neural networks |
US11966838B2 (en) | 2018-06-19 | 2024-04-23 | Nvidia Corporation | Behavior-guided path planning in autonomous machine applications |
CN113168505B (zh) | 2018-07-17 | 2024-04-09 | 辉达公司 | 用于自主驾驶机器的基于回归的线检测 |
US10867429B2 (en) | 2018-08-10 | 2020-12-15 | Nvidia Corporation | Query-specific behavioral modification of tree traversal |
CN113056749B (zh) | 2018-09-11 | 2024-05-24 | 辉达公司 | 用于自主机器应用的未来对象轨迹预测 |
WO2020112213A2 (en) | 2018-09-13 | 2020-06-04 | Nvidia Corporation | Deep neural network processing for sensor blindness detection in autonomous machine applications |
DE112019005149T5 (de) | 2018-10-15 | 2021-07-01 | Nvidia Corporation | Verbesserte in-system-testabdeckung basierend auf detektieren von komponentendegradation |
CN113039563B (zh) | 2018-11-16 | 2024-03-12 | 辉达公司 | 学习生成用于训练神经网络的合成数据集 |
WO2020140047A1 (en) | 2018-12-28 | 2020-07-02 | Nvidia Corporation | Distance to obstacle detection in autonomous machine applications |
US11170299B2 (en) | 2018-12-28 | 2021-11-09 | Nvidia Corporation | Distance estimation to objects and free-space boundaries in autonomous machine applications |
WO2020140049A1 (en) | 2018-12-28 | 2020-07-02 | Nvidia Corporation | Distance to obstacle detection in autonomous machine applications |
WO2020150237A1 (en) | 2019-01-14 | 2020-07-23 | Nvidia Corporation | Weighted normalized automatic white balancing |
WO2020163390A1 (en) | 2019-02-05 | 2020-08-13 | Nvidia Corporation | Driving lane perception diversity and redundancy in autonomous driving applications |
US10872459B2 (en) * | 2019-02-05 | 2020-12-22 | X Development Llc | Scene recognition using volumetric substitution of real world objects |
US11004253B2 (en) * | 2019-02-21 | 2021-05-11 | Electronic Arts Inc. | Systems and methods for texture-space ray tracing of transparent and translucent objects |
WO2020185779A1 (en) | 2019-03-11 | 2020-09-17 | Nvidia Corporation | Intersection detection and classification in autonomous machine applications |
US11579629B2 (en) | 2019-03-15 | 2023-02-14 | Nvidia Corporation | Temporal information prediction in autonomous machine applications |
DE102020100685A1 (de) | 2019-03-15 | 2020-09-17 | Nvidia Corporation | Vorhersage zeitlicher informationen in autonomenmaschinenanwendungen |
WO2020190781A1 (en) | 2019-03-16 | 2020-09-24 | Nvidia Corporation | Leveraging multidimensional sensor data for computationally efficient object detection |
DE112020000369T5 (de) | 2019-03-16 | 2021-10-21 | Nvidia Corporation | Objekterfassung unter verwendung von verzerrten polygonen, die zur parkplatzerfassung geeignet ist |
KR102089269B1 (ko) * | 2019-04-11 | 2020-03-17 | 주식회사 실리콘아츠 | 포터블 레이 트레이싱 시스템에서의 버퍼링 방법 |
WO2020219303A1 (en) | 2019-04-26 | 2020-10-29 | Nvidia Corporation | Intersection pose detection in autonomous machine applications |
US11927502B2 (en) | 2019-04-29 | 2024-03-12 | Nvidia Corporation | Simulating realistic test data from transformed real-world sensor data for autonomous machine applications |
DE112020002602T5 (de) | 2019-06-03 | 2022-03-03 | Nvidia Corporation | Multi-objektverfolgung mit hilfe von korrelationsfiltern in videoanalyseanwendungen |
JP2022538813A (ja) | 2019-06-25 | 2022-09-06 | エヌビディア コーポレーション | 自律マシン・アプリケーションのための交差点領域検出及び分類 |
US12051206B2 (en) | 2019-07-25 | 2024-07-30 | Nvidia Corporation | Deep neural network for segmentation of road scenes and animate object instances for autonomous driving applications |
US11182884B2 (en) | 2019-07-30 | 2021-11-23 | Nvidia Corporation | Enhanced high-dynamic-range imaging and tone mapping |
US11449709B2 (en) | 2019-08-08 | 2022-09-20 | Nvidia Corporation | Domain restriction of neural networks through synthetic data pre-training |
WO2021030414A1 (en) | 2019-08-12 | 2021-02-18 | Nvidia Corporation | Automatic high beam control for autonomous machine applications |
WO2021041854A1 (en) | 2019-08-30 | 2021-03-04 | Nvidia Corporation | Object detection and classification using lidar range images for autonomous machine applications |
US11788861B2 (en) | 2019-08-31 | 2023-10-17 | Nvidia Corporation | Map creation and localization for autonomous driving applications |
US11885907B2 (en) | 2019-11-21 | 2024-01-30 | Nvidia Corporation | Deep neural network for detecting obstacle instances using radar sensors in autonomous machine applications |
US12080078B2 (en) | 2019-11-15 | 2024-09-03 | Nvidia Corporation | Multi-view deep neural network for LiDAR perception |
US11532168B2 (en) | 2019-11-15 | 2022-12-20 | Nvidia Corporation | Multi-view deep neural network for LiDAR perception |
US11531088B2 (en) | 2019-11-21 | 2022-12-20 | Nvidia Corporation | Deep neural network for detecting obstacle instances using radar sensors in autonomous machine applications |
US12050285B2 (en) | 2019-11-21 | 2024-07-30 | Nvidia Corporation | Deep neural network for detecting obstacle instances using radar sensors in autonomous machine applications |
US11238649B2 (en) * | 2019-11-26 | 2022-02-01 | Nature Simulation Systems Inc. | Method and system for hybrid modeling using geometric facets |
US11435756B2 (en) | 2019-12-01 | 2022-09-06 | Nvidia Corporation | Visual odometry in autonomous machine applications |
CN113994390A (zh) | 2019-12-03 | 2022-01-28 | 辉达公司 | 针对自主驾驶应用的使用曲线拟合的地标检测 |
WO2021118809A1 (en) * | 2019-12-11 | 2021-06-17 | Nvidia Corporation | Surface profile estimation and bump detection for autonomous machine applications |
US11487968B2 (en) | 2019-12-16 | 2022-11-01 | Nvidia Corporation | Neural network based facial analysis using facial landmarks and associated confidence values |
US11636609B2 (en) | 2019-12-16 | 2023-04-25 | Nvidia Corporation | Gaze determination machine learning system having adaptive weighting of inputs |
CN114845914A (zh) | 2019-12-30 | 2022-08-02 | 辉达公司 | 自主机器应用中的车道变换规划和控制 |
US11592828B2 (en) | 2020-01-16 | 2023-02-28 | Nvidia Corporation | Using neural networks to perform fault detection in autonomous driving applications |
CN115175841A (zh) | 2020-02-19 | 2022-10-11 | 辉达公司 | 自主车辆的行为规划 |
WO2021174118A1 (en) | 2020-02-26 | 2021-09-02 | Nvidia Corporation | Object detection using image alignment for autonomous machine applications |
US11966673B2 (en) | 2020-03-13 | 2024-04-23 | Nvidia Corporation | Sensor simulation and learning sensor models with generative machine learning methods |
US20230090732A1 (en) * | 2020-03-17 | 2023-03-23 | Interdigital Ce Patent Holdings, Sas | System and method for real-time ray tracing in a 3d environment |
US12001958B2 (en) | 2020-03-19 | 2024-06-04 | Nvidia Corporation | Future trajectory predictions in multi-actor environments for autonomous machine |
US11801861B2 (en) | 2020-04-01 | 2023-10-31 | Nvidia Corporation | Using image augmentation with simulated objects for training machine learning models in autonomous driving applications |
US11538231B2 (en) | 2020-04-06 | 2022-12-27 | Nvidia Corporation | Projecting images captured using fisheye lenses for feature detection in autonomous machine applications |
US11790669B2 (en) | 2020-04-27 | 2023-10-17 | Nvidia Corporation | Systems and methods for performing operations in a vehicle using gaze detection |
US11521308B2 (en) * | 2020-04-30 | 2022-12-06 | Advanced Micro Devices, Inc. | Ambient occlusion using bounding volume hierarchy bounding box tests |
US11590929B2 (en) | 2020-05-05 | 2023-02-28 | Nvidia Corporation | Systems and methods for performing commands in a vehicle using speech and image recognition |
US11830160B2 (en) | 2020-05-05 | 2023-11-28 | Nvidia Corporation | Object detection using planar homography and self-supervised scene structure understanding |
US12077190B2 (en) | 2020-05-18 | 2024-09-03 | Nvidia Corporation | Efficient safety aware path selection and planning for autonomous machine applications |
US11878682B2 (en) | 2020-06-08 | 2024-01-23 | Nvidia Corporation | Path planning and control to account for position uncertainty for autonomous machine applications |
US11302056B2 (en) | 2020-06-10 | 2022-04-12 | Nvidia Corporation | Techniques for traversing data employed in ray tracing |
US11380041B2 (en) | 2020-06-11 | 2022-07-05 | Nvidia Corporation | Enhanced techniques for traversing ray tracing acceleration structures |
US11508112B2 (en) | 2020-06-18 | 2022-11-22 | Nvidia Corporation | Early release of resources in ray tracing hardware |
US12005855B2 (en) | 2020-06-18 | 2024-06-11 | Nvidia Corporation | Machine learning-based seatbelt detection and usage recognition using fiducial marking |
US11222232B1 (en) | 2020-06-19 | 2022-01-11 | Nvidia Corporation | Using temporal filters for automated real-time classification |
WO2021262603A1 (en) | 2020-06-25 | 2021-12-30 | Nvidia Corporation | Sensor fusion for autonomous machine applications using machine learning |
US11485308B2 (en) | 2020-06-29 | 2022-11-01 | Nvidia Corporation | In-cabin hazard prevention and safety control system for autonomous machine applications |
US11682272B2 (en) | 2020-07-07 | 2023-06-20 | Nvidia Corporation | Systems and methods for pedestrian crossing risk assessment and directional warning |
US12054164B2 (en) | 2020-08-14 | 2024-08-06 | Nvidia Corporation | Hardware fault detection for feedback control systems in autonomous machine applications |
US11704859B2 (en) * | 2020-08-20 | 2023-07-18 | Sony Interactive Entertainment LLC | System and method for accelerated ray tracing |
US11494969B2 (en) | 2020-08-20 | 2022-11-08 | Sony Interactive Entertainment LLC | System and method for accelerated ray tracing with asynchronous operation and ray transformation |
US11636689B2 (en) | 2020-09-08 | 2023-04-25 | Nvidia Corporation | Adaptive object tracking algorithm for autonomous machine applications |
US12086208B2 (en) | 2020-09-21 | 2024-09-10 | Nvidia Corporation | Measuring the effects of augmentation artifacts on a machine learning network |
US11688074B2 (en) | 2020-09-30 | 2023-06-27 | Nvidia Corporation | Data augmentation including background modification for robust prediction using neural networks |
CN112288874B (zh) * | 2020-10-20 | 2023-03-24 | 哈尔滨工程大学 | 基于cad模型与布尔运算的伽马辐射建模计算仿真方法 |
US11978266B2 (en) | 2020-10-21 | 2024-05-07 | Nvidia Corporation | Occupant attentiveness and cognitive load monitoring for autonomous and semi-autonomous driving applications |
US11652982B2 (en) | 2020-10-30 | 2023-05-16 | Nvidia Corporation | Applications for detection capabilities of cameras |
US11725959B2 (en) | 2020-11-13 | 2023-08-15 | Nvidia Corporation | Automatic graphical content recognition for vehicle applications |
US11816987B2 (en) | 2020-11-18 | 2023-11-14 | Nvidia Corporation | Emergency response vehicle detection for autonomous driving applications |
US11948315B2 (en) | 2020-12-31 | 2024-04-02 | Nvidia Corporation | Image composition in multiview automotive and robotics systems |
US11840238B2 (en) | 2021-02-05 | 2023-12-12 | Nvidia Corporation | Multi-view geometry-based hazard detection for autonomous systems and applications |
US11886634B2 (en) | 2021-03-19 | 2024-01-30 | Nvidia Corporation | Personalized calibration functions for user gaze detection in autonomous driving applications |
US11895321B2 (en) | 2021-03-29 | 2024-02-06 | Qualcomm Incorporated | Template matching based advanced motion vector predictor (AMVP) candidate list construction with non-adjacent candidates and AMVP index signaling |
US12055412B2 (en) | 2021-04-19 | 2024-08-06 | Nvidia Corporation | System and methods for updating high definition maps |
US20220340149A1 (en) * | 2021-04-21 | 2022-10-27 | Nvidia Corporation | End-to-end evaluation of perception systems for autonomous systems and applications |
US11704814B2 (en) | 2021-05-13 | 2023-07-18 | Nvidia Corporation | Adaptive eye tracking machine learning model engine |
US11860628B2 (en) | 2021-06-21 | 2024-01-02 | Nvidia Corporation | Parallel processing of vehicle path planning suitable for parking |
US11513814B1 (en) | 2021-06-28 | 2022-11-29 | Nvidia Corporation | State suspension for optimizing start-up processes of autonomous vehicles |
JP2024523729A (ja) * | 2021-07-16 | 2024-06-28 | インターディジタル・シーイー・パテント・ホールディングス・ソシエテ・パ・アクシオンス・シンプリフィエ | 3d環境におけるリアルタイム光線追跡のためのシステム及び方法 |
GB2609425B (en) * | 2021-07-29 | 2023-11-15 | Advanced Risc Mach Ltd | Graphics processing systems |
US11803668B2 (en) | 2021-07-30 | 2023-10-31 | Nvidia Corporation | Isolating a region of a system on a chip for safety critical operations |
US12012125B2 (en) | 2021-07-30 | 2024-06-18 | Nvidia Corporation | Communicating faults to an isolated safety region of a system on a chip |
US11573856B1 (en) | 2021-07-30 | 2023-02-07 | Nvidia Corporation | Transmitting data between regions of varying safety integrity levels in a system on a chip |
US11593290B1 (en) | 2021-08-02 | 2023-02-28 | Nvidia Corporation | Using a hardware sequencer in a direct memory access system of a system on a chip |
US11593001B1 (en) | 2021-08-02 | 2023-02-28 | Nvidia Corporation | Using per memory bank load caches for reducing power use in a system on a chip |
US11836527B2 (en) | 2021-08-02 | 2023-12-05 | Nvidia Corporation | Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip |
US11636063B2 (en) | 2021-08-02 | 2023-04-25 | Nvidia Corporation | Hardware accelerated anomaly detection using a min/max collector in a system on a chip |
US11573795B1 (en) | 2021-08-02 | 2023-02-07 | Nvidia Corporation | Using a vector processor to configure a direct memory access system for feature tracking operations in a system on a chip |
US11954914B2 (en) * | 2021-08-02 | 2024-04-09 | Nvidia Corporation | Belief propagation for range image mapping in autonomous machine applications |
US11573921B1 (en) | 2021-08-02 | 2023-02-07 | Nvidia Corporation | Built-in self-test for a programmable vision accelerator of a system on a chip |
US11704067B2 (en) | 2021-08-02 | 2023-07-18 | Nvidia Corporation | Performing multiple point table lookups in a single cycle in a system on chip |
US11954496B2 (en) | 2021-08-02 | 2024-04-09 | Nvidia Corporation | Reduced memory write requirements in a system on a chip using automatic store predication |
US11926346B2 (en) | 2021-08-05 | 2024-03-12 | Nvidia Corporation | Behavior planning for autonomous vehicles in yield scenarios |
WO2023044033A1 (en) | 2021-09-16 | 2023-03-23 | Nvidia Corporation | Micro-meshes, a structured geometry for computer graphics |
US12026955B2 (en) | 2021-09-29 | 2024-07-02 | Nvidia Corporation | Assigning obstacles to lanes using neural networks for autonomous machine applications |
WO2023068002A1 (ja) * | 2021-10-21 | 2023-04-27 | モルゲンロット株式会社 | 情報処理装置、及び情報処理方法 |
US11798221B2 (en) * | 2021-10-27 | 2023-10-24 | Arm Limited | Graphics processing |
US12039663B2 (en) | 2021-10-28 | 2024-07-16 | Nvidia Corporation | 3D surface structure estimation using neural networks for autonomous systems and applications |
US11908065B2 (en) | 2022-03-21 | 2024-02-20 | Advanced Micro Devices, Inc. | Stack-based ray traversal with dynamic multiple-node iterations |
US12039362B2 (en) | 2022-05-17 | 2024-07-16 | Nvidia Corporation | Processing interrupt requests for autonomous systems and applications |
US20240087211A1 (en) | 2022-09-09 | 2024-03-14 | Nvidia Corporation | Generation and Traversal of Partial Acceleration Structures for Ray Tracing |
US20240095994A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Reducing false positive ray traversal using point degenerate culling |
US20240095995A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Reducing false positive ray traversal using ray clipping |
US20240095993A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Reducing false positive ray traversal in a bounding volume hierarchy |
US20240095996A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Efficiency of ray-box tests |
US20240203033A1 (en) * | 2022-12-14 | 2024-06-20 | Advanced Micro Devices, Inc. | Intersectable instance nodes for ray tracing acceleration structure nodes |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090219285A1 (en) * | 2008-03-03 | 2009-09-03 | Alexander Reshetov | Technique for improving ray tracing performance |
US20100053162A1 (en) * | 2000-06-19 | 2010-03-04 | Holger Dammertz | Accelerated ray tracing using shallow bounding volume hierarchies |
US20100289799A1 (en) * | 2009-05-12 | 2010-11-18 | Johannes Hanika | Method, system, and computer program product for efficient ray tracing of micropolygon geometry |
US20110080403A1 (en) * | 2009-10-01 | 2011-04-07 | Manfred Ernst | Memory efficient ray tracing with hierarchical mesh quantization |
US20110283059A1 (en) * | 2010-05-11 | 2011-11-17 | Progeniq Pte Ltd | Techniques for accelerating computations using field programmable gate array processors |
CN103021018A (zh) * | 2012-11-07 | 2013-04-03 | 浙江工业大学 | 基于gpu的构建bvh树并行光线追踪方法 |
US8502819B1 (en) * | 2007-12-17 | 2013-08-06 | Nvidia Corporation | System and method for performing ray tracing node traversal in image rendering |
US20160239994A1 (en) * | 2014-08-18 | 2016-08-18 | Siliconarts Inc. | Method of ray tracing, apparatus performing the same and storage media storing the same |
CN107111890A (zh) * | 2014-10-17 | 2017-08-29 | 高通股份有限公司 | 使用基于点积的固定功能逻辑的光线‑盒相交测试 |
US20180089885A1 (en) * | 2016-09-29 | 2018-03-29 | Ingo Wald | Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8264484B1 (en) * | 2007-10-29 | 2012-09-11 | Nvidia Corporation | System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume |
US8243073B2 (en) * | 2009-01-28 | 2012-08-14 | International Business Machines Corporation | Tree insertion depth adjustment based on view frustum and distance culling |
US8484647B2 (en) * | 2009-07-24 | 2013-07-09 | Apple Inc. | Selectively adjusting CPU wait mode based on estimation of remaining work before task completion on GPU |
US8505819B2 (en) * | 2010-10-29 | 2013-08-13 | Tyson Bioresearch, Inc. | Methods of increasing coding information for biosensors and devices for same |
US9183667B2 (en) * | 2011-07-15 | 2015-11-10 | Kirill Garanzha | Out-of-core ray tracing with memory-efficient page generation |
GB2541084B (en) * | 2013-03-15 | 2017-05-17 | Imagination Tech Ltd | Rendering with point sampling and pre-computed light transport information |
US10261813B2 (en) * | 2013-09-25 | 2019-04-16 | Arm Limited | Data processing system for dispatching tasks from a plurality of applications to a shared resource provided by an accelerator |
US9697640B2 (en) * | 2014-04-21 | 2017-07-04 | Qualcomm Incorporated | Start node determination for tree traversal in ray tracing applications |
US10235338B2 (en) * | 2014-09-04 | 2019-03-19 | Nvidia Corporation | Short stack traversal of tree data structures |
US10242485B2 (en) * | 2014-09-04 | 2019-03-26 | Nvidia Corporation | Beam tracing |
US9552664B2 (en) | 2014-09-04 | 2017-01-24 | Nvidia Corporation | Relative encoding for a block-based bounding volume hierarchy |
US9984492B2 (en) * | 2015-04-02 | 2018-05-29 | Qualcomm Incorporated | Efficient hierarchy traversal in ray tracing applications |
US9928066B2 (en) * | 2015-06-25 | 2018-03-27 | Intel Corporation | Instruction and logic for encoded word instruction compression |
KR20170036416A (ko) * | 2015-09-24 | 2017-04-03 | 삼성전자주식회사 | 트리를 탐색하는 장치 및 방법 |
US11023233B2 (en) * | 2016-02-09 | 2021-06-01 | Intel Corporation | Methods, apparatus, and instructions for user level thread suspension |
US10204441B2 (en) * | 2017-04-07 | 2019-02-12 | Intel Corporation | Apparatus and method for hierarchical beam tracing and packet compression in a ray tracing system |
US10649524B2 (en) * | 2017-04-07 | 2020-05-12 | Intel Corporation | Apparatus and method for foveated rendering, bin comparison and TBIMR memory-backed storage for virtual reality implementations |
US10692270B2 (en) * | 2017-08-18 | 2020-06-23 | Microsoft Technology Licensing, Llc | Non-divergent parallel traversal of a bounding volume hierarchy |
-
2018
- 2018-08-10 US US16/101,232 patent/US10885698B2/en active Active
-
2019
- 2019-02-08 DE DE102019103178.8A patent/DE102019103178A1/de active Pending
- 2019-06-06 CN CN201910490166.9A patent/CN110827388B/zh active Active
-
2020
- 2020-12-04 US US17/111,844 patent/US11455768B2/en active Active
-
2022
- 2022-08-17 US US17/889,545 patent/US11928772B2/en active Active
-
2024
- 2024-01-23 US US18/420,449 patent/US20240169655A1/en active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100053162A1 (en) * | 2000-06-19 | 2010-03-04 | Holger Dammertz | Accelerated ray tracing using shallow bounding volume hierarchies |
US8502819B1 (en) * | 2007-12-17 | 2013-08-06 | Nvidia Corporation | System and method for performing ray tracing node traversal in image rendering |
US20090219285A1 (en) * | 2008-03-03 | 2009-09-03 | Alexander Reshetov | Technique for improving ray tracing performance |
US20100289799A1 (en) * | 2009-05-12 | 2010-11-18 | Johannes Hanika | Method, system, and computer program product for efficient ray tracing of micropolygon geometry |
US20110080403A1 (en) * | 2009-10-01 | 2011-04-07 | Manfred Ernst | Memory efficient ray tracing with hierarchical mesh quantization |
US20110283059A1 (en) * | 2010-05-11 | 2011-11-17 | Progeniq Pte Ltd | Techniques for accelerating computations using field programmable gate array processors |
CN103021018A (zh) * | 2012-11-07 | 2013-04-03 | 浙江工业大学 | 基于gpu的构建bvh树并行光线追踪方法 |
US20160239994A1 (en) * | 2014-08-18 | 2016-08-18 | Siliconarts Inc. | Method of ray tracing, apparatus performing the same and storage media storing the same |
CN107111890A (zh) * | 2014-10-17 | 2017-08-29 | 高通股份有限公司 | 使用基于点积的固定功能逻辑的光线‑盒相交测试 |
US20180089885A1 (en) * | 2016-09-29 | 2018-03-29 | Ingo Wald | Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113781624A (zh) * | 2020-06-10 | 2021-12-10 | 辉达公司 | 具有可选的世界空间变换的光线跟踪硬件加速 |
CN113781624B (zh) * | 2020-06-10 | 2023-10-03 | 辉达公司 | 具有可选的世界空间变换的光线跟踪硬件加速 |
US12020367B2 (en) | 2020-06-10 | 2024-06-25 | Nvidia Corporation | Ray tracing hardware acceleration with alternative world space transforms |
CN112417746A (zh) * | 2020-11-18 | 2021-02-26 | 中北大学 | 一种基于神经网络预测碰撞检测的方法 |
CN112417746B (zh) * | 2020-11-18 | 2022-11-25 | 中北大学 | 一种基于神经网络预测碰撞检测的方法 |
Also Published As
Publication number | Publication date |
---|---|
US11928772B2 (en) | 2024-03-12 |
US20240169655A1 (en) | 2024-05-23 |
US11455768B2 (en) | 2022-09-27 |
US10885698B2 (en) | 2021-01-05 |
US20200051318A1 (en) | 2020-02-13 |
US20210090319A1 (en) | 2021-03-25 |
US20220392148A1 (en) | 2022-12-08 |
CN110827388B (zh) | 2024-05-31 |
DE102019103178A1 (de) | 2020-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110827388B (zh) | 硬件中树遍历机制的前进和可编程超时的方法 | |
CN110858387B (zh) | 鲁棒且高效的多处理器-协处理器接口 | |
CN110827387B (zh) | 没有着色器干预下对交点进行连续层次包围盒遍历的方法 | |
CN110827385B (zh) | 树遍历的特定于查询的行为修改 | |
CN110827390B (zh) | 处理无序不透明和α光线/图元交点的方法 | |
CN110827389B (zh) | 严密的光线三角形相交 | |
CN110827384B (zh) | 用于对数据路径调度的高速缓存请求进行高效分组的方法 | |
US10810785B2 (en) | Method for forward progress tree traversal mechanisms in hardware |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |