带有并行光线测试的光线相交电路转让专利

申请号 : CN202110869849.2

文献号 : CN114092614B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : A·拉巴尼兰库希C·A·伯恩斯J·A·亨斯利L·O·尤利亚诺J·M·雷德肖

申请人 : 苹果公司

摘要 :

本公开涉及带有并行光线测试的光线相交电路。所公开的技术涉及用于光线跟踪的光线相交处理。在一些实施方案中,光线相交电路遍历以空间形式组织的加速数据结构并且包括边界区域电路,该边界区域电路被配置为并行地测试光线是否与由数据结构的节点指示的多个不同边界区域相交。着色器电路可执行光线相交指令以调用光线相交电路的遍历,并且该遍历可生成相交结果。着色器电路可基于该相交结果对相交基元进行着色。相对于传统技术,共享相交电路和着色器处理器之间的处理的所公开的技术可改善性能、降低功率消耗或实现两者。

权利要求 :

1.一种装置,包括:

图形着色器电路,所述图形着色器电路被配置为执行光线相交指令,所述光线相交指令指示图形场景中的一个或多个光线的集合的原点和方向信息;

光线相交电路,所述光线相交电路包括具有多个边界区域测试器电路的边界区域测试器电路系统,其中所述光线相交电路被配置为:响应于所述光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中所述数据结构的节点指示对应于所述图形场景中的边界区域的坐标;

在所述遍历期间同时使用多个边界区域测试器电路并行地测试所述光线的集合中的多个光线是否与由所述数据结构的节点指示的多个不同边界区域相交;

其中所述装置被配置为基于所述遍历和所述测试来确定指定与所述一个或多个光线的集合中的相应光线相交的一个或多个图形基元的信息;并且其中所述图形着色器电路被配置为基于相交光线来对指定的所述一个或多个图形基元进行着色。

2.根据权利要求1所述的装置,其中所述边界区域测试电路系统包括:公共节点计算电路,所述公共节点计算电路被配置为执行其输出由所述边界区域测试器共享的一个或多个操作。

3.根据权利要求2所述的装置,其中所述边界区域测试电路系统还包括:边界区域数据高速缓存;

光线数据高速缓存;和

结果排序电路,所述结果排序电路被配置为基于到被测光线的原点的距离对来自所述多个边界区域测试器的相交结果进行排序。

4.根据权利要求1所述的装置,其中所述装置被配置为将针对所述一个或多个光线的集合的光线数据存储在着色器存储器空间中,所述着色器存储器空间能够被所述图形着色器电路和所述光线相交电路访问。

5.根据权利要求1所述的装置,其中所述图形着色器电路被配置为基于所述指定的一个或多个图形基元的着色来生成一个或多个附加光线,以及执行针对所述一个或多个附加光线的第二光线相交指令。

6.根据权利要求1所述的装置,其中所述加速数据结构是分级结构,并且第一节点是上级加速数据结构的叶节点,所述第一节点在下级加速数据结构中具有子节点;

其中所述下级加速数据结构对应于在所述图形场景中被多次实例化的图形模型;以及其中所述光线相交电路被配置为形成单指令多数据(SIMD)组以将到达所述第一节点的一个或多个光线的坐标变换到所述图形模型的实例的模型空间。

7.根据权利要求1所述的装置,其中所述加速数据结构的一个或多个节点包括四个或更多个边界区域以及四个或更多个子节点。

8.根据权利要求1所述的装置,

其中所述加速数据结构包括具有边界区域的节点,针对所述边界区域,多个基元被指示为子;以及其中所述加速数据结构包括基元,针对所述基元,多个边界区域被指示为父。

9.根据权利要求1所述的装置,其中所述光线相交电路被配置为形成SIMD组,以针对对应于所述数据结构的叶节点的基元来测试光线的集合。

10.根据权利要求1所述的装置,其中所述光线相交电路被配置为使用分组电路基于所述光线将其作为下一个目标的所述数据结构的节点而将所述光线的集合的部分分组为多个组,其中所述测试是基于所述组。

11.根据权利要求1所述的装置,其中所述装置是计算设备,所述计算设备包括:图形处理器,所述图形处理器包括所述光线相交电路;

中央处理单元;和

网络接口电路。

12.一种方法,包括:

由图形着色器电路执行光线相交指令,所述光线相交指令指示图形场景中的一个或多个光线的集合的原点和方向信息;

由光线相交电路响应于所述光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,所述光线相交电路包括多个边界区域测试器电路,其中所述数据结构的节点指示对应于所述图形场景中的边界区域的坐标;

由所述光线相交电路在所述遍历期间同时使用多个边界区域测试器电路并行地测试所述光线的集合中的多个光线是否与由所述数据结构的节点指示的多个不同边界区域相交,基于所述遍历和所述测试来确定指定与所述一个或多个光线的集合中的相应光线相交的一个或多个图形基元的信息;以及由所述图形着色器电路基于相交光线对指定的所述一个或多个图形基元进行着色。

13.根据权利要求12所述的方法,还包括:

基于所述指定的一个或多个图形基元的着色生成一个或多个附加光线;以及执行针对所述一个或多个附加光线的第二光线相交指令。

14.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:图形着色器电路,所述图形着色器电路被配置为执行光线相交指令,所述光线相交指令指示图形场景中的一个或多个光线的集合的原点和方向信息;

光线相交电路,所述光线相交电路包括具有多个边界区域测试器电路的边界区域测试器电路系统,其中所述光线相交电路被配置为:响应于所述光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中所述数据结构的节点指示对应于所述图形场景中的边界区域的坐标;

在所述遍历期间同时使用多个边界区域测试器电路并行地测试所述光线的集合中的多个光线是否与由所述数据结构的节点指示的多个不同边界区域相交;

其中所述电路被配置为基于所述遍历和所述测试来确定,其中所述电路被配置为基于所述遍历和所述测试来确定指定与所述一个或多个光线的集合中的相应光线相交的一个或多个图形基元的信息;并且其中所述图形着色器电路被配置为基于相交光线来对指定的所述一个或多个图形基元进行着色。

15.根据权利要求14所述的非暂态计算机可读存储介质,其中所述边界区域测试电路系统包括:公共节点计算电路,所述公共节点计算电路被配置为执行其输出由所述边界区域测试器共享的一个或多个操作。

16.根据权利要求15所述的非暂态计算机可读存储介质,其中所述边界区域测试电路系统还包括:边界区域数据高速缓存;

光线数据高速缓存;和

结果排序电路,所述结果排序电路被配置为基于到被测光线的原点的距离对来自所述多个边界区域测试器的相交结果进行排序。

17.根据权利要求14所述的非暂态计算机可读存储介质,其中所述图形着色器电路被配置为基于所述指定的一个或多个图形基元的着色来生成一个或多个附加光线,以及执行针对所述一个或多个附加光线的第二光线相交指令。

说明书 :

带有并行光线测试的光线相交电路

技术领域

[0001] 本公开整体涉及图形处理器中的光线跟踪,并且更具体地涉及被配置为检测光线和图形基元之间的相交的电路。

背景技术

[0002] 在计算机图形中,光线跟踪是用于通过跟踪作为图像平面中像素的光的路径并模拟其与虚拟对象相遇的效果来生成图像的渲染技术。光线跟踪可允许在场景中的任何两个点之间的三维中可见度的分辨率,这也是其大部分计算成本的来源。典型的光线跟踪器在光传播的相反方向上对穿过场景的光的路径进行采样,从相机开始并传播到场景中,而不是从光源开始(这有时称为“向后光线跟踪”)。从相机开始具有仅跟踪对相机可见的光线的有益效果。该系统可对光栅器建模,其中光线简单地停止在第一表面处,并且调用着色器(类似于片段着色器)来计算颜色。更常见的次要效果(其中场景元素之间的照明交换,诸如漫内反射和透射)也被建模。评估表面反射属性的着色器可调用另外的相交查询(例如,生成新光线)以从其他表面捕获入射照明。该递归过程具有许多表达方式,但通常被称为路径跟踪。
[0003] 相对于传统光栅化系统,实施光线跟踪的图形处理器通常提供更逼真的场景和照明效果。然而,光线跟踪通常是计算昂贵的。对光线跟踪技术的改进可改进图形场景中的真实性、改进性能(例如,允许每帧跟踪更多光线、在更复杂的场景中跟踪,或两者)、降低功率消耗(这在电池供电的设备中可能特别重要)等。

附图说明

[0004] 图1A是示出根据一些实施方案的示例性图形处理操作的概述的图示。
[0005] 图1B是示出根据一些实施方案的示例性图形单元的框图。
[0006] 图2是示出根据一些实施方案的使用ADS的示例性光线跟踪过程的图示。
[0007] 图3A是示出根据一些实施方案的包括着色器处理器电路和相交电路的示例性图形处理器的框图。
[0008] 图3B是示出根据一些实施方案的使用光线相交电路检测光线相交的示例性方法的流程图。
[0009] 图4是示出根据一些实施方案的示例性ADS树结构的框图。
[0010] 图5是示出根据一些实施方案的使用光线栈的BVH树的示例性深度优先遍历的图示。
[0011] 图6是示出根据一些实施方案的光线相交电路与其他图形电路的示例性连接性的框图。
[0012] 图7是示出根据一些实施方案的详细示例性并行边界区域测试电路的框图。
[0013] 图8是示出根据一些实施方案的用于存储光线数据的光线着色器核心空间(SCS)的示例性组织的图示。
[0014] 图9是示出根据一些实施方案的示例性节点数据结构的图示。
[0015] 图10是示出根据一些实施方案的示例性大小可配置叶数据结构的图示。
[0016] 图11是示出根据一些实施方案的具有可变大小叶节点的ADS树结构的示例性存储器布局的图示。
[0017] 图12是示出根据一些实施方案的相交电路、节点测试电路、存储器区域和由着色器电路执行的SIMD组之间的示例性数据流的图示。
[0018] 图13是示出根据一些实施方案的与图12的数据流相关联的示例性方法的流程图。
[0019] 图14A是示出根据一些实施方案的用于动态形成用于基元测试的SIMD组的示例性技术的框图。
[0020] 图14B是示出根据一些实施方案的用于动态形成用于基元测试的SIMD组的示例性方法的流程图。
[0021] 图15是示出根据一些实施方案的边界区域和基元之间的示例性多对多映射的图示。
[0022] 图16是示出根据一些实施方案的用于生成具有多对多映射的空间组织数据结构的示例性方法的流程图。
[0023] 图17是示出根据一些实施方案的当遍历加速数据结构时用于光线变换的SIMD组的示例性动态形成的图示。
[0024] 图18是示出根据一些实施方案的用于动态形成用于光线坐标变换的SIMD组的示例性方法的流程图。
[0025] 图19A是示出根据一些实施方案的在遍历期间不同光线当前指向ADS中的不同节点的示例性情况的图示。
[0026] 图19B是示出根据一些实施方案的示例性分组控制电路的框图。
[0027] 图19C是示出根据一些实施方案的用于对光线进行分组的示例性单独链接列表具体实施的图示。
[0028] 图20是示出根据一些实施方案的在ADS遍历期间分组光线的示例性方法的流程图。
[0029] 图21是示出根据一些实施方案的用于处理光线的示例性方法的流程图。
[0030] 图22A是示出根据一些实施方案的着色器核心可访问的示例性高速缓存存储器分级结构的框图。
[0031] 图22B是示出根据一些实施方案的多个着色器核心及其协处理器可访问的示例性高速缓存存储器分级结构的框图。
[0032] 图23是示出根据一些实施方案的示例性线程组、着色器核心和设备存储器空间的图示。
[0033] 图24是示出根据一些实施方案的用于不同存储器空间的示例性高速缓存组织和相干点的框图。
[0034] 图25是示出根据一些实施方案的使用着色器存储器空间的示例性方法的流程图。
[0035] 图26是根据一些实施方案的示出一种示例性计算设备的框图。
[0036] 图27是示出根据一些实施方案的系统或设备的示例性应用的图示。
[0037] 图28是示出根据一些实施方案的一种存储电路设计信息的示例性计算机可读介质的框图。

具体实施方式

[0038] 本公开阐述了各种光线跟踪技术,并且具体地阐述了光线相交技术。图1A至图2总体上提供了图形处理和光线跟踪的概述。图3A至图6提供了对光线相交加速器电路的示例性实施方案的介绍。
[0039] 图7至图21提供了关于光线相交电路的实施方案和与其他图形电路的交互的附加细节。具体地讲,图7示出了并行节点测试电路,图8示出了用于在着色器和相交电路之间共享光线数据的存储器空间,图9至图11示出了示例性数据结构和存储器空间,图12至图13示出了示例性总体数据流,图14A至图14B示出了用于动态形成用于基元测试的SIMD组的示例性技术,图15至图16提供了边界区域和基元之间的多对多映射,图17至图18提供了用于在遍历期间动态形成SIMD组(例如,用于光线变换)的示例性技术,图19至图20提供了用于节点测试的示例性光线分组技术,并且图21提供了用于光线相交操作的总体流程图。图21至图25提供了关于着色器核心存储器空间的范围的细节。
[0040] 图26示出了可包括图形处理器的示例性计算设备,图27示出了示例性应用,并且图28示出了存储电路设计信息的示例性计算机可读介质。
[0041] 图形处理概述
[0042] 参见图1A,其示出了示出用于处理图形数据的示例性处理流程100的流程图。在一些实施方案中,变换和照明过程110可涉及基于限定的光源位置、反射率等处理从应用程序接收的顶点的照明信息,将顶点组装成多边形(例如三角形),和/或基于三维空间中的位置来将多边形转换为正确的尺寸和取向。剪辑过程115可涉及丢弃在可视区域之外的多边形或顶点。光栅化过程120可涉及在每个多边形内限定片段并且例如基于多边形顶点的纹理坐标来为每个片段分配初始色值。片段可指定它们重叠的像素的属性,但可基于组合多个片段(例如,在帧缓冲器中)和/或忽略一个或多个片段(例如,如果它们被其他对象覆盖)来确定实际像素属性。着色过程130可涉及基于照明、阴影、隆起映射、半透明度等来改变像素分量。可将着色像素组装在帧缓冲器135中。现代GPU通常包括允许应用开发者定制着色和其他处理过程的可编程着色器。因此,在各种实施方案中,图1A的示例性元素可以各种顺序执行,并行执行或省略。还可实施另外的处理过程。
[0043] 现在参见图1B,示出了根据一些实施方案的例示图形单元150的简化框图。在例示的实施方案中,图形单元150包括可编程着色器160、顶点管185、片段管175、纹理处理单元(TPU)165、图像写入单元170、和存储器接口180。在一些实施方案中,图形单元150被配置为使用可编程着色器160来处理顶点数据和片段数据两者,该可编程着色器可被配置为使用多个执行流水线或实例来并行处理图形数据。
[0044] 在图示实施方案中,顶点管185可包括被配置为处理顶点数据的各种固定功能硬件。顶点管185可被配置为与可编程着色器160通信,以便协调顶点处理。在图示实施方案中,顶点管185被配置为将经处理的数据发送至片段管175和/或可编程着色器160以用于进一步处理。
[0045] 在图示实施方案中,片段管175可包括被配置为处理像素数据的各种固定功能硬件。片段管175可被配置为与可编程着色器160通信,以便协调片段处理。片段管175可被配置为在来自顶点管185和/或可编程着色器160的多边形上执行光栅化以生成片段数据。顶点管185和/或片断管175可耦接到存储器接口180(未示出耦接)以便访问图形数据。
[0046] 在图示实施方案中,可编程着色器160被配置为接收来自顶点管185的顶点数据和来自片段管175和/或TPU 165的片段数据。可编程着色器160可被配置为对顶点数据执行顶点处理任务,该顶点处理任务可包括顶点数据的各种变换和/或调整。在例示的实施方案中,可编程着色器160还被配置为对像素数据执行片段处理任务,诸如像纹理和着色处理。可编程着色器160可包括用于并行处理数据的多组多个执行流水线。
[0047] 在例示的实施方案中,TPU 165被配置为调度来自可编程着色器160的片段处理任务。在一些实施方案中,TPU 165被配置为预取纹理数据并将初始颜色分配给片段以供可编程着色器160进一步处理(例如,经由存储器接口180)。TPU 165可被配置为提供例如在规格化整数格式或浮点格式的片段分量。在一些实施方案中,TPU 165被配置为提供呈2x2格式的四个一组(“片段四元组”)的片段,该片段由可编程着色器160中的一组四个执行流水线处理。
[0048] 在一些实施方案中,图像写入单元(IWU)170被配置为存储图像的处理后图块,并且可在将其传输以用于显示或传输给存储器用于存储之前对渲染后图像执行操作。在一些实施方案中,图形单元150被配置为执行分块式延迟渲染(TBDR)。在分块式渲染中,可单独处理屏幕空间的不同部分(例如,像素的正方形或矩形)。在各种实施方案中,存储器接口180可促进与各种存储器分级结构中的一个或多个的通信。
[0049] 在例示的示例中,图形单元150包括光线相交加速器(RIA)190,其可包括被配置为执行各种光线相交操作的硬件,如下文所详述。
[0050] 光线跟踪概述
[0051] 光线跟踪技术通常在光传播的反向方向上对穿过场景的光的路径进行采样,从相机开始并传播到场景中,而不是从光源开始(这有时被称为“向后光线跟踪”)。可使用定义光线的活动部分的原点(O)、方向(D)和参数间隔(T)来定义光线。因此,光线可被认为是线段。图形处理器可对给定光线执行各种查询。例如,“最接近命中”查询可沿光线并在参数间隔内定位最近相交的几何结构(这可为最常见类型的查询)。“任何命中”查询可沿光线并在参数间隔内定位任何相交的几何结构。这种类型的查询可用于阴影光线,例如,以确定场景中的点是否对光具有可见性或被遮挡。一旦确定了相交几何结构,该几何结构就可基于相交而被着色,并且可继而例如从反射表面生成更多光线以用于相交测试。
[0052] 通常通过加速数据结构(ADS)来促进光线相交计算。为了有效地实现光线相交查询,空间数据结构可以减少光线表面相交测试的数量,从而加速查询过程。ADS的常见类别是边界体积分级结构(BVH),其中表面基元被包封在几何代理体积(例如,盒)的分级结构中,该几何代理体积更便宜地测试相交。这些体积可被称为边界区域。通过遍历数据结构并沿着路径执行代理相交测试,图形处理器为给定光线定位候选相交基元的保守集合。常见形式的BVH使用3D轴对齐边界盒(AABB)。一旦构建,AABB BVH就可用于所有光线查询,并且是与视点无关的结构。在一些实施方案中,对于场景中的每个不同网格,在该对象的局部对象空间或模型空间中构造这些结构一次,并且在遍历BVH之前将光线从世界空间变换到局部空间中。这可允许具有许多刚性变换和材料特性的单个网格的几何实例化(类似于光栅化中的实例化)。动画几何结构通常需要重建数据结构(有时具有不那么昂贵的更新操作,称为“重新拟合”)。对于其中在单个帧中针对单个场景跟踪数百万或数十亿光线的非实时使用情况,ADS构造的成本完全分摊到“免费”的程度。然而,在实时环境中,通常在构建成本和遍历成本之间存在微妙折衷,其中构建更有效的结构通常更昂贵。
[0053] 在下文详细讨论的一些实施方案中,相交电路被配置为遍历BVH ADS,该BVH ADS使用3D轴对齐盒作为其边界体积。ADS可具有不假定三角形几何结构的最大支化因子(例如,2、4、8、16等)和灵活的用户定义的有效载荷(例如,树叶处的内容)。
[0054] 图2是示出根据一些实施方案的使用ADS的示例性光线跟踪过程的图示。ADS构建元件215接收图形场景的几何结构数据210并产生ADS220。ADS构建元件215可通过暂存构建ADS或例如基于动画对象的位置变化来更新先前的ADS。相机着色元件225(其也可被称为源着色器)产生源自视点的光线(其可被称为主要光线、相机光线或眼睛光线)。这些光线由ADS遍历元件230处理。遍历包括通过边界区域(例如,盒)测试元件235和基元测试元件240进行的操作,并且提供结果着色元件245(其可被称为命中着色器)的相交结果。着色可生成用于ADS遍历的附加新光线。着色可产生用于在元件250处构建帧缓冲器的片段数据。
[0055] 在各种公开的实施方案中,相交电路(例如,包括在图形处理器中的光线相交协处理器或专用电路)被配置为执行ADS遍历230和边界区域测试235。在一些实施方案中,光线相交电路在遍历期间为着色器处理器生成工作,例如,用于坐标变换或基元测试。着色器处理器可执行SIMD组以执行下文所述的各种操作。
[0056] 因为存在本文讨论的多种类型的SIMD组,所以将使用以下标签:“clique‑A”是指执行图形程序(并且可执行光线相交指令)的传统SIMD组,“clique‑S”是指由光线相交电路形成的用于坐标变换的SIMD组,并且“clique‑T”是指由光线相交电路形成的用于基元测试的SIMD组,如下文所详述。
[0057] 示例性光线相交电路
[0058] 图3A是示出根据一些实施方案的包括着色器处理器电路和相交电路的示例性图形处理器的框图。在例示的实施方案中,系统包括可编程着色器160(其可执行图形程序)和光线相交加速器(RIA)190(其是专用相交电路的一个示例)。
[0059] 在例示的示例中,可编程着色器160接收并执行包括在图形程序中的相交光线指令。相交光线指令可为例如单指令多数据(SIMD)指令,并且可指定多个光线。作为响应,可编程着色器160向RIA 190发送相交光线命令。命令可包括指向正被处理的光线的数据结构的指针。
[0060] 在例示的示例中,RIA 190被配置为基于针对场景的以空间形式组织的数据结构(例如,BVH)的遍历来产生相交结果。RIA 190包括边界区域测试电路,该边界区域测试电路可被配置为并行地针对多个边界区域(例如,盒)测试光线。在一些实施方案中,相交结果指示要针对相交被测试的基元集合,例如,RIA 190可以启动一个或多个SIMD组以在可编程着色器160上执行以用于基元测试,如下面参考图14A至图14B所讨论的。在其他实施方案中,RIA 190可以执行基元测试,并且相交结果可以直接指示相交的基元。
[0061] 术语“SIMD组”旨在根据其熟知的含义来解释,其包括线程集合,针对该线程集合,处理硬件使用针对不同线程的不同输入数据并行处理相同指令。各种类型的计算机处理器可包括被配置为执行SIMD指令的流水线的集合。例如,图形处理器通常包括可编程着色器核心,该可编程着色器核心被配置为以SIMD方式执行针对相关线程的集合的指令。常用于SIMD组的名称的其他示例包括:波前、clique或warp。SIMD组可以是较大线程组的一部分,其可以基于计算机的并行处理能力被拆分成多个SIMD组。在一些实施方案中,每个线程被分配给硬件流水线,该硬件流水线获取该线程的操作数并且与线程的集合的其他流水线并行地执行指定操作。需注意,处理器可具有大量流水线,使得多个单独的SIMD组也可并行执行。在一些实施方案中,每个线程例如在寄存器文件中具有私有操作数存储装置。因此,从寄存器文件读取特定寄存器可为SIMD组中的每个线程提供寄存器的版本。
[0062] 需注意,在其他实施方案中,被公开为使用SIMD组执行的各种技术可使用单个线程来执行。因此,本文论述的SIMD示例并不旨在限制本公开的范围。在各种实施方案中,然而,SIMD技术可以相对于非SIMD技术改善性能,特别是考虑到图形处理器通常包括大量的并行硬件。
[0063] 图3B是示出根据一些实施方案的使用光线相交电路检测光线相交的示例性方法的流程图。图3B所示的方法可结合本文公开的计算机电路系统、系统、设备、元件或部件中的任一者(以及其他设备)来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0064] 在350处,在例示的实施方案中,图形着色器电路(例如,可编程着色器160)执行光线相交指令,该光线相交指令指示针对图形场景中的一个或多个光线的集合的原点和方向信息。
[0065] 在360处,在例示的实施方案中,光线相交电路(例如,RIA 190)响应于光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中数据结构的节点指示对应于图形场景中的边界区域的坐标。
[0066] 在370处,在例示的实施方案中,边界区域测试电路(例如,电路310)在遍历期间并行地测试光线集合中的光线是否与由数据结构的节点指示的边界区域中的边界区域相交。
[0067] 在380处,在例示的实施方案中,设备确定指定与一个或多个光线的集合中的相应光线相交的一个或多个图形基元的信息。
[0068] 在390处,在例示的实施方案中,图形着色器电路基于相交光线对指定的一个或多个图形基元进行着色。
[0069] 与图3B的方法的各种实施方案相关的以下讨论提供了下文更详细讨论的各种光线相交技术的高级概述。
[0070] 在一些实施方案中,边界区域测试电路包括多个边界区域测试器,该多个边界区域测试器被配置为确定光线是否与边界区域相交并且被配置为并行地对多个边界区域执行测试。边界区域测试电路还可包括公共计算电路,该公共计算电路被配置为执行其输出由边界区域测试器共享的一个或多个操作。在一些实施方案中,边界区域测试电路还包括:边界区域数据高速缓存、光线数据高速缓存和结果排序电路,该结果排序电路被配置为基于到正被测试的光线的原点的距离来对来自多个边界区域测试器的相交结果进行排序。
[0071] 在一些实施方案中,边界区域测试电路被配置为针对多个不同的边界区域并行地测试多个光线。在这些实施方案中,边界区域测试电路可同时针对M个边界区域测试N个光线。
[0072] 在一些实施方案中,该装置被配置为将针对所述一个或多个光线的集合的光线数据存储在图形着色器电路和光线相交电路可访问的着色器存储器空间(其可被称为光线着色器核心空间)中。在一些实施方案中,图形着色器电路被配置为基于指定的一个或多个图形基元的着色来生成一个或多个附加光线,并且执行针对一个或多个附加光线的光线相交指令。
[0073] 在一些实施方案中,加速数据结构是分级结构,并且第一节点是上级加速数据结构的叶节点,其在下级加速数据结构中具有子节点。(下文参考图4更详细地讨论此类分级结构的示例。)下级加速数据结构可以对应于在图形场景中多次实例化的图形模型。光线相交电路可被配置为形成SIMD组(其可被称为clique‑S)以将到达第一节点的一个或多个光线的坐标转换至图形模型的实例的模型空间。
[0074] 在一些实施方案中,ADS具有相对高的支化因子,例如,使得加速数据结构的一个或多个节点包括四个或更多个边界区域以及四个或更多个子节点。在一些实施方案中,可支持甚至更大的支化因子,诸如八、十、十二、十六等。在一些实施方案中,ADS支持边界区域和基元之间的多对多映射,例如,使得加速数据结构包括具有至少一个边界区域的节点,针对该至少一个边界区域,多个基元被指示为子,并且加速数据结构包括至少一个基元,针对该至少一个基元,多个边界区域被指示为父。
[0075] 在一些实施方案中,光线相交电路被配置为形成SIMD组(clique‑T)以针对对应于数据结构的叶节点的基元测试光线集合。
[0076] 在一些实施方案中,光线相交电路系统被配置为使用分组电路基于光线的下一个目标的数据结构的节点将光线集合的部分分组为多个组,其中测试基于这些组。这可改善对节点数据的访问的时间位置。
[0077] 示例性树结构和深度优先遍历的概述
[0078] 图4是示出根据一些实施方案的简化的示例性ADS树结构的框图。在例示的示例中,树包括节点0‑5和叶L0‑L8。每个节点可包括各自指向子节点或一个或多个基元的两个或更多个边界区域。从概念上讲,每个节点可存储其子的边界,但不存储其自身的边界(这可基于其父节点来暗示)。在一些实施方案中,每个叶表示基元,诸如三角形,其包括在父节点的边界区域中。节点和叶的详细示例性数据结构在下文中参考图9至图10进行讨论。
[0079] 在例示的示例中,每个节点具有最多两个子节点,但在各种实施方案中可实现更大的支化因子。在一些实施方案中,节点的“节点测试”包括对应于子节点的多个边界区域的边界测试。内部节点为其子均为节点的节点,诸如图4中的节点0和节点2。叶节点为其子均为叶的节点,诸如图4中的节点1、3和5。混合节点具有叶和子节点的混合,诸如图4中的节点4。基于树的ADS结构可使用宽度优先技术、深度优先技术或两者的组合遍历,例如以确定应当针对其测试光线相交的一个或多个基元。
[0080] 图5是示出根据一些实施方案的使用光线栈的BVH树的示例性深度优先遍历的图示。在例示的示例中,使用虚线示出的节点不与被测试的光线相交,并且实心三角形表示相交基元。
[0081] 考虑对应于图5的情况的以下示例性遍历。首先,光线针对根节点0进行测试,根节点0对应于场景范围的根边界区域。每当命中时,测试该节点的子。在该示例中,节点1和节点2都是命中,因此遍历继续到节点2的子,并且节点1被推送到被测试的光线的光线栈。盒5和盒6都是命中,并且节点6被推送到栈。当测试节点5的子时,节点7是命中,而节点8是未命中,因此没有东西被推送到栈,并且遍历前进到节点7的子。节点11的边界区域和节点7的叶子都被命中,因此节点11被推送到栈,并且针对基元相交测试叶。
[0082] 图5的光线栈示出了在示例性遍历期间此时栈的状态,其中栈上具有节点11、6和1。此时,已经到达叶,并且树的被推迟的部分应被下一个遍历,这可被称为回溯。相交电路弹出栈并针对基元相交测试节点11的叶。然后,相交电路系统弹出栈并测试节点6的子,这两个子均未命中。遍历期间未到达节点12和13,因为它们的父节点9不是命中。相交电路然后弹出节点1,并且其子节点3和4均未命中。
[0083] 需注意,存在父节点可能是命中的多个原因,但其子节点不存在。首先,由于ADS的性质,父边界区域结合比子更大的体积,因此与父边界区域相交的光线可能不与子区域相交。另一个原因是可基于所检测到的与基元的相交来缩短光线。例如,在命中节点7的基元子之后,阵列的活动部分的长度可被剪辑,使得其不前进经过相交。在一些情况下,这可能导致节点3和4未命中。当栈为空并且不存在要搜寻的另外路径时,遍历可结束并且相交电路可返回结果。
[0084] 需注意,各种所公开的技术可应用于其他数据结构组织(例如,非树加速或非BVH数据结构)。公开的数据结构是为了说明的目的而包括在内的,但并不旨在限制本公开的范围。类似地,可使用一种或多种不同的节点类型来实现各种节点结构。
[0085] 示例性RIA连接性和区域测试电路
[0086] 图6是示出根据一些实施方案的光线相交电路与其他图形电路的示例性连接性的框图。在例示的实施方案中,图形处理器包括指令获取和调度电路610、着色器流水线660(例如,其可包括在可编程着色器160中)、L0存储电路615、路由网络620、L1存储装置630、高级高速缓存/存储器电路640、RIA 190和纹理处理单元165。
[0087] L0存储装置可被配置为存储由着色器流水线660处理的操作数。L1存储装置630可被配置为以纹理处理单元165和RIA 190也可用的更高级别存储图形数据。路由网络620可促进在着色器流水线中的通道之间(例如,SIMD组内的线程之间)、不同存储级之间、以及L1存储装置和不同单元(诸如RIA 190和纹理处理单元165)之间移动操作数。例如,高级高速缓存/存储器电路640可包括一个或多个L2高速缓存或系统存储器。各种存储或高速缓存元件可实施适当的寻址或高速缓存组织方案。可存储在图6的一个或多个存储元件中的示例性数据结构在下文中参考图8至图11进行讨论。
[0088] 在一些实施方案中,由电路610获取的图形程序可包括光线相交指令。基于该指令,着色器流水线660可向RIA 190发送光线相交命令,该RIA可经由L1存储630访问相关联的光线和几何结构数据。RIA 190还可使用通过路由网络620的通信动态地形成着色器流水线660的SIMD组。
[0089] 注意,图6中公开的电路组织是为了说明的目的而包括的,但并不旨在限制本公开的范围。在其他实施方案中,可实现用于光线相交和可编程着色器电路的专用电路的各种组织中的任一种。
[0090] 图7是示出根据一些实施方案的详细示例性并行边界区域测试电路的框图。在例示的示例中,并行测试器电路710接收多个边界区域的光线数据和边界区域数据,并输出指示光线是否与边界区域相交的结果。并行测试器710包括边界区域数据高速缓存717、光线数据高速缓存720、公共计算电路725、边界区域测试器730A‑703N和结果排序电路735。
[0091] 在一些实施方案中,并行测试器710是被配置为测试最多至N个边界区域的节点测试器,其中ADS中的每个节点包括最多至N个子节点。在具有M个可编程着色器实例的实施方案中,RIA 190可包括多个并行测试器710,例如,对于每个可编程着色器2、4、8等。在这些实施方案中,每个节点测试器可每个时钟、每个可编程着色器核心测试最多至M个节点。在一些实施方案中(例如,本文所讨论的深度优先遍历),一次针对最多一个节点测试给定光线。
[0092] 在一些实施方案中,边界区域数据高速缓存715和光线数据高速缓存720被配置为分别存储用于当前测试和用于后续测试中的潜在重复使用的节点和光线数据。这些高速缓存能够维持对应于每个测试器每个时钟的节点测试的吞吐量。为了进行测试,可能需要光线和边界区域信息两者,因此高速缓存条目可被锁定以用于读取,直到两条信息可用。下面详细讨论的图9提供了用于边界区域数据的详细示例性编码。在一些实施方案中,将以相同的下一个节点为目标的光线分组可改善高速缓存的性能并减小到高级高速缓存的带宽,如下文参考19A至图19C所详述。
[0093] 在一些实施方案中,公共计算电路725被配置为执行对所有被测试的边界区域公共的计算。这可包括确定使用压缩量化格式表示的边界。又如,这可包括常见的光线计算,诸如确定光线的倒数和光线的测试点。在一些实施方案中,以比边界区域测试更高的浮点精度执行公共计算。
[0094] 在一些实施方案中,边界区域测试器730被配置为测试光线是否与边界区域的表示相交(然而,需注意,假阳性可以包括在具有量化的实施方案中)。对于盒形边界区域,这些测试器可以实现平板测试(例如,找到每条光线到每个盒的六个侧面的距离,并比较这些值以确定光线是否已经在盒中击中)。一般来讲,边界区域测试器730可包括被配置为执行与所实现的测试类型相关联的算术运算的电路,并且该电路可为流水线式的。在一些实施方案中,边界区域测试器730利用较低精度浮点算术并选择取整模式,使得计算的三个平面的相交结果向下取整面向光线(朝向光线)并且三个相对平面的相交结果向上取整背离(背离光线),以确保边界区域测试是保守的并且不产生假阴性。
[0095] 在一些实施方案中,结果排序电路735被配置为对命中结果进行排序(例如,基于其到光线原点的距离)并输出结果以用于进一步遍历。因此,可基于该排序将非叶子推到栈上。在一些实施方案中,任何叶子可被分组为单个栈条目。在一些实施方案中,排序可以影响ADS的遍历,例如,可以在深度优先搜索期间优先遍历对应于更靠近命中的子节点。
[0096] 在一些实施方案中,并行测试器电路710被配置为保存光线与边界区域相交的参数内部(T)参数的值(并且可以比平面测试更高的精度保存该值)。该值可被称为T局部值,并且可被保存在栈条目中并被检索以用作子边界区域平面测试的数字光线原点。
[0097] 在一些实施方案中,可针对相同节点并行测试多条光线,可针对多个节点并行测试光线,或两者。例如,RIA 190可包括多个并行测试器710以并行处理一组光线中的全部或一部分光线。在一些实施方案中,每个边界区域测试器730可被配置为并行地针对边界区域测试多个光线。
[0098] 示例性数据结构和总体数据流
[0099] 图8是示出根据一些实施方案的用于存储光线数据的光线着色器核心空间(SCS)的示例性组织的图示。光线SCS是可动态分配并且可允许在不同线程组之间共享数据的私有存储器空间。此外,光线SCS可允许在来自相同数据主设备和启动时隙的不同SIMD组之间(例如,在clique‑A、clique‑S、clique‑T等之间)共享数据。下文在图8的讨论结束时讨论对数据主设备和图形启动的概念的更详细的解释。图形处理器还可包括其他存储器空间,诸如线程私有地址空间、线程组地址空间和设备地址空间。
[0100] 例如,可在图形启动开始时分配SCS。着色器核心空间可有利地允许不同类型的SIMD组(例如,clique‑A类型和clique‑T或clique‑S类型)之间的共享,允许更少数量的位用于寻址光线数据(相对于使用更大存储器空间的地址),允许数据的页面的动态分配,或它们的任何组合。例如,在2020年2月28日提交的美国专利申请号16/804,128中讨论的用于动态私有存储器分配的技术可用于为光线着色器核心空间动态分配页面。
[0101] 在例示的实施方案中,着色器核心空间包括用于光线核心数据820、光线栈数据830、光线扩展数据840和令牌缓冲器810的区域。在一些实施方案中,SCS还可包括上下文切换缓冲器(未示出)以处理上下文节省。着色器可使用明确指令(例如,分配光线指令)来分配SCS中的空间,并且通过另一明确指令(例如,在完成光线的处理之后的释放光线指令)来分配自由空间。
[0102] 在一些实施方案中,令牌缓冲器810提供用于RIA 190和由RIA 190在着色器上启动的SIMD组之间进行通信的暂存空间。在一些实施方案中,这些SIMD组接收光线标识符作为其输入数据的一部分,以便例如在相交光线命令之前访问已经分配在SCS中的光线数据。当形成SIMD组(例如,用于基元测试的clique‑T或用于变换的clique‑S)时,RIA 190可使用SIMD组所需的线程数据来填充缓冲器,并且SIMD组可将结果写回同一缓冲器中。在一些实施方案中,令牌缓冲器存储指向用于基元测试或坐标变换的信息的指针。例如,这可包括指向叶地址的指针以用于相交测试,以及共享相同光线ID(其可被打包到相同的clique‑T中)的线程的计数和对应的线程标识符。又如,这可包括指向用于坐标变换的光线的指针。
[0103] 在一些实施方案中,光线栈数据830包含遍历期间光线的栈条目,例如,如上文参考图5所讨论的。每个光线可具有用于其栈的专用空间,但所有光线的栈可交错,这可减少占用面积并且可减少用于栈SCS的页面的总数。栈SCS的最大大小可基于例如以下中的一者或多者来确定:光线群体的大小、ADS中的级别数量和ADS的支化因子。
[0104] 光线核心数据820可指示每个光线的原点、方向和活动部分,并且可使用光线标识符进行索引。该区域还可包括其他数据,诸如用于水密光线遍历的ε和轴线。光线扩展数据840可包括例如由软件着色器较不频繁访问的附加数据,诸如相交结果、光线差异、性能计数器等。分离光线核心数据820和扩展数据840可改善高速缓存利用率。
[0105] 可以执行多个“启动”以渲染图形数据帧。在一些实施方案中,启动是来自单个上下文的工作单元,其可包括要执行的多个线程(并且可能潜在包括未由着色器执行的其他类型的图形工作)。启动可能不提供关于线程之间的存储器同步(除线程本身指定的之外)、线程之间的并发性或线程之间的启动顺序的任何保证。在一些实施方案中,可以根据另一个启动的结果来识别启动,这可以允许存储器同步而不需要硬件存储器一致性支持。通常,在将工作发送到流水线以进行处理之前,图形固件或硬件程序配置为每个启动注册。通常,一旦启动,它就不会访问高于某个级别的存储器分级结构,直到启动完成(此时可以将结果写入分级结构中的更高级别)。给定启动的信息可包括完成对应图形操作所需的状态信息、要执行的着色器程序的位置、缓冲器信息、纹理数据的位置、可用地址空间等。例如,当启动完成时,图形固件或硬件可以安排启动并检测中断。在一些实施方案中,图形单元150的部分被配置为一次在单个启动上工作。资源的这个组可被称为“启动时隙”。因此,在一些实施方案中,从在启动开始时在多个处理元件之间共享的存储器读取给定启动所需的任何数据,并且在启动结束时将结果写回共享存储器。因此,在启动完成之前,其他硬件可能无法看到启动的结果,此时结果可用于共享存储器中并且可由其他启动(包括来自其他数据主设备的启动)访问。启动可包括一个或多个渲染命令的集合,其可包括用于绘制过程式几何结构的命令、用于设置阴影采样方法的命令、用于绘制网格的命令、用于检索纹理的命令、用于执行生成计算的命令等。可以在帧渲染期间的各个阶段中的一个阶段执行启动。渲染阶段的示例包括但不限于:相机渲染、光渲染、投影、纹理化、片段着色等。例如,可以为计算工作、顶点工作或像素工作调度启动。
[0106] 图9是示出根据一些实施方案的示例性节点数据结构的图示。在例示的示例中,节点数据结构包括与节点的子相关联的多个边界区域的边界0‑N、每个边界区域的元数据、操作码、指数信息、原点信息、子基本信息、状态信息和着色器索引信息。
[0107] 在一些实施方案中,边界0‑N限定对应于最多至N‑1个子节点的边界区域。在一些实施方案中,这些是由其上角和下角限定的量化的、轴对齐的边界盒(例如,在X、Y、Z坐标空间中,每个盒具有六个值)。在一些实施方案中,这些值被表示为相对于公共原点(由原点X、Y、Z场指定)和缩放系数(例如,由指数X、Y、Z场指定的2次幂的缩放系数)的固定点偏移。例如,原点值可表示为带符号浮点值。这可允许相对于父边界对所有子节点进行编码,这可避免随着盒在树的较深部分中变得较小而逐渐丧失精度。父容器(原点和指数)可以被称为节点的量化帧。
[0108] 指示每个边界区域的信息可被称为子,并且可指示内部子、叶子或无效子。给定子的状态和内容可基于其对应的元数据字段和状态字段来联合确定。例如,状态字段可包括指示子是内部节点还是叶节点的每个子的位。又如,状态字段可以单独地编码内部节点的数量和叶节点的数量。元数据字段可以指示子是否无效。
[0109] 子基本字段可指示相对于BVH树的基地址的节点的子基地址,在此之后可存储节点的子。对于叶子,元数据字段可以指示在给定边界内的叶的数量,并且指示存储叶数量处相对于整个节点的子基地址对子位置的偏移。对于非叶子,元数据字段可以类似地指定相对于子基地址的偏移(在一些实施方案中,对于混合节点,首先在偏移位置处存储子节点,然后存储叶)。如下文参考图15所述,每个边界可指代一个或多个叶,并且每个叶可由一个或多个边界指代。
[0110] 操作码字段可定义关于节点及其子的信息和性能提示。例如,在可变大小的叶实施方案中,叶步幅信息可定义连续叶之间的步幅。操作码中的另一个字段可指示子是否与变换相关联,例如,使得当遍历到子时应形成clique‑S以变换光线(用于这种情况的技术在下文参考图17至图18讨论)。
[0111] 在一些实施方案中,边界坐标被量化为例如每个坐标六、七或八位,这导致36、42或48位边界场以表示限定盒形边界区域的六个坐标。在一些实施方案中,生成量化坐标值(来自可使用更多位数表示的初始值)的量化技术确保可能存在假阳性相交结果,但不存在假阴性。例如,量化可以量化盒表示大于或等于非量化盒表示的方式执行。例如,量化算术可被配置为针对每个角在不同方向上(如果执行取整,则在对应于扩展盒的方向上)取整。这可有利地减少每个节点所使用的数据量,而不影响准确性并且在遍历期间测试增加有限。
[0112] 图10是示出根据一些实施方案的示例性大小可配置叶数据结构的图示。在例示的实施方案中,每个叶包括标头和有效载荷,具有多个可用有效载荷大小A至N。如上所述,给定节点的叶的叶步幅可以由该节点的标头数据定义。标头可包括启动SIMD组以用于基元的相交测试或执行基元的坐标变换所需的信息。有效载荷可包括用于不同类型的基元(例如,默认三角形、α映射三角形、移动三角形等)的变化信息。有效载荷信息的示例包括但不限于:基元标识符、几何结构标识符、一个或多个向量等。在一些实施方案中,给定边界的所有子叶具有相同的大小。在其他实施方案中,给定边界的叶的大小可单独编码。
[0113] 图11是示出根据一些实施方案的具有可变大小叶节点的ADS树结构的示例性存储器布局的图示。图11的左侧示出了具有根节点R、节点A‑D和可变大小叶节点0‑9的树。图11的右侧示出了这些树元素在存储器中的示例性布局。如图所示,每个节点包括向任何节点子指示存储器中的偏移的信息,之后是任何叶子。例如,对于节点A,其偏移指向节点D的信息存储在存储器中的位置,之后是叶5和6。
[0114] 在一些实施方案中,所公开的编码使得存储器的未限定区域能够跟随图形驱动器可用于各种目的的叶块(如图11中的椭圆形所示)。例如,驱动可以将调试信息、扩展基元信息、性能计数器等插入到树结构的这些部分中。
[0115] 在一些实施方案中,处理器被配置为将叶数据分成多个部分。例如,叶可以与几何基元相关联,针对该几何基元,一些数据总是被访问以用于相交测试,并且一些内容很少被需要用于相交测试(例如,用于穿通α纹理查找的uv坐标)。这些不同类型的数据可存储在叶数据结构的核心部分和扩展部分中。在一些实施方案中,扩展部分存储在如上所述的叶块之后的未定义的存储器区域中。
[0116] 需注意,包括本文所述的各种节点、叶和树数据结构是出于解释的目的,而并非旨在限制本公开的范围。在其他实施方案中,可实现各种不同的结构和组织。
[0117] 图12是示出根据一些实施方案的相交电路、节点测试电路、存储器区域和由着色器电路执行的SIMD组之间的示例性数据流的图示。如图12所示,在一些实施方案中,图形处理器包括光线相交加速器190、节点测试器1210(例如,图7的并行测试器710)和着色器电路(诸如可编程着色器电路160,未明确示出),其被配置为执行不同类型的SIMD组:clique‑A 1220和clique‑T/clique‑S 1230。此外,图形处理器实现着色器核心空间1240和设备存储器空间1250,ADS存储在该设备存储器空间中。
[0118] 图13是示出根据一些实施方案的与图12的数据流相关联的示例性方法的流程图。在1310处,在例示的实施方案中,在着色器上执行的clique‑A分配光线资源(例如,通过响应于在由clique‑A执行的着色器程序中执行分配光线指令而向RIA 190发送请求)。在1315处,在例示的实施方案中,RIA 190在一个或多个通用寄存器中返回一个或多个光线ID(需注意,例如,可针对由clique‑A处理的多个光线执行该光线分配)。在1320处,在例示的实施方案中,clique‑A基于所提供的一个或多个光线ID将一个或多个分配的光线的光线数据写入光线着色器核心空间中。
[0119] 在1325处,在例示的实施方案中,clique‑A向RIA 190发出具有光线ID(可能连同其他光线ID)的相交光线命令(例如,基于执行相交光线指令)。这可开始ADS遍历过程。在这一点之后,来自给定clique‑A的光线可最终占据通过ADS的不同路径并且可单独处理,直到clique‑A的所有光线已完成其遍历。
[0120] 在1330处,在例示的实施方案中,RIA 190找到光线的下一个ADS节点并向节点测试器1210发出该节点的测试。如果这是第一次测试光线,则RIA 190选择根节点。在1335处,在例示的实施方案中,节点测试器1210从着色器核心空间读取节点数据和光线数据并执行节点测试。它将节点的子的未命中/命中信息返回到RIA 190。
[0121] 在1340处,在例示的实施方案中,RIA 190基于测试结果遍历到下一个节点,直到到达叶节点。如果下一个节点是内部节点,则流程返回到1330。如果到达叶节点,则流程前进到1345。如果遍历完成,则流程前进到1355。
[0122] 在1345处,在例示的实施方案中,已到达叶节点,并且RIA 190生成clique‑T并发送具有用于clique‑T的信息的令牌缓冲器ID。在1350处,在例示的实施方案中,clique‑T使用令牌ID从着色器核心空间读取线程数据(例如,光线ID和基元ID),从设备存储器读取基元数据,并使用光线ID从着色器核心空间读取光线数据。clique‑T还执行基元测试,基于基元测试(例如,如果存在命中)更新光线数据,然后通知RIA 190是否继续遍历(例如,当检测到命中时,针对最近命中查询结束遍历)。
[0123] 需注意,也可对clique‑S执行类似于参考关于clique‑T的元素1345和1350所述的那些操作。在1340处,当到达S节点时,RIA 190可生成clique‑S,从设备存储器读取数据,读取光线数据,在着色器上执行以对光线执行变换(例如,可使用叶有效载荷为其指定的参数)并适当地更新光线数据的一部分。然后,clique‑S可通知RIA 190继续遍历。
[0124] 在1355处,在例示的实施方案中,遍历完成,并且RIA 190通知clique‑A,clique‑A读取来自光线着色器核心空间的具有相交结果的光线数据并释放光线资源命令(此后,光线ID可用于另一光线)。处理器可使栅栏计数器递减,例如,使得clique‑A可等待直到其所有光线在继续之前完成遍历。clique‑A然后可基于相交结果执行片段着色,这继而可在某些情况下生成附加光线。
[0125] 动态形成用于基元测试的SIMD组
[0126] 图14A是示出根据一些实施方案的用于动态形成用于基元测试的SIMD组的示例性技术的框图。在例示的实施方案中,可编程着色器160向光线相交加速器(RIA)190发送相交光线命令。相交光线命令可用于例如处理多个光线的clique‑A SIMD组。RIA 190遍历加速数据结构以生成光线的相交结果(其可来自各种clique‑A并且可采取穿过数据结构的不同路径)。
[0127] 在例示的示例中,一旦到达叶,RIA 190实际上就不执行基元测试,而是动态地形成将由可编程着色器160执行的基元测试SIMD组1405(例如,针对正相对于同一基元进行测试的光线组)。可编程着色器160执行基元测试SIMD组(clique‑T)并且可将基元测试结果提供至RIA 190(未明确示出)。RIA 190可聚合给定clique‑A的测试结果,并且在结果准备就绪时将结果提供回可编程着色器160,或者RIA 190可在结果完成时提供结果,并且clique‑T可聚合结果(例如,使用栅栏指令)。
[0128] 需注意,基元测试结果还可例如基于是否存在命中和所请求的相交类型来向RIA 190指示其是否应针对给定光线继续遍历。对于最近的命中查询,当存在命中时,遍历结束。
[0129] 在一些实施方案中,处理器被配置为将共享相同着色器的多个叶分组为相同的clique‑T,使得它们可被一起测试。这可有利地减少基元测试的平均延迟。在一些实施方案中,处理器将每个光线的线程指定为主线程,该主线程响应于执行在多个叶测试之间不并行化的操作(例如,确定获胜者并更新光线的操作,诸如找到所有距离中的最小值以及可能针对最近命中操作执行连结中断操作)。因此,clique可接收指示由clique测试的光线的光线ID的数据、正被测试的基元的基元地址以及指示“线程片段”的信息(例如,线程片段的计数和线程ID信息),该线程片段是关于相同光线进行操作的线程。
[0130] 例如,考虑正在测试的三个光线和十个不同基元的以下信息:
[0131] 光线ID 2 2 2 2 2 1 1 0 0 0基元 9 8 7 6 5 4 3 2 1 0
计数 5 5 5 5 5 2 2 3 3 3
TID 4 3 2 1 0 1 0 2 1 0
[0132] 在该示例中,针对基元5‑9测试光线2,其中对于光线2,线程片段中的五个线程的计数值,并且对于该线程片段内的五个线程具有不同线程ID(TID)0‑4。类似地,光线1针对在线程片段中具有两个线程的基元3和4进行测试。如上面参考图8所讨论的,RAI 190可将该信息存储在用于clique‑T的令牌缓冲器810中。
[0133] 在一些实施方案中,clique‑T执行SIMD范围的缩减指令以执行变换中所涉及的非并行操作。在这些实施方案中,SIMD缩减指令可访问来自SIMD组中的多个线程的数据以生成输出。例如,这可替换主线程的循环,该循环迭代通过线程以在线程片段中的线程之间找到用于命中的最小距离。使用SIMD缩减指令而不是循环可有利地改善吞吐量。
[0134] 在这些实施方案中,clique‑T的信息可包括表示片段之间的边界的片段掩码(SM)。在该示例中,片段掩码中的逻辑“1”指示这是新线程片段中的第一线程。
[0135] 光线ID 2 2 2 2 2 1 1 0 0 0基元 9 8 7 6 5 4 3 2 1 0
计数 5 5 5 5 5 2 2 3 3 3
TID 4 3 2 1 0 1 0 2 1 0
SM 0 0 0 0 1 0 1 0 0 0
[0136] SIMD缩减指令可使用该信息来在每个线程片段内操作,而不使用来自其他线程片段的输入数据。
[0137] 2019年10月9日提交的美国专利申请号16/597,625全文以引用方式并入本文,并且解释了各种示例性SIMD缩减操作和通道连接网络。这些操作通常采用结果寄存器和输入寄存器,并且基于对应于SIMD组中的不同线程的输入寄存器的不同实例找到结果。在一些实施方案中,SIMD缩减指令采用指示片段掩码的附加自变量。这可允许执行流水线避免跨线程片段携带缩减结果,从而为每个线程片段提供单独的缩减结果。因此,着色器电路可包括被配置为基于片段掩码来限制线程片段内的SIMD缩减操作的控制电路。
[0138] 在一些实施方案中,线程片段中的所有线程接收来自SIMD缩减操作的相同结果(例如,指示具有最近命中的基元)。SIMD缩减操作可支持各种算术运算,诸如最小值、最大值、加和等。
[0139] 因此,在一些实施方案中,clique‑T的不同线程关于不同光线进行操作。此外,对于相同光线或不同光线,clique‑T的不同线程可关于不同基元进行操作。此外,clique‑T可执行SIMD缩减指令,该SIMD缩减指令基于来自关于相同光线进行操作的多个线程的输入值来执行操作,并且可为线程片段中的多个线程中的每个线程生成相同的结果。
[0140] 图14B是示出根据一些实施方案的用于动态形成用于基元测试的SIMD组的示例性方法的流程图。图14B所示的方法可结合本文公开的计算机电路系统、系统、设备、元件或部件中的任一者(以及其他设备)来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0141] 在1410处,在例示的实施方案中,着色器电路执行用于第一SIMD组的光线相交指令,其中该指令指示图形场景中第一组光线的坐标信息。
[0142] 在1420处,在例示的实施方案中,光线相交电路响应于光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中节点包括指示边界区域的坐标的多个节点和指示图形场景中的基元的多个节点。
[0143] 在1430处,在例示的实施方案中,响应于到达加速数据结构的指示一个或多个基元的节点,该设备形成第二SIMD组,该第二SIMD组在仅与第一组光线部分重叠的第二组光线上操作,其中第二SIMD组执行一个或多个指令以确定第二组光线中的光线是否与一个或多个基元相交。
[0144] 在一些实施方案中,RIA 190形成第二SIMD组,并且着色器电路执行该第二SIMD组。第一SIMD组和第二SIMD组可在存储一个或多个光线中的第一光线的信息的第一数据结构上操作,其中第一数据结构存储在也可由光线相交电路访问的着色器存储器空间中。例如,第一数据结构可包括光线核心数据920、光线扩展数据840或两者。在一些实施方案中,第二SIMD组访问来自由第二SIMD组的光线相交电路识别的着色器存储器空间中的缓冲器(例如,令牌缓冲器810)的线程数据。着色器存储器空间还可包括用于由相交电路使用的光线栈数据的存储器区域。在一些实施方案中,一个或多个基元的基元坐标数据和边界区域的坐标存储在设备存储器空间中(例如,作为存储在设备存储器1250中的ADS的一部分)。
[0145] 在一些实施方案中,着色器电路暂停第一SIMD组的执行(例如,恰好在相交光线指令之后或在程序中稍后),并且在接收到来自第二SIMD组(并且可能来自其他clique‑T)的相交结果之后恢复第一SIMD组的执行以对一个或多个基元进行着色。
[0146] 在1440处,在例示的实施方案中,着色器电路基于第二SIMD组的执行结果来对被指示为相交的一个或多个基元进行着色。可通过继续执行第一SIMD组来执行着色。
[0147] 在各种实施方案中,图14A和图14B的技术可有利地提供专用边界区域测试电路的性能和功耗益处,同时使用着色器处理器来执行更复杂的操作,如基元测试。
[0148] 边界区域和基元之间的多对多映射
[0149] 图15是示出根据一些实施方案的边界区域和基元之间的示例性多对多映射的图示。在例示的示例中,图15的上部部分示出了四个基元和八个边界区域的二维视图,而图15的下部部分示出了对应于四个基元的四个叶节点和具有八个边界区域的示例性ADS节点。
[0150] 基元P0‑P3是三角基元。边界区域0‑7可为例如边界盒。尽管在各种实施方案中,边界区域中的基元顶点在三个或更多个维度中被指定,但图15的简化示例在两个维度中被示出以便于解释。
[0151] 如图所示,在一些实施方案中,图形处理器生成并使用加速数据结构,该加速数据结构支持边界区域和基元之间的多对多映射。例如,边界区域0至3是基元P0的所有父,因此基元可具有多个父边界区域。此外,边界区域3例如具有多个基元子。
[0152] 在传统ADS创建技术可能已经在较高级别创建了用于基元P0的叶节点(例如,作为边界区域0‑3的祖先并且具有较大边界区域的节点的子)的情况下,所公开的技术可以等待在较低级别创建用于基元的叶,使得它是多个较小边界区域的子。在各种实施方案中,与相对高的支化因子组合的多对多映射结构允许边界区域提供围绕基元的紧密配合。在各种实施方案中,这可减少阴性基元测试结果。节点测试在处理资源方面可能比基元测试相对便宜,因此基元测试中的这种减少可改善性能、降低功率消耗或实现两者。例如,当发布较少数量的负基元测试时,可以为给定场景形成较少数量的clique‑T。
[0153] 图16是示出根据一些实施方案的用于生成具有多对多映射的空间组织数据结构的示例性方法的流程图。图16所示的方法可以结合本文所公开的计算机电路、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0154] 在1610处,在例示的实施方案中,图形处理器访问要渲染的图形场景中的多个图形基元的数据。
[0155] 在1620处,在例示的实施方案中,图形处理器生成以空间形式组织的数据结构,其中数据结构的节点指示图形场景中的图形基元或边界区域的坐标。在例示的实施方案中,以空间形式组织的数据结构包括具有边界区域的节点,针对该边界区域,多个基元被指示为子。此外,以空间形式组织的数据结构包括基元,针对该基元,多个边界区域被指示为父。
[0156] 在一些实施方案中,图形处理器量化指示以空间形式组织的数据结构中的第一边界区域的信息,以使用比原始表示更少的位数来表示第一边界区域。该量化可降低ADS的总体存储要求。在一些实施方案中,执行量化,使得量化表示指示在每个方向上大于或等于第一边界区域的区域,从而防止第一边界区域的假阴性相交结果。在一些实施方案中,以空间形式组织的数据结构编码节点的位置(例如,从ADS的根位置的偏移),节点的所有子节点连续地位于该位置处。在一些实施方案中,以空间形式组织的数据结构指定叶节点中的基元信息和内部节点中的边界区域信息。
[0157] 在一些实施方案中,对于指示一个或多个基元的第一节点,以空间形式组织的数据结构包括一个或多个字段,该一个或多个字段指示:一个或多个基元所位于的偏移以及位于该偏移处的第一节点的基元的数量。
[0158] 在一些实施方案中,数据结构具有相对高的支化因子。例如,以空间形式组织的数据结构可包括具有至少四个子节点的节点。在一些实施方案中,数据结构支持可变大小的叶节点。因此,以空间形式组织的数据结构中的第一叶节点和第二叶节点可以具有不同的数据大小,并且第一叶节点和第二叶节点的相应父节点可以编码不同的数据大小。
[0159] 在1630处,在例示的实施方案中,图形处理器遍历以空间形式组织的数据结构,以确定图形场景中的光线是否与基元相交并且基于该确定对相交的基元着色。如上所述,处理器可基于相交结果形成用于基元测试的clique‑T并恢复执行用于着色的clique‑A。
[0160] 在遍历期间动态形成用于光线坐标变换的SIMD组
[0161] 图17是示出根据一些实施方案的当遍历加速数据结构时用于光线变换的SIMD组的示例性动态形成的图示。在例示的示例中,ADS包括十个节点0‑9。两个节点(节点5和6,其可被称为S节点)具有与相同子节点(节点7,其可为低级ADS的根,如下文所详述)的边界。这些节点可具有指示应在遍历至子节点时执行变换的字段。例如,在例示的示例中,上面参考图9讨论的操作码字段可以指示要针对节点5和6的该字段执行变换(在图17中指示为“(T)”值)。
[0162] RIA 190可形成clique‑S,以变换进行遍历的一个或多个光线(例如,在对应边界区域中的命中)的坐标。可编程着色器160可执行一个或多个指令,所述一个或多个指令指定用于执行变换的clique‑S的数学运算。在一些实施方案中,clique‑S对着色器核心空间1240中的光线数据进行操作,使得当变换完成时,RIA 190可基于变换的光线数据继续遍历。在遍历期间的某个点处,RIA 190可将光线变换回其原始坐标以进一步遍历,例如,通过形成另一个clique‑S或恢复到所存储的原始坐标。
[0163] 上述光线坐标变换可用于各种场景中。作为一个示例,几何结构实例化是允许在相同场景中渲染相同模型的多个副本的技术。例如,考虑可在场景中多次实例化以在街道上创建一排房屋的房屋的模型。对于每种情况,可定义变换矩阵以将模型从模型空间变换到世界空间。光线跟踪处理器可支持使用不同技术的实例化。作为一个示例,系统可以变换每个实例的模型并构建包括所有实例的世界空间几何结构的ADS。又如,系统可针对正在被实例化的几何结构在模型空间中创建加速数据结构的单个子部分(例如,树),并且在ADS的遍历期间执行到世界空间的变换,如图17所示。后一种技术可提供相对较小的ADS,这是由于在ADS中没有被实例化的模型的复制。
[0164] 在一些实施方案中,对于模型空间树的每个实例(例如,图17中的节点7‑节点9,其可提供要用于模型的多个实例的BVH树),根边界区域的副本被变换到世界空间,并且利用模型的根边界区域构建分级结构,作为具有ADS中的多个父的叶。上部分级结构包含模型空间树的所有实例的所有边界区域,并且可被称为顶级ADS。一次包括在ADS中并正被实例化的模型空间BVH树可被称为下级ADS。
[0165] 当从顶级ADS遍历到下级ADS时,系统可执行变换。进入的光线或边界区域自身均可被变换。在一些实施方案中,如上所述,光线被变换,因为这在计算上可能不太昂贵。例如,对于仿射变换,可以仅变换光线的原点和方向(而不是方向)。在一些实施方案中,为了在遍历期间进行反向跟踪,可以执行反向变换(例如,使用反向变换矩阵)。在其他实施方案中,处理器可记录原始光线坐标(例如,原点和方向),从而避免执行缩减变换的需要。例如,这可减少由于浮点计算引起的误差。
[0166] 在一些实施方案中,ADS可包括多于两个层级,具有每当遍历前进到下级时相对于当前级别的变换。处理器可保持在变换之前存储坐标信息以用于往回遍历到前一级别的变换栈。ADS可指示应以各种粒度执行变换。作为一个示例,节点可包括单个字段,该字段指示当遍历到其子节点中的任一个时应执行变换。又如,节点可独立地编码在过渡至不同的子节点时是否应当执行变换。
[0167] 在图17所示的示例中,可能已经生成具有分别对应于节点7‑9的三个网格的模型。在例示的示例中,该模型已被实例化两次,并且在顶级ADS(对应于节点0‑6)中存在被标记为需要变换的每个实例的节点(节点5和节点6)。这些节点(节点5和节点6)有效地是顶级分级结构的叶。
[0168] 尽管所公开的技术利用由着色器流水线执行的clique‑S SIMD组,但在其他实施方案中,专用RIA电路可被配置为执行S节点的变换。
[0169] 图18是示出根据一些实施方案的用于动态形成用于光线坐标变换的SIMD组的示例性方法的流程图。图18所示的方法可以结合本文所公开的计算机电路、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0170] 在1810处,在例示的实施方案中,着色器电路(例如,可编程着色器160)执行针对第一SIMD组的光线相交指令,其中该指令指示针对图形场景中的光线集合的坐标信息。
[0171] 在1820处,在例示的实施方案中,光线相交电路(例如,RIA 190)响应于光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中数据结构的节点指示对应于图形场景中的边界区域的坐标,并且该遍历确定光线是否与边界区域相交。
[0172] 在一些实施方案中,加速数据结构是分级结构,并且第一节点是上级加速数据结构的叶节点,其在下级加速数据结构中具有子节点。在一些实施方案中,该变换针对在图形场景中多次实例化的图形模型的实例将一个或多个光线定位在模型空间中。因此,在一些实施方案中,第一节点的子节点(例如,模型空间的根节点)上级加速数据结构中还具有另一父节点,其中另一父节点在遍历到子节点时指示不同的变换,其中不同的变换与图形模型的不同实例的模型空间相关联。
[0173] 在一些实施方案中,加速数据结构是边界体积分级结构。
[0174] 在1830处,在例示的实施方案中,设备响应于到达指示变换的第一节点而形成第二SIMD组(例如,clique‑S)以在着色器电路上执行,从而变换光线集合中的一个或多个光线的坐标。
[0175] 在一些实施方案中,光线相交电路存储一个或多个光线的原始坐标,并且响应于遍历往回通过加速数据结构经过第一节点而恢复到原始坐标。
[0176] 在一些实施方案中,第一SIMD组和第二SIMD组访问着色器存储器空间中一个或多个光线的光线数据。第一SIMD组可包括在执行光线相交指令之前为着色器存储器空间中的光线集合分配存储器空间的指令。
[0177] 在一些实施方案中,第二SIMD组包括来自另一SIMD组的执行光线相交指令的一个或多个光线。一般来讲,当采用来自遍历的不同路径时,来自clique‑A的光线可被拆分,使得clique‑S或clique‑T可关于来自多个不同clique‑A的光线进行操作。
[0178] 遍历期间的示例性光线分组
[0179] 图19A是示出根据一些实施方案的在遍历期间不同光线当前指向ADS中的不同节点的示例性情况的图示。在例示的示例中,光线A、C和E针对节点1、光线B和D针对节点2、光线X和Y针对节点3以及光线Z针对节点4。
[0180] 在一些实施方案中,图形处理器被配置为对光线进行分组以增加在给定时间针对节点测试的光线的数量。这也可称为合并或一致性收集。下文详细讨论的所公开的分组技术可例如在存储节点数据的L1数据高速缓存处减少带宽消耗。
[0181] 在一些实施方案中,图形处理器在允许光线被测试之前将每个光线分配到组。该组可以是共享相同密钥的光线的列表。对于边界区域测试,密钥可以是作为光线遍历中的下一个目标的节点的地址。作为其他示例,密钥可以是父节点或祖父节点的地址。对于叶测试,密钥可以是叶标头虚拟地址。密钥还可包括数据主设备和与光线相关联的启动时隙的其他上下文信息。
[0182] 每个组的信息指示该组中的光线的列表。在一些实施方案中,专用电路被配置为存储每个箱的光线列表。在这些实施方案中,在各种实施方式中,可以使用各种数量的条目来分组,例如,64、128、256或512组,其中每个具有4、8、16、32或64个条目。
[0183] 在一些实施方案中,每当遍历栈的顶部针对给定光线改变时,RIA搜索分配的组以查找对应密钥的匹配。RIA可包括分组控制电路1910,如图19B所示,该分组控制电路被配置为将光线分配给组。分组电路1910可类似于与设置相关联的高速缓存中的高速缓存行来搜索组,例如,通过对密钥进行散列处理以确定组集合,并且针对密钥匹配搜索组集合中的任何分配组。在这些实施方案中,分组电路1910可包括内容可寻址的存储器结构。如果找到匹配,则RIA 190被配置为将光线附加到匹配组。如果未找到匹配但未分配的组可用,则RIA 190可创建新组并将光线分配给新组。如果没有找到匹配并且当前分配了所有组,则分组可能会停下来,直到组变得可用。
[0184] 类似的技术可用于对与基元相关联的叶节点进行分组,例如,使用单独的专用电路来存储针对相同叶节点(或相同类型的叶,例如,用于着色一致性)的光线的列表。在一些实施方案中,可以为叶节点和内部节点实现不同数量的组、每组不同数量的条目或两者。
[0185] 在一些实施方案中,RIA 190还跟踪每个组内最旧光线的年龄。例如,RIA 190可保持每个组的控制寄存器中的年龄字段。可以量化年龄字段。在每个周期中,RIA可选择具有最旧光线的最多至N个组,并且从所选择的组发出光线以针对用于节点或基元测试的调度发布。在一些实施方案中,RIA 190可以不考虑用于调度的组,直到其包括阈值数量的光线。在其他实施方案中,可实现用于在可用组中进行选择的各种不同技术。
[0186] 在一些实施方案中,由分组电路1910确定的匹配组是被配置为存储每个分配组的光线列表的专用电路的索引。在其他实施方案中,可以使用数据结构的属性来指示匹配组,例如,如下面参考图19C所讨论的到列表中的条目的一个或多个指针。
[0187] 图19C是示出根据一些实施方案的用于对光线进行分组的示例性单独链接列表具体实施的图示。在例示的实施方案中,每个光线队列条目指示光线ID(例如,对于光线A、C和E)、指示下一个目标节点的栈顶字段(例如,其中0x2C是标识图19A的示例中的节点1的节点标识符)、以及指示列表中下一个光线的位置的下一个光线字段。在一些实施方案中,该技术可允许组无限期地生长而不会停滞。在一些实施方案中,RIA一次支持最多至阈值数量的组。当光线被分组时,其可被添加到组列表的末尾,并且由分组电路1910保持的尾指针可被更新。当组被调度用于测试时,RIA可使用指针斩波来迭代通过列表并找到组中的所有光线。尽管出于说明的目的讨论了单独链接的列表,但是可以实现用于光线分组的各种其他数据结构中的任一种。需注意,虽然出于说明的目的示出了单个链接的列表,但也设想了其他数据结构。
[0188] 所公开的分组技术可以有利地改善边界区域数据提取的时间位置。这可减少一个或多个数据高速缓存的高速缓存颠簸和带宽。
[0189] 图20是示出根据一些实施方案的在ADS遍历期间分组光线的示例性方法的流程图。图20所示的方法可以结合本文所公开的计算机电路、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0190] 在2010处,在例示的实施方案中,光线相交电路(例如,RIA 190)接收指示针对图形场景中的光线集合中的多个光线的原点和方向信息的一个或多个光线相交请求。
[0191] 在2020处,在例示的实施方案中,光线相交电路遍历空间组织的加速数据结构的多个节点,该加速数据结构的节点指示对应于图形场景的边界区域的坐标,以确定光线是否与边界区域相交。在例示的实施方案中,2020的遍历移动包括元素2030和2040。
[0192] 在2030处,在例示的实施方案中,光线相交电路(例如,使用分组电路1910)基于光线的下一个目标的数据结构的节点将光线集合的部分分组为多个组。在一些实施方案中,光线相交电路包括用于加速数据结构的叶节点和加速数据结构的内部节点的独立分组电路。
[0193] 在一些实施方案中,每当光线在加速数据结构的级别之间遍历时,光线相交电路将光线分配给新的组。例如,光线相交电路可针对ADS的深度优先搜索实现光线的遍历栈,并且每当遍历栈的顶部改变时,光线相交电路可将光线分配给新组。
[0194] 在一些实施方案中,为了确定光线的组,光线相交电路使用基于由光线所针对的下一个节点的密钥作为散列函数的输入以确定组集合,并且搜索该组集合以确定集合中的分配组是否匹配密钥。光线相交电路可为与任何当前分配的组不匹配的光线分配新的组。
[0195] 在2040处,在例示的实施方案中,光线相交电路系统基于分组处理(例如,使用并行测试器710)第一组,该第一组包括以第一节点为目标的光线集合的子集,以确定第一组中的光线是否与第一节点的一个或多个边界区域相交。在一些实施方案中,该处理基于在用于调度以发布到边界区域测试电路的时钟周期期间对一个或多个光线组的选择。在这些实施方案中,这些组可在继续处理其他组之前被排出,从而提供用于访问在一个或多个数据高速缓存中高速缓存的边界区域数据的时间位置。对一个或多个组的选择可基于分配的光线组中最旧的光线,这可提供公平性并避免饥饿。
[0196] 第一组可由链接列表指定。在一些实施方案中,光线队列中的条目包括指向针对对应光线的当前组的链接列表中的下一光线的字段。在一些实施方案中,第一组包括来自由着色器处理器处理的多个不同SIMD组的光线,例如,由于来自给定SIMD组的光线采取穿过ADS的不同路径并且与来自其他组的光线组合。光线相交电路可包括并行测试电路,该并行测试电路被配置为针对节点的多个边界区域来并行地测试光线。并行测试电路的多个实例可被配置为并行处理多条光线。
[0197] 详细的总体相交遍历示例
[0198] 图21是示出根据一些实施方案的用于处理光线的示例性方法的流程图。图21所示的方法可以结合本文所公开的计算机电路、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0199] 在2110处,在例示的示例中,由着色器处理器执行的clique‑A分配光线。在2112处,RIA 190为光线分配光线着色器核心空间并返回光线ID。在2114处,clique‑A将光线的数据写入着色器核心空间。在2116处,clique‑A发出相交光线指令。
[0200] 在2118处,RIA 190开始光线的ADS的遍历,例如,从BVH根节点开始。在2120处,RIA将光线分配给组(例如,使用分组电路)并等待组排出(例如,由于在活动组中具有N个最旧的光线中的一个,或者根据组中的一些其他适当的仲裁方案)。一旦发布了该组,RIA 190就在2122处确定节点类型。如果该组所针对的节点是内部节点,则流程前进至2124。如果节点为叶节点,则流程前进至2140。
[0201] 在2124处,在例示的示例中,并行测试器710执行节点测试并返回节点的边界区域的命中信息。如果在2126处存在命中,则流程前进至2128,并且RIA 190将任何未被追溯的节点推到光线栈上,并且流程前进回到2120(例如,遍历到ADS中的下一个节点)。如果在2126处不存在命中,则流程前进至2130。
[0202] 在2130处,如果栈不是空的,则RIA 190在2120处从栈弹出节点并前进到2120(例如遍历到ADS中的下一个节点)。如果栈为空,则RIA190在2134处结束遍历。
[0203] 在2140处,在例示的示例中(对于叶节点),RIA 190生成令牌ID(指向着色器核心空间中的缓冲器的指针)以用于RIA 190与要为叶节点生成的clique‑T或clique‑S之间的通信。每个线程可使用其线程ID结合令牌ID来检索其光线ID和基元地址。着色器然后在2142处调度clique‑T(用于基元测试)或clique‑S(用于光线坐标变换)并执行clique,这更新光线数据。一旦clique已经结束,RIA 190就在2144处唤醒光线以继续遍历。如果要终止光线(例如,由于检测到最近命中查询的相交),则流程前进至2134并且遍历结束。否则(例如,对于任何命中查询),流程前进到2130,并且如果栈不是空的,则可继续遍历。
[0204] 在遍历结束之后,clique‑A可从光线着色器核心空间读取结果数据。RIA 190还可释放光线,包括从光线着色器核心空间解除光线分配。
[0205] 在一些实施方案中,并行测试器710被配置为执行图21的元素2124。在一些实施方案中,RIA中的光线遍历控制电路被配置为执行图21的元素2112、2118、2120、2122、2126、2144、2146和2134。在一些实施方案中,光线栈管理器电路被配置为执行图21的元素2128、
2132和2130。在一些实施方案中,诸如着色器电路的其他图形电路被配置为执行图21的元素2110、2114、2116和2142。
[0206] 着色器核心空间
[0207] 如上所述,着色器存储器空间(在本文中也称为着色器核心空间)可被在同一着色器核心上执行的多个线程组访问,这可促进RIA 190与不同类型的SIMD组(例如,clique‑A和clique‑T)之间的数据共享。在一些实施方案中,图形处理器使用着色器存储器空间进行其他操作。一般来讲,所公开的着色器存储器共享可有利地促进协处理器和着色器之间的共享以及线程组之间的共享,而不需要与高级存储器空间(诸如设备或系统存储器空间)处的相干点相关联的延迟。在一些实施方案中,图形设备实现以下存储器空间:线程空间(给定线程的私有空间,尽管一些SIMD排列指令可允许对SIMD组中其他线程的数据的有限访问)、线程组空间(给定线程组的私有空间)、着色器存储器空间(可由在相同着色器核心上执行的多个线程组访问,并且可能可由着色器核心的一个或多个协处理器访问,但不可由其他着色器核心执行的线程组访问)、以及可由多个着色器核心和计算设备上的潜在其他电路(例如CPU)访问的设备空间。
[0208] 针对某些类型的数据使用着色器存储器空间而不是设备存储器可有利地为该数据提供较低的延迟,允许更高带宽的具体实施,降低资源一致性成本,或它们的任何组合。
[0209] 图22A是示出根据一些实施方案的着色器核心可访问的示例性高速缓存存储器分级结构的框图。在例示的实施方案中,着色器核心2210和其他电路2230具有对高速缓存/存储器分级结构2220的全部或一部分的访问权限。分级结构2220可包括低级电路如寄存器文件、各种高速缓存(例如,L0(其可与用于指令和/或数据的一个或多个ALU、L1、L2等高速缓存密切相关)和存储器电路(例如,随机存取存储器、基于磁盘的驱动器、固态存储装置等)。可以在分级结构的不同级别处实施对不同存储器空间的一致性。在一些实施方案中,设备实现统一的存储器架构,其中所有存储由存储器分级结构备份。
[0210] 其他电路2230可包括其他着色器核心、其他图形单元、其他处理器诸如CPU、片上系统(SoC)的其他电路等。需注意,在一些实施方案中,电路2230和着色器核心2210可例如利用私有低级高速缓存在内部实现分级结构2220的一部分。
[0211] 在一些实施方案中,着色器核心2210是包括在图形处理器中的多个着色器核心中的一者。着色器核心2210可包括不与其他着色器核心共享的一个或多个L1高速缓存。着色器核心2210可包括被配置为并行地执行用于SIMD组的指令的多个算术逻辑单元(ALU)。着色器核心2210可为GPU的最小缩放单元,例如能够执行其自身着色器程序的最小单元。GPU可包括尽可能少的单个着色器核心或尽可能多的着色器核心以适用于更大规模的应用。为了计算工作,着色器核心2210可接收计算工作组并将工作项目从工作组分配至内部处理流水线。
[0212] 图22B是示出根据一些实施方案的多个着色器核心及其协处理器可访问的示例性高速缓存存储器分级结构的框图。在例示的示例中,多个着色器核心2210A‑2210N及其协处理器2240A‑2240N具有对分级结构2220的访问权限。RIA 190是协处理器2240的一个示例。纹理处理单元(TPU)是另一个示例。给定着色器核心2210可具有多个协处理器,并且协处理器的全部或一部分可具有对分级结构2220的至少一部分的访问权限。
[0213] 在一些实施方案中,分级结构2220包括着色器存储器空间的相干点,该着色器存储器空间可由着色器核心2210及其协处理器访问,但不可由其他着色器核心或其协处理器访问。尽管本文以线程组粒度讨论了各种实施方案,但核心2210、协处理器2240或两者访问着色器存储器空间的粒度可变化(例如,SIMD组、线程或线程组可使用着色器存储器空间来缓冲数据)。
[0214] 图23是示出根据一些实施方案的示例性线程组、着色器核心和设备存储器空间的图示。在例示的实施方案中,设备存储器空间2330由多个着色器核心2210共享。相比之下,在例示的实施方案中,着色器核心空间2320可由协处理器2240A和着色器核心2210A执行的线程组访问,但不可由诸如着色器核心2210N的其他着色器核心执行的线程组访问(但需注意,着色器核心2210N可实现其自身的着色器核心空间,未明确示出)。在例示的实施方案中,线程组(TG)存储器空间2310A‑2310M是可由着色器核心2210A执行的单个线程组访问的私有存储器空间。在一些实施方案中,着色器核心2210A还实现分配给单个线程的线程存储器空间(未示出)。
[0215] 图24是示出根据一些实施方案的用于不同存储器空间的示例性高速缓存组织和相干点的框图。在例示的实施方案中,着色器核心2210包括L1高速缓存2410、寄存器文件2420、着色器流水线2450和控制电路2440。在该示例中,着色器核心2210还被配置为访问共享L2高速缓存2430。
[0216] 在例示的示例中,寄存器文件2420用作线程组存储器空间的相干点,并且L1高速缓存2410用作着色器核心空间相干点。相干点是共享存储器空间的所有实体(例如,用于着色器存储器空间的线程组和协处理器)将看到相同高速缓存数据的级别。在L1级实现着色器存储器空间可通过避免访问存储器分级结构的较高级别(例如,L2高速缓存2430)来减少共享数据(例如,在线程组之间)所需的存储器延迟。
[0217] 在不包括单独寄存器文件的统一存储器实施方案中,L1高速缓存可用作线程组、线程私有空间和着色器核心空间的相干点。更一般地,L1高速缓存可以是着色器核心2210外部的电路不可访问的所有存储器空间的相干点。在一些实施方案中,线程私有数据可存储在一个或多个L0高速缓存(以及L1高速缓存2410,根据需要)中。在例示的示例中,L2高速缓存用作设备存储器空间的相干点。在其他实施方案中,例如,如果L2高速缓存不一致,则诸如L3高速缓存的高级高速缓存可用作设备存储器空间的相干点。
[0218] 在一些实施方案中,着色器流水线2450被配置为执行SIMD组的指令,例如,使用用于SIMD组中的线程的共享程序计数器。这些流水线可包括被配置为在多个时钟周期内执行操作的多个流水线级。
[0219] 在一些实施方案中,控制电路2440被配置为促进正确执行针对不同存储器空间的存储器访问指令。例如,控制电路可包括用于适当地执行访问着色器存储器空间的加载、存储、分配、原子化、屏障等指令的电路。例如,访问着色器存储器空间的加载和存储不存储或检索来自其他空间的数据。从可访问空间的其他线程组的角度来看,对着色器存储器空间的原子化操作允许线程组以原子方式执行存储器访问操作。例如,如果L1高速缓存是着色器存储器空间相干点,则线程组可获取并更新一个或多个L1高速缓存行以自动地执行一组操作。着色器存储器空间的屏障或栅栏操作使得代码中屏障栅栏之前可访问空间的所有操作在屏障之后的操作之前完成。
[0220] 着色器核心空间可用于除了上述光线相交操作之外(或代替上述光线相交操作)的各种缓冲操作。SIMD例如,线程发散是例如对于某些图形工作负载在SIMD处理器中未充分利用的常见原因。例如,SIMD处理器通常使用预测的执行来处理分支指令。在预测的执行中,执行分支之后的两个路径,但在其执行期间预测不采用当前路径的线程被关断。因此,如果同一SIMD组中的一些线程被预测为关闭,而其他线程被预测为打开,则SIMD流水线硬件可能未充分利用。
[0221] 解决此类利用不足的一种方式是将采用不同路径的线程移动到不同内核。然而,这可能涉及在启动新内核之前将结果数据写入到设备存储器,这可能显著影响性能。在一些实施方案中,SIMD组的线程被分解(并且可能在执行发散路径之后重新形成),并且新SIMD组在不同路径的相同内核内执行。例如,考虑以下伪代码:
[0222]
[0223] 在上述代码示例中,如果P<0是不可预测的,则着色器可能遭受发散问题,其中相同SIMD组中的一些线程执行代码块B(而其他线程被预测为关闭)并且SIMD组中的其他线程执行代码块C。在一些实施方案中,该代码被拆分成相同内核内的三个不同着色器:
[0224]
[0225]
[0226] 在该示例中,如果processTriangle着色器由SIMD组A执行,则一个动态形成的SIMD组B可执行subdivideTriangle路径,而另一个动态形成的SIMD组C可执行rasterizeTriangle路径。需注意,SIMD组B可包括来自执行processTriangle着色器的多个不同SIMD组的线程(SIMD组C也是如此)。
[0227] 在一些实施方案中,例如,该细粒度本地调度可使用着色器存储器空间来存储中间数据,而不是将数据发送至设备存储器的相干点。例如,在上述示例中,SIMD组A可将数据存储在着色器核心空间中的缓冲器中,并且SIMD组B和SIMD组C可从该缓冲器读取中间结果。因为SIMD组B和C在不同的线程组中(例如,因为它们执行不同的着色器),所以着色器核心空间提供用于共享数据的方便的相干点。
[0228] 图25是示出根据一些实施方案的使用着色器存储器空间的示例性方法的流程图。图25所示的方法可以结合本文所公开的计算机电路、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
[0229] 在2510处,在例示的实施方案中,第一图形着色器核心和第二图形着色器核心执行多个线程组的指令。在例示的实施方案中,这包括由第一图形着色器核心执行以下两者:具有被配置为执行第一着色器程序的多个单指令多数据(SIMD)组的第一线程组,以及具有被配置为执行不同的第二着色器程序的多个SIMD组的第二线程组。需注意,在一些实施方案中,执行相同着色器程序的不同线程组也可访问着色器存储器空间。更一般地,在一些实施方案中,着色器存储器空间对于来自在同一着色器核心上运行的任何线程组中的任何SIMD组的任何线程可访问。
[0230] 在2520处,在例示的实施方案中,控制电路根据着色器存储器空间提供对存储在存储器电路中的数据的访问,该着色器存储器空间可由第一图形着色器核心执行的线程组(包括第一线程组和第二线程组)访问,但是不可由第二图形着色器核心执行的线程组访问。
[0231] 在一些实施方案中,第一图形着色器核心中的第一高速缓存(例如,L1高速缓存2410)是着色器存储器空间的相干点,并且装置中的第二高级高速缓存(例如,L2高速缓存
2430)是设备存储器空间的相干点。
[0232] 在一些实施方案中,控制电路还根据具有不同共享粒度的附加存储器空间提供对存储在存储器电路中的数据的访问,包括:用于第一线程组的线程组存储器空间,线程组存储器空间可由第一线程组访问但不可由任何其他线程组访问;线程存储器空间,线程存储器空间可由单个线程访问;以及设备存储器空间,设备存储器空间可由第一图形着色器核心和第二图形着色器核心两者执行的线程组访问。
[0233] 在一些实施方案中,着色器存储器空间也可由用于第一图形着色器核心的一个或多个协处理器访问。例如,一个或多个协处理器包括RIA190。在一些实施方案中,RIA 190被配置为:基于第一线程组(例如,clique‑A)的指令,遍历以空间形式组织的数据结构以确定要针对其测试光线相交的一个或多个基元,并且启动第二线程组(例如,clique‑T)以针对光线测试一个或多个基元,其中第一线程组和第二线程组两者关于存储在着色器存储器空间中的光线信息进行操作。
[0234] 在一些实施方案中,第一图形着色器核心被配置为执行以着色器存储器空间为目标的加载、存储和原子化指令。
[0235] 在一些实施方案中,第一图形着色器核心被配置为执行第一线程组的第一SIMD组以使用着色器存储器空间来以线程粒度存储中间图形工作以由动态形成的SIMD组的线程进一步处理。动态形成的SIMD组可包括被确定为具有用于条件控制传输指令的相同条件结果的线程集合。
[0236] 示例性设备
[0237] 现在参考图26,其示出了例示设备2600的示例性实施方案的框图。在一些实施方案中,可将设备2600的元件包括在片上系统内。在一些实施方案中,可将设备2600包括在可以是电池供电的移动设备中。因此,设备2600的功率消耗可能是重要的设计考虑因素。在例示的实施方案中,设备2600包括结构体2610、计算复合体2620、输入/输出(I/O)桥接部2650、高速缓存/存储器控制器2645、图形单元150和显示单元2665。在一些实施方案中,除所示的部件之外和/或代替所示的部件,设备2600可包括其他部件(未示出),诸如视频处理器编码器和解码器、图像处理或识别元件、计算机视觉元件等。
[0238] 结构体2610可以包括各种互连器、总线、MUX、控制器等,并且可以被配置为促进设备2600的各种元件之间的通信。在一些实施方案中,结构体2610的部分可被配置为实现各种不同的通信协议。在其他实施方案中,结构体2610可实现单个通信协议,并且耦接到结构体2610的元件可在内部从单个通信协议转换到其他通信协议。
[0239] 在例示的实施方案中,计算复合体2620包括总线接口单元(BIU)2625、高速缓存2630和内核2635和2640。在各种实施方案中,计算复合体2620可包括各种数量的处理器、处理器内核和/或高速缓存。例如,计算复合体2620可以包括1个、2个或4个处理器内核,或任何其他合适的数量。在一个实施方案中,高速缓存2630是一组关联L2高速缓存。在一些实施方案中,内核2635和/或2640可包括内部指令和/或数据高速缓存。在一些实施方案中,结构体2610、高速缓存2630或设备2600中的其他地方的一致性单元(未示出)可被配置为维持设备2600的各个高速缓存之间的一致性。BIU 2625可被配置为管理计算复合体2620和设备
2600的其他元件之间的通信。处理器内核诸如内核2635和2640可被配置为执行可包括操作系统指令和用户应用指令的特定指令集架构(ISA)的指令。
[0240] 高速缓存/存储器控制器2645可被配置为管理结构体2610与一个或多个高速缓存和/或存储器之间的数据传输。例如,可将高速缓存/存储器控制器2645耦接到L3高速缓存,继而可将该L3高速缓存耦接到系统存储器。在其他实施方案中,可将高速缓存/存储器控制器2645直接耦接到存储器。在一些实施方案中,高速缓存/存储器控制器2645可包括一个或多个内部高速缓存。
[0241] 如本文所用,术语“耦接到”可指示元件之间的一个或多个连接,并且耦接可包括中间元件。例如,在图26中,图形单元150可被描述为通过结构体2610和高速缓存/存储器控制器2645“耦接到”存储器。相比之下,在图26的例示的实施方案中,图形单元150“直接耦接”到结构体2610,因为不存在中间元件。
[0242] 图形单元150可包括一个或多个处理器和/或一个或多个图形处理单元(GPU)。例如,图形单元150可接收面向图形的指令,诸如 Metal或 指令。图形单元150可基于所接收的面向图形的指令执行专用GPU指令或执行其他操作。图形单元
150通常可被配置为并行处理大块数据,并且可在帧缓冲器中构建图像以输出到显示器。图形单元150可包括在一个或多个图形处理流水线中的变换、照明、三角形和/或渲染引擎。图形单元150可输出用于显示图像的像素信息。在各种实施方案中,可编程着色器160可以包括被配置为执行图形程序的高度并行的执行核,这些图形程序可以包括像素任务、顶点任务和计算任务(其可以是图形相关的或可以不是图形相关的)。
[0243] 在一些实施方案中,图形单元150包括本文所讨论的电路。在其他实施方案中,例如,所公开的电路可在其他类型的处理器(诸如CPU)中实现。
[0244] 显示单元2665可被配置为从帧缓冲器读取数据并且提供像素值流以用于显示。在一些实施方案中,显示单元2665可被配置为显示流水线。另外,显示单元2665可被配置为将多个帧混合以产生输出帧。此外,显示单元2665可以包括用于耦接到用户显示器(例如,触摸屏或外部显示器)的一个或多个接口(例如, 或嵌入式显示端口(eDP))。
[0245] I/O桥接部2650可以包括被配置为实现例如通用串行总线(USB)通信、安全性、音频和/或低功率永远在线功能的各种元件。I/O桥接部2650还可以包括例如脉冲宽度调制(PWM)、通用输入/输出(GPIO)、串行外围接口(SPI)和/或内部集成电路(I2C)的接口。可将各种类型的外围设备和设备经由I/O桥接部2650耦接到设备2600。
[0246] 在一些实施方案中,设备2600包括网络接口电路(未明确示出),该网络接口电路可连接到结构体2610或I/O桥接部2650。网络接口电路可被配置为经由各种网络进行通信,这些网络可以是有线网络、无线网络或两者。例如,网络接口电路可被配置为经由有线局域网、无线局域网(例如,经由WiFi)或广域网(例如,互联网或虚拟专用网络)进行通信。在一些实施方案中,网络接口电路被配置为经由使用一种或多种无线电接入技术的一个或多个蜂窝网络进行通信。在一些实施方案中,网络接口电路被配置为使用设备到设备通信(例如,蓝牙或WiFi Direct)等进行通信。在各种实施方案中,网络接口电路可为设备2600提供与各种类型的其他设备和网络的连接。
[0247] 示例性应用
[0248] 现在转到图27,示出了可包括上文所述的电路、设备或系统中的任一者的各种类型的系统。可结合或以其他方式利用本文所述技术中的一种或多种的系统或设备2700可用于广泛的领域。例如,系统或设备2700可用作诸如台式计算机2710、膝上型计算机2720、平板电脑2730、蜂窝或移动电话2740或电视2750(或耦接到电视的机顶盒)的系统的硬件的一部分。
[0249] 类似地,所公开的元件可用于可穿戴设备2760,诸如智能手表或健康监测设备。在许多实施方案中,智能手表可实现多种不同的功能—例如,对电子邮件、蜂窝服务、日历、健康监测等的访问。可穿戴设备还可被设计成仅执行健康监测功能,诸如监测用户的生命体征、执行流行病学功能诸如接触跟踪、向紧急医疗服务提供通信等。还设想了其他类型的设备,包括佩戴在颈部上的设备、可植入人体中的设备、被设计成提供计算机生成现实体验的眼镜或头盔,诸如基于增强现实和/或虚拟现实的那些等。
[0250] 系统或设备2700也可在各种其他环境中使用。例如,系统或设备2700可在服务器计算机系统(诸如专用服务器)的上下文中或在实现基于云的服务2770的共享硬件上使用。更进一步地,系统或设备2700可在广泛范围的专用日常设备中实现,包括家中常见的设备
2780,诸如冰箱、恒温器、安全相机等。此类设备的互连通常被称为“物联网”(IoT)。元件也可以各种运输模式来实现。例如,系统或设备2700可以用于各种类型的车辆2790的控制系统、引导系统、娱乐系统等。
[0251] 图27中所示的应用仅仅是示例性的,并非旨在限制所公开的系统或设备的潜在未来应用。其他示例性应用包括但不限于:便携式游戏设备、音乐播放器、数据存储设备、无人航空载具等。
[0252] 示例性计算机可读介质
[0253] 本公开已经在上文中详细描述了各种示例性电路。意图在于本公开不仅涵盖包括此类电路系统的实施方案,而且还涵盖包括指定此类电路系统的设计信息的计算机可读存储介质。因此,本公开旨在支持不仅涵盖包括所公开电路系统的装置、而且还涵盖以被配置为生成包括所公开电路系统的硬件(例如集成电路)的制造系统识别的格式指定电路系统的存储介质的权利要求。对此类存储介质的权利要求旨在涵盖例如生成电路设计但本身不制造该设计的实体。
[0254] 图28是示出根据一些实施方案的存储电路设计信息的示例性非暂态计算机可读存储介质的框图。在例示的实施方案中,半导体制造系统2820被配置为处理存储于非暂态计算机可读介质2810上的设计信息2815并基于该设计信息2815来制造集成电路2830。
[0255] 非暂态计算机可读存储介质2810可以包括各种适当类型的存储器设备或存储设备中的任一个。非暂态计算机可读存储介质2810可以是安装介质,例如CD‑ROM、软盘或磁带设备;计算机系统存储器或随机存取存储器诸如DRAM、DDR RAM、SRAM、EDO RAM、Rambus RAM等;非易失性存储器诸如闪存、磁介质,例如,硬盘驱动器或光学存储装置;寄存器、或其他类似类型的存储器元件等。非暂态计算机可读存储介质2810可包括其他类型的非暂态存储器或它们的组合。非暂态计算机可读存储介质2810可包括可驻留于不同位置例如通过网络连接的不同计算机系统中的两个或更多个存储器介质。
[0256] 设计信息2815可使用各种适当的计算机语言中的任何语言来指定,包括硬件描述语言诸如但不限于:VHDL、Verilog、SystemC、SystemVerilog、RHDL、M、MyHDL等。设计信息2815可以能被半导体制造系统2820用来制造集成电路2830的至少一部分。设计信息2815的格式可被至少一个半导体制造系统2820所识别。在一些实施方案中,设计信息2815还可包括指定集成电路2830的综合和/或布局的一个或多个单元库。在一些实施方案中,设计信息整体或部分地以指定单元库元素及其连接性的网表的形式来指定。单独获取的设计信息
2815可包括或可以不包括用于制造对应集成电路的足够信息。例如,设计信息2815可以指定要制造的电路元件,但不指定它们的物理布局。在这种情况下,设计信息2815可能需要与布局信息组合以实际制造指定的电路。
[0257] 在各种实施方案中,集成电路2830可以包括一个或多个定制宏单元,诸如存储器、模拟或混合信号电路等。在这种情况下,设计信息2815可包括与包括的宏单元相关的信息。此类信息可以包括但不限于电路图捕获数据库、掩模设计数据、行为模型以及设备或晶体管级网表。如本文所用,掩模设计数据可以根据图形数据系统(GDSII)或任何其他合适的格式来格式化。
[0258] 半导体制造系统2820可包括被配置为制造集成电路的各种适当元件中的任何元件。这可包括例如用于(例如在可包括掩模的晶片上)沉积半导体材料、移除材料、改变所沉积材料的形状、(例如通过掺杂材料或使用紫外处理来修改介电常数)对材料进行改性等的元件。半导体制造系统2820还可被配置为针对正确操作执行所制造电路的各种测试。
[0259] 在各种实施方案中,集成电路2830被配置为根据由设计信息2815所指定的电路设计来操作,这可包括执行本文所描述功能中的任何功能。例如,集成电路2830可包括图1B、图3A、图6、图7、图14A、图19B、图22A‑图22B、图24或图26中所示的各种元件中的任何元件。另外,集成电路2830可被配置为执行本文结合其他部件所描述的各种功能。另外,本文所述的功能性可由多个连接的集成电路来执行。
[0260] 如本文所用,形式为“指定被配置为…的电路的设计的设计信息”的短语并不暗示为了满足该要素就必须制造所涉及的电路。相反,该短语表明设计信息描述了一种电路,该电路在被制造时将被配置为执行所指示的动作或者将包括所指定的部件。
[0261] 以下编号的条款列出了本文所公开的各种非限制性实施方案:
[0262] 集合A
[0263] A1.一种装置,所述装置包括:
[0264] 图形着色器电路,所述图形着色器电路被配置为执行光线相交指令,所述光线相交指令指示图形场景中的一个或多个光线的集合的原点和方向信息;
[0265] 光线相交电路,所述光线相交电路被配置为:
[0266] 响应于所述光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中所述数据结构的节点指示对应于所述图形场景中的边界区域的坐标;
[0267] 在所述遍历期间使用边界区域测试电路并行地测试所述光线的集合中的光线是否与由所述数据结构的节点指示的多个不同边界区域相交;以及
[0268] 其中所述装置被配置为基于所述遍历和测试来确定指定与所述一个或多个光线的集合中的相应光线相交的一个或多个图形基元的信息;并且
[0269] 其中所述图形着色器电路被配置为基于相交光线来对指定的一个或多个图形基元进行着色。
[0270] A2.根据集合A内的任何前述条款所述的装置,其中边界区域测试电路被配置为针对多个不同边界区域并行地测试多个光线。
[0271] A3.根据集合A内的任何前述条款所述的装置,其中所述边界区域测试电路包括:
[0272] 多个边界区域测试器,所述多个边界区域测试器被配置为确定光线是否与边界区域相交并且被配置为并行地对多个边界区域执行所述测试;和
[0273] 公共节点计算电路,所述公共节点计算电路被配置为执行其输出由所述边界区域测试器共享的一个或多个操作。
[0274] A4.根据集合A内的任何前述条款所述的装置,其中所述边界区域测试电路还包括:
[0275] 边界区域数据高速缓存;
[0276] 光线数据高速缓存;和
[0277] 结果排序电路,所述结果排序电路被配置为基于到被测光线的原点的距离来对来自所述多个边界区域测试器的相交结果进行排序。
[0278] A5.根据集合A内的任何前述条款所述的装置,其中所述装置被配置为将针对所述一个或多个光线的集合的光线数据存储在着色器存储器空间中,所述着色器存储器空间能够被所述图形着色器电路和所述光线相交电路访问。
[0279] A6.根据集合A内的任何前述条款所述的装置,其中所述图形着色器电路被配置为基于所指定的一个或多个图形基元的着色来生成一个或多个附加光线,并且执行用于所述一个或多个附加光线的光线相交指令。
[0280] A7.根据集合A内的任何前述条款所述的装置,其中所述加速数据结构是分级结构,并且第一节点是上级加速数据结构的叶节点,所述第一节点在下级加速数据结构中具有子节点;
[0281] 其中所述下级加速数据结构对应于多次在所述图形场景中实例化的图形模型;以及
[0282] 其中所述光线相交电路被配置为形成SIMD组以将到达所述第一节点的一个或多个光线的坐标变换到所述图形模型的实例的模型空间。
[0283] A8.根据集合A内的任何前述条款所述的装置,其中所述加速数据结构的一个或多个节点包括四个或更多个边界区域以及四个或更多个子节点。
[0284] A9.根据集合A内的任何前述条款所述的装置,
[0285] 其中所述加速数据结构包括具有边界区域的节点,针对所述边界区域,多个基元被指示为子;以及
[0286] 其中所述加速数据结构包括基元,针对所述基元,多个边界区域被指示为父。
[0287] A10.根据集合A内的任何前述条款所述的装置,其中所述光线相交电路被配置为形成SIMD组以针对对应于所述数据结构的叶节点的基元来测试光线集合
[0288] A11.根据集合A内的任何前述条款所述的装置,其中所述光线相交电路被配置为使用分组电路基于所述光线的下一个目标的所述数据结构的节点将所述光线集合的部分分组为多个组,其中所述测试基于所述组。
[0289] A12.根据集合A内的任何前述条款所述的装置,其中所述装置是计算设备,所述计算设备包括:
[0290] 图形处理器,所述图形处理器包括所述光线相交电路;
[0291] 中央处理单元;和
[0292] 网络接口电路。
[0293] A13.一种方法,包括由根据集合A内的任何前述条款所述的装置执行的操作的任何组合。
[0294] A14.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
[0295] 条款A1至A12所述的要素的任何组合。
[0296] ***
[0297] 集合B
[0298] B1.一种装置,所述装置包括:
[0299] 光线相交电路,所述光线相交电路被配置为:
[0300] 接收一个或多个光线相交请求,所述一个或多个光线相交请求指示图形场景中的光线集合中的多个光线的原点和方向信息;
[0301] 遍历空间组织的加速数据结构的多个节点,所述加速数据结构的节点指示对应于所述图形场景的边界区域的坐标,以确定光线是否与边界区域相交,包括:
[0302] 由分组电路基于所述光线的下一个目标的所述数据结构的节点将所述光线集合的部分分组为多个组;
[0303] 以及
[0304] 通过边界区域测试电路基于所述分组来处理第一组,所述第一组包括以第一节点为目标的所述光线集合的子集,以确定所述第一组中的光线是否与所述第一节点的一个或多个边界区域相交。
[0305] B2.根据集合B内的任何前述条款所述的装置,其中所述光线相交电路被配置为在时钟周期期间选择一组或多组光线,并且调度光线组中的光线以发出到所述边界区域测试电路。
[0306] B3.根据集合B内的任何前述条款所述的装置,其中所述选择基于不同组光线中的最旧光线。
[0307] B4.根据集合B内的任何前述条款所述的装置,其中所述分组提供用于访问在一个或多个数据高速缓存中高速缓存的边界区域数据的时间位置。
[0308] B5.根据集合B内的任何前述条款所述的装置,其中所述光线相交电路包括用于所述加速数据结构的叶节点和所述加速数据结构的内部节点的独立分组电路。
[0309] B6.根据集合B内的任何前述条款所述的装置,其中所述第一组由链接列表指定。
[0310] B7.根据集合B内的任何前述条款所述的装置,其中光线队列中的条目包括指向针对对应光线的当前组的所述链接列表中的下一光线的字段。
[0311] B8.根据集合B内的任何前述条款所述的装置,其中所述第一组包括来自由着色器处理器处理的多个不同SIMD组的光线。
[0312] B9.根据集合B内的任何前述条款所述的装置,其中所述光线相交电路被配置为每当所述光线在所述加速数据结构的级别之间遍历时将光线分配给新组。
[0313] B10.根据集合B内的任何前述条款所述的装置,其中所述光线相交电路针对所述光线实现遍历栈以用于所述加速数据结构的深度优先搜索,并且其中所述光线相交电路被配置为每当所述遍历栈的顶部改变时将所述光线分配至新组。
[0314] B11.根据集合B内的任何前述条款所述的装置,其中为了确定光线的组,所述光线相交电路被配置为:
[0315] 使用基于由所述光线指向的下一个节点的密钥作为散列函数的输入以确定组集合;以及
[0316] 搜索所述组集合以确定所述集合中的分配组是否匹配所述密钥。
[0317] B12.根据集合B内的任何前述条款所述的装置,其中所述光线相交电路被配置为为与任何当前分配的组不匹配的光线分配新的组。
[0318] B13.根据集合B内的任何前述条款所述的装置,其中所述边界区域测试电路包括并行测试电路,所述并行测试电路被配置为针对节点的多个边界区域并行地测试光线。
[0319] B14.一种方法,包括:
[0320] 由根据集合B内的任何前述条款所述的电路执行的操作的任何组合。
[0321] B15.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
[0322] 条款B1至B13所述的要素的任何组合。
[0323] ***
[0324] 集合C
[0325] C1.一种装置,所述装置包括:
[0326] 一个或多个图形处理器,所述一个或多个图形处理器被配置为:
[0327] 访问要渲染的图形场景中的多个图形基元的数据;
[0328] 生成以空间形式组织的数据结构,其中所述数据结构的一些节点指示图形基元,并且一些节点指示所述图形场景中的边界区域的坐标,其中:
[0329] 所述以空间形式组织的数据结构包括具有边界区域的节点,针对该边界区域,多个基元被指示为子;以及
[0330] 所述以空间形式组织的数据结构包括基元,针对所述基元,多个边界区域被指示为父;以及
[0331] 遍历所述以空间形式组织的数据结构以确定所述图形场景中的光线是否与基元相交;并且
[0332] 基于所述确定对相交基元进行着色。
[0333] C2.根据集合C内的任何前述条款所述的装置,其中所述一个或多个图形处理器被配置为使用比原始表示更少的位数来量化指示所述以空间形式组织的数据结构中的第一边界区域的信息来表示第一边界区域。
[0334] C3.根据集合C内的任何前述条款所述的装置,其中所述一个或多个图形处理器被配置为执行所述量化,使得所量化的表示指示大于或等于所述第一边界区域的区域,从而防止所述第一边界区域的假阴性相交结果。
[0335] C4.根据集合C内的任何前述条款所述的装置,其中对于指示一个或多个基元的第一节点,所述以空间形式组织的数据结构包括指示以下各项的一个或多个字段:
[0336] 所述一个或多个基元所位于的偏移;以及
[0337] 位于所述偏移处的所述第一节点的基元的数量。
[0338] C5.根据集合C内的任何前述条款所述的装置,其中所述以空间形式组织的数据结构包括具有至少四个子节点的节点。
[0339] C6.根据集合C内的任何前述条款所述的装置,其中所述以空间形式组织的数据结构编码节点的存储位置,节点的所有子节点连续地位于该位置处。
[0340] C7.根据集合C内的任何前述条款所述的装置,其中用于所述一个或多个图形处理器的驱动器被配置为将调试数据插入到所述节点中的一个或多个节点的子之间的存储器空间中。
[0341] C8.根据集合C内的任何前述条款所述的装置,其中所述以空间形式组织的数据结构指定叶节点中的基元信息和内部节点中的边界区域信息。
[0342] C9.根据集合C内的任何前述条款所述的装置,其中所述以空间形式组织的数据结构中的第一叶节点和第二叶节点具有不同的数据大小,其中所述第一叶节点和所述第二叶节点的相应父节点编码所述不同的数据大小。
[0343] C10.根据集合C内的任何前述条款所述的装置,还包括:
[0344] 网络接口电路;和
[0345] 一个或多个中央处理单元。
[0346] C11.一种方法,包括:
[0347] 由根据集合C内的任何前述条款所述的电路执行的操作的任何组合。
[0348] C12.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
[0349] 条款C1至C10所述的要素的任何组合。
[0350] ***
[0351] 集合D
[0352] D1.一种装置,所述装置包括:
[0353] 着色器电路,所述着色器电路被配置为执行用于第一SIMD组的光线相交指令,其中所述指令指示图形场景中的光线集合的坐标信息;
[0354] 光线相交电路,所述光线相交电路被配置为:
[0355] 响应于所述光线相交指令而遍历空间组织的加速数据结构中的多个节点,其中所述数据结构的节点指示对应于所述图形场景中的边界区域的坐标,并且所述遍历确定光线是否与所述边界区域相交;以及
[0356] 响应于到达指示变换的第一节点,形成第二SIMD组以在所述着色器电路上执行以变换所述光线集合中的一个或多个光线的坐标。
[0357] D2.根据集合D内的任何前述条款所述的装置,其中所述加速数据结构是分级结构,并且所述第一节点是上级加速数据结构的叶节点,所述第一节点在下级加速数据结构中具有子节点。
[0358] D3.根据集合D内的任何前述条款所述的装置,其中所述变换针对在所述图形场景中多次实例化的图形模型的实例将所述一个或多个光线定位在模型空间中。
[0359] D4.根据集合D内的任何前述条款所述的装置,其中所述第一节点的子节点还具有所述上级加速数据结构中的另一父节点,其中所述另一父节点在遍历到所述子节点时指示不同的变换,其中所述不同的变换与用于所述图形模型的不同实例的模型空间相关联。
[0360] D5.根据集合D内的任何前述条款所述的装置,其中所述装置被配置为存储所述一个或多个光线的原始坐标,并且响应于遍历往回通过所述加速数据结构经过所述第一节点而恢复到所述原始坐标。
[0361] D6.根据集合D内的任何前述条款所述的装置,其中所述第一SIMD组和所述第二SIMD组访问着色器存储器空间中的所述一个或多个光线的光线数据。
[0362] D7.根据集合D内的任何前述条款所述的装置,其中所述第一SIMD组包括在执行所述光线相交指令之前为所述着色器存储器空间中的光线集合分配存储器空间的指令。
[0363] D8.根据集合D内的任何前述条款所述的装置,其中所述第二SIMD组包括来自另一SIMD组的执行光线相交指令的一个或多个光线。
[0364] D9.根据集合D内的任何前述条款所述的装置,其中所述加速数据结构是边界体积分级结构。
[0365] D10.根据集合D内的任何前述条款所述的装置,其中所述装置是计算设备,所述计算设备包括:
[0366] 图形单元,所述图形单元包括所述光线相交电路和所述着色器电路;
[0367] 一个或多个中央处理单元;和
[0368] 网络接口电路。
[0369] D11.一种方法,包括:
[0370] 由根据集合D内的任何前述条款所述的电路执行的操作的任何组合。
[0371] D12.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
[0372] 条款D1至D10所述的要素的任何组合。
[0373] ***
[0374] 集合E
[0375] E1.一种装置,所述装置包括:
[0376] 着色器电路,所述着色器电路被配置为执行用于第一SIMD组的光线相交指令,其中所述指令指示图形场景中第一光线集合的坐标信息;和
[0377] 光线相交电路,所述光线相交电路被配置为响应于所述光线相交指令而遍历以空间形式组织的加速数据结构中的多个节点,其中所述节点包括指示边界区域的坐标的多个节点和指示所述图形场景中的基元的多个节点;
[0378] 其中所述装置被配置为响应于到达所述加速数据结构的指示一个或多个基元的节点而形成第二SIMD组,所述第二SIMD组在仅与所述第一光线集合部分地重叠的第二光线集合上操作,其中所述第二SIMD组包括用于确定所述第二光线集合中的光线是否与所述一个或多个基元相交的一个或多个指令;以及
[0379] 其中所述着色器电路被配置为基于所述第二SIMD组的执行结果来对被指示为相交的一个或多个基元进行着色。
[0380] E2.根据集合E内的任何前述条款所述的装置,其中所述着色器电路被配置为基于执行所述第二SIMD组的相交结果,向所述光线相交电路指示是否继续所述一个或多个光线中的光线的遍历。
[0381] E3.根据集合E内的任何前述条款所述的装置,其中所述第一SIMD组和所述第二SIMD组在存储针对所述一个或多个光线中的第一光线的信息的第一数据结构上操作,其中所述第一数据结构存储在所述光线相交电路也可访问的着色器存储器空间中。
[0382] E4.根据集合E内的任何前述条款所述的装置,其中所述第二SIMD组被配置为访问来自所述着色器存储器空间中的缓冲器的由所述光线相交电路所识别的所述第二SIMD组的线程数据。
[0383] E5.根据集合E内的任何前述条款所述的装置,其中所述第二SIMD组包括被配置为针对多个不同基元测试第一光线的不同线程。
[0384] E6.根据集合E内的任何前述条款所述的装置,其中所述第二SIMD组包括SIMD缩减指令,所述SIMD缩减指令基于来自关于所述第一光线进行操作的多个线程的输入值来执行操作。
[0385] E7.根据集合E内的任何前述条款所述的装置,还包括边界区域测试电路,所述边界区域测试电路被配置为在所述遍历期间并行地测试光线是否与由所述加速数据结构的节点指示的所述边界区域中的多个不同者相交。
[0386] E8.根据集合E内的任何前述条款所述的装置,其中所述着色器电路被配置为暂停所述第一SIMD组的执行,并且在接收到来自所述第二SIMD组的相交结果之后恢复所述第一SIMD组的执行以对所述一个或多个基元进行着色。
[0387] E9.根据集合E内的任何前述条款所述的装置,其中所述装置是计算设备,所述计算设备包括:
[0388] 图形单元,所述图形单元包括所述着色器电路和所述光线相交电路;
[0389] 中央处理单元;和
[0390] 网络接口电路。
[0391] E10.一种方法,包括:
[0392] 由根据集合E内的任何前述条款所述的电路执行的操作的任何组合。
[0393] E11.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
[0394] 条款E1至E9所述的要素的任何组合。
[0395] ***
[0396] 集合F
[0397] F1.一种装置,所述装置包括:
[0398] 第一图形着色器核心和第二图形着色器核心,所述第一图形着色器核心和所述第二图形着色器核心被配置为执行用于多个线程组的指令,其中所述第一图形着色器核心被配置为执行:
[0399] 第一线程组,所述第一线程组具有被配置为执行第一着色器程序的多个单指令多数据(SIMD)组;以及
[0400] 第二线程组,所述第二线程组具有被配置为执行不同的第二着色器程序的多个SIMD组;
[0401] 存储器电路;和
[0402] 控制电路,其中所述控制电路被配置为根据着色器存储器空间提供对存储在所述存储器电路中的数据的访问,所述着色器存储器空间可由所述第一图形着色器核心执行的线程组(包括所述第一线程组和所述第二线程组)访问,但是不可由所述第二图形着色器核心执行的线程组访问。
[0403] F2.根据集合F内的任何前述条款所述的装置,其中所述第一图形着色器核心中的第一高速缓存是所述着色器存储器空间的相干点,并且所述装置中的第二高级高速缓存是设备存储器空间的相干点。
[0404] F3.根据集合F内的任何前述条款所述的装置,其中所述控制电路还被配置为根据以下所述存储器空间提供对存储在所述存储器电路中的数据的访问:
[0405] 用于所述第一线程组的线程组存储器空间,所述线程组存储器空间能够由所述第一线程组访问但不能由任何其他线程组访问;
[0406] 线程存储器空间,所述线程存储器空间可由单个线程访问;和
[0407] 设备存储器空间,所述设备存储器空间能够由所述第一图形着色器核心和所述第二图形着色器核心两者执行的线程组访问。
[0408] F4.根据集合F内的任何前述条款所述的装置,其中所述着色器存储器空间也可由用于所述第一图形着色器核心的一个或多个协处理器访问。
[0409] F5.根据集合F内的任何前述条款所述的装置,其中所述一个或多个协处理器包括光线相交电路。
[0410] F6.根据集合F内的任何前述条款所述的装置,其中所述光线相交电路被配置为:
[0411] 基于所述第一线程组的指令,遍历以空间形式组织的数据结构以确定要针对其测试光线相交的一个或多个基元;以及
[0412] 启动所述第二线程组以针对所述光线测试所述一个或多个基元;
[0413] 其中所述第一线程组和所述第二线程组两者关于存储在所述着色器存储器空间中的光线信息进行操作。
[0414] F7.根据集合F内的任何前述条款所述的装置,其中所述第一图形着色器核心被配置为执行以所述着色器存储器空间为目标的加载、存储和原子化指令。
[0415] F8.根据集合F内的任何前述条款所述的装置,其中所述第一图形着色器核心被配置为执行所述第一线程组的第一SIMD组以使用所述着色器存储器空间来存储线程粒度的中间图形工作以由动态形成的SIMD组的线程进一步处理。
[0416] F9.根据集合F内的任何前述条款所述的装置,其中所述动态形成的SIMD组包括线程集合,所述线程集合被确定为具有用于条件控制传输指令的相同条件结果。
[0417] F10.一种方法,包括:
[0418] 由根据集合F内的任何前述条款所述的电路执行的操作的任何组合。
[0419] F11.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
[0420] 条款F1至F9所述的要素的任何组合。
[0421] ***
[0422] 本公开包括对“实施方案”或“实施方案”的组(例如,“一些实施方案”或“各种实施方案”)的引用。实施方案是所公开概念的不同具体实施或实例。提及“实施方案”、“一个实施方案”、“特定实施方案”等并不一定是指相同的实施方案。设想了大量可能的实施方案,包括具体公开的那些,以及落入本公开的实质或范围内的修改或替代。
[0423] 本公开可讨论可由所公开的实施方案产生的潜在优点。并非所有这些实施方案的具体实施都将必然表现出任何或所有潜在优点。特定实施方式是否实现了优点取决于许多因素,其中一些因素在本公开的范围之外。事实上,存在许多原因导致落入权利要求范围内的具体实施可能不表现出任何所公开的优点中的一些或全部。例如,特定具体实施可包括在本公开的范围之外的其他电路,结合所公开的实施方案中的一个实施方案,该其他电路否定或减弱一个或多个所公开的优点。此外,特定具体实施(例如,具体实施技术或工具)的次优设计执行也可能否定或减弱所公开的优点。即使假设有技术的具体实施,优点的实现仍可取决于其他因素,诸如部署具体实施的环境情况。例如,提供给特定具体实施的输入可防止本公开中解决的一个或多个问题在特定场合发生,结果可能无法实现其解决方案的益处。考虑到本公开外部的可能因素的存在,本文所述的任何潜在优点都不应理解为是为了证明侵权行为而必须满足的权利要求限制。相反,此类潜在优点的识别旨在示出受益于本公开的设计者可用的一种或多种改进类型。永久性地描述此类优点(例如,陈述特定优点“可能出现”)并非旨在传达关于此类优点实际上是否可被实现的疑问,而是认识到此类优点的实现通常取决于附加因素的技术现实。
[0424] 除非另行指出,否则实施方案是非限制性的。也就是说,所公开的实施方案并非旨在限制基于本公开起草的权利要求的范围,即使仅针对特定特征描述单个示例的情况下也是如此。所公开的实施方案旨在为示例性的而非限制性的,而无需在本公开中进行任何相反的陈述。因此本申请意在允许涵盖所公开实施方案的权利要求、以及此类替代形式、修改形式和等价形式,这对知晓本公开有效效果的本领域技术人员将是显而易见的。
[0425] 例如,本申请中的特征可以任何合适的方式组合。因此,在本专利申请(或要求享有其优先权的专利申请)进行期间可针对特征的任何此类组合作出新的权利要求。具体地讲,参照所附权利要求,从属权利要求的特征在适当的情况下可与其他从属权利要求的特征组合,包括从属于其他独立权利要求的权利要求。类似地,在适当的情况下,可组合来自相应独立权利要求的特征。
[0426] 因此,虽然所附从属权利要求可撰写成使得每个从属权利要求从属于单个其他权利要求,但也可设想附加从属关系。可设想符合本公开的从属特征的任何组合,并且这些组合可在本专利申请或另一专利申请中受权利要求书保护。简而言之,组合不限于所附权利要求中具体列举的那些。
[0427] 在适当的情况下,还预期以一种格式或法定类型(例如,装置)起草的权利要求旨在支持另一种格式或法定类型(例如,方法)的对应权利要求。
[0428] ***
[0429] 因为本公开是法律文件,所以各种术语和短语可受到管理和司法解释的约束。特此给出公告,以下段落以及贯穿本公开提供的定义将用于确定如何解释基于本公开起草的权利要求。
[0430] 除非上下文另有明确规定,否则对单数形式的项目的引用(即,前面有“一个”、“一种”或“该”的名词或名词短语)旨在表示“一个或多个”。因此,在不伴随上下文的情况下,对权利要求中的“项目”的引用并不排除该项目的附加实例。“多个”项目是指两个或更多个项目的集合。
[0431] 本文使用术语“可以”用于允许的意义上(即,具有潜在可能的,能够的),而不是在强制意义上(即必须)。
[0432] 术语“包含”和“包括”及其形式是开放式的,并且意指“包括但不限于”。
[0433] 当在本公开中相对于选项列表使用术语“或”时,除非上下文另有提供,否则一般将理解为以包含性意义使用。因此,表述“x或y”等同于“x或y,或两者”,因此涵盖1)x但不是y,2)y但不是x,以及3)x和y两者。另一方面,短语诸如“x或y中的任一者,但不是两者都”使得清楚“或”以排他性意义使用。
[0434] 表述“w、x、y或z,或它们的任何组合”或“...w、x、y和z中的至少一者”旨在涵盖涉及最多至该集合中元件总数的单个元件的所有可能性。例如,给定集合[w,x,y,z],这些短语涵盖集合中的任何单个元素(例如,w但不是x、y或z)、任何两个元素(例如,w和x,但不是y或z)、任何三个元素(例如,w、x和y,但不是z)以及所有四个元素。短语“...w、x、y和z中的至少一者”因此是指集合[w,x,y,z]中的至少一个元素,从而涵盖该元素列表中的所有可能的组合。该短语不应被解释为要求存在w的至少一个实例、x的至少一个实例、y的至少一个实例和z的至少一个实例。
[0435] 在本公开中,各种“标签”可先于名词或名词短语。除非上下文另有提供,否则用于特征(例如,“第一电路”、“第二电路”、“特定电路”、“给定电路”等)的不同标签是指特征的不同实例。另外,除非另有说明,否则标签“第一”、“第二”和“第三”在应用于特征时并不暗示任何类型的排序(例如,空间、时间、逻辑等)。
[0436] 短语“基于”或用于描述影响确定的一个或多个因素。此术语不排除可能有附加因素可影响确定。也就是说,确定可仅基于指定的因素或基于所指定的因素及其他未指定的因素。考虑短语“基于B确定A”。此短语指定B是用于确定A的因素或者B影响A的确定。此短语并不排除A的确定也可基于某个其他因素诸如C。此短语也旨在覆盖A仅基于B来确定的实施方案。如本文所用,短语“基于”与短语“至少部分地基于”是同义的。
[0437] 短语“响应于”和“响应”描述了触发效应的一个或多个因素。该短语不排除附加因素可影响或以其他方式触发效应的可能性,这些因素与指定因素联合使用或独立于指定因素。也就是说,效果可以仅仅响应于这些因素,或者可以响应于指定的因素以及其他未指定的因素。考虑短语“响应于B执行A”。该短语指定B是触发A的执行或触发A的特定结果的因素。该短语不排除执行A也可能响应于某些其他因素,诸如C。该短语也不排除执行A可响应于B和C而联合执行。此短语也旨在覆盖A仅响应于B来执行的实施方案。如本文所用,短语“响应”与短语“至少部分地响应”是同义的。类似地,短语“响应于”与短语“至少部分地响应于”是同义的。
[0438] ***
[0439] 在本公开内,不同实体(其可被不同地称为“单元”、“电路”、其他部件等)可被描述或声称成“被配置为”执行一个或多个任务或操作。此表达方式—被配置为[执行一个或多个任务]的[实体]—在本文中用于指代结构(即,物理的事物)。更具体地,此表达方式用于指示此结构被布置成在操作期间执行一个或多个任务。结构可被说成“被配置为”执行某个任务,即使该结构当前并非正被操作。因此,被描述或表述为“被配置为”执行某个任务的实体指代用于实施该任务的物理的事物,诸如设备、电路、具有处理器单元的系统和存储有可执行程序指令的存储器等。此短语在本文中不被用于指代无形的事物。
[0440] 在一些情况下,各种单元/电路/部件在本文中可被描述为执行一组任务或操作。应当理解,这些实体“被配置为”执行那些任务/操作,即使没有具体指出。
[0441] 术语“被配置为”并不旨在意指“可配置为”。例如,未编程的FPGA不会被认为是“被配置为”执行特定功能。然而,该未编程的FPGA可以“可配置为”执行该功能。在适当编程之后,FPGA然后可认为“被配置为”执行特定功能。
[0442] 出于基于本公开的美国专利申请的目的,在权利要求中陈述结构“被配置为”执行一个或多个任务明确地旨在对该权利要求要素不援引35U.S.C.§112(f)。如果申请人在基于本公开的美国专利申请的申请过程中想要援引112(f)部分,则其将使用“用于[执行功能]的装置”结构来表述权利要求的要素。
[0443] 在本公开中可描述不同的“电路”。这些电路或“电路”构成硬件,该硬件包括各种类型的电路元件,诸如组合逻辑、时钟存储设备(例如,触发器、寄存器、锁存器等)、有限状态机、存储器(例如,随机存取存储器、嵌入式动态随机存取存储器)、可编程逻辑阵列等。电路可为定制设计的,或取自标准库。在各种实施方式中,电路可以视情况包括数字部件、模拟部件或两者的组合。某些类型的电路可通常被称为“单元”(例如,解码单元、算术逻辑单元(ALU)、功能单元、存储器管理单元(MMU)等)。此类单元也指电路或电路。
[0444] 因此,在附图中示出并在本文中描述的所公开的电路/单元/部件和其他元件包括硬件元件,诸如前面段落中描述的那些硬件元件。在许多情况下,硬件元件在特定电路中的内部布置可通过描述该电路的功能来指定。例如,特定的“解码单元”可被描述为执行“处理指令的操作码并将该指令路由到多个功能单元中的一个或多个”的功能,这意味着解码单元“被配置为”执行该功能。对于计算机领域的技术人员而言,该功能规范足以暗示用于电路的一组可能的结构。
[0445] 在各种实施方案中,如前面段落中所讨论的,电路、单元和由它们被配置为实现的功能或操作限定的其他元件,相对于彼此的布置和此类电路/单元/部件以及它们进行交互的方式形成硬件的微架构定义,该硬件最终在集成电路中制造或被编程到FPGA中以形成微架构定义的物理具体实施。因此,微架构定义被本领域的技术人员认为是可导出许多物理具体实施的结构,所有这些物理具体实施均落入由微架构定义所描述的更广泛的结构中。即,具有根据本公开提供的微架构定义的技术人员可在没有过度实验的情况下并且利用普通技术人员的应用,通过以硬件描述语言(HDL)诸如Verilog或VHDL编码电路/单元/部件的描述来实现该结构。HDL描述常常以可显现为功能性的方式来表达。但是对于本领域的技术人员而言,该HDL描述是用于将电路、单元或部件的结构转换为下一级具体实施细节的方式。此类HDL描述可采用以下形式:行为代码(其通常为不可合成的)、寄存器传输语言(RTL)代码(其与行为代码相比通常为可合成的)、或结构代码(例如,指定逻辑门及其连接性的网表)。可针对为给定集成电路制造技术设计的单元库来顺序地合成HDL描述,并可出于定时、功率和其他原因而被修改,以获得被传输到工厂以生成掩模并最终产生集成电路的最终的设计数据库。一些硬件电路或其部分也可在示意图编辑器中被定制设计并与合成电路一起被捕获到集成电路设计中。该集成电路可包括晶体管和其他电路元件(例如,无源元件,诸如电容器、电阻器、电感器等),以及晶体管和电路元件之间的互连件。一些实施方案可实现耦接在一起的多个集成电路,以实现硬件电路,和/或可在一些实施方案中使用离散元件。
另选地,HDL设计可被合成为可编程逻辑阵列诸如现场可编程门阵列(FPGA)并且可在FPGA中实现。一组电路的设计与这些电路的后续低级具体实施之间的这种解耦通常导致这样的情形:其中电路或逻辑设计者从来不指定超出对电路被配置为做什么的描述的用于低级具体实施的一组特定结构,因为该过程是在电路实施过程的不同阶段执行的。
[0446] 可使用电路元件的许多不同低级组合来实现电路的相同规格的事实导致该电路的大量等效结构。如所指出的那样,这些低级电路具体实施可根据制造技术、被选择用于制造集成电路的铸造厂、为特定项目提供的单元库等的变化而变化。在许多情况下,通过不同设计工具或方法进行的产生这些不同具体实施的选择可以是任意的。
[0447] 此外,对于给定实施方案,电路的特定功能规范的单个具体实施通常包括大量设备(例如,数百万个晶体管)。因此,该信息的剪切体积使得提供用于实现单个实施方案的低级结构的完整叙述是不切实际的,更不用说大量等同的可能具体实施。为此,本公开描述了使用工业中常用的功能简写的电路的结构。