降低多边形网格的细节水平以减少被渲染几何的复杂度的金沙现金网平台

文档序号:20922564 发布日期:2020-05-29 14:20
降低多边形网格的细节水平以减少被渲染几何的复杂度的金沙现金网平台

本发明涉及渲染几何形状,更具体地,涉及执行栅格引导的细节水平调整。



背景技术:

执行细节水平调整包括随着几何形状远离观察者移动或者根据其他度量(例如,几何形状重要性、视点相对速度或位置等)减少场景内的被渲染几何的复杂度。这在渲染场景时很有用,因为靠近预定视点的多边形网格可能具有高细节,而远离视点的多边形网格可能不需要那么多细节。然而,用于执行细节水平调整的当前方法难以实现并且不易于并行化。因此需要解决与现有技术相关的这些问题和/或其他问题。



技术实现要素:

公开了一种用于将单元覆盖到多边形小网格上的方法、计算机可读介质和系统,其中多边形小网格可以包括较大三角形网格的连接子集。多边形小网格可以包括多个几何形状的分组(例如三角形),并且单元可以包括方形边界。另外,多边形小网格内的具有至少一个边完全在单元内部的每个多边形(例如,三角形或其他几何形状)被移除,以创建中间小网格。基于一个或更多个标准,从中间小网格的位于单元内的所有顶点(例如,线交叉点)确定所选顶点,并且将中间小网格的位于单元内的所有顶点替换为所选顶点,以创建经修改的小网格。然后渲染经修改的小网格(例如,作为生成要观察的场景的过程的一部分)。

附图说明

图1示出了根据一个实施例的用于降低多边形网格的细节水平的方法的流程图。

图2示出了根据一个实施例的并行处理单元。

图3a示出了根据一个实施例的图2的并行处理单元内的通用处理集群。

图3b示出了根据一个实施例的图2的并行处理单元的存储器分区单元。

图4a示出了根据一个实施例的图3a的流式多处理器。

图4b是根据一个实施例的使用图2的ppu实现的处理系统的概念图。

图4c示出了可以在其中实现各种先前实施例的各种架构和/或功能的示例性系统。

图5是根据一个实施例的由图2的ppu实现的图形处理管线的概念图。

图6示出了根据一个实施例的示例性多边形小网格简化过程。

图7示出了根据一个实施例的示例性标记的多边形小网格简化过程。

图8示出了根据一个实施例的沿多边形小网格的边界放置的单元的示例性多边形小网格简化过程。

图9示出了根据一个实施例的小网格的连续几何过渡。

图10示出了根据一个实施例的多边形小网格简化的示例性并行应用。

图11示出了根据一个实施例的示例性孔三角测量过程。

图12示出了根据一个实施例的示例性非凸孔三角测量过程。

具体实施方式

减少描绘计算机绘制的(或“渲染的”)场景(例如,用于视频游戏或虚拟现实)所需的工作的一种方式是减少针对远离观看者的物体描绘的细节量。这些物体由几何形状的分组组成,例如三角形-这些分组称为“多边形网格”。但是,更改这些物体的细节水平是一项困难的操作,尤其是当场景中有许多物体时。响应于该问题,栅格(grid,诸如方形盒子或单元的分组)可以覆盖在几何形状的分组上,并且几何形状的边可以基于它们的位置在栅格盒子的内部或外部被移除和重新布置。这可以简化几何形状的布局,这又可以减少渲染几何形状所需的工作量。

图1示出了根据一个实施例的用于降低多边形网格的细节水平的方法100的流程图。尽管在处理单元的上下文中描述了方法100,但是方法100也可以由程序、定制电路或由定制电路和程序的组合来执行。例如,方法100可以由gpu(图形处理单元)、cpu(中央处理单元)或能够通过散列执行并行路径空间过滤的任何处理器来执行。此外,本领域普通技术人员将理解,执行方法100的任何系统都在本发明的实施例的范围和精神内。

如操作102所示,将单元覆盖在多边形小网格上。在一个实施例中,网格(mesh)可以包括几何形状的分组(例如三角形等),并且小网格(meshlet)可以包括几何形状的分组的一部分(例如,分组的连接子集等)。例如,小网格可以包括较大的多边形网格的足够小的部分,其具体地包含与2d或3d栅格单元相交的所有多边形或三角形。在另一实施例中,多边形小网格可包括较大网格模型的一部分。在另一实施例中,网格模型可包括顶点、边和面的集合,其定义要渲染的物体的形状。

另外,在一个实施例中,多边形小网格可以包括多个凸多边形,例如三角形等。例如,小网格内的顶点的位置(例如,3d或2d位置等)可以存储在第一缓冲区(例如,顶点缓冲区等)中。在另一示例中,指向表示小网格内的每个三角形/多边形的顶点的索引可以存储在第二缓冲区(例如,索引缓冲区等)内。例如,每个多边形可以表示为指向索引缓冲区内的位置的偏移,其中偏移指向表示多边形的一组顶点索引的开始。

此外,在一个实施例中,多边形小网格可以以三维、二维(例如,其中多边形小网格用于简化3d物体的投影2d顶点)等表示。在另一实施例中,多边形小网格可以由处理较大网格的足够小(小网格)部分的硬件块来管理。在又一个实施例中,单元(cell)可以是多个单元中的一个。例如,单元可以是覆盖网格模型的较大部分或全部的较大栅格的一部分。在另一示例中,栅格内的每个单元可具有预定尺寸(例如,在2d情况下,一个像素等)。例如,单元可以包括代表像素的方形边界。

此外,在一个实施例中,单元可以是二维的或三维的。例如,单元的维度可以与当前查看的小网格的域的维度相匹配。

此外,如操作104所示,丢弃多边形小网格内的至少一个边完全在单元内部的每个多边形,以创建中间小网格。例如,如果多边形小网格包括多个三角形,则可以从小网格中丢弃至少一个边完全在在单元内部的每个三角形。

另外,如操作106所示,基于一个或更多个标准,从中间小网格的位于单元内的所有顶点确定所选顶点。在一个实施例中,一个或更多个标准可以包括最小错误标准。例如,可以考虑中间小网格的位于单元内的每个顶点。用于替换单元内的所有其他顶点时导致小网格表面上的最小误差度量的顶点可被选择为所选顶点。

此外,在一个示例中,中间小网格的位于单元内的每个顶点可以被迭代地识别为可能的所选顶点。在另一示例中,可以将单元内的所有剩余顶点快照(snap)到(例如,替换为)可能的所选顶点,以创建更新的多边形网格。例如,通过更新受影响三角形的索引以指向所选顶点的索引来进行快照。这可能产生边塌陷(collapse),因为几何的两个元素(例如,两个三角形等)被塌陷成中间小网格内的一个几何元素(例如,一个三角形)。

此外,在一个实施例中,可以针对可能的所选顶点确定用于更新的多边形小网格的光栅化的外观的度量。在另一个实施例中,可以将具有最接近原始多边形小网格的结果外观度量的结果外观度量的可能所选顶点确定为所选顶点。在又一个实施例中,一个或更多个标准可以包括接近标准。例如,可以选择最接近单元中心的顶点作为所选顶点。

此外,如操作108所示,中间小网格的位于单元内的所有顶点用所选顶点替换,以创建经修改的小网格。在一个实施例中,这可以包括在索引缓冲区内用所选顶点替换中间小网格的仍然在单元中的每个顶点的索引。以这种方式,可以创建经修改的索引缓冲区。

另外,如操作110所示,渲染经修改的小网格。在一个实施例中,可以渲染经修改的小网格以产生场景的全部或一部分。在另一个实施例中,可以实时执行上述步骤。在又一个实施例中,可以利用并行处理单元(ppu)(例如图2中所示的ppu200)来渲染经修改的小网格。以这种方式,经修改的小网格可以将原始小网格替换为原始小网格的简化版本。

此外,在一个实施例中,多边形小网格的顶点可以随时间,在多个帧等上递增地移动到所选顶点。这可以实现小网格的几何过渡。

此外,在一个实施例中,可以基于小网格的期望细节水平来调整单元的大小。例如,较小的单元可以导致小网格的较高细节水平。在另一个示例中,较大的单元可以导致小网格的较低细节水平。在另一个实施例中,可以将多个栅格单元应用于不同的小网格以并行地创建经修改的小网格。

此外,在一个实施例中,可以预处理栅格以适应几何网格。例如,在将栅格应用于几何形状以简化之前,可以将栅格拟合到几何网格,以便最小化不必要的计算量。

另外,在一个实施例中,可以在不知道全局网格的情况下在每个小网格块上运行算法。

以这种方式,网格的单元可以提供关于多边形网格的简化程度的指导。另外,利用栅格可以并行地简化网格的区域。此外,由于栅格内的单元的大小可影响所执行的简化量。此外,可以重复使用网格,并且可以保持网格内的连接,而不是仅仅通常地坍塌几何形状。

现在将根据用户的期望,阐述关于实现前述框架可以采用的各种可选架构和特征的更多说明性信息。应该特别注意的是,出于说明性目的阐述了以下信息,并且不应该被解释为以任何方式进行限制。任何以下特征可以任选地并入或不排除所描述的其他特征。

并行处理架构

图2示出了根据一个实施例的并行处理单元(ppu)200。在一个实施例中,ppu200是在一个或更多个集成电路器件上实现的多线程处理器。ppu200是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由ppu200执行的指令集的实例。在一个实施例中,ppu200是图形处理单元(gpu),其被配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(lcd)设备)上显示的二维(2d)图像数据。在其他实施例中,ppu200可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。

一个或更多个ppu200可以被配置为加速数千个高性能计算(hpc)、数据中心和机器学习应用。ppu200可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。

如图2所示,ppu200包括输入/输出(i/o)单元205、前端单元215、调度器单元220、工作分配单元225、集线器230、交叉开关(xbar)270、一个或更多个通用处理集群(gpc)250以及一个或更多个分区单元280。ppu200可以经由一个或更多个高速nvlink210互连连接到主机处理器或其他ppu200。ppu200可以经由互连202连接到主机处理器或其他外围设备。ppu200还可以连接到包括多个存储器设备204的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(dram)设备。dram设备可以被配置为高带宽存储器(hbm)子系统,其中多个dram裸晶(die)堆叠在每个设备内。

nvlink210互连使得系统能够扩展并且包括与一个或更多个cpu结合的一个或更多个ppu200,支持ppu200和cpu之间的高速缓存一致性,以及cpu主控。数据和/或命令可以由nvlink210通过集线器230发送到ppu200的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图4b更详细地描述nvlink210。

i/o单元205被配置为通过互连202从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。i/o单元205可以经由互连202直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,i/o单元205可以经由互连202与一个或更多个其他处理器(例如,一个或更多个ppu200)通信。在一个实施例中,i/o单元205实现外围组件互连高速(pcie)接口,用于通过pcie总线进行通信,并且互连202是pcie总线。在替代的实施例中,i/o单元205可以实现其他类型的已知接口,用于与外部设备进行通信。

i/o单元205对经由互连202接收的数据包进行解码。在一个实施例中,数据包表示被配置为使ppu200执行各种操作的命令。i/o单元205按照命令指定将解码的命令发送到ppu200的各种其他单元。例如,一些命令可以被发送到前端单元215。其他命令可以被发送到集线器230或ppu200的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,i/o单元205被配置为在ppu200的各种逻辑单元之间和之中路由通信。

在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向ppu200提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和ppu200两者访问(例如,读/写)的区域。例如,i/o单元205可以被配置为经由通过互连202传输的存储器请求访问连接到互连202的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向ppu200发送指向命令流开始的指针。前端单元215接收指向一个或更多个命令流的指针。前端单元215管理一个或更多个流,从流读取命令并将命令转发到ppu200的各个单元。

前端单元215耦合到调度器单元220,其配置各种gpc250以处理由一个或更多个流定义的任务。调度器单元220被配置为跟踪与由调度器单元220管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个gpc250,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元220管理一个或更多个gpc250上的多个任务的执行。

调度器单元220耦合到工作分配单元225,其被配置为分派任务以在gpc250上执行。工作分配单元225可以跟踪从调度器单元220接收到的若干调度的任务。在一个实施例中,工作分配单元225为每个gpc250管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定gpc250处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由gpc250主动处理的任务。当gpc250完成任务的执行时,该任务从gpc250的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在gpc250上执行。如果gpc250上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从gpc250中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在gpc250上执行。

工作分配单元225经由xbar(交叉开关)270与一个或更多个gpc250通信。xbar270是将ppu200的许多单元耦合到ppu200的其他单元的互连网络。例如,xbar270可以被配置为将工作分配单元225耦合到特定的gpc250。虽然没有明确示出,但ppu200的一个或更多个其他单元也可以经由集线器230连接到xbar270。

任务由调度器单元220管理并由工作分配单元225分派给gpc250。gpc250被配置为处理任务并生成结果。结果可以由gpc250内的其他任务消耗,经由xbar270路由到不同的gpc250,或者存储在存储器204中。结果可以经由分区单元280写入存储器204,分区单元280实现用于从存储器204读取数据和向存储器204写入数据的存储器接口。结果可以通过nvlink210发送到另一个ppu204或cpu。在一个实施例中,ppu200包括数目为u的分区单元280,其等于耦合到ppu200的独立且不同的存储器设备204的数目。下面将结合图3b更详细地描述分区单元280。

在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在ppu200上执行。在一个实施例中,多个计算应用由ppu200同时执行,并且ppu200为多个计算应用程序提供隔离、服务质量(qos)和独立地址空间。应用程序可以生成指令(例如,api调用),其使得驱动程序内核生成一个或更多个任务以由ppu200执行。驱动程序内核将任务输出到正在由ppu200处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图4a更详细地描述线程和协作线程。

图3a示出了根据一个实施例的图2的ppu200的gpc250。如图3a所示,每个gpc250包括用于处理任务的多个硬件单元。在一个实施例中,每个gpc250包括管线管理器310、预光栅操作单元(prop)315、光栅引擎325、工作分配交叉开关(wdx)380、存储器管理单元(mmu)390以及一个或更多个数据处理集群(dpc)320。应当理解,图3a的gpc250可以包括代替图3a中所示单元的其他硬件单元或除图3a中所示单元之外的其他硬件单元。

在一个实施例中,gpc250的操作由管线管理器310控制。管线管理器310管理用于处理分配给gpc250的任务的一个或更多个dpc320的配置。在一个实施例中,管线管理器310可以配置一个或更多个dpc320中的至少一个来实现图形渲染管线的至少一部分。例如,dpc320可以被配置为在可编程流式多处理器(sm)340上执行顶点着色程序。管线管理器310还可以被配置为将从工作分配单元225接收的数据包路由到gpc250中适当的逻辑单元。例如,一些数据包可以被路由到prop315和/或光栅引擎325中的固定功能硬件单元,而其他数据包可以被路由到dpc320以供图元引擎335或sm340处理。在一个实施例中,管线管理器310可以配置一个或更多个dpc320中的至少一个以实现神经网络模型和/或计算管线。

prop单元315被配置为将由光栅引擎325和dpc320生成的数据路由到光栅操作(rop)单元,结合图3b更详细地描述。prop单元315还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。

光栅引擎325包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎325包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且未剔除的片段被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎325的输出包括例如要由在dpc320内实现的片段着色器处理的片段。

包括在gpc250中的每个dpc320包括m管线控制器(mpc)330、图元引擎335和一个或更多个sm340。mpc330控制dpc320的操作,将从管线管理器310接收到的数据包路由到dpc320中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎335,图元引擎335被配置为从存储器204提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到sm340。

sm340包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个sm340是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,sm340实现simd(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,sm340实现simt(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图4a更详细地描述sm340。

mmu390提供gpc250和分区单元280之间的接口。mmu390可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,mmu390提供用于执行从虚拟地址到存储器204中的物理地址的转换的一个或更多个转换后备缓冲区(tlb)。

图3b示出了根据一个实施例的图2的ppu200的存储器分区单元280。如图3b所示,存储器分区单元280包括光栅操作(rop)单元350、二级(l2)高速缓存360和存储器接口370。存储器接口370耦合到存储器204。存储器接口370可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,ppu200合并了u个存储器接口370,每对分区单元280有一个存储器接口370,其中每对分区单元280连接到对应的存储器设备204。例如,ppu200可以连接到多达y个存储器设备204,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。

在一个实施例中,存储器接口370实现hbm2存储器接口,并且y等于u的一半。在一个实施例中,hbm2存储器堆叠位于与ppu200相同的物理封装上,提供与常规gddr5sdram系统相比显著的功率高和面积节约。在一个实施例中,每个hbm2堆叠包括四个存储器裸晶并且y等于4,其中hbm2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。

在一个实施例中,存储器204支持单错校正双错检测(secded)纠错码(ecc)以保护数据。对于对数据损毁敏感的计算应用程序,ecc提供了更高的可靠性。在大型集群计算环境中,ppu200处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。

在一个实施例中,ppu200实现多级存储器层次。在一个实施例中,存储器分区单元280支持统一存储器以为cpu和ppu200存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪ppu200对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的ppu200的物理存储器。在一个实施例中,nvlink210支持地址转换服务,其允许ppu200直接访问cpu的页表并且提供由ppu200对cpu存储器的完全访问。

在一个实施例中,复制引擎在多个ppu200之间或在ppu200与cpu之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元280可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。

来自存储器204或其他系统存储器的数据可以由存储器分区单元280取回并存储在l2高速缓存360中,l2高速缓存360位于芯片上并且在各个gpc250之间共享。如图所示,每个存储器分区单元280包括与对应的存储器设备204相关联的l2高速缓存360的一部分。然后可以在gpc250内的多个单元中实现较低级高速缓存。例如,每个sm340可以实现一级(l1)高速缓存。l1高速缓存是专用于特定sm340的专用存储器。来自l2高速缓存360的数据可以被获取并存储在每个l1高速缓存中,以在sm340的功能单元中进行处理。l2高速缓存360被耦合到存储器接口370和xbar270。

rop单元350执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。rop单元350还与光栅引擎325一起实现深度测试,从光栅引擎325的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则rop单元350更新深度缓冲区并将深度测试的结果发送给光栅引擎325。将理解的是,分区单元280的数量可以不同于gpc250的数量,并且因此每个rop单元350可以耦合到每个gpc250。rop单元350跟踪从不同gpc250接收到的数据包并且确定由rop单元350生成的结果通过xbar270被路由到哪个gpc250。尽管在图3b中rop单元350被包括在存储器分区单元280内,但是在其他实施例中,rop单元350可以在存储器分区单元280之外。例如,rop单元350可以驻留在gpc250或另一个单元中。

图4a示出了根据一个实施例的图3a的流式多处理器340。如图4a所示,sm340包括指令高速缓存405、一个或更多个调度器单元410(k)、寄存器文件420、一个或更多个处理核心450、一个或更多个特殊功能单元(sfu)452、一个或更多个加载/存储单元(lsu)454、互连网络480、共享存储器/l1高速缓存470。

如上所述,工作分配单元225调度任务以在ppu200的gpc250上执行。任务被分配给gpc250内的特定dpc320,并且如果该任务与着色器程序相关联,则该任务可以被分配给sm340。调度器单元410(k)接收来自工作分配单元225的任务并且管理指派给sm340的一个或更多个线程块的指令调度。调度器单元410(k)调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元410可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心450、sfu452和lsu454)。

协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动api支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(即,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collectivegroup-widefunctioninterface)的形式使能更高的性能、设计灵活性和软件重用。

协作组使得程序员能够在子块(即,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。

分派单元415被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元410(k)包括两个分派单元415,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元410(k)可以包括单个分派单元415或附加分派单元415。

每个sm340包括寄存器文件420,其提供用于sm340的功能单元的一组寄存器。在一个实施例中,寄存器文件420在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件420的专用部分。在另一个实施例中,寄存器文件420在由sm340执行的不同线程束之间被划分。寄存器文件420为连接到功能单元的数据路径的操作数提供临时存储器。

每个sm340包括l个处理核心450。在一个实施例中,sm340包括大量(例如128个等)不同的处理核心450。每个核心450可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的ieee754-2008标准。在一个实施例中,核心450包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。

张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心450中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在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(诸如cuda9c++api)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自cuda-c++程序的张量核心。在cuda层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。

每个sm340还包括执行特殊函数(例如,属性评估、倒数平方根等)的m个sfu452。在一个实施例中,sfu452可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,sfu452可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器204加载纹理图(例如,纹理像素的2d阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由sm340执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/l1高速缓存370中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个sm340包括两个纹理单元。

每个sm340还包括n个lsu454,其实现共享存储器/l1高速缓存470和寄存器文件420之间的加载和存储操作。每个sm340包括将每个功能单元连接到寄存器文件420以及将lsu454连接到寄存器文件420、共享存储器/l1高速缓存470的互连网络480。在一个实施例中,互连网络480是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件420中的任何寄存器,以及将lsu454连接到寄存器文件和共享存储器/l1高速缓存470中的存储器位置。

共享存储器/l1高速缓存470是片上存储器阵列,其允许数据存储和sm340与图元引擎335之间以及sm340中的线程之间的通信。在一个实施例中,共享存储器/l1高速缓存470包括128kb的存储容量并且在从sm340到分区单元280的路径中。共享存储器/l1高速缓存470可以用于高速缓存读取和写入。共享存储器/l1高速缓存470、l2高速缓存360和存储器204中的一个或更多个是后备存储。

将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/l1高速缓存470内的集成使共享存储器/l1高速缓存470起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。

当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图2所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元225将线程块直接指派并分配给dpc320。块中的线程执行相同的程序,使用计算中的唯一线程id来确保每个线程生成唯一结果,使用sm340执行程序并执行计算,使用共享存储器/l1高速缓存470以在线程之间通信,以及使用lsu454通过共享存储器/l1高速缓存470和存储器分区单元280读取和写入全局存储器。当被配置用于通用并行计算时,sm340还可以写入调度器单元220可用来在dpc320上启动新工作的命令。

ppu200可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,ppu200包含在单个半导体衬底上。在另一个实施例中,ppu200与一个或更多个其他器件(诸如附加ppu200、存储器204、精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数字-模拟转换器(dac)等)一起被包括在片上系统(soc)上。

在一个实施例中,ppu200可以被包括在图形卡上,图形卡包括一个或更多个存储器设备204。图形卡可以被配置为与台式计算机的主板上的pcie插槽接口。在又一个实施例中,ppu200可以是包含在主板的芯片集中的集成图形处理单元(igpu)或并行处理器。

示例性计算系统

具有多个gpu和cpu的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能gpu加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。

图4b是根据一个实施例的使用图2的ppu200实现的处理系统400的概念图。示例性系统465可以被配置为实现图1中所示的方法100。处理系统400包括cpu430、交换机410和多个ppu200中的每一个以及相应的存储器204。nvlink210提供每个ppu200之间的高速通信链路。尽管图4b中示出了特定数量的nvlink210和互连202连接,但是连接到每个ppu200和cpu430的连接的数量可以改变。交换机410在互连202和cpu430之间接口。ppu200、存储器204和nvlink210可以位于单个半导体平台上以形成并行处理模块425。在一个实施例中,交换机410支持两个或更多个在各种不同连接和/或链路之间接口的协议。

在另一个实施例(未示出)中,nvlink210在每个ppu200和cpu430之间提供一个或更多个高速通信链路,并且交换机410在互连202和每个ppu200之间进行接口。ppu200、存储器204和互连202可以位于单个半导体平台上以形成并行处理模块425。在又一个实施例(未示出)中,互连202在每个ppu200和cpu430之间提供一个或更多个通信链路,并且交换机410使用nvlink210在每个ppu200之间进行接口,以在ppu200之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,nvlink210在ppu200和cpu430之间通过交换机410提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连202在每个ppu200之间直接地提供一个或更多个通信链路。可以使用与nvlink210相同的协议将一个或更多个nvlink210高速通信链路实现为物理nvlink互连或者片上或裸晶上互连。

在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块425可以被实现为电路板衬底,并且ppu200和/或存储器204中的每一个可以是封装器件。在一个实施例中,cpu430、交换机410和并行处理模块425位于单个半导体平台上。

在一个实施例中,每个nvlink210的信令速率是20到25千兆位/秒,并且每个ppu200包括六个nvlink210接口(如图4b所示,每个ppu200包括五个nvlink210接口)。每个nvlink210在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当cpu430还包括一个或更多个nvlink210接口时,nvlink210可专门用于如图4b所示的ppu到ppu通信,或者ppu到ppu以及ppu到cpu的某种组合。

在一个实施例中,nvlink210允许从cpu430到每个ppu200的存储器204的直接加载/存储/原子访问。在一个实施例中,nvlink210支持一致性操作,允许从存储器204读取的数据被存储在cpu430的高速缓存分层结构中,减少了cpu430的高速缓存访问延迟。在一个实施例中,nvlink210包括对地址转换服务(ats)的支持,允许ppu200直接访问cpu430内的页表。一个或更多个nvlink210还可以被配置为以低功率模式操作。

图4c示出了示例性系统465,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统465可以被配置为实现图1中所示的方法100。

如图所示,提供系统465,其包括连接到通信总线475的至少一个中央处理单元430。通信总线475可以使用任何合适的协议来实现,诸如pci(外围组件互连)、pci-express、agp(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统465还包括主存储器440。控制逻辑(软件)和数据被存储在主存储器440中,主存储器440可以采取随机存取存储器(ram)的形式。

系统465还包括输入设备460、并行处理系统425和显示设备445,例如常规crt(阴极射线管)、lcd(液晶显示器)、led(发光二极管)、等离子显示器等。可以从输入设备460(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统465。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。

此外,系统465可以出于通信目的通过网络接口435耦合到网络(例如,电信网络、局域网(lan)、无线网络、广域网(wan)(诸如因特网)、对等网络、电缆网络等)。

系统465还可以包括辅助存储(未示出)。辅助存储包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。

计算机程序或计算机控制逻辑算法可以存储在主存储器440和/或辅助存储中。这些计算机程序在被执行时使得系统465能够执行各种功能。存储器440、存储和/或任何其他存储是计算机可读介质的可能示例。

各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统465可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。

虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。

图形处理管线

在一个实施例中,ppu200包括图形处理单元(gpu)。ppu200被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。ppu200可以被配置为处理图元以生成帧缓冲区(即,用于显示器的像素中的每一个的像素数据)。

应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如系统存储器或存储器204)。模型数据定义可能在显示器上可见的物体中的每一个。然后应用程序对驱动程序内核进行api调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在ppu200的sm340上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,sm340中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的sm340可以被配置为同时执行不同的着色程序。例如,sm340的第一子集可以被配置为执行顶点着色程序,而sm340的第二子集可以被配置为执行像素着色程序。sm340的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入l2高速缓存360和/或存储器204。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,sm340的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器204中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。

图5是根据一个实施例的由图2的ppu200实现的图形处理管线500的概念图。图形处理管线500是被实现以从3d几何数据生成2d计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线500接收从图形处理管线500的一个阶段传送到下一阶段的输入数据501,以生成输出数据502。在一个实施例中,图形处理管线500可表示由 api定义的图形处理管线。作为选择,图形处理管线500可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。

如图5所示,图形处理管线500包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段510、顶点着色阶段520、图元组装阶段530、几何着色阶段540、视口缩放、剔除和裁剪(viewportscale,cull,andclip,vscc)阶段550、光栅化阶段560、片段着色阶段570和光栅操作阶段580。在一个实施例中,输入数据501包括命令,其配置处理单元以实现图形处理管线500的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据502可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。

数据组装阶段510接收输入数据501,其指定用于高阶表面、图元等的顶点数据。数据组装阶段510收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段520以进行处理。

顶点着色阶段520通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,)。顶点着色阶段520可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段520对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用物体坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从物体坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,ncd)空间。顶点着色阶段520生成被传送到图元组装阶段530的经变换的顶点数据。

图元组装阶段530收集由顶点着色阶段520输出的顶点并且将顶点分组成几何图元以由几何着色阶段540处理。例如,图元组装阶段530可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段540的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段530将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段540。

几何着色阶段540通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段540可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线500的其余部分进行处理。几何着色阶段540将几何图元传送到视口scc阶段550。

在一个实施例中,图形处理管线500可以在流式多处理器和顶点着色阶段520、图元组装阶段530、几何着色阶段540、片段着色阶段570和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口scc阶段550可以利用数据。在一个实施例中,由图形处理管线500中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,l1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口scc阶段550可以访问高速缓存中的数据。在一个实施例中,视口scc阶段550和光栅化阶段560被实现为固定功能电路。

视口scc阶段550执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的物体的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段560。

光栅化阶段560将3d几何图元转换成2d片段(例如,能够用于显示等)。光栅化阶段560可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段560还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段560生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段570。

片段着色阶段570通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段570可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色阶段570生成像素数据,其被发送到光栅操作阶段580。

光栅操作阶段580可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stenciltest)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段580已经完成对像素数据(例如,输出数据502)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。

应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线500中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段540)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线500的任何阶段可以由图形处理器(诸如ppu200)内的一个或更多个专用硬件单元来实现。图形处理管线500的其他阶段可以由可编程硬件单元(诸如ppu200的sm340)来实现。

图形处理管线500可以经由由主机处理器(诸如cpu)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(api),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制ppu200的操作的多个指令。api为程序员提供抽象,其允许程序员利用专用图形硬件(诸如ppu200)来生成图形数据而不要求程序员利用ppu200的特定指令集。应用程序可以包括被路由到ppu200的设备驱动程序的api调用。设备驱动程序解释api调用并执行各种操作以响应api调用。在一些情况下,设备驱动程序可以通过在cpu上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用cpu和ppu200之间的输入/输出接口在ppu200上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用ppu200的硬件来实现图形处理管线500。

可以在ppu200内执行各种程序以便实现图形处理管线500的各个阶段。例如,设备驱动程序可以启动ppu200上的内核以在一个sm340(或多个sm340)上执行顶点着色阶段520。设备驱动程序(或由ppu300执行的初始内核)还可启动ppu300上的其他内核以执行图形处理管线500的其他阶段,诸如几何着色阶段540和片段着色阶段570。另外,图形处理管线500的阶段中的一些可以在固定单元硬件(诸如在ppu300内实现的光栅器或数据组装器)上实现。应当领会,在被sm340上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。

机器学习

在处理器(诸如ppu200)上开发的深度神经网络(dnn)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。

在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性水平分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的物体的各种特征,并且在定义物体形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。

深度神经网络(dnn)模型包括许多连接感知器(例如,节点)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,dll模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高水平的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。

一旦dnn被训练,dnn就可以被部署并用于在被称为推理(inference)的过程中识别和分类物体或图案。推理的示例(dnn从给定输入中提取有用信息的过程)包括识别沉积在atm机中的支票存款上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险、或实时翻译人类言语。

在训练期间,数据在前向传播阶段流过dnn,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到dnn正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由ppu200支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。

神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百tflops的性能,ppu200是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。

多边形小网格简化

图6示出了根据一个示例性实施例的示例性多边形小网格简化过程600。如图所示,首先将单元602覆盖在多边形小网格604a上。另外,通过丢弃具有至少一个边完全在单元602内部的每个三角形来产生中间多边形小网格604b。

此外,通过用所选代表性顶点606的索引替换中间多边形小网格604b的仍然在单元602中的每个顶点的索引来产生简化的多边形小网格604c,其中基于一个或更多个标准确定所选代表性顶点606。

在一个实施例中,可以在小网格着色器内部即时(on-the-fly)使用小网格简化过程。在另一实施例中,小网格简化过程可用于生成细节水平(lod)实现的索引缓冲区。在又一个实施例中,预处理网格可以创建非空3d栅格单元的列表/阵列。这些可能会产生每个这些单元的小网格。对于小网格,算法还可以确保不干扰小网格边界上的任何边。用于使用小网格管线渲染任何网格的数据结构可以很容易构建,并且知道缩减因子可以允许为网格的lod构建ds。

索引缓冲区表示

图7示出了根据一个示例性实施例的示例性标记的多边形小网格简化过程700。如图所示,首先将单元702覆盖在多边形小网格704a上。表1包括根据实施例的对应于多边形小网格704a的示例性索引缓冲区表示。当然,应该注意,表1中所示的索引缓冲区仅出于说明目的而阐述,因此不应被解释为以任何方式进行限制。

表1

索引缓冲区内的每个条目对应于多边形小网格内的每个三角形的顶点。另外,通过丢弃具有至少一个边完全在单元702内的每个三角形来产生中间多边形小网格704b。表2包括根据一个实施例的对应于中间多边形小网格704b的示例性索引缓冲区表示。当然,应该注意,表2中所示的索引缓冲区仅出于说明目的而阐述,因此不应被解释为以任何方式进行限制。

表2

此外,通过用所选代表性顶点706(这里是顶点3)的索引替换中间多边形小网格704b的仍然在单元702中的每个顶点的索引来产生简化的多边形小网格704c,其中基于一个或更多个标准确定所选代表性顶点706。

表3包括根据实施例的对应于简化的多边形小网格704c的示例性索引缓冲区表示。当然,应该注意,表3中所示的索引缓冲区仅出于说明目的而阐述,因此不应被解释为以任何方式进行限制。

表3

边界单元/边界条件

图8示出了根据一个示例性实施例的用于沿多边形小网格804a的边界放置的单元802的示例性多边形小网格简化过程800。如图所示,首先将单元802覆盖在多边形小网格804a的边界上。另外,通过丢弃具有至少一个边完全在单元802内的每个三角形来产生中间多边形小网格804b。

此外,通过用所选代表性顶点806的索引替换中间多边形小网格804b的仍然在单元802中的每个顶点的索引来产生简化的多边形小网格804c,其中基于一个或更多个标准确定所选代表性顶点806。

几何过渡(geomorphing)

图9示出了根据一个示例性实施例的小网格的连续几何过渡900。如图所示,顶点v5902a和v4902b在多个帧上递增地移动到所选顶点v3902c。例如,多个小网格904a-d中的每一个表示执行几何过渡的多个连续帧中的一个。

并行算法

图10示出了根据一个示例性实施例的多边形小网格简化的示例性并行应用1000。如图所示,四个单元1002a-d的栅格覆盖在小网格1004上。应当注意,基于要执行的期望的简化水平,任何数量的单元可以覆盖在小网格1004上。

另外,在一个实施例中,可以利用四个单元1002a-d并行地执行小网格1004的简化。出于示例的目的,假设与第一单元1002a相关联的小网格的部分由图7中的标记的多边形小网格704a表示,其中相应的索引缓冲区在表1中示出。

此外,可以识别并记录小网格1004内的每个顶点的单元索引。例如,可以记录每个顶点的单元位置。表4包括根据实施例的对应于多边形小网格704a的示例性单元索引表示。当然,应该注意,表4中所示的单元索引表示仅出于说明目的而阐述,因此不应被解释为以任何方式进行限制。

表4

此外,可以在四个单元1002a-d中的每一个内并行地确定具有最小误差的顶点索引,并且可以将结果索引写入缓冲区。出于示例的目的,假设如图7的简化的多边形小网格704c所示,通过用所选代表性顶点706(在此,顶点3)的索引替换中间多边形小网格704b的仍然在第一单元1002a中的每个顶点的索引,来产生第一单元1002a的简化的多边形小网格704c。这可导致表3中所示的索引缓冲区表示。

此外,在一个实施例中,多个线程可以并行地遍历小网格1004的所有顶点并且写入顶点的单元id。然后,每个线程组可以选择一个网格单元,并且该组中的每个线程选择一个不会塌陷的三角形。然后可以选择栅格单元中的三角形的顶点,并且可以计算通过将单元中的所有其他顶点塌陷到所选顶点而引入的误差。

另外,在一个实施例中,可以在线程组的线程之间执行原子最小操作,以找到栅格单元上具有最小误差的顶点的索引,并且可以存储栅格单元的具有最小误差的索引。

此外,在一个实施例中,所有线程可以并行遍历所有三角形以创建新的索引缓冲区。如果当前线程处理具有至少一条边完全位于栅格单元格内的三角形,则三角形将塌陷,并且不会将任何内容写入新索引。如果当前线程处理跨栅格边界且没有边完全在单元中的三角形,则在新索引缓冲区中获得新的写入偏移量o。此外,针对三角形的三个顶点中的每一个找到单元id,并确定具有最小误差的顶点的索引并将其写入索引缓冲区。如果顶点的单元索引为-1,则写入原始顶点索引。可以计算最终的新索引/三角形计数作为结果。

表5包括根据实施例的对应于并行实现的示例性单元索引分析。当然,应该注意,表5中所示的单元索引分析仅出于说明目的而阐述,因此不应被解释为以任何方式进行限制。

表5

孔三角测量

在一个实施例中,如果要在小网格硬件块上运行简化,则简化可能需要保持边界区域中的所有三角形(例如,跨栅格边界的三角形)不受影响。作为结果,可以执行孔三角测量。图11示出了根据一个示例性实施例的示例性孔三角测量过程1100。

如图所示,首先将单元1102覆盖在多边形小网格1104a上。另外,丢弃每个非边界三角形(例如,不跨越单元1102的边界的每个三角形)以获得中间多边形小网格1104b。此外,利用所选代表性顶点1106对所得到的孔进行重新三角化以创建简化的多边形小网格1104c。

图12示出了根据一个示例性实施例的示例性非凸孔三角测量过程1200。如图所示,通过移除单元1206内边1204a-c不与孔的边界相交的三角形,可以在具有非凸孔的多边形小网格1202中执行重新三角测量。

以这种方式,可以利用基于栅格的方法简化几何形状。另外,可以通过改变应用于多边形网格的栅格内的单元的大小来调整细节水平。此外,可以利用基于栅格的方法在多边形网格上执行几何过渡。此外,可以并行执行小网格简化。而且,可以在将栅格应用于多边形网格之前对栅格进行预处理。

虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。

再多了解一些
当前第1页 1 2 3
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1