首页 / 专利库 / 图形技术 / 光线跟踪 / 使用可变速率着色的运动自适应渲染

使用可变速率着色的运动自适应渲染

阅读:189发布:2020-05-11

专利汇可以提供使用可变速率着色的运动自适应渲染专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种使用可变速率着色的运动自适应 渲染 。运动自适应着色可提高图形系统中实时动画的渲染性能,同时保持 动态图像 质量 。动画的每个 帧 在刷新间隔内静态显示,而当主动 跟踪 正在显示的移动对象时,观看者的眼睛相对于图像连续移动。结果,在帧的寿命期间,静态显示的帧基本上涂抹在观察者的连续移动的 视网膜 上,引起被称为眼睛跟踪 运动模糊 效果的模糊感。描绘移动对象的图像区域可以以较低的着色速率渲染,因为眼睛跟踪运动模糊将基本上掩盖由降低着色速率引入的任何模糊。降低渲染帧的平均着色速率减少了每帧的计算工作量,并且可以有利地允许渲染系统以更高的 帧速率 操作,以提供更平滑、更清晰的视觉体验。,下面是使用可变速率着色的运动自适应渲染专利的具体信息内容。

1.一种用于运动自适应渲染的计算机实现的方法,包括:
接收的区域的运动数据;
由所述运动数据计算每区域运动值;
基于所述每区域运动值确定所述区域的着色速率;以及
以所述着色速率渲染图形图元,以产生所述区域的颜色数据。
2.如权利要求1所述的方法,其中所述运动数据包括用于所述区域中的每个像素或每个顶点的运动向量,并且计算所述每区域运动值包括选择最小运动向量值。
3.如权利要求1所述的方法,其中所述渲染由光栅化和着色管线执行,并且所述着色速率确定所述区域内的每像素的可见性样本和着色操作的数量。
4.如权利要求1所述的方法,其中所述渲染由屏幕空间计算管线执行,并且所述着色速率确定所述区域内的每像素的着色操作的数量。
5.如权利要求1所述的方法,其中所述渲染由光线跟踪管线执行,并且所述着色速率确定所述区域内的每像素的光线投射的数量。
6.如权利要求1所述的方法,其中所述渲染由延迟着色管线执行,并且所述着色速率确定基于每纹理-图渲染为纹理的纹理MIP级别。
7.如权利要求1所述的方法,其中根据紧接在所述帧之前渲染的两帧之间的颜色图像数据的光流来计算所述运动数据。
8.如权利要求1所述的方法,其中根据紧接在前的帧和所述帧之间的相机位置变化或对象位置变化来计算所述运动数据。
9.如权利要求1所述的方法,其中所述着色速率包括所述区域的第一维度的第一着色速率和所述区域的第二维度的第二着色速率。
10.如权利要求1所述的方法,还包括:
接收所述帧的第二区域的第二运动数据;
由所述第二运动数据计算第二每区域运动值;
基于所述第二每区域运动值确定所述第二区域的第二着色速率;以及以所述第二着色速率渲染图形图元以产生所述第二区域的颜色数据,其中所述第二着色速率不同于所述着色速率。
11.如权利要求10所述的方法,其中所述区域和所述第二区域是相邻的;并且所述着色速率和所述第二着色速率之间的差被限于最大着色速率差。
12.如权利要求1所述的方法,其中确定所述着色速率包括:
接收紧接在前渲染的帧;
计算所述区域内的颜色和亮度的变化范围;以及
基于所述每区域运动值和所述变化范围计算所述着色速率,
其中当所述每区域运动值超过两个或更多个速度阈值中的每一个时,所述着色速率被计算为减小,并且所述速度阈值作为所述变化范围的函数而变化。
13.如权利要求12所述的方法,其中使用运动数据将所述变化范围重投影到要着色的帧。
14.如权利要求1所述的方法,其中确定所述着色速率包括:
接收紧接在前渲染的帧;
计算所述区域内的颜色和亮度的变化范围;以及
基于所述每区域运动值和所述变化范围计算所述着色速率,
其中当所述变化范围高于阈值时,所述着色速率被计算为增加,并且所述阈值作为所述每区域运动值的函数而变化。
15.如权利要求14所述的方法,其中使用运动数据将所述变化范围重投影到要着色的帧。
16.如权利要求1所述的方法,还包括将后处理去块函数应用于所述帧。
17.如权利要求1所述的方法,还包括将阻尼函数应用于所述区域的所述着色速率,其中基于来自至少两个紧接在前的帧的着色速率来计算所述阻尼函数。
18.一种系统,包括:
处理单元,被配置为:
接收帧的区域的运动数据;
由所述运动数据计算每区域运动值;
基于所述每区域运动值确定所述区域的着色速率;以及
以所述着色速率渲染图形图元,以产生所述区域的颜色数据。
19.如权利要求18所述的系统,其中所述着色速率包括所述区域的第一维度的第一着色速率和所述区域的第二维度的第二着色速率。
20.一种非暂时性计算机可读介质,存储用于运动自适应渲染的计算机指令,当其由一个或更多个处理器执行时,使得所述一个或更多个处理器执行以下步骤:
接收帧的区域的运动数据;
由所述运动数据计算每区域运动值;
基于所述每区域运动值确定所述区域的着色速率;以及
以所述着色速率渲染图形图元,以产生所述区域的颜色数据。

说明书全文

使用可变速率着色的运动自适应渲染

[0001] 要求优先权
[0002] 本申请要求于2018年8月9日提交的题为“使用可变速率着色的运动自适应渲染(Motion Adaptive Rendering Using Variable Rate Shading)”的美国临时申请No.62/716,497(案卷号18-SC-0232US01)的权益,其全部内容通过引用并入本文中。

技术领域

[0003] 本公开涉及实时图形渲染,并且更具体地,涉及使用可变速率着色的运动自适应渲染。

背景技术

[0004] 已知液晶显示器(LCD)系统和有机发光二极管(OLED)显示系统在显示运动或动画时会引入不期望的眼睛跟踪运动模糊效果。该效果是由在刷新间隔内静态显示每个引起的,而当主动跟踪正在显示的移动对象时,观看者的眼睛相对于图像连续移动。结果,在帧的寿命期间,静态显示的帧基本上涂抹(smear)在观看者的连续移动的视网膜上,导致模糊感。眼动跟踪运动模糊效果可以在60fps的常见交互帧速率下显著降低视觉质量,并且在120fps时可以注意到。
[0005] 交互式图形系统提供有限的实时渲染能,迫使在静态图像质量和帧速率之间进行权衡(tradeoff)。这种权衡空间通常在较高帧速率下降低静态图像质量或在较低帧速率下增加运动模糊。因此,具有解决与现有技术相关的这些问题和/或其他问题的需求。发明内容
[0006] 运动自适应渲染(或运动自适应着色)增加了图形系统中实时动画的渲染性能,同时保持动态图像质量。动画的每个帧在刷新间隔内静态显示,而当主动跟踪正在显示的移动对象时,观看者的眼睛相对于图像连续移动。结果,在帧的寿命期间,静态显示的帧基本上涂抹在观看者的连续移动的视网膜上,引起被称为眼睛跟踪运动模糊效果的模糊感。描绘移动对象的图像区域可以以较低的着色速率渲染,因为眼睛跟踪运动模糊将基本上掩盖由降低着色速率引入的任何模糊。降低渲染帧的平均着色速率减少了每帧的计算工作量,并且可以有利地允许渲染系统以更高的帧速率操作以提供更平滑、更清晰的视觉体验。降低平均着色速率还可以允许非帧速率的渲染系统以较低功率操作。运动自适应着色通常适用于渲染图形图元,包括二维(2D)图形图元和三维(3D)图形图元。
[0007] 公开了一种用于运动自适应渲染的方法、计算机可读介质和系统,所述方法包括:接收帧的区域的运动数据,由运动数据计算每区域运动值,基于每区域运动值确定该区域的着色速率,以及以该着色速率渲染图形图元,以产生该区域的颜色数据。
[0008] 公开了一种用于内容和运动自适应渲染的方法、计算机可读介质和系统,所述方法包括:接收帧的区域的运动数据,由运动数据计算每区域运动值,基于来自前一渲染的帧的每区域运动值和像素颜色数据确定该区域的着色速率,以及以该着色速率渲染图形图元,以产生该区域的颜色数据。附图说明
[0009] 图1A示出了根据一个实施例的用于运动自适应渲染的方法的流程图
[0010] 图1B示出了根据一个实施例的不同图的不同像素块尺寸。
[0011] 图1C示出了根据一个实施例的描绘动画对象的渲染帧。
[0012] 图1D示出了根据一个实施例的描绘相机运动的渲染帧。
[0013] 图1E示出了根据一个实施例的来自图形场景的渲染静态图像。
[0014] 图1F示出了根据一个实施例的具有在每秒60帧刷新速率下模拟的眼睛跟踪运动模糊的图形场景的渲染图像。
[0015] 图1G示出了根据一个实施例的具有在每秒120帧刷新速率下模拟的眼睛跟踪运动模糊的图形场景的渲染图像,其中使用运动自适应着色以减少着色工作量。
[0016] 图1H示出了根据一个实施例的运动自适应着色和使用完全着色工作量的传统渲染之间的比较。
[0017] 图2示出了根据一个实施例的用于通过联合考虑内容变化和运动来确定着色速率的方法的流程图。
[0018] 图3示出了根据一个实施例的并行处理单元。
[0019] 图4A示出了根据一个实施例的图3的并行处理单元内的通用处理集群。
[0020] 图4B示出了根据一个实施例的图3的并行处理单元的存储器分区单元。
[0021] 图5A示出了根据一个实施例的图4A的流式多处理器。
[0022] 图5B是根据一个实施例的使用图3的PPU实现的处理系统的概念图
[0023] 图5C示出了可以实现各种先前实施例的各种架构和/或功能的示例性系统。
[0024] 图6是根据一个实施例的由图3的PPU实现的图形处理管线的概念图。

具体实施方式

[0025] 本文公开的技术(统称为运动自适应着色)增加了2D和3D图形系统中的实时动画的渲染性能,同时保持动态图像质量。可以将给定的渲染帧(rendered frame)组织成图块(tile),并且可以根据一个或更多个维度中的图块特定的着色速率来渲染每个图块。给定的渲染帧也可以由几何图元(例如三形)组成,并且每个图元可以根据一个或更多个维度中的图元特定的着色速率来渲染。图块和图元在此统称为区域。可以基于区域内的运动数据(例如,运动向量)(用于运动自适应着色)或者基于区域内的内容变化(诸如,亮度和/或颜色频率和/或对比度)(用于内容自适应着色)来计算区域的着色速率。此外,可以使用运动数据和内容变化两者来计算着色速率。着色速率是指每像素的着色颜色样本的数量。在一个实施例中,例如,着色速率为二表示对像素进行过采样以每个像素包括两个着色颜色样本,其中着色速率为二分之一表示将一个着色颜色样本应用于两个像素。着色速率可以是方向性的,例如沿X和Y维度。
[0026] 运动自适应着色允许渲染系统通过选择性地降低描绘足够运动的区域的着色速率来克服渲染的静态图像质量和渲染的帧速率之间的传统的权衡约束。描绘在一个或更多个速度阈值之上的像素运动的给定区域可以以相应减小的着色速率来渲染,因为眼睛跟踪运动模糊将基本上掩盖由该区域内的减少的着色速率引入的模糊。降低动画序列的平均着色速率减少了每帧的计算工作量,并且可以有利地允许更高的帧速率。在一个实施例中,图元边缘的几何采样频率和/或精度是独立于着色速率确定的,因此不受着色速率的影响。
[0027] 为了减少视觉质量的潜在损失,单独计算每个区域的着色速率,使得视觉细节的所需减少主要由感知模糊掩盖。在实践中,运动自适应着色产生类似于地面实况观察的视觉质量。每个区域的感知模糊是由眼睛跟踪运动模糊、在渲染引擎中计算的任何运动模糊效果或其组合引起的。当渲染给定帧时,在帧的颜色着色通道之前或期间为每个区域自适应地计算着色速率。
[0028] 图1A示出了根据一个实施例的用于运动自适应渲染(着色)的方法110的流程图。尽管在处理单元的上下文中描述了方法110,方法110也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法110可以由GPU(图形处理单元)、CPU(中央处理单元)或能够执行可变速率着色(variable rate shading)的任何处理器来执行。此外,本领域普通技术人员将理解,执行方法110的任何系统都在本公开的实施例的范围和精神内。
[0029] 在步骤111中,处理单元接收帧的区域的运动数据。帧可以是动画帧序列中的一个。在一些实施例中,该区域可包括帧内具有固定或可变尺寸的图块。在其他实施例中,该区域可以包括几何图元(例如三角形)的覆盖像素。运动数据可以包括该区域的运动向量。例如,运动数据可以包括该区域内的每个像素的运动向量。在一个实施例中,根据紧接在前的帧和该帧之间的相机位置变化或对象位置变化来计算运动数据。可以使用一种或更多种任何技术上可行的技术来计算运动数据。此外,运动数据可以由处理单元计算。
[0030] 在步骤113中,处理单元由运动数据计算每区域运动值。在一个实施例中,每区域运动值包括以每帧(例如,归一化的帧时间)的像素(例如,归一化的距离)为单位表示的至少一个像素速度。在一个实施例中,假设帧时间是恒定的,可以计算像素速度和/或每区域运动值,尽管帧时间实际上可以根据渲染工作量而变化。在其他实施例中,可以计算像素速度和/或每区域运动值以解释渲染帧时间。在一个实施例中,运动数据包括区域内每个像素的个体运动向量,并且基于各个运动向量计算给定的每区域运动值。在另一实施例中,运动数据包括用于区域内的几何图元的每个顶点的运动向量。
[0031] 在某些实施例中,由运动数据计算每区域运动值包括从各个运动向量中选择最小运动向量值。在其他实施例中,可以实现不同的技术来计算该区域的每区域运动值。例如,在一个实施例中,可以将每区域运动值计算为各个运动向量的平均值、中值或众数。在另一个实施例中,可以将每区域运动值计算为各个运动向量的指定百分位速度。
[0032] 在一个实施例中,计算每显示维度的独立的每区域运动值。在这样的实施例中,沿X(平)维度计算每区域运动值,以及独立地沿Y(垂直)维度计算每区域运动值。例如,可以将X维度的每区域运动值计算为来自各个运动向量的所有X分量的最小分量值;以及可以将Y维度的每区域运动值计算为来自各个运动向量的所有Y分量的最小值。
[0033] 在步骤115中,处理单元基于每区域运动值确定区域的着色速率。可以执行任何技术上可行的技术以确定着色速率。在一个实施例中,着色速率指定值为一(即每像素一个着色样本)、二分之一(即每两个像素一个着色样本)或四分之一(即每四个像素一个着色样本)。在其他实施例中,可以指定不同的或附加的着色速率。此外,可以为每个维度计算着色速率。
[0034] 在一个实施例中,定义第一速度阈值(V2)和第二速度阈值(V4),其中V2小于V4。当沿X维度的每区域运动值被计算为等于或低于第一速度阈值时,沿X维度的着色速率确定为一。当每区域运动值高于第一速度阈值但等于或低于第二速度阈值时,沿X维度的着色速率确定为二分之一(即半速率着色)。当每区域运动值高于第二速度阈值时,沿X维度的着色速率确定为四分之一(即四分之一速率着色)。此外,可以类似地计算沿Y维度的着色速率。
[0035] 在一个实施例中,每个区域包括图块,并且每个图块可以进一步组织成像素块。示例性图块可包括16×16像素组,其像素块尺寸为1×1,1×2,2×1,1×4,4×1,2×4,4×2或4×4像素。可以基于图块的着色速率来确定像素块尺寸。沿每个维度的着色速率确定像素块尺寸。例如,如果确定特定图块在垂直维度中具有二分之一的着色速率并且在水平维度中具有四分之一的着色速率,则可以使用4×2像素块尺寸。
[0036] 在一个实施例中,诸如三角形的几何图元至少部分地覆盖区域。处理单元可以根据图元的几何覆盖率将图元光栅化为各个像素,但是各个像素的着色可以根据1×1,1×2,2×1,1×4,4×1,2×4,4×2或4×4像素的像素块尺寸进行。在这样的实施例中,为特定像素块中的每个像素分配相同的着色结果。
[0037] 在步骤117中,处理单元以着色速率渲染3D图形图元以产生该区域的颜色数据。可以执行任何技术上可行的技术来渲染3D图形图元,包括前向或延迟渲染管线中的像素着色,使用计算着色器的屏幕空间渲染,光线跟踪和/或去耦着色。着色操作可以包括但不限于生成和组合一个或更多个样本,诸如纹理映射样本、子像素样本或光线跟踪样本。
[0038] 在一个实施例中,对第一图块执行方法110以确定第一图块的一个或更多个第一着色速率,并且随后对相邻的第二图块执行方法110以确定第二图块的一个或更多个第二着色速率。在某些实施例中,第一着色速率和第二着色速率限于最大着色速率差。在一个实施例中,可以将最大着色速率差指定为来自可能的着色速率列表(例如,一、二分之一、四分之一等)的一个列表位置差。例如,如果第一着色速率确定为一,则第二着色速率可以是一或二分之一,而不是四分之一(列表位置差为2)。
[0039] 在某些实施例中,处理单元包括配置成在渲染管线内的一个或更多个位置处执行可变速率着色的硬件子系统。在一个实施例中,处理单元配置成执行实施可变速率着色的着色器,其中为每个图块或每个图元单独指定着色速率。
[0040] 现在将根据用户的期望,阐述关于可以实现前述框架的各种可选架构和特征的更多说明性信息。应该强烈注意的是,出于说明性目的阐述了以下信息,并且不应被解释为以任何方式进行限制。以下任意特征可以任选地并入或不排除所描述的其他特征。
[0041] 图1B示出了根据一个实施例的不同图块120、122、124的不同像素块尺寸。如图所示,图块120具有一个像素的像素块尺寸,图块122具有1×4像素的像素块尺寸,以及图块124具有2×2像素的像素块尺寸。还可以指定额外的像素块尺寸,可能达到图块的大小。在一个实施例中,像素块尺寸包括16×16图块内的1×1,1×2,1×4,2×1,2×2,2×4,4×1,4×2和4×4。当然,在不脱离各种实施例的范围和精神的情况下,可以替代地实现不同的图块尺寸和不同的像素块尺寸。
[0042] 在一个实施例中,1×1的像素块尺寸包括一个像素并且由至少一个颜色着色操作着色。4×4像素的像素块包括16个像素,其由一个颜色着色操作共同着色,从而减少相对于1×1像素块的计算工作量。此外,包括4×4像素块的16×16图块仅需要十六次着色操作,而不是二百五十六次颜色着色操作。
[0043] 图1C示出了根据一个实施例的描绘动画对象135的渲染帧130。如图所示,渲染帧130包括沿X和Y维度组织的相邻正方形图块的网格。例如,图块(0,0)位于X=0、Y=0处,依此类推。每个动画对象135(1),135(2),135(3)被示出以不同的速度和方向移动,其中将连续的帧到帧移动描绘为尾部虚线的印象,并且将速度描绘为具有方向和幅度的相关箭头。
如图所示,动画对象135(1)沿Y(垂直)维度缓慢移动,动画对象135(2)沿X(水平)维度快速移动,以及动画对象135(3)沿X和Y维度对角移动。可以将每个不同的动画对象135感知为具有不同程度的眼睛跟踪运动模糊,其中更快移动的对象具有更多眼睛跟踪运动模糊。
[0044] 在示例性实时帧序列中,将速度阈值V2设置为每帧三个像素,以及将速度阈值V4设置为每帧六个像素。动画对象135(1)可以沿着Y维度以每帧一个像素的屏幕空间速度(小于V2)行进,和沿X维度以每帧0像素(小于V2)行进;因此,相关图块(例如,覆盖的图块)的着色速率将被确定为X和Y维度中的一,并且着色将对相关图块内的1×1像素块执行。另外,动画对象135(2)可以沿着X维度以每帧七个像素(大于V4)的屏幕空间速度行进,和沿着Y维度以每帧0像素(小于V2)行进;因此,相关图块的着色速率将被确定为X维度中的四分之一和Y维度中的一,并且着色将对相关图块内的1×4像素块执行。最后,动画对象135(3)可以在X和Y维度两者中以每帧四个像素(在V2和V4之间)行进;因此,相关图块的着色速率将被确定为每个维度中二分之一,并且着色将对相关图块内的2×2像素块执行。
[0045] 在一个实施例中,处理单元被配置成通过执行本文公开的技术(包括图1A的方法110)来生成渲染帧130,以减少与生成渲染帧130相关联的整体着色计算。更具体地,可以根据图块内的运动来减小每个图块的着色速率,使得着色速率的减小基本上被图块的固有眼睛跟踪运动模糊所掩盖。在本示例中,可以沿着X维度对位置(4,1)处的图块以减小的着色速率着色,因为动画对象135(2)覆盖图块中的所有像素并且具有高像素速度。如果动画对象135(2)的速度高于第一速度阈值(例如,V2超过三个像素/帧),则位置(4,1)处的图块内的像素可以以减小的二分之一的着色速率着色。如果速度高于第二速度阈值(例如,V4超过六个像素/帧),则可以使用四分之一的着色速率。
[0046] 类似地,可以沿着X和Y维度对位置(1,5)处的图块以减小的着色速率进行着色,因为动画对象135(3)覆盖图块中的所有像素并且在X和Y两个维度上都具有中等像素速度。以这种方式选择性地降低着色速率在每帧的静态着色分辨率和帧速率之间创建了更宽的权衡空间,允许系统实现更好的整体视觉质量。在一个实施例中,根据图块的一个或更多个着色速率来渲染给定图块中的像素。在另一实施例中,根据图元的着色速率来渲染与给定图元(例如,包括对象)相关联的像素。
[0047] 图1D示出了根据一个实施例的描绘相机运动的渲染帧130。如图所示,相机以从左到右的运动平移,导致整个帧130中的像素运动,帧130内的不同像素可能经受不同的像素运动。在一个实施例中,基于当前帧处的相机位置与前一帧之间的差以及当前帧的深度贴图值来计算帧130内的像素的运动向量。在一个实施例中,着色器配置成基于对应的深度值和视图-投影矩阵来计算每个像素的世界空间位置。可以基于前一帧的先前视图-投影矩阵来变换世界空间位置,以在场景几何元素的前一帧中产生视口位置,该场景几何元素现在在当前帧中的给定像素处。可以将给定像素的速度向量计算为当前帧(在像素处)与前一帧之间的几何形状的视口位置的差异。虽然该技术考虑了静止对象的像素速度,但像素速度值不一定捕获实时移动通过世界空间的对象的像素速度。
[0048] 帧130的任何区域可能经受眼睛跟踪运动模糊。当相机足够快地平移时,帧130内的大多数或所有图块可能符合降低的着色速率的条件,从而允许更高的帧速率和更平滑、更清晰的感知运动。
[0049] 图1E示出了根据一个实施例的来自图形场景的渲染静态图像。静态图像表示示例性渲染平台的最高视觉质量。
[0050] 图1F示出了根据一个实施例的具有在60帧/秒(FPS)刷新速率下模拟的眼睛跟踪运动模糊的图形场景的渲染图像。可以将该图像认为是基线,因为60FPS显示器在相关的实时动画应用中是常用的。请注意,由于沿X维度的相机平移,沿X维度可能会看到明显的模糊。
[0051] 图1G示出了根据一个实施例的具有在120FPS刷新速率下模拟的眼睛跟踪运动模糊的图形场景,其使用运动自适应着色以减少着色工作量。如图所示,在120FPS下产生明显较少模糊的图像,帧速率可以使用运动自适应着色来实现,以减少渲染平台上的颜色着色工作量。渲染平台无法达到120FPS。
[0052] 图1H示出了根据一个实施例的运动自适应着色和使用完全着色工作量的传统渲染之间的比较。如图所示,相对于在没有着色速率降低的情况下执行的着色,运动自适应着色产生类似的视觉质量。然而,渲染平台实际上能够使用运动自适应着色以120FPS操作,而相同的平台不能使用传统技术实现120FPS。
[0053] 从频域信号分析的角度来看,眼睛跟踪运动模糊基本上等同于应用第一低通滤波器,该第一低通滤波器是朝向沿着被视觉上跟踪的移动对象(或帧区域)的运动方向并沿其定向的。该第一低通滤波器减弱视觉信号中具有高于某个通过阈值的频率内容的某些细节(例如,假设为理想的低通滤波器)。同时,降低沿相同方向的着色速率也减少了信号中的高频细节(应用于相同视觉信息的第二低通滤波器)。因此,当与着色速率降低(第二低通滤波器)相关联的通过阈值频率高于与眼睛跟踪运动模糊(第一低通滤波器)相关联的通过阈值频率时,着色速率降低的效果可以基本上被掩盖(隐藏)。在实践中,通过首先确定针对渲染内容(例如,动画对象135、相机移动等)的给定屏幕空间速度的眼睛跟踪运动模糊的量,然后应用可以通过眼睛追踪运动模糊掩盖的着色速率降低的安全比,来保证着色速率降低的掩盖。在一个实施例中,当像素速度高于每帧大约三个像素时,将第一安全比指定为二分之一的速率减小;当像素速度高于每帧约六个像素时,将第二安全比指定为四分之一的速率减小。
[0054] 此外,可以定向地施加略微不同的速度阈值V2+和V2-(或V4+和V4-),使得当在后一帧中增加给定图块的着色速率时,可以使用V2+和V4+;并且,当在后一帧中降低该图块的着色速率时,可以使用V2-和V4-。使用定向施加的速度阈值提供了滞后,并且通常可以避免着色速率之间的不必要的快速交替,这可以被观看者感知为不期望的视觉伪像。以这种方式,添加滞后可以充当阻尼功能,以避免相同的图块或移动对象上的着色速率的快速振荡或尖峰。
[0055] 在一个实施例中,将相邻的图块约束为着色速率相差一个或更少的增量(一、二分之一、四分之一)。在这样的实施例中,当与着色速率为1的图块相邻时,仅允许将有资格减少到四分之一的图块着色速率减少到二分之一。以这种方式,将第一图块的第一着色速率和第二(相邻)图块的第二着色速率被限制为最大着色速率差。限制相邻图块的着色速率差用于减少或消除可被感知为不期望的视觉伪像的模糊的急剧变化。
[0056] 可以扩展当前公开的技术以支持每像素的多个着色操作,以有效地对像素着色结果进行超采样。在这样的实施例中,可以定义附加速度阈值V1/2、V1/4等,以触发每像素的2x、4x等样本(超采样)的着色速率。超采样可以增加时间稳定性并减少出现在高频细节上的锯齿伪像。较高的每像素着色速率可以在较低的对象运动速度下提供额外的细节和感知的图像质量,因为在较低的速度下锯齿伪像更容易被注意到。这种超采样的着色可以在各种着色管线中实现。
[0057] 可以以像素/帧为单位测量屏幕空间运动速度。类似地,由眼睛跟踪运动模糊引起的模糊的宽度可以以像素/帧为单位量化。因此,无论实际渲染帧速率和/或显示系统刷新速率如何,都可以使用相同的一组速度阈值。然而,在具有高度可变帧速率的系统中,每个帧可以显示非常不同的运动速度(像素/帧)。这种可变性可导致着色速率模式在相邻帧上显着变化,导致着色速率的时间不稳定性。因此,在某些实施例中,可应用时间平滑缩放器,以基于预定义的速度阈值(Vk,其中k为2或4,以及如果采用自适应超采样,则额外地为1/2或1/4)来生成自适应速度阈值 在一个实施例中,平滑缩放器可以定义为:其中t是当前帧的经过时间(例如,用于更新相机和动态运动),并且 是
过去N帧的平均经过时间。该平滑缩放器可以有效地补偿由各个帧时间变化引起的相机运动变化。
[0058] 在一个实施例中,可以应用后处理过程来减弱(或消除)由不同图块的变化的着色速率引起的某些伪像。当运动速度改变时,这种伪像可以包括瞬时块状外观和/或时间不稳定性。在一个实施例中,工业标准时间抗锯齿(TAA)技术可以应用于后处理过程,以用作基于来自至少两个紧接在前的帧的着色速率的着色速率变化的阻尼函数。此外,TAA可以适于在着色速率变化(例如,着色速率上升)之后快速刷新累积的历史结果,以避免在相机停止移动之后保持模糊的结果。具体地,每当在屏幕图块中增加任何方向上的着色速率时,将TAA中使用的指数平均的时间滤波器中的当前帧的权重增加到预定值。这可确保当任何模糊外观无法再被运动掩盖时,显示的结果会立即更新为清晰图像(全着色率)。
[0059] 在替代的实施例中(例如,当未实现TAA时),可以使用自适应去块滤波器来平滑像素块之间的可见边界。自适应去块滤波器可以接收在每个屏幕图块中使用的着色速率作为输入,并且可以仅将平滑应用于已知的着色像素块或图块边界,而不是图像中全部不连续。
[0060] 在一个实施例中,包括运动数据的运动向量存储在屏幕映射的纹理中。运动向量可以作为各种输出之一(例如,一个或更多个前向渲染通道)由渲染引擎生成。在某些实施例中,运动向量用作后处理通道的输入,例如TAA和/或运动模糊效果。在一个实施例中,生成第一帧的运动向量以及第一帧的像素颜色信息。然后,随后的第二帧的渲染通道使用利用第一帧生成的运动向量来确定第二帧的着色速率。可以类似地生成顺序帧。通常,从一个或更多个先前渲染的帧计算运动的技术可在当前帧的着色速率决策中引入至少一帧滞后,因为给定图块内的估计运动是基于一个或更多个先前帧的先前渲染的信息的。
[0061] 在各种实施例中,可以通过基于每个像素的先前和当前相机视图位置(例如,如在模型视图投影矩阵中指定的)计算运动向量以及通常在帧的开始处通过仅深度通道产生的当前帧的渲染深度缓冲器,来避免与着色速率决策相关联的滞后。本领域普通技术人员将认识到,从当前帧的先前视图到当前视图(例如,相机变换矩阵)的相机运动以及给定像素处的深度,足以计算当前帧在该像素处的像素速度。该方法提供了对突然相机移动的快速着色速率自适应,但是该方法不考虑动态移动的对象。在一些实施例中,该方法与从前一帧获得的运动向量一起使用以联合估计运动数据。
[0062] 在一个实施例中,根据紧接在该帧之前渲染的两个帧之间的颜色图像数据的光流计算运动数据,其中基于在先前两帧之间检测到的移动计算帧中的每个像素的运动向量。可以执行任何技术上可行的技术,包括用于顺序图像中的运动估计的公知技术。在某些实施例中,硬件辅助的运动估计电路可以提供运动估计作为像素运动向量的基础
[0063] 在另一实施例中,将方向性光谱滤波器应用于帧数据,例如来自某些视觉效果通道(例如,景深或运动模糊效果)的颜色数据或结果数据。当经滤波的输出指示给定区域包含很少或不包含高频能量时,可以将速度阈值(例如,X和Y中的V2、X和Y中的V4)调低。减小具有最小高频能量的区域的着色速率通常导致可视质量的可忽略的损失。
[0064] 当前公开的用于着色速率降低的技术可以有利地应用于不同的着色方案,包括光栅化管线中的像素着色,屏幕空间计算着色器中的着色,使用光线跟踪的像素着色以及去耦着色管线。
[0065] 在一个实施例中,在光栅化和着色管线中执行颜色着色。在某些实施例中,可以由光栅化和着色管线硬件电路提供本地可变速率着色(VRS)。可变速率着色硬件特征可以提供每屏幕图块(16×16像素)确定,或在前向渲染和全屏像素着色通道中的像素着色速率的每图元确定。可以提供由可变速率着色特征支持的着色速率列表,并且可以为每个图块或每个三角形图元指定来自着色速率列表的着色速率。此外,着色速率可以确定每个图块或三角形图元的光栅速率。在一个实施例中,随着图块的着色速率增加,光栅速率也可以增加。如这里所使用的,光栅速率指定当计算特定图元的区域内的像素的覆盖信息时光栅化管线硬件电路所利用的每像素的可见性样本(即,光栅样本)的数目。
[0066] 在另一实施例中,通过屏幕空间计算着色器执行颜色着色,其中每图块着色速率在计算着色器内实现。在示例性着色器中,像素的每个16×16图块可以以期望的频率着色,例如,每2×2像素块一次,然后每个块的结果可写入到输出表面中的所有相关像素。计算着色器允许计算线程和输出像素之间的灵活映射。可以基于每个屏幕区域中使用的每个帧的着色速率在(着色器)运行时确定这种映射。该方法称为可变速率计算着色(VRCS)。此外,根据图块的着色速率,可以启动更多或更少的线程以对给定图块着色。在这样的实施例中,着色速率确定区域内每像素的着色操作的数量。在一些实施例中,光栅速率随着着色速率而变化。在一个实施例中,特定图元的覆盖信息可以从光栅化管线硬件电路传递(例如,作为片段)到屏幕空间计算着色器。
[0067] 在又一个实施例中,在光线跟踪管线中执行颜色着色。在光线跟踪管线中,通过在光线和场景几何体的交叉点处投射一个或更多个主光线和着色来确定像素颜色。可选地,也可以对辅助光线进行投射和着色,以支持着色和单/多次反弹着色效果。基于着色模型和质量要求,可以容易地调整每像素的主光线和辅助光线的数量,从而有效地改变每像素的着色速率。可选地,光线密度可以降低到每像素1光线的比率以下,并且使用时空重建滤波器和来自稀疏计算的着色器的插值来重建图像中的所得到的像素。在这样的实施例中,着色速率确定区域内每像素投射的光线的数量。
[0068] 在又一个实施例中,由一个或更多个去耦的着色管线执行颜色着色。在去耦的着色管线中,通过任何技术上可行的自适应按需纹理空间着色技术,着色速率可以与可见性采样速率去耦合。因此,通过改变纹理MIP级别中的着色分辨率,自然支持可变像素着色速率。由于这种形式的着色速率可以基于每纹理-图块来确定,因此有足够的灵活性来自适应地改变每个可见表面位置处的着色速率,并且基于屏幕空间运动来响应着色速率确定。在这样的实施例中,在每纹理-图块的基础上,着色速率确定渲染到纹理中的纹理MIP级别。
[0069] 图2示出了根据一个实施例的用于通过联合考虑内容变化和运动来确定着色速率的方法210的流程图。该方法组合并统一了内容自适应着色和运动自适应着色的原理。尽管在处理单元的上下文中描述了方法210,但是方法210也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法210可以由GPU(图形处理单元)、CPU(中央处理单元)或能够执行可变速率着色的任何处理器来执行。此外,本领域普通技术人员将理解,执行方法210的任何系统都在本公开的实施例的范围和精神内。
[0070] 在步骤211中,处理单元接收紧接在前的渲染帧,其可以包括渲染的颜色信息。在一个实施例中,可以由处理单元生成紧接在前的渲染帧。在步骤213中,处理单元计算该区域内的颜色和亮度的变化范围。可以应用任何技术上可行的技术来指定和计算变化范围。可以按照图像的X和Y维度独立地计算内容变化范围。在步骤215中,处理单元基于每区域运动值和变化范围来计算着色速率。
[0071] 在一个实施例中,根据每个图块内的内容变化的程度来计算着色速率。没有高频率和/或高对比度内容变化的图块可以在较低速度阈值处减小着色速率而不会导致感知的质量损失。在一个实施例中,着色速率计算提供基于图块内的估计的颜色和亮度变化来调整速度阈值(例如,V2、V4)。具有较少高频细节或较少颜色和亮度变化的图块可以使用较低速度阈值。在另一个实施例中,着色速率计算在给定变化范围和最小运动速度的情况下计算每个图块中的完全着色速率和减小的着色速率之间的估计的平均像素值差(即,损失),并且如果这种损失低于预定义的质量水平(例如,恰好显着的差阈值)的话,则提供减小的着色速率。类似于V2和V4之间的区别,可以定义第一差阈值D2,其保护全速率着色和二分之一速率着色之间的转换,并且可以定义第二差阈值D4,其保护二分之一速率着色和四分之一速率着色之间的转换。
[0072] 在一个实施例中,计算着色速率,以随着每区域运动值超过两个或更多个速度阈值中的每一个而减小,并且速度阈值作为变化范围的函数而变化。在另一实施例中,计算着色速率,以在变化范围低于阈值(即D2或D4)时减小,并且阈值作为每区域运动值的函数而变化。在每区域运动值为零(静态场景或对象)的特殊情况下,可以将着色速率计算降级为纯内容自适应着色,其中着色速率仅基于变化范围确定。在这种情况下,阈值(D2或D4)表示变化范围,在这一变化范围下,通过降低着色速率引起的视觉差异对于观看者而言是明显的。在更一般的情况下,当每区域运动值大于零时,阈值(D2或D4)表示在存在运动时着色速率转变的明显差异。更一般地,更快的运动导致更高的阈值D2和D4。
[0073] 在一个实施例中,将变化范围计算为给定方向(X或Y)上的区域中的相邻像素之间的绝对差的平均值。平均值可以是常规算术平均值或闵可夫斯基(Minkowski)平均值。在一个实施例中,使用相同的变化范围确定全速率着色和二分之一速率着色(即具有阈值D2)之间的转换,以及二分之一速率着色和四分之一速率着色(即具有阈值D4)之间的转换。在另一个实施例中,为每个转换决策计算不同的变化范围。此外,可以使用运动数据将变化范围重新投影到随后要被着色的帧。
[0074] 尽管在处理单元的上下文中描述了方法110、方法210和相关技术,但是可以将任何程序、定制电路或定制电路和程序的组合配置为执行这些技术。例如,运动自适应着色技术可以由GPU(图形处理单元)、CPU(中央处理单元)或并行处理单元(诸如图3的并行处理单元300)来实现。此外,本领域普通技术人员将理解,执行方法110、方法210和/或相关方法和技术的操作的任何系统都在本公开的实施例的范围和精神内。
[0075] 所公开的技术通过降低描绘足以被人类视觉系统以减小的细节(例如,模糊、较低分辨率)感知的运动的区域的着色速率来克服渲染的帧质量和渲染的帧速率之间的传统的权衡约束。为了减少视觉质量的损失,计算着色速率,使得视觉细节的所需减少基本上被感知模糊掩盖,并且视觉质量类似于地面实况观察。感知的模糊是由持久采样和保持显示器上显示的运动、渲染引擎中计算的运动模糊效果或两者的组合引起的。当渲染给定帧时,基于图块或图元处的场景运动来调整各个区域着色速率。换句话说,使用可变速率着色来渲染帧。
[0076] 在一个实施例中,可以通过另外考虑每个图块内的内容变化的程度来计算着色速率。没有高频内容变化的图块可以在较低运动阈值下以降低的着色速率渲染,而不会导致感知的质量损失。所公开的技术可以在不同着色方案的上下文中实现,其中着色方案中的任何着色方案都可以自适应地降低整个渲染帧的着色速率,以有利地提高渲染帧速率或减少指定帧速率下的计算工作量。
[0077] 并行处理架构
[0078] 图3示出了根据一个实施例的并行处理单元(PPU)300。在一个实施例中,PPU 300是在一个或更多个集成电路器件上实现的多线程处理器。PPU 300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 300执行的指令集的实例。在一个实施例中,PPU 300是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
[0079] 一个或更多个PPU 300可以被配置为加速数千个高性能计算(HPC)、数据中心机器学习应用。PPU 300可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等。
[0080] 如图3所示,PPU 300包括输入/输出(I/O)单元305、前端单元315、调度器单元320、工作分配单元325、集线器330、交叉开关(Xbar)370、一个或更多个通用处理集群(GPC)350以及一个或更多个存储器分区单元380。PPU 300可以经由一个或更多个高速NVLink 310互连连接到主机处理器或其他PPU 300。PPU 300可以经由互连302连接到主机处理器或其他外围设备。PPU 300还可以连接到包括多个存储器设备的本地存储器304。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM裸晶(die)堆叠在每个设备内。
[0081] NVLink 310互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 300,支持PPU 300和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 310通过集线器330发送到PPU 300的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 310。
[0082] I/O单元305被配置为通过互连302从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元305可以经由互连302直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,I/O单元305可以经由互连302与一个或更多个其他处理器(例如,一个或更多个PPU 300)通信。在一个实施例中,I/O单元305实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连302是PCIe总线。在替代的实施例中,I/O单元305可以实现其他类型的已知接口,用于与外部设备进行通信。
[0083] I/O单元305对经由互连302接收的分组进行解码。在一个实施例中,分组表示被配置为使PPU 300执行各种操作的命令。I/O单元305按照命令指定将解码的命令发送到PPU 300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或PPU 300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元305被配置为在PPU 300的各种逻辑单元之间和之中路由通信。
[0084] 在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 300提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU300两者访问(例如,读/写)的区域。例如,I/O单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到PPU 300的各个单元。
[0085] 前端单元315耦合到调度器单元320,其配置各种GPC 350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个GPC 350上的多个任务的执行。
[0086] 调度器单元320耦合到工作分配单元325,其被配置为分派任务以在GPC 350上执行。工作分配单元325可以跟踪从调度器单元320接收到的多个调度任务。在一个实施例中,工作分配单元325为每个GPC 350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个时隙(例如,32个时隙),其包含被指派为由特定GPC 350处理的任务。活动任务池可以包括多个时隙(例如,4个时隙),用于正在由GPC 350主动处理的任务。当GPC 350完成任务的执行时,该任务从GPC 350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC350上执行。如果GPC 350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 350上执行。
[0087] 工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC 350通信。XBar 370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的GPC 350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。
[0088] 任务由调度器单元320管理并由工作分配单元325分派给GPC 350。GPC 350被配置为处理任务并生成结果。结果可以由GPC 350内的其他任务消耗,经由XBar 370路由到不同的GPC 350,或者存储在存储器304中。结果可以经由存储器分区单元380写入存储器304,分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。结果可以通过NVLink310发送到另一个PPU 300或CPU。在一个实施例中,PPU 300包括数目为U的存储器分区单元380,其等于耦合到PPU 300的存储器304的独立且不同的存储器设备的数目。下面将结合图4B更详细地描述存储器分区单元380。
[0089] 在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 300上执行。在一个实施例中,多个计算机应用程序由PPU 300同时执行,并且PPU 300为多个计算机应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 300执行。驱动程序内核将任务输出到正在由PPU 300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图5A更详细地描述线程和协作线程。
[0090] 图4A示出了根据一个实施例的图3的PPU 300的GPC 350。如图4A所示,每个GPC 350包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 350包括管线管理器
410、预光栅操作单元(PROP)415、光栅引擎425、工作分配交叉开关(WDX)480、存储器管理单元(MMU)490以及一个或更多个数据处理集群(DPC)420。应当理解,图4A的GPC 350可以包括代替图4A中所示单元的其他硬件单元或除图4A中所示单元之外的其他硬件单元。
[0091] 在一个实施例中,GPC 350的操作由管线管理器410控制。管线管理器410管理用于处理分配给GPC 350的任务的一个或更多个DPC 420的配置。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 420可以被配置为在可编程流式多处理器(SM)440上执行顶点着色程序。管线管理器410还可以被配置为将从工作分配单元325接收的分组路由到GPC 350中适当的逻辑单元。例如,一些分组可以被路由到PROP 415和/或光栅引擎425中的固定功能硬件单元,而其他分组可以被路由到DPC 420以供图元引擎435或SM 440处理。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个以实现神经网络模型和/或计算管线。
[0092] PROP单元415被配置为将由光栅引擎425和DPC 420生成的数据路由到光栅操作(ROP)单元,结合图4B更详细地描述。PROP单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
[0093] 光栅引擎425包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎425的输出包括例如要由在DPC 420内实现的片段着色器处理的片段。
[0094] 包括在GPC 350中的每个DPC 420包括M管线控制器(MPC)430、图元引擎435和一个或更多个SM 440。MPC 430控制DPC 420的操作,将从管线管理器410接收到的分组路由到DPC 420中的适当单元。例如,与顶点相关联的分组可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的分组可以被发送到SM 440。
[0095] SM 440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM 440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 440实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 440实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5A更详细地描述SM 
440。
[0096] MMU 490提供GPC 350和存储器分区单元380之间的接口。MMU 490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
[0097] 图4B示出了根据一个实施例的图3的PPU 300的存储器分区单元380。如图4B所示,存储器分区单元380包括光栅操作(ROP)单元450、二级(L2)高速缓存460和存储器接口470。存储器接口470耦合到存储器304。存储器接口470可以实现用于高速数据传输的32、64、
128、1024位数据总线等。在一个实施例中,PPU 300合并了U个存储器接口470,每对存储器分区单元380有一个存储器接口470,其中每对存储器分区单元380连接到存储器304的对应的存储器设备。例如,PPU 300可以连接到多达Y个存储器设备,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
[0098] 在一个实施例中,存储器接口470实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 300相同的物理封装上,提供与常规GDDR5SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
[0099] 在一个实施例中,存储器304支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算机应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,可靠性尤其重要,其中PPU300处理非常大的数据集和/或长时间运行应用程序。
[0100] 在一个实施例中,PPU 300实现多级存储器分层结构。在一个实施例中,存储器分区单元380支持统一存储器以为CPU和PPU 300存储器提供单个统一的虚拟地址空间,使能虚拟存储器系统之间的数据共享。在一个实施例中,由PPU 300对位于其他处理器上的存储器的访问频率被跟踪,以确保存储器页面被移动到更频繁地访问页面的PPU 300的物理存储器。在一个实施例中,NVLink 310支持地址转换服务,其允许PPU 300直接访问CPU的页表并且提供由PPU 300对CPU存储器的完全访问。
[0101] 在一个实施例中,复制引擎在多个PPU 300之间或在PPU 300与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元380可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
[0102] 来自存储器304或其他系统存储器的数据可以由存储器分区单元380取回并存储在L2高速缓存460中,L2高速缓存460位于芯片上并且在各个GPC 350之间共享。如图所示,每个存储器分区单元380包括与对应的存储器设备相关联的L2高速缓存460的一部分。然后可以在GPC 350内的多个单元中实现较低级高速缓存。例如,每个SM 440可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 440的专用存储器。来自L2高速缓存460的数据可以被获取并存储在每个L1高速缓存中,以在SM 440的功能单元中进行处理。L2高速缓存460被耦合到存储器接口470和XBar370。
[0103] ROP单元450执行与像素颜色相关的图形光栅操作,诸如颜色压缩、像素混合等。ROP单元450还与光栅引擎425一起实现深度测试,从光栅引擎425的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元450更新深度缓冲区并将深度测试的结果发送给光栅引擎425。将理解的是,存储器分区单元380的数量可以不同于GPC 350的数量,并且因此每个ROP单元450可以耦合到每个GPC 350。ROP单元450跟踪从不同GPC 350接收到的分组,并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC 350。尽管ROP单元450包括在图4B中的存储器分区单元380内,但是在其他实施例中,ROP单元450可以在存储器分区单元380之外。例如,ROP单元450可以驻留在GPC 350或另一个单元中。
[0104] 图5A示出了根据一个实施例的图4A的流式多处理器440。如图5A所示,SM 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元(SFU)552、一个或更多个加载/存储单元(LSU)554、互连网络580、共享存储器/L1高速缓存570。
[0105] 如上所述,工作分配单元325调度任务以在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,并且如果任务与着色器程序相关联,则该任务可以被分配给SM 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、SFU 552和LSU 554)。
[0106] 协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
[0107] 协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作伙伴并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
[0108] 分派单元515被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元510包括两个分派单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个分派单元515或附加分派单元515。
[0109] 每个SM 440包括寄存器文件520,其提供用于SM 440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在另一个实施例中,寄存器文件520在由SM 440执行的不同线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储。
[0110] 每个SM 440包括L个处理核心550。在一个实施例中,SM 440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心550包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
[0111] 张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
[0112] 在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA9C++API)公开了专的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
[0113] 每个SM 440还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU 552。在一个实施例中,SFU 552可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU 552可以包括被配置为执行纹理贴图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器304加载纹理贴图(例如,纹理像素的2D阵列)并且对纹理贴图进行采样以产生经采样的纹理值,用于在由SM 440执行的着色器程序中使用。在一个实施例中,纹理贴图被存储在共享存储器/L1高速缓存470中。纹理单元实现纹理操作,诸如使用mip贴图(即,不同细节层次的纹理贴图)的过滤操作。在一个实施例中,每个SM 440包括两个纹理单元。
[0114] 每个SM 440还包括N个LSU 554,其实现共享存储器/L1高速缓存570和寄存器文件520之间的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、共享存储器/L1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和共享存储器/L1高速缓存570中的存储器位置。
[0115] 共享存储器/L1高速缓存570是片上存储器阵列,其允许数据存储和SM 440与图元引擎435之间以及SM 440中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存570包括128KB的存储容量并且在从SM440到存储器分区单元380的路径中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存储器/L1高速缓存570、L2高速缓存460和存储器304中的一个或更多个是后备存储。
[0116] 将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存570内的集成使共享存储器/L1高速缓存570起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
[0117] 当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给DPC 420。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 440执行程序并执行计算,使用共享存储器/L1高速缓存570以在线程之间通信,以及使用LSU 554通过共享存储器/L1高速缓存570和存储器分区单元380读取和写入全局存储器。当被配置用于通用并行计算时,SM 440还可以写入调度器单元320可用来在DPC 420上启动新工作的命令。
[0118] PPU 300可以被包括在台式计算机、膝上型计算机、平板电脑服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 300包含在单个半导体衬底上。在另一个实施例中,PPU 300与一个或更多个其他器件(诸如附加PPU 300、存储器304、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
[0119] 在一个实施例中,PPU 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 300可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
[0120] 示例性计算系统
[0121] 具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
[0122] 图5B是根据一个实施例的使用图3的PPU 300实现的处理系统500的概念图。示例性系统565可以被配置为实现图1A中的方法110所描述的运动自适应渲染。处理系统500包括CPU 530、交换机510和多个PPU 300以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU 300和CPU 530的连接的数量可以改变。交换机510在互连302和CPU 530之间接口。PPU 300、存储器304和NVLink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
[0123] 在另一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 530之间提供一个或更多个高速通信链路,并且交换机510在互连302和每个PPU 300之间进行接口。PPU 300、存储器304和互连302可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连302在每个PPU 300和CPU 530之间提供一个或更多个通信链路,并且交换机510使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 310在PPU 300和CPU 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连302在每个PPU 300之间直接地提供一个或更多个通信链路。可以使用与NVLink 310相同的协议将一个或更多个NVLink 310高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
[0124] 在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且PPU 300和/或存储器304中的每一个可以是封装器件。在一个实施例中,CPU 530、交换机510和并行处理模块525位于单个半导体平台上。
[0125] 在一个实施例中,每个NVLink 310的信令速率是20到25千兆位/秒,并且每个PPU 300包括六个NVLink 310接口(如图5B所示,每个PPU 300包括五个NVLink 310接口)。每个NVLink 310在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当CPU 530还包括一个或更多个NVLink 310接口时,NVLink 310可专门用于如图5B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
[0126] 在一个实施例中,NVLink 310允许从CPU 530到每个PPU 300的存储器304的直接加载/存储/原子访问。在一个实施例中,NVLink 310支持一致性操作,允许从存储器304读取的数据被存储在CPU 530的高速缓存分层结构中,减少了CPU 530的高速缓存访问延迟。在一个实施例中,NVLink 310包括对地址转换服务(ATS)的支持,允许PPU 300直接访问CPU 
530内的页表。一个或更多个NVLink 310还可以被配置为以低功率模式操作。
[0127] 图5C示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现图1A中所示的方法110中描述的运动自适应渲染。
[0128] 如图所示,提供系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取随机存取存储器(RAM)的形式。
[0129] 系统565还包括输入设备560、并行处理系统525和显示设备545,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备560(例如键盘鼠标触摸板、麦克等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
[0130] 此外,系统565可以出于通信目的通过网络接口535耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络电缆网络等)。
[0131] 系统565还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
[0132] 计算机程序或计算机控制逻辑算法可以存储在主存储器540和/或辅助存储中。这些计算机程序在被执行时使得系统565能够执行各种功能。存储器540、存储和/或任何其他存储是计算机可读介质的可能示例。
[0133] 各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
[0134] 虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
[0135] 图形处理管线
[0136] 在一个实施例中,PPU 300包括图形处理单元(GPU)。PPU 300被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU 300可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
[0137] 应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器304)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在PPU 300的SM 440上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,SM 440中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 440可以被配置为同时执行不同的着色程序。例如,SM 440的第一子集可以被配置为执行顶点着色程序,而SM 440的第二子集可以被配置为执行像素着色程序。SM 440的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存460和/或存储器304。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,SM 440的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器304中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
[0138] 图6是根据一个实施例的由图3的PPU 300实现的图形处理管线600的概念图。图形处理管线600是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线
600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由 API定义的图形处理管线。作为选择,图形处理管线600可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
[0139] 如图6所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
[0140] 数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。
[0141] 顶点着色阶段620通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。
[0142] 图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。
[0143] 几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何图元传送到视口SCC阶段650。
[0144] 在一个实施例中,图形处理管线600可以在流式多处理器和顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段650可以利用数据。在一个实施例中,由图形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段650和光栅化阶段660被实现为固定功能电路。
[0145] 视口SCC阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段660。
[0146] 光栅化阶段660将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。
[0147] 片段着色阶段670通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理贴图。片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
[0148] 光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(例如,输出数据602)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
[0149] 应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段640)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线600的任何阶段可以由图形处理器(诸如PPU300)内的一个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由可编程硬件单元(诸如PPU 300的SM 440)来实现。
[0150] 图形处理管线600可以经由由主机处理器(诸如CPU)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU 300的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如PPU 300)来生成图形数据而不要求程序员利用PPU 300的特定指令集。应用程序可以包括被路由到PPU 300的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU 300之间的输入/输出接口在PPU 300上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU300的硬件来实现图形处理管线600。
[0151] 可以在PPU 300内执行各种程序以便实现图形处理管线600的各个阶段。例如,设备驱动程序可以启动PPU 300上的内核以在一个SM 440(或多个SM 440)上执行顶点着色阶段620。设备驱动程序(或由PPU 400执行的初始内核)还可启动PPU 400上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在固定单元硬件(诸如在PPU 400内实现的光栅器或数据组装器)上实现。应当领会,在被SM 440上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
[0152] 机器学习
[0153] 在处理器(诸如PPU 300)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发、从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习、不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。
[0154] 在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性水平分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
[0155] 深度神经网络(DNN)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高水平的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
[0156] 一旦DNN被训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别沉积在ATM机中的支票存款上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险、或实时翻译人类言语。
[0157] 在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
[0158] 神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
[0159] 应注意,本文描述的技术可以体现为存储在计算机可读介质中的可执行指令,以供基于处理器的指令执行机器、系统、装置或设备使用或与之结合使用。本领域技术人员将理解,对于一些实施例,可以包括各种类型的计算机可读介质以用于存储数据。如本文所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适介质中的一个或更多个,使得指令执行机器、系统、装置或设备可以从计算机可读介质读取(或获取)指令,并执行指令以用于实施所描述的实施例。合适的存储格式包括电子、磁、光和电磁格式中的一种或更多种。传统示例性计算机可读介质的非穷举列表包括:便携式计算机磁盘;随机存取存储器(RAM);只读存储器(ROM);可擦除可编程只读存储器(EPROM);闪存设备;和光存储设备,包括便携式光盘(CD)、便携式数字视频盘(DVD)等。
[0160] 应当理解,附图中示出的组件的布置是出于说明性目的,并且其他布置也是可能的。例如,本文描述的一个或更多个元件可以全部或部分地实现为电子硬件组件。其他元件可以用软件、硬件或软件和硬件的组合来实现。此外,这些其他元件中的一些或全部可以进行组合,一些可以完全省略,并且可以添加附加组件,而仍然实现本文描述的功能。因此,本文描述的主题可以体现为许多不同的变型,并且所有这些变型都被认为是在权利要求的范围内。
[0161] 为了辅助理解本文描述的主题,按照动作序列描述了许多方面。本领域技术人员将认识到,各种动作可以由专用电路或电路、由一个或更多个处理器执行的程序指令或两者的组合来执行。本文对任何动作序列的描述并不意图暗示必须遵循为执行该序列而描述的特定顺序。除非本文另有说明或与上下文明显矛盾,否则本文所描述的所有方法可以以任何合适的顺序执行。
[0162] 在描述主题的上下文中(特别是在权利要求的上下文中),对术语“一”和“一个”和“该”以及类似引用的使用应被解释为涵盖单数和复数两者,除非本文另有说明或与上下文明显矛盾。使用术语“至少一个”,后跟一个或更多个项目的列表(例如,“A和B中的至少一个”)应被解释为表示从所列出的项目中选择的一个项目(A或B))或所列项目(A和B)中的两个或更多个的任何组合,除非本文另有说明或与上下文明显相矛盾。此外,前面的描述仅出于说明的目的,而不是出于限制的目的,因为所寻求的保护范围由下文所述的权利要求及其任何等同物一起限定。除非另外声明,否则本文提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅意图更好地说明主题并且不对主题的范围施加限制。在权利要求和书面描述中使用术语“基于”和表示导致结果的条件的其他类似短语并不意图排除导致该结果的任何其他条件。说明书中的语言不应被解释为表明对于实践要求保护的本发明必不可少的任何非要求保护的元件。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈