掌桥专利:专业的专利平台
掌桥专利
首页

用于对图像进行有效采样的技术

文献发布时间:2023-06-19 13:46:35


用于对图像进行有效采样的技术

技术领域

本公开涉及组合样本,并且更具体地涉及使用样本掩码来选择性地组合样本。

背景技术

常规的滤波操作基于坐标读取一组最近的样本,并将它们组合以产生滤波后的样本值。例如,在2D纹理图上执行双线性滤波操作时,在坐标附近获得四个纹理像素,并通过对它们执行双线性插值来生成滤波后的纹理像素值。有时需要从双线性插值计算中排除一个或更多个纹理像素。常规的纹理滤波管线不提供排除一个或更多个纹理像素的机制。需要解决这些和/或其他相关问题。

发明内容

公开了用于基于样本掩码选择性地组合样本以产生滤波后的值的技术。在一个实施例中,一种用于选择性地组合样本的方法接收要执行的滤波操作、与缓冲区相关联的坐标以及样本掩码。该操作为坐标指定了要从缓冲区中获取的最大样本数。样本掩码根据滤波操作指定要组合最大样本数中的哪些样本以产生滤波后的值。样本掩码可以指定可以为该操作获取的一个、多个、最大或小于最大样本数的样本。在一个实施例中,一个或更多个样本是从帧缓冲区中的图像获得的。在一个实施例中,使用与图像相关联的信息(例如,对应的Z缓冲区(深度缓冲区)或G缓冲区(几何缓冲区))来产生样本掩码。

附图说明

图1A示出了图像的一部分的示例图。

图1B示出了对应于图1A的颜色值的示例图。

图1C示出了示例性样本掩码。

图1D示出了示例性系统,其包括处理器和存储器,用于根据样本掩码选择性地组合样本。

图1E示出了图1D的处理器内的示例性权重计算单元。

图2A示出了根据样本掩码选择性地组合样本的方法的示例性流程图。

图2B示出了用于产生样本掩码以用于对图像样本进行滤波的方法的示例性流程图。

图3示出了示例性并行处理单元。

图4A示出了图3的并行处理单元的示例性通用处理集群。

图4B示出了图3的并行处理单元的示例性存储器分区单元。

图5A示出了图4A的示例性流式多处理器。

图5B示出了使用图3的PPU实现的处理系统的示例图。

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

图6示出了由图3的PPU实现的图形处理管线的示例性示图。

具体实施方式

通常对存储在帧缓冲区中的图像(诸如纹理图或渲染图像)执行滤波操作。滤波可用于多种目的,例如使图像平滑或从图像中采样颜色值。图像通常表示为二维平面上的颜色值的集合。每个颜色值代表二维平面上特定位置的图像的颜色。通常将位置指定为二维坐标,例如(X,Y),其中X是沿平面x轴的位置,Y是沿平面y轴的位置。通常,图像仅在(X,Y)位置存储颜色值,其中X和Y是整数(例如,在(2,3),(4,5),(3,4)等位置)。为了在其他位置(例如,在位置(2.4、3.2))导出或采样图像的颜色值,通常使用双线性滤波。在双线性滤波中,获得图像中存储的最接近被采样位置的四个颜色值(例如,也称为样本值或纹理像素),并将其组合以产生单个滤波后的值。

例如,图1A示出了为图像存储的四个颜色值。颜色值A是为图像的位置(0,0)存储的,颜色值B是为图像的位置(1,0)存储的,颜色值C是为图像的位置(0,1)存储的,颜色值D是为图像的位置(1,1)存储的。为了获得或采样位置(0.99、0.99)处的颜色值,通常执行双线性滤波。首先,从图像的存储器(例如,DRAM或高速缓存)中检索最接近采样位置(0.99、0.99)的四个颜色。参考图1A,最接近采样位置(0.99、0.99)的四个颜色值分别是A、B、C和D。然后通过计算颜色A、B、C和D在点(0.99,0.99)处的贡献量来执行双线性滤波。

作为一个示例,可以如下计算位置(0.99、0.99)处的单个滤波后的颜色值S:

S=A*weightA+B*weightB+C*weightC+D*weightD, (等式1)

其中weightA=(1-x)*(1-y),weightB=x*(1-y),weightC=(1-x)*y,和weightD=x*y。对于位置(0.99,0.99),权重值将为:weightA=0.001,weightB=0.0099,weightC=0.0099和weightD=0.9801。颜色值D的权重最大,因此对S的贡献最大。颜色值D也是最接近位置(0.99、0.99)的颜色。通常,颜色值由多个颜色分量值(例如红、绿和蓝)组成,每个颜色分量值分别由权重进行缩放,然后求和以产生S的结果颜色成分值。

图1B示出了对应于图1A的A、B、C和D的颜色值。如图1B所示,颜色A、B和C是绿色,而颜色D是红色。如上所述,颜色值通常用一个或更多个分量颜色值表示。表示颜色值的一种典型方式是将颜色值的红、绿和蓝分量分别存储为三元组(R,G,B),其中R是红色分量的值,G是绿色分量的值,B是蓝色分量的值。通常,红色、绿色和蓝色分量中的每一个都在0.0到1.0的范围内,其中0.0表示该颜色分量对颜色值全无贡献,而1.0表示该颜色分量对颜色值完全贡献。使用这种表示,A、B和C可以表示为RGB颜色值(0.0,1.0,0.0),而D可以表示为RGB颜色值(1.0,0.0,0.0)。如上所述,使用权重值weightA=0.001,weightB=0.0099,weightC=0.0099和weightD=0.9801计算位置(0.99、0.99)处的颜色值S。因此,所得的S颜色值将具有RGB颜色值(0.9801,0.0199,0.0),该颜色值主要是红色,并且混入了一点绿色。

传统上,使用图形处理单元(GPU)中的固定功能硬件来执行双线性滤波。这样的固定功能单元通常被称为纹理单元。传统上首先将纹理单元配置为对特定图像(例如,诸如纹理图或帧缓冲区中的图像)进行操作。之后,纹理单元接收二维坐标(例如,诸如(3.4,0.99)之类的坐标),并且纹理单元提供由坐标指定的位置处的图像的颜色值。纹理单元可以直接返回存储在图像中的最接近所提供的纹理坐标(例如,诸如在图1A中所示的图像的坐标(0,1)处)的值。可选地,为了获得更好的质量(例如,连续或平滑的颜色),纹理单元可以对四个最接近的纹理像素应用双线性滤波。但是传统的纹理单元没有任何机制可以在对特定位置处的颜色值进行采样或推导时忽略四个颜色值中的一个或更多个。因此,在应仅组合两个或三个颜色值以导出指定位置处的颜色值的应用中,传统纹理单元无法用于执行该组合。而是必须获得两个或三个颜色值中的每一个,然后手动组合以产生所需的结果颜色值。但是,此操作可能需要额外的寄存器空间来存储所有样本的中间数据,然后需要进行额外的数学计算以得到正确的样本权重。这样做效率低下。本文公开的实施例解决了这个和其他相关问题。

图1C示出了示例性样本掩码,该样本掩码用于指示当将图1B中的四个最接近的颜色值进行组合以计算图1A中所示的坐标(0.99、0.99)的颜色值时应当包括或省略的颜色值。在图1C所示的示例中,样本掩码105指示应使用颜色A、B和C来计算(0.99、0.99)处的颜色值,但不应使用颜色D。尽管图1C以图形方式描绘了样本掩码105,但是样本掩码105优选地表示为4位掩码,其中每个位对应于最接近寻求获得颜色值的位置的四个颜色值中的每一个。每个位指示在计算指定坐标处的颜色时是否应使用相应的颜色值。例如,位值为1可指示相应的颜色值已“启用”且应在计算中使用。而值为0可指示相应的颜色值已“禁用”(例如,未启用)且不应使用。在其他实施例中,样本掩码中的位数可以大于或小于四。通常,样本掩码中的位数等于最接近指定位置的颜色值的数量,其被用于计算该位置的颜色值。使用样本掩码时,特定位置的颜色值S’可计算为:

S’=(A*bA*weightA+B*bB*weightB+C*bC*weightC+D*bD*weightD)/N

(等式2)

其中

N=bA*weightA+bB*weightB+bC*weightC+bD*weightD (等式3)如果样本掩码指示在计算颜色值S’时应使用相应的颜色A、B、C或D,则bA、bB、bC和bD的每个值均为1。如果样本掩码指示在计算颜色值S’时不应使用相应的颜色A、B、C或D,则bA、bB、bC和bD中的每个值均为0。N是归一化值,其等于启用的权重值之和。当N=0时,S’可以设置为NaN(不是数字)。当颜色值S’由分量颜色值表示时,每个分量值可以单独计算。对于如图1A所示的位置(0.99,0.99),应用图1C的样本掩码会导致颜色值S’具有RGB值(0.0,1.0,0.0)。如果更改样本掩码105,使得颜色A、B和C被省略,并且颜色D被包括在位置(0.99,0.99)处的颜色值S’的计算中,则S’将被计算为具有RGB值(1.0,0.0,0.0)。可以使用诸如105之类的样本掩码来控制组合哪些颜色值以产生最终的单个滤波后的颜色值。

对于某些应用,可能期望仅使用具有某些特性的最接近的颜色值(在此也称为样本)来获得图像中各个位置处的颜色值。例如,为了进行去噪,可能优选的是仅组合寻求颜色值的位置处的Z值的某个Z值(深度值)内的最近的颜色值。在这种情况下,可以创建一样本掩码,该样本掩码仅启用所需Z深度之内的样本。例如,图1B的假定颜色D具有与颜色A、B和C相比距离相机更远的Z深度,因为颜色A、B和C对应于更靠近相机的对象,而颜色D表示更远离相机的对象。如果如图1A所示,位置(0.99,0.99)的Z值更接近A、B和C的z值,而不是D的z值,则位置(0.99,0.99)可对应于更靠近相机的对象。在这种情况下,可以创建样本掩码以排除颜色值D,因为位置(0.99,0.99)可能应具有与较近对象而非较远对象相似的颜色。

在另一个实施例中,样本掩码基于其他属性来启用和禁用样本,所述其他属性例如与存储的用于图像的颜色值相对应的照明(例如,漫反射、镜面反射或阴影)或表面材料(例如,树叶或人的皮肤)。通常,基于在被采样的数据中不存在的附加数据,可以使用样本掩码来滤波所组合的任何类型的样本(不仅是颜色值样本)。例如,可以基于在渲染图像时计算出的深度值来生成样本掩码。在另一示例中,可以使用与在图像的渲染期间生成的图像相对应的数据(例如,通过用于漫反射照明、镜面高光、阴影等的光线投射生成的数据)来创建样本掩码。另外,在渲染期间生成的G缓冲区数据也可以用于创建样本掩码。可以将一个或更多个样本掩码分别应用于图像以获得可用于修改或生成新图像的颜色值。

图1D示出了示例性系统,其包括处理器150和存储器160,用于根据样本掩码选择性地组合颜色值(在本文中也称为纹理像素)。处理器150可以是GPU(图形处理单元),CPU(中央处理单元),FPGA(现场可编程门阵列)或任何其他类型的处理器。在一个实施例中,处理器150是图3所示的并行处理单元300。

处理器150包括执行单元100和纹理单元120。处理器150耦合到存储器160并执行指令,包括使用样本掩码读取纹理像素并对其执行滤波操作的指令。例如,着色器程序可以执行纹理映射操作,该纹理映射操作读取双线性、三线性和/或其他类型的纹理滤波器的纹理像素四边形(特定位置的四个最接近的颜色值)。指令包括一个或更多个操作数。在一个实施例中,操作数之一是位置。与传统纹理映射指令相反,该指令还可以指定样本掩码并将其提供给纹理单元120。

纹理单元120包括纹理状态122,权重计算单元125,纹理像素读取单元130和滤波单元135。纹理状态122存储用于配置权重计算单元125和纹理像素读取单元140的状态信息。状态信息可以由执行单元100写入纹理状态122内的寄存器。执行单元100可以将状态信息提供给纹理单元120。状态信息可以包括纹理图标识符、基地址以及其他纹理图格式信息,其由纹理像素读取单元140使用以生成读取请求。状态信息还可包括提供给权重计算单元125以控制如何计算权重的权重规则。

样本读取单元130生成从样本存储器145读取该位置的一组样本的样本请求。样本读取单元130将该位置转换为样本存储器145中一个或更多个位置的地址。样本存储器145可以是帧缓冲区或存储颜色或另一类型的数据的缓冲区。在一个实施例中,样本掩码不具有位置,并且样本请求从存储器160读取样本掩码。

为了获得图像(诸如纹理图或位图)中的位置处的颜色值,执行单元100至少将位置和样本掩码提供给纹理单元120。位置和样本掩码可以是指令的操作数。在一个实施例中,位置指定图像(诸如纹理图)的2D坐标。纹理像素读取单元140使用位置和状态信息来生成用于读取请求的存储器地址。读取请求被输出到存储器160以从图像或纹理图145读取纹理像素。纹理像素读取单元140可以被配置为使用样本掩码来生成仅针对由样本掩码启用的纹理像素的读取请求。在一个实施例中,根据样本掩码,未被启用的纹理像素不从任何片上高速缓存或片外存储器中检索或读取。在另一个实施例中,检索四边形中的所有最接近的纹理像素,并且样本掩码被用于移除一个或更多个纹理像素以计算滤波后的样本。纹理像素读取单元140可被配置为根据需要格式化从存储器160检索到的纹理像素以与样本掩码对准,以由滤波器单元135进行处理。纹理状态122可提供定义样本掩码的位与四边形中的纹理像素之间的对应关系的信息。

在一个实施例中,读取请求经由接口和/或一个或更多个高速缓存被发送到存储器。例如,可以经由图4A所示的存储器管理单元490将读取请求发送到存储器160。纹理像素可以从存储器160返回到纹理像素读取单元140或直接返回到滤波器单元135。

权重计算单元125接收位置和样本掩码并计算权重。可以使用预定义或编程的函数来计算用于滤波纹理像素的权重。样本掩码确定哪些纹理像素将有助于滤波后的样本,并且可以使用权重规则来控制每个启用的纹理像素所提供的贡献。例如,如前所述,当权重规则指定用于传统纹理映射操作的双线性插值的滤波器权重时,可以计算双线性插值的权重。在另一个示例中,统一权重规则对每个启用的样本应用统一权重。例如,当四边形中的四个纹理像素中的两个被样本掩码禁用时,其余两个纹理像素均由0.5加权。类似地,当四边形中的四个纹理像素之一被样本掩码禁用时,其余三个纹理像素均由0.33加权。权重规则可以由指令(例如,为每个权重规则定义的单独的指令)隐式地或作为单独的操作数来固定、编程或指定。

滤波器单元135接收权重和纹理像素,并计算滤波后的样本。由针对纹理像素计算的权重来缩放纹理像素的每个分量,以生成缩放后的值。缩放后的值可以并行或串行产生。对每个分量的纹理像素的缩放后的值进行求和,以产生滤波后的样本的分量。在一个实施例中,滤波器单元135接收样本掩码并仅为启用的纹理像素产生缩放后的值。滤波后的样本可以存储到存储器160和/或在处理器150内处理。

图1E示出了图1D的处理器150中的示例性权重计算单元125。权重计算单元125包括双线性权重单元126、统一权重单元127和多路复用器128。

双线性权重单元126计算为由样本掩码启用的纹理像素的双线性权重。假设使用二进制样本掩码,则当未启用纹理像素的掩码位时,纹理像素的权重设置为零。使用位置计算启用的权重,其中weightA=(1-x)*(1-y),weightB=x*(1-y),weightC=(1-x)*y,weightD=x*y。可选地,双线性权重单元126可以计算所有双线性权重,然后应用样本掩码以将禁用的权重设置为零。当在滤波器单元135中使用双线性滤波来生成滤波后的样本S’时,双线性权重单元126可以将每个计算出的权重除以N。当N=0时,权重计算单元125可以向滤波器单元135发信号以将S’设置为NaN(不是数字)。可以并行或串行地计算双线性权重。由双线性权重单元126计算出的权重被输入到多路复用器128。当使用双线性插值权重规则时,可以禁用统一权重单元127。

统一权重单元127基于样本掩码来计算统一权重。当使用统一权重规则时,可以禁用双线性权重单元126。可以将每个启用的纹理像素的统一权重计算为根据样本掩码启用的纹理像素的数量的倒数。每个禁用的纹理像素的统一权重被设置为零。由统一权重单元127计算出的权重被输入到多路复用器128。

多路复用器128接收计算出的权重以及权重规则。权重规则用于选择双线性权重或统一权重,以输出到滤波器单元135。在另一个实施例中,定义一个或更多个附加权重规则,并且可以计算一个或更多个附加权重并将其输入到多路复用器128。在一个实施例中,将接收权重,以代替或附加到样品掩码。可以将权重指定为指令的操作数,并且执行单元100将权重提供给纹理单元120。

传统的纹理单元被配置为计算双线性插值的权重,并使用双线性插值的权重生成滤波后的样本。可以用权重计算单元125代替传统的权重计算,以使用样本掩码来选择性地控制对哪些纹理像素进行滤波。使用权重规则来控制选择性启用的纹理像素的贡献也可提供更大的灵活性。

当渲染图像时,还可以生成用于产生样本掩码的附加数据。通常,可以基于不存在于被采样数据中的附加数据将样本掩码用于过滤任何类型的样本,而不仅仅是颜色值。附加数据可以至少包括Z(深度)值,属性或表面材料信息。可以根据由执行单元100执行的着色器程序来处理附加数据,以动态地生成样本掩码以滤波纹理像素。可选地,可以处理附加数据以生成一个或更多个样本掩码缓冲区,这些样本掩码缓冲区存储在存储器中,然后从存储器中读取以滤波纹理像素。样本滤波器单元120用于使用一个或更多个样本掩码来采样图像(存储为纹理图)的至少一部分,以控制哪些样本对滤波后的图像有贡献(或没有贡献)。更具体地说,在一个实施例中,可以使用不同的样本掩码来滤波图像的一部分并产生层。然后可以将各层组合以产生滤波后的图像。

图2A示出了根据样本掩码选择性地组合样本的方法200的示例性流程图。在步骤205,样本读取单元130接收位置和样本掩码。在步骤240,该位置用于从纹理图145获得一组样本(例如,纹理像素)。在一个实施例中,仅从纹理图145读取根据样本掩码启用的纹理像素。可以在样本集合中包括最接近该位置的预定数目的样本(例如,四边形中的四个)。在一个实施例中,集合中的样本数量由以该位置为中心的占用区或限定包括该位置的区域(例如,图像区域)的半径确定。因为在权重计算单元125中将样本掩码未启用的纹理像素的权重设置为零,所以从存储器中读取(或未读取)的禁用的纹理像素将不会对滤波后的样本做出贡献。因此,纹理像素读取单元140不必将禁用的纹理像素设置为零。在另一个实施例中,代替在权重计算单元125中将禁用的纹理像素的权重设置为零,由纹理像素读取单元140将禁用的纹理像素设置为零。

在一个实施例中,代替在步骤205接收样本掩码,纹理像素读取单元140接收用于从存储器160读取样本掩码的附加位置。在另一个实施例中,在步骤205不接收样本掩码,并且该位置用于从存储器160读取样本掩码。

在步骤210,权重计算单元125确定是否使用了双线性权重规则,如果是,则在步骤215,权重计算单元125使用位置和样本掩码计算权重,从而将与禁用的纹理像素相对应的权重设置为零。如果在步骤210,权重计算单元125确定使用了统一权重规则,则在步骤225,权重计算单元125使用样本掩码来计算权重。在其他实施例中,可以使用附加的权重规则来计算权重。权重计算单元125将所计算的权重提供给滤波器单元135。

步骤240可以与步骤210和225和/或215并行执行。在步骤245,滤波器单元135通过根据计算出的权重组合样本来计算滤波后的样本。可以通过由相应的计算出的权重缩放每个样本并对结果乘积求和来组合样本。

图2B示出了用于产生用于滤波图像样本的样本掩码的方法250的示例性流程图。在步骤255,渲染图像和数据。图像和数据可各自存储在存储器中的相应缓冲区中。多线程处理器可以被配置为针对多个位置并行地滤波纹理像素。例如,处理器150内的执行单元100可以包括图4A和图5A的一个或更多个可编程流式多处理器(SM)440,每个均包括至少一个纹理单元120。

步骤265包括步骤260和200,并且可以针对多个位置并行执行。在步骤260,处理数据缓冲区以产生样本掩码。在步骤200,处理器150使用样本掩码滤波图像的样本。可以针对不同类型的数据重复步骤265,以产生多个层,所述多个层被组合以产生滤波后的图像。

可以在步骤260处为每个四边形动态地生成样本掩码。例如,可以基于深度值计算样本掩码,使得只有阈值深度内的样本,该位置的深度才对该位置的滤波后的样本有贡献。在另一示例中,可以基于表面材料属性来计算样本掩码,使得仅具有某些属性的样本(例如,对应于人类皮肤的材料)有助于滤波后的样本。

在一个实施例中,当使用动态样本掩码生成技术时,与纹理像素并行地读取数据缓冲区,并且针对每个四边形生成样本掩码。例如,可以使用位置从帧缓冲区读取四边形(例如,样本集),并从Z缓冲区读取数据。可以将对应于位置的Z值(位置Z值)与每个样本的Z值进行比较。然后为位置Z的定义范围内的样本Z值启用样本掩码位,并为超出定义范围的样本Z值禁用样本掩码位。

可以修改传统的纹理单元以选择性地启用/禁用根据滤波器功能组合的样本以产生滤波后的样本。样本掩码控制启用/禁用哪些样本,并且样本掩码还可用于计算输入到滤波器函数的权重。扩展的纹理指令除用于滤波后的样本的位置外,还可用于提供样本掩码。可以将样本掩码显式地提供为操作数,使用位置从样本缓冲区中读取,或使用提供为操作数的附加位置从样本缓冲区中读取。扩展的纹理指令还可以包括定义权重规则的操作数。

可以定义一个或更多个权重规则以基于位置和样本掩码中的至少一个来计算滤波器权重。可以使用与样本分离的数据来生成样本掩码。例如,样本可以是第一类型的数据(例如,颜色),并且用于生成样本掩码的数据可以是第二类型的数据(例如,深度)。可以从帧缓冲区读取样本,并且可以从深度(Z缓冲区)或模板缓冲区读取用于生成样本掩码的数据。在一个实施例中,滤波器单元135执行三线性滤波,并且可以将不同的样本掩码用于每个mip(multum in parvo)水平。

通过使用纹理单元内的样本掩码来控制哪些样本对每个滤波后的样本有贡献,可以提高图像滤波性能并且可以减少存储器流量。可以使用权重规则来控制根据样本掩码启用的每个纹理像素提供的贡献。相反,使用常规技术执行图像滤波通常会消耗更多的存储器带宽和寄存器空间,以读取和处理样本。

并行处理架构

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

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

如图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)堆叠在每个设备内。

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

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

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

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

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

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

工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC350通信。XBar370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的GPC 350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。

任务由调度器单元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。

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

图4A示出了根据一个实施例的图3的PPU 300的GPC 350。如图4A所示,每个GPC350包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 350包括管线管理器410、预光栅操作单元(PROP)415、光栅引擎425、工作分配交叉开关(WDX)480、存储器管理单元(MMU)490以及一个或更多个数据处理集群(DPC)420。应当理解,图4A的GPC 350可以包括代替图4A中所示单元的其他硬件单元或除图4A中所示单元之外的其他硬件单元。

在一个实施例中,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中的至少一个以实现神经网络模型和/或计算管线。

PROP单元415被配置为将由光栅引擎425和DPC 420生成的数据路由到光栅操作(ROP)单元,结合图4B更详细地描述。PROP单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。

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

包括在GPC 350中的每个DPC 420包括M管线控制器(MPC)430、图元引擎435和一个或更多个SM 440。MPC 430控制DPC 420的操作,将从管线管理器410接收到的数据包路由到DPC 420中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 440。

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

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

图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的同步动态随机存取存储器或其他类型的持久存储器。

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

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

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

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

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

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。尽管在图4B中ROP单元450被包括在存储器分区单元380内,但是在其他实施例中,ROP单元450可以在存储器分区单元380之外。例如,ROP单元450可以驻留在GPC 350或另一个单元中。

图5A示出了根据一个实施例的图4A的流式多处理器440。如图5A所示,SM 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元(SFU)552、一个或更多个加载/存储单元(LSU)554、互连网络580、共享存储器/L1高速缓存570。

如上所述,工作分配单元325调度任务以在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、SFU 552和LSU554)。

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

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

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

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

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

张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。

在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA 9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。

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

每个SM 440还包括N个LSU 554,其实现共享存储器/L1高速缓存570和寄存器文件520之间的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、共享存储器/L1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和共享存储器/L1高速缓存570中的存储器位置。

共享存储器/L1高速缓存570是片上存储器阵列,其允许数据存储和SM 440与图元引擎435之间以及SM 440中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存570包括128KB的存储容量并且在从SM 440到存储器分区单元380的路径中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存储器/L1高速缓存570、L2高速缓存460和存储器304中的一个或更多个是后备存储。

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

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

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

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

示例性计算系统

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

图5B是根据一个实施例的使用图3的PPU 300实现的处理系统500的概念图。示例性系统500可以被配置为实现图2A中所示的方法200。处理系统500包括CPU 530、交换机510和多个PPU 300中以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU300和CPU 530的连接的数量可以改变。交换机510在互连302和CPU 530之间接口。PPU 300、存储器304和NVLink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。

在另一个实施例(未示出)中,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互连或者片上或裸晶上互连。

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

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

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

图5C示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现图2A中所示的方法200。

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

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

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

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

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

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

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

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

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

图6是根据一个实施例的由图3的PPU 300实现的图形处理管线600的概念图。图形处理管线600是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由

如图6所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。

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

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

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

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

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

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

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

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

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

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

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

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

应用本文公开的一种或更多种技术产生的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可以直接耦合到生成或渲染图像的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接地耦合到系统或处理器。此类网络的示例包括因特网、移动电信网络、WIFI网络以及任何其他有线和/或无线网络系统。当显示设备间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。这种流传输允许例如在服务器上或在数据中心中执行渲染图像的视频游戏或其他应用程序,并且渲染的图像可以在与服务器或数据中心物理上分开的一个或更多个用户设备(例如计算机,视频游戏控制台,智能手机,其他移动设备等)上传输和显示。因此,本文公开的技术可以应用于增强流传输的图像并增强流传输图像的服务,例如NVIDIA GeForce Now(GFN),Google Stadia等。

机器学习

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

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

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

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

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

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

此外,应用本文公开的一种或更多种技术生成的图像可以用于训练、测试或证明用于识别现实世界中的对象和环境的深度神经网络(DNN)。这样的图像可以包括道路、工厂、建筑物、城市环境、农村环境、人类、动物以及任何其他物理对象或真实环境的场景。这样的图像可以用于训练、测试或认证在机器或机器人中使用的DNN,以操纵、处理或修改现实世界中的物理对象。此外,此类图像可用于训练、测试或认证在自主车辆中使用的DNN,以在现实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术产生的图像可以用于向这些机器、机器人和车辆的用户传达信息。

注意,本文描述的技术可以体现在存储在计算机可读介质中的可执行指令中,以供基于处理器的指令执行机器、系统、装置或设备使用或与其结合使用。本领域技术人员将认识到,对于一些实施例,可以包括各种类型的计算机可读介质来存储数据。如本文所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适的介质中的一种或更多种,使得指令执行机器、系统、装置或设备可以从计算机可读介质中读取(或获取)指令并执行用于执行所描述的实施例的指令。合适的存储格式包括电子、磁、光和电磁格式中的一种或更多种。传统的示例性计算机可读介质的非穷举列表包括:便携式计算机盘;随机存取存储器(RAM);只读存储器(ROM);可擦除可编程只读存储器(EPROM);闪存设备;光存储设备,包括便携式光盘(CD)、便携式数字视频盘(DVD)等。

应当理解,附图中示出的组件的布置是出于说明的目的,并且其他布置也是可能的。例如,本文描述的一个或更多个元件可以全部或部分地实现为电子硬件组件。其他元件可以用软件、硬件或软件和硬件的组合来实现。此外,可以组合这些其他元件中的部分或全部,可以完全省略一些其他元件,并且可以添加附加组件,同时仍实现本文所述的功能。因此,本文描述的主题可以以许多不同的变型体现,并且所有这样的变型都被认为在权利要求的范围内。

为了促进对本文所描述的主题的理解,根据动作序列描述了许多方面。本领域技术人员将认识到,各种动作可以由专用电路或电路,由一个或更多个处理器执行的程序指令,或两者的结合来执行。本文对任何动作序列的描述并不旨在暗示必须遵循为执行该序列而描述的特定顺序。除非本文另外指出或与上下文明显矛盾,否则本文描述的所有方法可以以任何合适的顺序执行。

在描述主题的上下文中(特别是在所附权利要求的上下文中),术语“一”和“一个”和“该”以及类似引用的使用应解释为涵盖单数形式和复数形式,除非本文另有说明或与上下文明显矛盾。术语“至少一个”之后是一个或更多个项目的列表(例如,“A和B中的至少一个”)应解释为是指从所列项目(A或B)中选择的一个项目或所列项目(A和B)的两个或更多个的任意组合,除非本文另有说明或与上下文明显矛盾。此外,前述描述仅出于说明的目的,而非出于限制的目的,因为所寻求的保护范围由阐述的权利要求及其等同形式限定。除非另有说明,否则本文提供的任何和所有示例或示例性语言(例如“诸如”)的使用仅旨在更好地说明主题,并且不对主题的范围构成限制。在权利要求书和书面描述中,术语“基于”和其他类似的短语的使用表示产生结果的条件,并不旨在排除产生该结果的任何其他条件。说明书中的任何语言都不应解释为指示任何未要求保护的要素对于实施所要求保护的发明是必不可少的。

技术分类

06120113806464