以目标采样率的自适应采样的制作方法

    专利查询2022-08-17  98


    以目标采样率的自适应采样
    1.要求优先权
    2.本技术要求于2020年11月2日提交的标题为“使用具有伪随机特性的固定预算进行光线追踪的自适应采样(adaptive sampling for ray-tracing using a fixed budget with pseudorandom properties)”的美国临时申请no.63/108,643,以及于2020年12月18日提交的标题为“用于使用固定预算渲染的二的幂自适应采样(power-of-two adaptive sampling for rendering using a fixed budget)”的美国临时申请no.63/127,488的权益,这两个申请的全部内容通过引用合并于此。


    背景技术:

    3.交互式图形系统提供有限的实时渲染能力,迫使图像质量与帧速率之间的折衷。不是简单地增加每个像素的每像素样本(spp)的数量以改善图像质量,而是自适应采样分布整个渲染图像的样本的固定预算,从而将更多样本分配给将最受益于将更多和更少样本分配至其他像素的像素。常规的自适应采样技术使用重要性图(其是与渲染的图像一样大的阵列)来识别将最受益于更多样本的像素。每一像素的重要性值通常不是整数,且每一像素的所得样本数目被向上舍入或截短以确定每一像素的整数数目的样本。通过向上舍入或截短来产生整数值导致“阶梯式”分布。阶梯式分布通常不随时间取平均以等于重要性图,且因此就固定预算而言可能无法实现想要的图像质量。需要解决这些问题和/或与现有技术相关联的其他问题。


    技术实现要素:

    4.本公开的实施例涉及以目标采样率的自适应采样。公开了以匹配重要性图的方式在图像平面上分布样本同时还尝试满足图像上的目标平均每像素采样率(例如,固定预算)以使得不超过固定预算的系统和方法。目标(平均)每像素采样率可以基于期望的帧速率或图像质量来确定。使用随机值对分配给每个像素的样本的数量进行量化,使得经量化分布与诸如上述的常规技术相比更平滑。
    5.与以较高采样率渲染所有像素相比,满足目标采样率减少了渲染每一图像的计算力。因此,满足目标采样率可以有利地允许渲染系统在提供相同的视觉体验质量的同时以更高的帧速率操作。不受帧速率限制的渲染系统可有利地在较低功率下操作。自适应着色通常应用于渲染图形基元,包含二维(2d)图形基元和三维(3d)图形基元。
    6.公开了一种用于自适应采样的方法、计算机可读介质和系统,其包括:基于图像的目标每像素采样率来确定图像的样本的总数,根据重要性图跨图像中包括的像素分布样本的总数,以产生用于图像的初始采样图,以及使用每像素随机值对所述初始采样图进行量化以产生所述图像的采样图,所述采样图包括用于所述图像中的每个像素的整数数量的样本。
    附图说明
    7.以下参照附图详细描述用于自适应采样的本系统和方法,其中:
    8.图1a示出了使用现有技术生成的重要性图和采样图。
    9.图1b示出了适合用于实现本公开的一些实施例的采样图。
    10.图1c示出了适用于实现本公开的一些实施例的重要性图和采样图。
    11.图1d示出了根据实施例的自适应采样图。
    12.图1e示出了适合用于实现本公开的一些实施例的自适应二的幂采样图。
    13.图1f示出了适合用于实现本公开的一些实施例的方法的流程图。
    14.图2a示出了适合用于实现本公开的一些实施例的示例自适应采样系统的框图。
    15.图2b示出了适用于实现本公开的一些实施例的另一种方法的流程图。
    16.图2c示出了根据实施例的使用二的幂采样率进行自适应采样的方法的流程图。
    17.图3a示出了根据实施例的重要性图和自适应采样图。
    18.图3b示出了根据实施例的自适应采样图。
    19.图3c示出了使用现有技术生成的现有技术采样图。
    20.图4示出了适合用于实现本公开的一些实施例的示例并行处理单元。
    21.图5a为使用图4的ppu实现的处理系统的概念图,其适用于实现本公开的一些实施例。
    22.图5b示出了其中可以实现不同先前实施例的不同架构和/或功能的示例性系统。
    23.图5c示出了在至少一个实施例中可以用于训练和利用机器学习的示例性系统的组件。
    24.图6a是适用于实现本公开的一些实施例的由图4的ppu实现的图形处理管线的概念图。
    25.图6b示出了适用于实现本公开的一些实施例的示例性流式传输系统。
    具体实施方式
    26.公开了涉及以目标采样率自适应采样的系统和方法。目标采样率可以基于期望的帧速率或图像质量来确定。目标采样率被应用于每图像(或帧)的像素数目以计算样本的总数。在实施例中,目标采样率不是整数并且被表示为浮点数以最佳地对应于实时帧速率。然后,以基于重要性图的方式在图像上分布样本的总数,并且针对每个像素将样本的总数量化为整数采样率。使用随机值执行量化以产生紧密匹配重要性图的分布的分布。
    27.图1a示出了重要性图100和使用现有技术生成的基于阈值的采样图105。重要性图通常与要渲染的图像一样大,并且定义图像中的每个像素的重要性或优先级值。所述值可用于确定应使用多少样本来产生每一像素的最终值。重要性图100的较亮区域对应于较高值,较暗区域对应于较低值。理想采样图将具有与重要性图100相对应的采样率——随着采样率和/或重要性值增大和/或减小而平滑地变化。
    28.在实施例中,重要性图100是全分辨率图像的下采样版本,在这种情况下,应当使用最近邻滤波、或双线性滤波、或一些更高阶滤波器来访问重要性图100。使用常规技术基于重要性图100生成基于阈值的采样图105。
    29.在示例中,当目标采样率指定每像素样本的平均数目d=4.2时,每一像素应平均
    接收4.2个样本,且样本应根据重要性图100在像素上展开。基于阈值的采样图105具有每像素4.22的平均采样率。基于阈值的采样图105基于重要性图100使用round()或floor()来计算,其产生“阶梯式(staircased)”分布。
    30.图1b示出了适合用于实现本公开的一些实施例的采样图。基于阈值的二的幂采样图110具有4.05的每像素平均采样率,且包括限于等于二的幂值(2i,其中i为非负整数)的采样率。与基于阈值的采样图105相比,阶梯在基于阈值的二的幂采样图110中更明显。当使用低偏差序列(lds)进行采样时,二的幂值可以是优选的。
    31.阈值化可能不总是平均接近d的目标(平均)每像素采样率。例如,如果基于重要性图,所有像素都具有采样率=2.45,则每个像素被分配2个样本,而如果所有像素都具有采样率=2.55,则每个像素被分配3个样本。未能匹配目标每像素采样率可导致硬件资源的使用不足或过度使用,在此情况下,应用程序可能不满足其实时要求。当像素采样率被约束为是二的幂的值时,则当使用阈值化时,目标每像素采样率可能甚至更难以匹配。
    32.图1c示出了适用于实现本公开的一些实施例的重要性图和采样图。每像素重要性值是10、80、5和5。当目标采样率是每像素d=5个样本时,样本的数量分别被计算为2、16、1和1。当d=2.5时,样本的数量被计算为1、8和两个其他整数值。当使用阈值化时,两个其他值均可等于0或1。然而,将其他值中的一个设置为0并且将另一个设置为1将产生更接近目标采样率的平均采样率。遗憾的是,将两个底部像素的采样率确定为两个不同值是顺序操作,因为一者的值取决于另一者。相比之下,使用阈值化向上或向下舍入到最近的整数可针对所有像素并行地执行,但产生两个0或两个1,这是不希望的。如本文进一步描述的,可并行执行的量化技术还可计算采样率,其平均到较接近目标采样率的值且紧密匹配重要性图。
    33.图1d示出了根据实施例的自适应采样图120。基于重要性图100和用于量化每像素采样值的随机值来计算自适应采样图120。与也基于重要性图100计算的基于阈值的采样图105相比,自适应采样图120更平滑并且更紧密地对应于重要性图100。自适应采样图120中的每像素采样值n(x,y)通过首先计算作为目标采样率d与图像(和重要性图)维度w和h的乘积的图像的样本的总数来计算。样本的总数表示要跨图像中的所有像素分布的样本的总预算。对图像的重要性值i(x,y)求和以产生重要性总和s=∑i(x,y)。然后,因子被计算为样本的总数(例如,d、w和h的乘积)除以重要性总和。因此,因子是dwh/s。或者,可将每像素平均重要性(ipp)计算为重要性总和除以图像维度的乘积,ipp=s/wh。然后,因子被计算为d/ipp=dwh/s。对于图像中的所有像素计算一次因子,且可将其视为自适应采样算法的第一步骤。重要性值和/或每像素采样值可以针对每个图像和/或随时间而变化。例如,帧序列可包括图像序列、每图像重要性值和/或每图像随机值。
    34.可以对所有像素并行地执行第二步骤。可通过用因子缩放每个像素的重要性值来计算初始采样图,以产生每个像素的初始采样率n_initial(x,y)=因子i(x,y)。重要性值乘以因子将样本的总数分布于所有像素上,且确保不超过初始采样图的目标采样率。
    35.通常,初始采样图n_initial(x,y)中的所有值将不是整数,并且最终采样率应该是整数,因为渲染是使用整数采样率执行的。因此,初始采样图的非整数值被量化以产生自适应采样图n(x,y)中的整数采样率。可通过将每一值舍入到最近的较低整数(例如,下截断(floor operation))或使用常规舍入函数来量化该值。然而,常规舍入产生与图1a中所示
    的基于阈值的采样图105中所示的阈值化类似的结果。在实施例中,而是使用每像素随机值来量化初始采样率。
    36.更具体来说,如果随机数(在0与1之间)小于或等于分数部分,那么可移除每一初始采样率的分数部分,且可将附加样本添加到浮点值的剩余整数部分。例如,如果像素的初始采样率为5.25,那么使用随机数r∈[0,1]来确定使用5个还是6个样本作为像素的采样率。随机数可以即时计算或在包含随机值的纹理中查找。如果r》0.25,则初始采样率被量化为5个样本,否则,初始采样率被量化为6个样本。
    [0037]
    图1e示出了适合用于实现本公开的一些实施例的自适应二的幂采样图125。与自适应采样图120相比,使用每像素随机值将初始采样率量化为二的幂的值。与基于阈值的二的幂采样图110相比,自适应二的幂采样图125更平滑并且更紧密地对应于重要性图100。
    [0038]
    有利地,可以独立地量化每个像素的初始采样率,因此可以并行地量化初始采样率。此外,样本的总数与所有像素的经量化采样率的总和之间的任何误差随着时间而减小,因为分数部分充当控制量化结果的分布的概率值(递增或不递增)。换句话说,对于任何特定初始采样率值,将存在具有等于初始采样率值的整数部分的值和等于递增一的整数部分的值的经量化采样率的分布。更具体地,对于0.25的分数部分,整数部分平均增加25%的时间,而不递增75%的时间。
    [0039]
    相比之下,使用常规阈值化技术(其中等于5.25的所有采样率被量化为5或6),使用随机数的量化致使等于5.25的大多数初始采样率变为5且其他初始采样率变为6。在另一示例中,使用常规阈值化来量化等于2.45到2的所有采样率可导致硬件资源的使用不足,而量化等于2.55到3的所有采样率可导致无法满足目标帧速率。使用随机值来量化初始采样图产生更好地匹配重要性图的分布的分布,并且可以更容易地满足目标帧速率和/或目标采样率。因为可以并行地针对所有像素执行初始采样图的生成并且可以并行地针对所有像素执行量化,所以可以快速地产生自适应采样——实现实时帧速率。
    [0040]
    表1包括用于可针对每一像素并行地执行的自适应采样技术的伪代码。在第一步骤中为重要性图计算ipp和因子之后,在第二步骤中计算初始采样图。初始采样图包括用于每个像素的spp_float值。spp_float值被分离成用于量化的整数部分和分数部分。整数部分(whole_samples)等于截断的spp_float(下截断)。分数部分(fraction)是spp_float的被截断的部分。将每个像素的分数部分与零和一(包括零和一)之间的随机数进行比较。
    [0041]
    表1:自适应采样伪码
    [0042][0043]
    与常规阈值化技术相比,基于n_initial(x,y)的分数部分(或spp_float(x,y))与随机值的比较,用于每一像素的整数数目的样本递增或不递增。在实施例中,通过随机函数或正交阵列采样来生成每像素随机值。在实施例中,每像素随机值包括随机纹理、多抖动纹理、蓝色噪声纹理、红色噪声纹理等。
    [0044]
    现在将根据用户的期望阐述关于可实现前述框架的不同可选架构和特征的更说明性信息。应强烈注意的是,以下信息是出于说明性目的阐述的并且不应被解释为以任何方式进行限制。以下特征中的任一个可以可选地结合有或不排除所描述的其他特征。
    [0045]
    图1f示出了适合用于实现本公开的一些实施例的方法150的流程图。本文描述的方法150的每个框包括可使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,不同功能可由执行存储在存储器中的指令的处理器执行。方法150还可以体现为存储在计算机存储介质上的计算机可用指令。仅举几例,该方法可以由独立应用、服务或托管服务(独立地或与另一托管服务组合)、或另一产品的插件来提供。此外,方法150可附加地或替代地由任何一个系统或系统的任何组合来执行,包括但不限于本文描述的那些系统。此外,本领域普通技术人员将理解,执行方法150的任何系统在本公开的实施例的范围和精神内。
    [0046]
    在步骤155,基于图像的目标每像素采样率(d)来确定图像的样本的总数。在实施例中,基于渲染帧速率和目标帧速率来计算目标每像素采样率。在实施例中,样本的总数是目标每像素采样率与图像的尺寸的乘积。在实施例中,样本的总数被计算为dwh,其中w是图像的宽度并且h是图像的高度。
    [0047]
    在步骤160,根据重要性图,跨图像中包括的像素分布样本的总数,以产生图像的初始采样图。在实施例中,对图像中的像素的至少一部分并行地执行步骤160。在实施例中,对重要性图中的每像素值进行求和以产生重要性总和s=∑i(x,y)。用于分布样本的总数的因子可通过将样本的总数除以s来计算。在实施例中,每像素平均重要性ipp被计算为s/wh并且因子被计算为d/ipp。在实施例中,d、s、ipp和因子是浮点数。在实施例中,通过将因
    子乘以像素的重要性图中的每像素值以产生像素的初始采样率,来跨图像中的每个像素分布样本的总数。在实施例中,在跨像素分配样本总数的剩余部分之前,将最小数量的样本分配给每个像素。在实施例中,样本的总数的剩余部分根据重要性图在像素上分布。例如,等于一的最小数目的样本可分布到每一像素。
    [0048]
    在实施例中,最小采样率大于零且小于目标采样率。在实施例中,用于采样图的样本总数n(x,y)理想地满足以下:
    [0049]
    ∑n(x,y)=dwh=mwh (d-m)wh
    ꢀꢀꢀꢀꢀꢀꢀ
    等式(1)
    [0050]
    其中mwh是分配给像素的样本的最小数量,(d-m)wh是根据重要性图分配给像素的剩余部分。加和并归一化图像上的重要性,产生
    [0051][0052]
    变量k被定义为剩余部分除以重要性总和k=(d-m)wh/s,其中k等于m=0的因子,并且将k代入等式(2)导致∑ki(x,y)=(d-m)wh。
    [0053]
    在步骤165,使用每像素随机值对初始采样图进行量化以产生图像的采样图,该采样图包括图像中的每个像素的整数数量的样本。在实施例中,整数是二的幂的值。在实施例中,针对图像中的像素的至少一部分并行地执行步骤165。在实施例中,图像是包括在帧序列(例如,视频)中的帧,并且每像素随机值针对序列中的每个帧而变化。在实施例中,每像素随机值从纹理映射读取或由函数生成。在实施例中,根据采样图渲染场景以产生帧。在实施例中,使用光线追踪来渲染场景,并且采样图控制针对帧中的每个像素投射的光线的数量。
    [0054]
    在实施例中,量化初始采样图包括:对于图像中的每个像素,将包括在初始采样图中的像素的初始采样率分成整数部分和分数部分。当随机值小于分数部分时,整数部分递增以产生包括在像素的采样图中的经量化采样率。当随机值不小于分数部分时,经量化采样率被设置为等于整数部分。
    [0055]
    在实施例中,使用以下等式对初始采样率n(x,y)进行量化:
    [0056][0057]
    其中frac()返回其自变量的分数部分,并且如果a为真则(a?b:c)返回b,否则返回c。在示例中,如果ki(x,y)=5.25,即,针对某个像素的理想样本数量,则等式(3)中的表达式的第一部分是样本的最小数量m加上分数部分frac(5.25)=0.25,意味着以0.25的概率增加1,并且以0.75的概率增加0。每像素随机值r(x,y,t)可随时间(t)变化。
    [0058]
    为了在没有任何随机值的情况下使用舍入将初始采样率量化成2的幂数,可以使用于下方程:
    [0059]
    n(x,y)=b δround(f)
    ꢀꢀꢀꢀꢀꢀꢀꢀ
    等式(4)
    [0060]
    其中b=2
    p
    是每像素单独计算的2的幂数,并且f∈[0,1]。在大多数情况下,δ=b,这意味着n(x,y)是b或2b,即2的幂。在实施例中,样本的最小数量m是二的幂的数。取决于初始采样率是零还是大于零来不同地计算变量f、b和δ:
    [0061]
    如果
    [0062]
    如果
    [0063][0064]
    注意,当c是零时,f减小到f=ki(x,y),因为m必须是零并且b=0并且δ=1。当经量化采样率限于2的幂数时,假定函数h(n)返回正整数n中的第一高位(例如,前导一)。当c》0时,b变为等于c的最大2的幂或更小,并且使用舍入来将n(x,y)量化为b或2b。例如,如果m=0并且c=14.2,则h(14.2)=3并且因此b=23=8。因此,n=16,因为δ=8并且f=(14.2-8)/8=0.775并且round(0.775)=1。
    [0065]
    然而,使用舍入操作来量化采样率通常导致阶梯式量化,例如图1b中所示的基于阈值的二的幂采样图110。等式(6)可用于使用每像素随机数将采样率量化到二的幂值,从而产生更准确的采样图,例如图1e中所示的自适应二的幂采样图125。根据等式(5)计算b、f和δ的值。
    [0066]
    n(x,y)=b (r(x,y,t)《f?δ∶0)
    ꢀꢀꢀꢀꢀꢀ
    等式(6)
    [0067]
    图2a示出了适合用于实现本公开的一些实施例的示例自适应采样系统的框图。应当理解,本文所述的这种和其他布置仅作为示例被阐述。除了所示的那些布置和元素之外或代替所示的那些布置和元素,可以使用其他布置和元素(例如,机器、接口、功能、顺序、功能分组等),并且一些元素可以一起省略。进一步,本文描述的许多元件是可被实现为分立或分布式组件或结合其他组件、和在任何合适的组合和位置中实现的功能实体。本文中描述为由实体执行的不同功能可由硬件、固件和/或软件执行。例如,不同功能可由执行存储在存储器中的指令的处理器执行。此外,本领域普通技术人员将理解,执行自适应采样系统200的操作的任何系统在本公开的实施例的范围和精神内。
    [0068]
    自适应采样系统200包括存储器210、采样图生成单元220和处理器225。在实施例中,由采样图生成单元220执行的操作可以由处理器225执行。存储器210存储随机纹理230、重要性图205和采样图215。采样图生成单元220接收采样控制,所述采样控制可包括目标采样率(d)、目标帧速率、图像维度(w和h)、最小采样率(m)以及二的幂采样启用/禁用中的一个或更多个。采样控制还可指定要用于量化采样图的随机纹理、随机函数或随机数字的其他源。
    [0069]
    在实施例中,随机纹理230小于要被渲染的图像,并且使用repeat作为纹理包装(warp)模式在图像上重复。随机纹理230能够以任何方式生成,并且可以包括纯随机值、抖动、多抖动、正交阵列采样、蓝色噪声随机值、红色噪声随机值等。在实施例中,随机纹理230是三维随机纹理,其中第三维度是帧数或时间。因此,随机数的分布将逐帧地改变,使得自适应采样图215随着帧数的增加朝向重要性图平均。例如,3d蓝色噪声纹理可以与维度256x256x128像素一起使用,其中256x256是空间维度,128是帧(或时间)维度。对于第一帧,3d纹理的第一256x256切片被采样图生成单元220用来量化采样图。对于第二帧,使用第二256x 256切片,等等。当到达最后一帧时,采样图生成单元220可重复从第一切片开始的序列。
    [0070]
    在实施例中,采样图生成单元220基于由采样控制限定的目标每像素采样率确定
    样本的总数。在实施例中,目标每像素采样率是浮点数。然后,根据重要性图跨像素分布样本的总数,以产生初始采样图。在实施例中,在根据重要性图在像素上分布小于最小数量与像素数量的乘积的样本总数的剩余部分之前,将最小数量的样本分配给所有像素。初始采样图可以作为采样图215存储在存储器210中。采样图生成单元220然后使用随机纹理230中的每像素随机值对初始采样图进行量化以产生采样图。
    [0071]
    在实施例中,初始采样图(ism)包括对于每个像素指定像素的目标样本数量ism(x,y)的每像素浮点值。当像素的随机数小于ism(x,y)的分数部分,即,random(x,y)<frac(ism(x,y))时,0和1之间的每像素随机值有效地用于选择floor(ism(x,y))。否则,像素的采样率被量化为ceil(ism(x,y))。采样图可以替换初始采样图并且作为采样图215或者作为单独的采样图被存储在存储器210中。经量化采样图存储每个像素的整数值,并且当启用二的幂采样时,整数值被约束为二的幂数。
    [0072]
    处理器225接收采样图和使用采样图渲染的场景的3d数据以产生帧。在实施例中,使用光线追踪来渲染场景,并且采样图控制针对帧中的每个像素投射的光线的数量。在实施例中,使用光栅化或其他技术(包括混合技术)来渲染场景。
    [0073]
    图2b示出了根据实施例的用于自适应采样的方法240的流程图。本文所述的方法240的每个框包括可使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,不同功能可由执行存储在存储器中的指令的处理器执行。方法240还可以体现为存储在计算机存储介质上的计算机可用指令。仅举几例,方法240可以由独立应用、服务或托管服务(独立地或与另一托管服务组合)或另一产品的插件来提供。此外,通过示例的方式,关于图2a的系统来描述方法240。然而,此方法可另外或替代地由任一系统或系统的任何组合执行,所述系统包含(但不限于)本文中所描述的系统。此外,本领域普通技术人员将理解,执行方法240的任何系统在本公开的实施例的范围和精神内。
    [0074]
    方法240包括来自方法150的步骤155和165。在步骤155之后,方法240确定是否需要每像素最小数量的样本。可由用户和/或应用程序指定每像素样本的最小数目。如果在步骤255需要每像素最小数量的样本,则在步骤260,将最小数量的样本分配给图像中包括的每个像素。在步骤265,根据重要性图,将样本总数的剩余部分跨图像中包括的像素分布,以产生图像的初始采样图。当样本的最小数目为零时,样本的总数的剩余部分等于样本的总数。在步骤265之后,方法前进到步骤165以量化初始采样图。
    [0075]
    图2c示出了根据实施例的使用二的幂采样率进行自适应采样的方法250的流程图。本文描述的方法250的每个框包括可使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,不同功能可由执行存储在存储器中的指令的处理器执行。方法250还可体现为存储在计算机存储介质上的计算机可用指令。仅举几例,方法250可由独立应用、服务或托管服务(独立地或与另一托管服务组合)或另一产品的插件来提供。另外,通过示例的方式,相对于图2a的系统来描述方法250。然而,此方法可另外或替代地由任一系统或系统的任何组合执行,所述系统包含(但不限于)本文中所描述的系统。此外,本领域普通技术人员将理解,执行方法250的任何系统都在本公开的实施例的范围和精神内。
    [0076]
    方法250包括来自方法150的步骤155。在步骤270,根据重要性图,跨图像中包括的像素分布样本的总数,以产生图像的初始采样图。在实施例中,针对每个像素计算的初始采样率是
    [0077]
    在步骤275处,如果不使用随机值量化,那么在步骤280处,使用等式(4)来量化初始采样图,以在没有任何随机值的情况下使用舍入将初始采样率量化为二的幂数。否则,在步骤285,根据等式(6)使用每像素随机值来量化初始采样图,以产生图像的采样图,其包括图像中的每个像素的二的幂整数数量的样本。对于步骤280和285,可根据等式(5)计算每像素初始采样率的b、f和δ的值。
    [0078]
    图3a示出了根据实施例的重要性图300和自适应采样图320。与重要性图300的较暗区域相比,重要性图300的较亮区域指示需要更多样本的像素。重要性图300可以通过从去噪算法馈送方差来生成,或者可以随着时间计算指数加权方差。在实施例中,基于注视或眼睛跟踪数据来生成重要性图,以集中用户看向的样本。通过使用多抖动随机纹理量化初始采样图并且针对每个像素产生整数的样本来生成自适应采样图320。在实施例中,使用方法150或250生成自适应采样图320。
    [0079]
    图3b示出了根据实施例的自适应采样图。通过使用蓝色噪声纹理量化初始采样图并且针对每个像素产生整数数目的样本来生成自适应采样图350。在实施例中,使用方法150或250来生成自适应采样图350。
    [0080]
    图3c示出了使用现有技术生成的现有技术采样图。使用常规技术生成基于阈值的采样图360。基于阈值的采样图360中的样本的“阶梯式”分布与自适应采样图320和350的平滑分布形成对比。在基于阈值的采样图360中,黑色对应于每像素零样本(spp),深灰色对应于1spp,浅灰色对应于2spp,并且白色对应于3spp。用于量化浮点采样值的阈值对于整个图像和对于图像序列是固定的。相比之下,使用随机值来量化浮点采样值不仅产生经量化采样值之间的更平滑过渡,而且还可更好地匹配每像素目标采样率。特别地,当与用于使用3d随机纹理产生的自适应采样图的每像素数量的样本相比较时,使用阈值化产生的采样图通常不随着时间平均以匹配输入重要性图300。
    [0081]
    基于阈值的采样图360导致较低质量的样本放置,这可能严重地降低渲染的图像质量。另外,基于阈值的采样图360可对应于与样本的每像素目标数目相比更少或更高的每像素样本数目。较低的每像素样本数可导致渲染资源的使用不足。较高的每像素样本数可导致渲染资源的过度使用,从而可能导致不满足目标帧速率。使用随机数量化每像素采样值产生自适应采样图,其平均地并且随着时间更接近地匹配每像素目标样本数。
    [0082]
    并行处理架构
    [0083]
    图4示出了根据实施例的并行处理单元(ppu)400。ppu 400可用于实现自适应采样系统200。ppu 400可用于实现自适应采样系统200中的处理器225和采样图生成单元220中的一个或更多个。ppu 400可被配置为执行方法150和/或250。
    [0084]
    在一个实施例中,ppu 400是在一个或更多个集成电路器件上实现的多线程处理器。ppu 400是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由ppu 400执行的指令集的实例。在一个实施例中,ppu 400是图形处理单元(gpu),其被配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成用于在显示设备上显示的二维(2d)图像数据。在其他实施例中,ppu 400可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
    [0085]
    一个或更多个ppu 400可以被配置为加速数千个高性能计算(hpc)、数据中心、云
    计算和机器学习应用。ppu 400可被配置为加速众多深度学习系统和应用,用于自主车辆、模拟、计算图形(诸如光线或路径跟踪)、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
    [0086]
    如图4所示,ppu 400包括输入/输出(i/o)单元405、前端单元415、调度器单元420、工作分配单元425、集线器430、交叉开关(xbar)470、一个或更多个通用处理集群(gpc)450以及一个或更多个存储器分区单元480。ppu 400可以经由一个或更多个高速nvlink 410互连连接到主机处理器或其他ppu 400。ppu 400可以经由互连402连接到主机处理器或其他外围设备。ppu 400还可以连接到包括多个存储器设备的本地存储器404。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(dram)设备。dram设备可以被配置为高带宽存储器(hbm)子系统,其中多个dram裸晶(die)堆叠在每个设备内。
    [0087]
    nvlink 410互连使得系统能够扩展并且包括与一个或更多个cpu结合的一个或更多个ppu 400,支持ppu 400和cpu之间的高速缓存一致性,以及cpu主控。数据和/或命令可以由nvlink 410通过集线器430发送到ppu 400的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5b更详细地描述nvlink 410。
    [0088]
    i/o单元405被配置为通过互连402从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。i/o单元405可以经由互连402直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,i/o单元405可以经由互连402与一个或更多个其他处理器(例如,一个或更多个ppu 400)通信。在一个实施例中,i/o单元405实现外围组件互连高速(pcie)接口,用于通过pcie总线进行通信,并且互连402是pcie总线。在替代的实施例中,i/o单元405可以实现其他类型的已知接口,用于与外部设备进行通信。
    [0089]
    i/o单元405对经由互连402接收的数据包进行解码。在一个实施例中,数据包表示被配置为使ppu 400执行各种操作的命令。i/o单元405按照命令指定将解码的命令发送到ppu 400的各种其他单元。例如,一些命令可以被发送到前端单元415。其他命令可以被发送到集线器430或ppu400的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,i/o单元405被配置为在ppu400的各种逻辑单元之间和之中路由通信。
    [0090]
    在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向ppu 400提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和ppu400两者访问(例如,读/写)的区域。例如,i/o单元405可以被配置为经由通过互连402传输的存储器请求访问连接到互连402的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向ppu400发送指向命令流开始的指针。前端单元415接收指向一个或更多个命令流的指针。前端单元415管理一个或更多个流,从流读取命令并将命令转发到ppu 400的各个单元。
    [0091]
    前端单元415耦合到调度器单元420,其配置各种gpc 450以处理由一个或更多个流定义的任务。调度器单元420被配置为跟踪与由调度器单元420管理的各种任务相关的状
    态信息。状态可以指示任务被指派给哪个gpc 450,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元420管理一个或更多个gpc 450上的多个任务的执行。
    [0092]
    调度器单元420耦合到工作分配单元425,其被配置为分派任务以在gpc 450上执行。工作分配单元425可以跟踪从调度器单元420接收到的若干调度的任务。在一个实施例中,工作分配单元425为每个gpc 450管理待处理(pending)任务池和活动任务池。当gpc 450完成任务的执行时,该任务从gpc 450的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在gpc 450上执行。如果gpc 450上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从gpc 450中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在gpc 450上执行。
    [0093]
    在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在ppu 400上执行。在一个实施例中,多个计算应用由ppu400同时执行,并且ppu 400为多个计算应用程序提供隔离、服务质量(qos)和独立地址空间。应用程序可以生成指令(例如,api调用),其使得驱动程序内核生成一个或更多个任务以由ppu 400执行。驱动程序内核将任务输出到正在由ppu 400处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。该任务可被分配到gpc450内的一个或更多个处理单元,并且指令被调度用于通过至少一个线程束来执行。
    [0094]
    工作分配单元425经由xbar470与一个或更多个gpc450通信。xbar470是将ppu 400的单元中的许多单元耦合到ppu 400的其他单元的互连网络。例如,xbar470可被配置为将工作分配单元425耦接至特定的gpc450。尽管未明确示出,ppu 400的一个或更多个其他单元也可以经由集线器430连接到xbar 470。
    [0095]
    任务由调度单元420管理并且由工作分配单元425分派给gpc 450。gpc 450被配置为处理任务并且产生结果。结果可以由gpc 450内的其他任务消耗,经由xbar 470路由到不同的gpc 450,或者存储在存储器404中。结果可经由存储器分区单元480写入到存储器404,存储器分区单元480实施用于将数据读取到存储器404和将数据从存储器404写入的存储器接口。可以经由nv链路410将结果传输至另一个ppu 400或cpu。在实施例中,ppu 400包含数目u的存储器分区单元480,其等于耦合到ppu400的存储器404的单独且不同的存储器装置的数目。每个gpc 450可以包括存储器管理单元以提供虚拟地址到物理地址的转换、存储器保护和存储器请求的仲裁。在一个实施例中,存储器管理单元提供用于执行虚拟地址到存储器404中的物理地址的转换的一个或更多个转换后备缓冲器(tlb)。
    [0096]
    在一个实施例中,存储器分区单元480包含光栅操作(rop)单元、二级(l2)高速缓存存储器和耦合到存储器404的存储器接口。存储器接口可以实现32、64、128、1024位数据总线等,用于高速数据传输。ppu 400可连接到多达y个存储器设备,例如高带宽存储器堆栈或图形双数据速率、版本5、同步动态随机存取存储器或其他类型的持久存储装置。在实施例中,存储器接口实现hbm2存储器接口,并且y等于半u。在实施例中,hbm2存储器堆栈位于与ppu 400相同的物理封装上,与传统的gddr5sdram系统相比提供了显著的功率和面积节省。在实施例中,每个hbm2堆叠包括四个存储器管芯并且y等于4,其中每个hbm2堆叠包括每
    管芯两个128位沟道(总共8个沟道)以及1024位的数据总线宽度。
    [0097]
    在实施例中,存储器404支持单错误校正双错误检测(secded)错误校正码(ecc)以保护数据。ecc为对数据破坏敏感的计算应用提供了更高的可靠性。可靠性在其中ppu 400处理非常大的数据集和/或运行应用达扩展时段的大规模群集计算环境中尤其重要。
    [0098]
    在实施例中,ppu 400实现多级存储器层次结构。在一个实施例中,存储器分区单元480支持统一存储器来为cpu和ppu 400存储器提供单个统一虚拟地址空间,从而实现虚拟存储器系统之间的数据共享。在实施例中,跟踪ppu 400对位于其他处理器上的存储器的访问的频率以确保存储器页面被移动到ppu 400的更频繁地访问页面的物理存储器。在一个实施例中,nvlink410支持地址转换服务,允许ppu 400直接访问cpu的页表并且提供ppu 400对cpu存储器的完全访问。
    [0099]
    在实施例中,复制引擎在多个ppu 400之间或者在ppu 400和cpu之间传输数据。复制引擎可以生成未映射到页表中的地址的页错误。存储器分区单元480可接着服务于页错误,将地址映射到页表中,其后复制引擎可执行传送。在常规系统中,对于多个处理器之间的多个复制引擎操作,存储器被钉住(例如,不可分页),从而大大减少了可用存储器。在硬件页面故障的情况下,可将地址传递到复制引擎,而不用担心存储器页面是否驻留,且复制过程是透明的。
    [0100]
    来自存储器404或其他系统存储器的数据可由存储器分割单元480提取且存储在l2高速缓存存储器460中,所述l2高速缓存存储器460位于芯片上且在不同gpc450之间共享。如图所示,每一存储器分区单元480包含与对应存储器404相关联的l2高速缓存存储器的一部分。较低级高速缓存然后可在gpc450内的不同单元中实现。例如,gpc 450中的每个处理单元可以实现一级(l1)缓存。l1高速缓存是专用于特定处理单元的私有存储器。l2高速缓存460耦合到存储器接口470和xbar470,并且来自l2高速缓存的数据可被获取并存储在l1高速缓存中的每一个中以供处理。
    [0101]
    在实施例中,每个gpc 450内的处理单元实现simd(单指令、多数据)架构,其中一组线程(例如,线程束)中的每个线程被配置成用于基于相同的指令集来处理不同的数据集。线程组中的所有线程执行相同的指令。在另一个实施例中,处理单元实现simt(单指令,多线程)架构,其中一组线程中的每个线程被配置用于基于相同的指令集来处理不同的数据集合,但是其中允许一组线程中的各个线程在执行期间分叉。在一个实施例中,为每一线程束维持程序计数器、调用栈和执行状态,从而在线程束内的线程发散时实现线程束与线程束内的串行执行之间的并发性。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而实现所有线程之间、线程束内和线程束之间的相等并发性。当针对每个单独的线程保持执行状态时,为了最大效率,可以收敛并且并行执行执行相同指令的线程。
    [0102]
    协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动api支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软
    件重用。
    [0103]
    协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
    [0104]
    每个处理单元包括大量(例如128个等)不同的处理核心(例如功能单元),其可以包括完全管线化的、单精度、双精度和/或混合精度,并且其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的ieee 754-2008标准。在一个实施例中,核心包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
    [0105]
    张量核心被配置为执行矩阵运算。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于在神经网络训练和推理期间的卷积运算的gemm(矩阵-矩阵乘法)。在一个实施例中,每个张量核心在4
    ×
    4矩阵上运算并且执行矩阵乘法和累加运算d=a
    ×
    b c,其中a、b、c和d是4
    ×
    4矩阵。
    [0106]
    在实施例中,矩阵乘法输入a和b可以是整数、定点或浮点矩阵,而累加矩阵c和d可以是相等或更高位宽的整数、定点或浮点矩阵。在实施例中,张量核心在具有32位整数累加的一位、四位或八位整数输入数据上运算。8位整数矩阵乘法需要1024个运算并且导致全精度乘积,然后使用32位整数加法将其与8x8x16矩阵乘法的其他中间乘积进行累加。在一个实施例中,张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4
    ×4×
    4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。api(诸如cuda 9c api)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自cuda-c 程序的张量核心。在cuda层面,线程束级接口假定16
    ×
    16尺寸矩阵跨越线程束的全部32个线程。
    [0107]
    每个处理单元还包括执行特殊函数(例如,属性评估、倒数平方根等)的m个特殊函数单元(sfu)。在一个实施例中,sfu可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,sfu可以包括被配置为执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器404加载纹理映射(例如,纹理像素的2d阵列)并且对纹理映射进行采样以产生经采样的纹理值,用于在由处理单元执行的着色器程序中使用。在一个实施例中,纹理映射被存储在共享存储器其可以包括或包含l1高速缓存中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理映射)的过滤操作。在一个实施例中,每个处理单元包括两个纹理单元。
    [0108]
    每个处理单元还包括n个存取单元(lsu),其实现共享存储器和寄存器文件之间的加载和存储操作。每个处理单元包括将每个核心连接到寄存器文件以及将lsu连接到寄存器文件、共享存储器的互连网络。在一个实施例中,互连网络是交叉开关,其可以被配置为将任何核心连接到寄存器文件中的任何寄存器,以及将lsu连接到寄存器文件和共享存储器中的存储器位置。
    [0109]
    共享存储器是片上存储器阵列,其允许数据存储和处理单元之间以及处理单元中
    的线程之间的通信。在一个实施例中,共享存储器包括128kb的存储容量并且在从每个处理单元到存储器分区单元480的路径中。共享存储器可以用于高速缓存读取和写入。共享存储器、l1高速缓存、l2高速缓存和存储器404中的一个或更多个是后备存储。
    [0110]
    将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器内的集成使共享存储器起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
    [0111]
    当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元425将线程块直接指派并分配给gpc 450内的处理单元。线程执行相同的程序,使用计算中的唯一线程id来确保每个线程生成唯一结果,使用处理单元执行程序并执行计算,使用共享存储器以在线程之间通信,以及使用lsu通过共享存储器和存储器分区单元480读取和写入全局存储器。当被配置用于通用并行计算时,处理单元还可以写入调度器单元420可用来在处理单元上启动新工作的命令。
    [0112]
    ppu 400可以各自包括以下各项和/或被配置成用于执行以下功能,一个或更多个处理核心和/或其组件,如张量核心(tc)、张量处理单元(tpu)、像素视觉核心(pvc)、光线追踪(rt)核心、视觉处理单元(vpu)、图形处理群集(gpc)、纹理处理群集(tpc)、流式多处理器(sm)、树横向单元(ttu)、人工智能加速器(aia)、深度学习加速器(dla)、算术逻辑单元(alu)、专用集成电路(asic)、浮点单元(fpu)、输入/输出(i/o)元件、外围组件互连(pci)或外围组件互连快速(pcie)元件等。
    [0113]
    ppu 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,ppu 300包含在单个半导体衬底上。在另一个实施例中,ppu 300与一个或更多个其他器件(诸如附加ppu 300、存储器304、精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数字-模拟转换器(dac)等)一起被包括在片上系统(soc)上。
    [0114]
    在一个实施例中,ppu 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备304。图形卡可以被配置为与台式计算机的主板上的pcie插槽接口。在又一个实施例中,ppu 300可以是包含在主板的芯片集中的集成图形处理单元(igpu)或并行处理器。在又一实施例中,ppu 400可在可重新配置的硬件中实现。在又一实施例中,ppu 400的部分可在可重新配置的硬件中实现。
    [0115]
    示例性计算系统
    [0116]
    具有多个gpu和cpu的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能gpu加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
    [0117]
    图5a是根据一个实施例的使用图4的ppu 400实现的处理系统500的概念图。示例性系统565可以被配置为实现图1f中所示的方法150,图2b中所示的方法240和/或图2c中所
    示的方法250。处理系统500包括cpu530、交换机510和多个ppu 400以及相应的存储器404。
    [0118]
    nvlink 410提供每个ppu 400之间的高速通信链路。尽管图5b中示出了特定数量的nvlink 410和互连402连接,但是连接到每个ppu 400和cpu 530的连接的数量可以改变。交换机510在互连402和cpu 530之间接口。ppu 400、存储器404和nvlink 410可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
    [0119]
    在另一个实施例(未示出)中,nvlink 410在每个ppu 400和cpu530之间提供一个或更多个高速通信链路,并且交换机510在互连402和每个ppu 400之间进行接口。ppu 400、存储器404和互连402可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连402在每个ppu 400和cpu 530之间提供一个或更多个通信链路,并且交换机510使用nvlink 410在每个ppu 400之间进行接口,以在ppu400之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,nvlink 410在ppu 400和cpu 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连402在每个ppu 400之间直接地提供一个或更多个通信链路。可以使用与nvlink 410相同的协议将一个或更多个nvlink 410高速通信链路实现为物理nvlink互连或者片上或裸晶上互连。
    [0120]
    在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且ppu 400和/或存储器404中的每一个可以是封装器件。在一个实施例中,cpu 530、交换机510和并行处理模块525位于单个半导体平台上。
    [0121]
    在一个实施例中,每个nvlink 410的信令速率是20到25千兆位/秒,并且每个ppu 400包括六个nvlink 410接口(如图5a所示,每个ppu 400包括五个nvlink 410接口)。每个nvlink 410在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供400千兆位/秒。当cpu530还包括一个或更多个nvlink 410接口时,nvlink 410可专门用于如图5a所示的ppu到ppu通信,或者ppu到ppu以及ppu到cpu的某种组合。
    [0122]
    在一个实施例中,nvlink 410允许从cpu 530到每个ppu 400的存储器404的直接加载/存储/原子访问。在一个实施例中,nvlink 410支持一致性操作,允许从存储器404读取的数据被存储在cpu 530的高速缓存分层结构中,减少了cpu 530的高速缓存访问延迟。在一个实施例中,nvlink 410包括对地址转换服务(ats)的支持,允许ppu 400直接访问cpu 530内的页表。一个或更多个nvlink 410还可以被配置为以低功率模式操作。
    [0123]
    图5b示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现图1f中所示的方法150、图2b中所示的方法240和/或图2c中所示的方法250。
    [0124]
    如所示,提供了一个系统565,该系统包括连接至通信总线575上的至少一个中央处理单元530。通信总线575可以直接或间接耦合以下设备中的一个或更多个:主存储器540、网络接口535、一个或更多个cpu530、一个或更多个显示设备545、一个或更多个输入设备560、交换机510和并行处理系统525。通信总线575可使用任何合适的协议来实现,并且可
    表示一个或更多个链路或总线,诸如地址总线、数据总线、控制总线或其组合。通信总线575可包括一个或更多个总线或链路类型,诸如工业标准体系结构(isa)总线、扩展工业标准体系结构(eisa)总线、视频电子标准协会(vesa)总线、外围组件互连(pci)总线、外围组件互连高速(pcie)总线、超传输和/或另一类型的总线或链路。在一些实施例中,部件之间存在直接连接。例如,cpu 530可直接连接到主存储器540。进一步,cpu530可直接连接到并行处理系统525。在组件之间存在直接或点对点连接的情况下,通信总线575可以包括用于执行连接的pcie链路。在这些示例中,pci总线不需要被包括在系统565中。
    [0125]
    尽管图5c的各个框被示出为通过通信总线575与线连接,但这不旨在是限制性的并且仅是为了清楚起见。例如,在一些实施例中,诸如显示设备545之类的呈现组件可以被认为是诸如输入设备560之类的i/o组件(例如,如果显示器是触摸屏)。作为另一实例,cpu530和/或并行处理系统525可包含存储器(例如,主存储器540可表示除了并行处理系统525、cpu530和/或其他组件之外的存储设备)。换言之,图5c的计算设备仅是说明性的。在如“工作站”、“服务器”、“膝上型计算机”、“台式计算机”、“平板计算机”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ecu)”、“虚拟现实系统”和/或其他设备或系统类型的此类类别之间不做区分,因为所有都被考虑在图5c的计算设备的范围内。
    [0126]
    系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取各种计算机可读介质的形式。计算机可读介质可以是可由系统565访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质,以及可移除和不可移除介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。
    [0127]
    计算机存储介质可以包括以用于存储信息(如计算机可读指令、数据结构、程序模块和/或其他数据类型)的任何方法或技术实现的易失性和非易失性介质和/或可移动和不可移动介质两者。例如,主存储器540可存储计算机可读指令(例如,表示程序和/或程序元素,例如操作系统)。计算机存储介质可以包括但不限于ram、rom、eeprom、闪存或其他存储器技术,cd-rom、数字通用盘(dvd)或其他光盘存储、磁带盒、磁带,磁盘存储装置或其他磁存储设备,或可用于存储所要信息且可由系统565存取的任何其他媒体。如本文所使用的,计算机存储介质不包括信号本身。
    [0128]
    计算机存储介质可以将计算机可读指令、数据结构、程序模块、和/或其他数据类型具体化为调制数据信号(如载波或其他传输机制)并且包括任何信息递送介质。术语“调制数据信号”可以指代以编码信号中的信息的方式设置或改变其一个或更多个特性的信号。作为示例而非限制,计算机存储介质可包括有线介质(诸如有线网络或直接有线连接)和无线介质(诸如声学、rf、红外和其他无线介质)。以上任何内容的组合也应包含在计算机可读介质的范围内。
    [0129]
    计算机程序当被执行时使系统565能够执行不同功能。cpu530可经配置以执行计算机可读指令中的至少一些以控制系统565的一个或更多个组件以执行本文中所描述的方法和/或过程中的一个或更多个。cpu530可以各自包括能够同时处理多个软件线程的一个或更多个核(例如,一个、两个、四个、八个、二十八个、七十二个等)。cpu530可包含任何类型的处理器,且可取决于所实施的系统565的类型而包含不同类型的处理器(例如,具有用于移动装置的较少核心的处理器和用于服务器的具有较多核心的处理器)。例如,取决于系统565的类型,处理器可以是使用精简指令集计算(risc)实现的高级risc机器(arm)处理器或
    使用复杂指令集计算(cisc)实现的x86处理器。除了一个或更多个微处理器或补充协处理器(诸如数学协处理器)之外,系统565还可以包括一个或更多个cpu530。
    [0130]
    除了cpu 530之外或替代cpu 530,并行处理模块525可以被配置成用于执行计算机可读指令中的至少一些计算机可读指令以控制系统565的一个或更多个部件执行在此描述的方法和/或过程中的一个或更多个。并行处理模块525可由系统565用来渲染图形(例如,3d图形)或执行通用计算。例如,并行处理模块525可用于gpu上的通用计算(gpgpu)。在实施例中,一个或更多个cpu 530和/或并行处理模块525可以离散地或联合地执行方法、过程和/或其部分的任何组合。
    [0131]
    系统565还包括一个或更多个输入设备560、并行处理系统525、一个或更多个显示设备545。一个或更多个显示设备545可包含显示器(例如,监视器、触摸屏、电视屏幕、平视显示器(hud)、其他显示器类型或其组合)、扬声器和/或其他呈现组件。一个或更多个显示设备545可从其他组件(例如,并行处理系统525、cpu530等)接收数据,且输出所述数据(例如,作为图像、视频、声音等)。
    [0132]
    网络接口535可以使系统565能够逻辑地耦合至其他设备,包括输入设备560、一个或更多个显示设备545和/或其他组件,其中一些可以内置到(例如,集成在)系统565中。说明性输入设备560包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等。输入设备560可提供处理空中姿态、语音或由用户生成的其他生理输入的自然用户界面(nui)。在一些情况下,可将输入发射到适当的网络元件以供进一步处理。nui可实现与系统565的显示相关联的语音识别、指示笔识别、面部识别、生物计量识别、屏幕上和屏幕附近的姿态识别、空中姿态、头部和眼睛跟踪、以及触摸识别(如以下更详细描述的)的任何组合。系统565可以包括用于手势检测和识别的深度相机,诸如立体相机系统、红外相机系统、rgb相机系统、触摸屏技术和这些的组合。另外,系统565可以包括使得能够检测运动的加速度计或陀螺仪(例如,作为惯性测量单元(imu)的一部分)。在一些示例中,系统565可以使用加速度计或陀螺仪的输出来渲染沉浸式增强现实或虚拟现实。
    [0133]
    进一步地,系统565可以通过网络接口535耦合至网络(例如,电信网络、局域网(lan)、无线网络、广域网(wan)(如互联网)、对等网络、电缆网络等)以用于通信目的。系统565可以包括在分布式网络和/或云计算环境内。
    [0134]
    网络接口535可以包括一个或更多个接收器、发射器、和/或收发器,该一个或更多个接收器、发射器、和/或收发器使系统565能够经由电子通信网络(包括有线和/或无线通信)与其他计算设备通信。网络接口535可包含用于实现经由若干不同网络中的任一者的通信的组件和功能性,所述网络例如无线网络(例如,wi-fi、z-波、蓝牙、蓝牙le、zigbee等)、有线网络(例如,经由以太网或infiniband通信)、低功率广域网(例如,lorawan、sigfox等)和/或互联网。
    [0135]
    系统565还可以包括辅助存储装置(未示出)。辅助存储装置包括例如硬盘驱动器和/或可移动存储驱动器,表示软盘驱动器、磁带驱动器、致密盘驱动器、数字通用盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移动存储驱动器以公知的方式从可移动存储单元读取和/或向可移动存储单元写入。系统565还可包括硬接线电源、电池电源或其组合(未示出)。电源可以向系统565提供功率以使得系统565的组件能够操作。
    [0136]
    前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。
    或者,不同模块还可根据用户的需要单独地或在半导体平台的不同组合中定位。虽然以上已经描述了不同实施例,但应理解的是,这些实施例仅通过举例而非限制的方式呈现。由此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
    [0137]
    示例网络环境
    [0138]
    适合用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(nas)、其他后端设备、和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图5a的处理系统500和/或图5b的示例性系统565的一个或更多个实例上实现——例如,每个设备可以包括处理系统500和/或示例性系统565的类似组件、特征和/或功能。
    [0139]
    网络环境的组件可以经由一个或更多个网络彼此通信,所述网络可以是有线的、无线的或两者。网络可以包括多个网络或多个网络中的一个网络。例如,网络可包括一个或更多个广域网(wan)、一个或更多个局域网(lan)、一个或更多个公共网络诸如互联网和/或公共交换电话网(pstn)和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或者甚至接入点(以及其他组件)的组件可以提供无线连接。
    [0140]
    兼容的网络环境可以包括一个或更多个对等网络环境(在这种情况下,服务器可以不包括在网络环境中)和一个或更多个客户端-服务器网络环境(在这种情况下,一个或更多个服务器可以包括在网络环境中)。在对等网络环境中,本文相对于服务器所描述的功能可在任何数量的客户端设备上实现。
    [0141]
    在至少一个实施例中,网络环境可以包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可包括框架层、工作调度器、资源管理器和在一个或更多个服务器上实现的分布式文件系统,所述服务器可包括一个或更多个核心网服务器和/或边缘服务器。框架层可包括支持软件层的软件和/或应用层的一个或更多个应用的框架。所述软件或应用程序可分别包含基于网络的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于网络的服务软件或应用(例如,通过经由一个或更多个应用编程接口(api)访问服务软件和/或应用)。框架层可以是但不限于自由和开源软件网络应用框架的类型,诸如可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)。
    [0142]
    基于云的网络环境可以提供执行在此描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合的云计算和/或云存储。这些不同功能中的任何功能可以分布在来自(例如,可以分布在州、地区、国家、地球等上的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环境)。
    [0143]
    客户端设备可以包括图5b的示例处理系统500和/或图5c的示例性系统565的组件、特征和功能中的至少一些。作为示例而非限制,客户机设备可被实现为个人计算机(pc)、膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机、个人数字助理(pda)、mp3播放器、虚拟现实耳机、全球定位系统(gps)或设备、视频播放器、相机、监视设备或系统、车辆、船、飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备、游戏设备
    或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、电器、消费电子设备、工作站、边缘设备、这些描绘的设备的任何组合,或任何其他合适的设备。
    [0144]
    机器学习
    [0145]
    在处理器(诸如ppu 400)上开发的深度神经网络(dnn)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在对象识别和分类方面进行训练,以便在识别基本对象、遮挡对象等同时还有为对象分配情景时变得更加智能和高效。
    [0146]
    在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
    [0147]
    深度神经网络(dnn)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,dnn模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高级别的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
    [0148]
    一旦dnn经过训练,dnn就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(dnn从给定输入中提取有用信息的过程)包括识别存入atm机中的支票存款上的手写数字,识别照片中朋友的图像,向超过五千万用户提供电影推荐,在无人驾驶汽车中识别和分类不同类型的汽车、行人和道路危险,或实时翻译人类言语。
    [0149]
    在训练期间,数据在前向传播阶段流过dnn,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到dnn正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由ppu 400支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、检测情绪、识别推荐、识别和翻译语音以及通常推理出新的信息。
    [0150]
    神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百tflops的性能,ppu 400是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
    [0151]
    此外,应用在此公开的技术中的一项或更多项生成的图像可以用于训练、测试或认证用于识别现实世界中的对象和环境的dnn。此类图像可包含道路、工厂、建筑物、城市环境、农村环境、人、动物和任何其他物理对象或真实世界环境的场景。此类图像可用于训练、
    测试或认证在机器或机器人中采用于操纵、处理或修改现实世界中的物理对象的dnn。此外,此类图像可以用于训练、测试或证明在自动车辆中采用的dnn,以便在真实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术生成的图像可用于向这种机器、机器人和车辆的用户传达信息。
    [0152]
    图5c示出了根据至少一个实施例的可以用于训练和利用机器学习的示例性系统555的组件。如将讨论的,各种组件可以由计算设备和资源的不同组合或单个计算系统来提供,其可以在单个实体或多个实体的控制下。进一步,各方面可由不同实体触发、发起或请求。在至少一个实施例中,神经网络的训练可由与提供商环境506相关联的提供商指示,而在至少一个实施例中,训练可由通过客户端设备502或其他这样的资源访问提供商环境的客户或其他用户请求。在至少一个实施例中,训练数据(或将由经训练的神经网络分析的数据)可由提供商、用户或第三方内容提供商524来提供。在至少一个实施例中,客户端设备502可以是代表用户导航的车辆或对象,例如,其可以提交请求和/或接收辅助设备导航的指令。
    [0153]
    在至少一个实施例中,请求能够跨至少一个网络504被提交,以由提供商环境506接收。在至少一个实施例中,客户端设备可以是使得用户能够生成并发送这样的请求的任何适当的电子和/或计算设备,诸如但不限于台式计算机、笔记本计算机、计算机服务器、智能电话、平板计算机、游戏控制台(便携式或以其他方式)、计算机处理器、计算逻辑和机顶盒。网络504可包括用于传送请求或其他此类数据的任何合适的网络,如可包括互联网、内联网、以太网、蜂窝网络、局域网(lan)、广域网(wan)、个域网(pan)、对等体之间的直接无线连接的自组织网络等。
    [0154]
    在至少一个实施例中,可以在接口层508处接收请求,在本示例中,该接口层可以将数据转发至训练和推理管理器532。训练和推理管理器532可以是包括用于管理对应于数据或内容的请求和服务的硬件和软件的系统或服务,在至少一个实施例中,训练和推理管理器532可以接收训练神经网络的请求,并且可以向训练模块512提供请求的数据。在至少一个实施例中,训练模块512可选择要使用的适当模型或神经网络(如果该请求未指定),并且可使用相关训练数据来训练模型。在至少一个实施例中,训练数据可以是存储在训练数据储存库514中、从客户端设备502接收或从第三方提供商524获得的一批数据。在至少一个实施例中,训练模块512可以负责训练数据。神经网络可以是任何适当的网络,诸如循环神经网络(rnn)或卷积神经网络(cnn)。一旦神经网络被训练和成功评估,经训练的神经网络可被存储在例如可为用户、应用或服务等存储不同模型或网络的模型储存库516中。在至少一个实施例中,可存在用于单个应用或实体的多个模型,如可基于多个不同因素利用的。
    [0155]
    在至少一个实施例中,在随后的时间点,可以从客户端设备502(或另一个这样的设备)接收对至少部分地由经训练的神经网络确定或影响的内容(例如,路径确定)或数据的请求。此请求可包括例如将使用神经网络来处理以获得一个或更多个推理或其他输出值、分类或预测的输入数据,或对于至少一个实施例,输入数据可以由接口层508接收并且被引导至推理模块518,尽管也可以使用不同的系统或服务。在至少一个实施例中,如果尚未本地存储到推理模块518,则推理模块518可以从模型储存库516获得适当的经训练的网络,诸如如本文中所讨论的经训练的深度神经网络(dnn)。推理模块518可以将数据作为输入提供给经训练的网络,经训练的网络然后可以生成一个或更多个推理作为输出。这可包
    括例如输入数据的实例的分类。在至少一个实施例中,推理随后可被传送到客户端设备502以用于向用户显示或其他通信。在至少一个实施例中,用户的上下文数据也可被存储到用户上下文数据储存库522,该用户上下文数据储存库522可包括关于用户的数据,该数据在生成推理或确定在获得实例之后要返回给用户的数据时可用作对网络的输入。在至少一个实施例中,可以包括输入或推理数据中的至少一些的相关数据也可以被存储到本地数据库534中,用于处理将来的请求。在至少一个实施例中,用户可以使用账户信息或其他信息来访问提供商环境的资源或功能。在至少一个实施例中,如果许可且可用,还可以收集用户数据并用于进一步训练模型,以便为未来的请求提供更准确的推理。在至少一个实施例中,可通过用户界面接收针对在客户端设备502上执行的机器学习应用526的请求,并通过同一界面显示结果。客户端设备可包括用于生成请求和处理结果或响应的资源(诸如处理器528和存储器562),以及用于存储机器学习应用526的数据的至少一个数据存储元件552。
    [0156]
    在至少一个实施例中,处理器528(或训练模块512或推理模块518的处理器)将是中央处理单元(cpu)。然而,如所提及的,此类环境中的资源可利用gpu来处理至少某些类型的请求的数据。利用数千个核心,gpu(诸如ppu 300)被设计成处理基本上并行的工作负载,并且因此已经在用于训练神经网络和生成预测的深度学习中变得流行。虽然针对离线构建使用gpu已经使得能够更快地训练更大且更复杂的模型,但离线生成预测意味着请求时输入特征不能被使用,或者必须针对特征的所有排列生成预测并且将其存储在查找表中以便服务实时请求。如果深度学习框架支持cpu模式并且模型足够小且简单以便以合理的延迟在cpu上执行前馈,则cpu实例上的服务可以托管模型。在这种情况下,训练可以在gpu上离线完成,并且推理可以在cpu上实时完成。如果cpu方法不可行,那么服务可在gpu实例上运行。然而,因为gpu具有与cpu不同的性能和成本特性,所以运行将运行时算法卸载到gpu的服务可能需要与基于cpu的服务不同地设计gpu。
    [0157]
    在至少一个实施例中,可以从客户端设备502提供视频数据以供提供商环境506中增强。在至少一个实施例中,视频数据可被处理以在客户端设备502上进行增强。在至少一个实施例中,视频数据可以从第三方内容提供商524流式传输并且由第三方内容提供商524、提供商环境506或客户端设备502增强。在至少一个实施例中,视频数据可从客户端设备502提供以用作提供商环境506中的训练数据。
    [0158]
    在至少一个实施例中,有监督和/或无监督训练可以由客户端设备502和/或提供商环境506来执行。在至少一个实施例中,提供一组训练数据514(例如,分类的或标记的数据)作为输入以用作训练数据。在至少一个实施例中,训练数据可包括神经网络将被训练所针对的至少一种类型的对象的实例,以及标识该类型的对象的信息。在至少一个实施例中,训练数据可包括各自包括一种类型对象的表示的一组图像,其中每个图像还包括标签、元数据、分类或标识在相应图像中表示的对象类型的其他信息或与标签、元数据、分类或标识在相应图像中表示的对象类型的其他信息相关联。各种其他类型的数据也可被用作训练数据,并且可包括文本数据、音频数据、视频数据等。在至少一个实施例中,训练数据514作为训练输入被提供给训练模块512。在至少一个实施例中,训练模块512可以是包括硬件和软件的系统或服务,诸如用于训练神经网络(或其他模型或算法等)的执行训练应用的一个或更多个计算设备。在至少一个实施例中,训练模块512接收指示要用于训练的模型的类型的指令或请求,在至少一个实施例中,模型可以是用于这样的目的的任何适当的统计模型、网
    络或算法,如可以包括人工神经网络、深度学习算法、学习分类器、贝叶斯网络等。在至少一个实施例中,训练模块512可以从适当的储存库516中选择初始模型或其他未经训练的模型,并利用训练数据514来训练模型,从而生成可以用于对相似类型的数据进行分类的经训练的模型(例如,经训练的深度神经网络),或者生成其他这样的推理。在其中不使用训练数据的至少一个实施例中,仍然可以选择适当的初始模型用于在每训练模块512的输入数据上进行训练。
    [0159]
    在至少一个实施例中,可以用多种不同的方式来训练模型,如可以部分地取决于所选择的模型的类型。在至少一个实施例中,机器学习算法可以被提供有训练数据集,其中模型是由训练过程创建的模型伪像。在至少一个实施例中,训练数据的每个实例包含正确的答案(例如,分类),其可以被称为目标或目标属性。在至少一个实施例中,学习算法在训练数据中找到将输入数据属性映射到目标的模式、要预测的答案,并且输出捕获这些模式的机器学习模型。在至少一个实施例中,然后可以使用机器学习模型来获得关于未为其指定目标的新数据的预测。
    [0160]
    在至少一个实施例中,训练和推理管理器532可以从包括二进制分类、多类别分类、生成和回归模型的机器学习模型的集合中进行选择。在至少一个实施例中,要使用的模型的类型可至少部分地取决于要预测的目标的类型。
    [0161]
    图形处理管线
    [0162]
    在一个实施例中,ppu 400包括图形处理单元(gpu)。ppu 400被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。ppu 400可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
    [0163]
    应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器404)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行api调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在ppu 400内的处理单元上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,处理单元中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的处理单元可以被配置为同时执行不同的着色程序。例如,处理单元的第一子集可以被配置为执行顶点着色程序,而处理单元的第二子集可以被配置为执行像素着色程序。处理单元的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入l2高速缓存460和/或存储器404。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,处理单元的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器404中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
    [0164]
    图6a是根据一个实施例的由图4的ppu 400实现的图形处理管线600的概念图。图
    形处理管线600是被实现以从3d几何数据生成2d计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由api定义的图形处理管线。作为选择,图形处理管线600可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
    [0165]
    如图6a所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,vscc)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
    [0166]
    数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。
    [0167]
    顶点着色阶段620通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,《x,y,z,w》)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,ncd)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。
    [0168]
    图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。
    [0169]
    几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何图元传送到视口scc阶段650。
    [0170]
    在一个实施例中,图形处理管线600可以在流式多处理器和顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口scc阶段650可
    以利用数据。在一个实施例中,由图形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,l1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口scc阶段650可以访问高速缓存中的数据。在一个实施例中,视口scc阶段650和光栅化阶段660被实现为固定功能电路。
    [0171]
    视口scc阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段660。
    [0172]
    光栅化阶段660将3d几何图元转换成2d片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。
    [0173]
    片段着色阶段670通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理映射。片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
    [0174]
    光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(例如,输出数据602)的处理时,可以将像素数据写入渲染对象,诸如帧缓冲区、颜色缓冲区等。
    [0175]
    应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段640)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线600的任何阶段可以由图形处理器(诸如ppu400)内的一个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由可编程硬件单元(诸如ppu 400内的处理单元)来实现。
    [0176]
    图形处理管线600可以经由由主机处理器(诸如cpu)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(api),其定义可以被应用程序利用于生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制ppu 400的操作的多个指令。api为程序员提供抽象,其允许程序员利用专用图形硬件(诸如ppu 400)来生成图形数据而不要求程序员利用ppu 400的特定指令集。应用程序可以包括被路由到ppu 400的设备驱动程序的api调用。设备驱动程序解释api调用并执行各种操作以响应api调用。在一些情况下,设备驱动程序可以通过在cpu上执行指令来执行操作。在其他情况下,
    设备驱动程序可以至少部分地通过利用cpu和ppu 400之间的输入/输出接口在ppu 400上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用ppu400的硬件来实现图形处理管线600。
    [0177]
    可以在ppu 400内执行各种程序以便实现图形处理管线600的各个阶段。例如,设备驱动程序可以启动ppu 400上的内核以在一个处理单元(或多个处理单元)上执行顶点着色阶段620。设备驱动程序(或由ppu 400执行的初始内核)还可启动ppu 400上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在固定单元硬件(诸如在ppu 400内实现的光栅器或数据组装器)上实现。应当领会,在被处理单元上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
    [0178]
    应用在此公开的技术中的一项或更多项生成的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可直接耦合到产生或渲染图像的系统或处理器。在其他实施例中,显示设备可例如经由网络间接耦合到系统或处理器。此类网络的实例包括互联网、移动电信网络、wifi网络、以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或处理器产生的图像可经由网络流式传输到显示设备。这样的流式传输允许例如在服务器上执行渲染图像的视频游戏或其他应用,在数据中心中,或在基于云的计算环境中,并且所渲染的图像将被传输和显示在与服务器或数据中心物理地分开的一个或更多个用户设备(诸如计算机、视频游戏控制台、智能电话、其他移动设备等)上。所以,本文公开的技术可以应用于增强流传输的图像以及增强流传输图像的服务,诸如nvidia geforce now(gfn)、google stadia等。
    [0179]
    示例流式传输系统
    [0180]
    图6b是根据本公开的一些实施例的流式传输系统605的示例系统图。在一个实施例中,流式传输系统605是游戏流式传输系统。图6b包括一个或更多个服务器603(其可以包括与图5a的示例处理系统500和/或图5b的示例性系统565类似的组件、特征和/或功能),一个或更多个客户端设备604(其可以包括与图5a的示例处理系统500和/或图5b的示例性系统565类似的组件、特征和/或功能),以及一个或更多个网络606(其可以类似于本文描述的一个或更多个网络)。在本公开的一些实施例中,系统605可被实现。
    [0181]
    在系统605中,对于游戏会话,一个或更多个客户端设备604可以仅响应于对一个或更多个输入设备的输入接收输入数据,将输入数据传输至一个或更多个服务器603,从一个或更多个服务器603接收经编码的显示数据,并且在显示器624上显示显示数据。如此,将计算上更密集的计算和处理卸载到一个或更多个服务器603(例如,渲染——具体为光线或路径跟踪——以供一个或更多个服务器603的一个或更多个gpu执行游戏会话的图形输出)。换言之,将游戏会话从一个或更多个服务器603流式传输到一个或更多个客户端设备604,由此降低一个或更多个客户端设备604对图形处理和渲染的要求。
    [0182]
    例如,关于游戏会话的实例,客户端设备604可以基于从一个或更多个服务器603接收显示数据在显示器624上显示游戏会话的帧。客户端设备604可以接收到一个或更多个输入设备中的一个的输入并且作为响应生成输入数据。客户机设备604可经由通信接口621并经由一个或更多个网络606(例如,互联网)将输入数据传输到一个或更多个服务器603,并且一个或更多个服务器603可经由通信接口618接收输入数据。cpu可接收输入数据,处理
    输入数据,并将数据传输到gpu,使得gpu产生游戏会话的渲染。例如,输入数据可以表示在比赛中用户的角色的移动、击发武器、重新装载、传球、转动车辆等。渲染组件612可以渲染游戏会话(例如,表示输入数据的结果),并且渲染捕获组件614可以捕获游戏会话的渲染作为显示数据(例如,捕获游戏会话的所渲染的帧的图像数据)。游戏会话的渲染可以包括使用一个或更多个并行处理单元(如gpu)计算的光线或路径跟踪照明和/或阴影效果,该一个或更多个并行处理单元可以进一步采用一个或更多个专用硬件加速器或处理核来执行一个或更多个服务器603的光线或路径跟踪技术。编码器616可接着编码显示数据以产生经编码显示数据,且经编码显示数据可经由通信接口618经由网络606发射到客户端设备604。客户端设备604可以经由通信接口621接收经编码的显示数据,并且解码器622可以对经编码的显示数据进行解码以生成显示数据。客户端设备604可接着经由显示器624显示该显示数据。
    [0183]
    注意的是,在此所描述的技术可以被实现在存储在计算机可读介质中的可执行指令中,以供基于处理器的指令执行机器、系统、设备或装置使用或与其结合使用。所属领域的技术人员将了解,对于一些实施例,可包含不同类型的计算机可读介质用于存储数据。如本文中所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适的介质中的一个或更多个,从而使得指令执行机器、系统、装置或设备可以从计算机可读介质读取(或获取)指令并且执行用于实现所描述的实施例的指令。合适的存储格式包括电子格式、磁性格式、光学格式和电磁格式中的一个或更多个。常规示例性计算机可读介质的非穷举列表包括:便携式计算机盘;随机存取存储器(ram);只读存储器(rom);可擦除可编程只读存储器(eprom);闪存设备;以及光学存储设备,包括便携式致密盘(cd)、便携式数字视频盘(dvd)等。
    [0184]
    应理解的是,附图中所示出的部件的布置是出于说明性目的并且其他布置是可能的。例如,本文中所描述的元件中的一个或更多个可整体或部分地实现为电子硬件组件。其他元件可在软件、硬件或软件和硬件的组合中实施。此外,可以组合这些其他元件中的一些或全部,可以完全省略一些元件,并且可以在仍然实现本文所描述的功能的同时添加附加组件。由此,本文描述的主题可以许多不同的变型来体现,并且所有这样的变型都被设想为在权利要求的范围内。
    [0185]
    为了便于理解在此描述的主题,就动作序列而言描述了许多方面。所属领域的技术人员将认识到,不同动作可由专用电路或电路、由一个或更多个处理器执行的程序指令或由两者的组合来执行。本文中对任何动作序列的描述并不旨在暗示必须遵循所描述的用于执行该序列的特定顺序。除非本文另有指示或上下文明显矛盾,本文所述的所有方法都可以任何合适的顺序进行。
    [0186]
    术语“一个/一种(a)”和“该(the)”以及在描述该主题的上下文中(特别是在以下权利要求的上下文中)的类似参考的使用应被解释为覆盖单数和复数两者,除非在此另外指明或与上下文明显矛盾。跟随有一个或更多个项目的列表(例如,“a和b中的至少一个”)的术语“至少一个”的使用应被解释为意指选自所列出的项目(a或b)的一个项目或所列出的项目(a和b)中的两个或更多个的任何组合,除非本文另有说明或与上下文明显矛盾。此外,前面的描述仅用于说明的目的,而不是用于限制的目的,因为所寻求的保护范围由下文阐述的权利要求及其任何等同物限定。在此提供的任何和所有实例或示例性语言(例如,“诸如”)的使用仅旨在更好地说明该主题,并且不对该主题的范围造成限制,除非另外要求。在权利要求书和书面说明书中使用术语“基于”和指示引起结果的条件的其他类似短语并不旨在排除引起该结果的任何其他条件。说明书中的语言不应被解释为指示任何未要求保护的元素是对于如所要求保护的本发明的实践必不可少的。

    技术特征:
    1.一种用于自适应采样的计算机实现的方法,包括:基于图像的目标每像素采样率来确定用于所述图像的样本的总数;根据重要性图跨所述图像中包括的像素分布所述样本的总数,以产生用于所述图像的初始采样图;以及使用每像素随机值对所述初始采样图进行量化,以产生所述图像的采样图,所述采样图包括用于所述图像中的每个像素的整数数量的样本。2.根据权利要求1所述的计算机实现的方法,其中所述整数数量是二的幂的值。3.根据权利要求1所述的计算机实现的方法,其中针对所述图像中的每个像素并行地执行所述分布和量化。4.根据权利要求1所述的计算机实现的方法,其中所述图像被包括在图像序列中,并且所述每像素随机值针对所述图像序列中的每个图像而变化。5.根据权利要求1所述的计算机实现的方法,其中所述每像素随机值从纹理映射读取或由函数生成。6.根据权利要求1所述的计算机实现的方法,还包括:根据所述采样图渲染场景以产生帧。7.根据权利要求6所述的计算机实现的方法,其中使用光线追踪来渲染所述场景,并且所述采样图控制针对所述帧中的每个像素投射的光线的数量。8.根据权利要求1所述的计算机实现的方法,其中所述样本的总数是所述目标每像素采样率和所述图像的尺寸的乘积。9.根据权利要求1所述的计算机实现的方法,还包括:对所述重要性图中的每像素值求和以产生重要性总和;以及将所述图像的因子计算为样本的总数除以所述重要性总和。10.根据权利要求9所述的计算机实现的方法,其中分布所述样本的总数包括:对于所述图像中的每个像素,将所述因子乘以所述像素的所述重要性图中的所述每像素值,以产生所述像素的初始采样率。11.根据权利要求1所述的计算机实现的方法,其中量化所述初始采样图包括:针对所述图像中的每个像素:将包括在所述初始采样图中的所述像素的初始采样率分成整数部分和分数部分;以及当所述分数部分小于所述随机值时,递增所述整数部分以产生包括在所述像素的所述采样图中的经量化采样率,或者当所述分数部分不小于所述随机值时,将所述经量化采样率设置为等于所述整数部分。12.根据权利要求1所述的计算机实现的方法,其中基于渲染帧速率和目标帧速率计算所述目标每像素采样率。13.根据权利要求1所述的计算机实现的方法,其中分布所述样本的总数包括:在跨所述像素分布所述样本的总数的剩余部分之前,向每个像素分布最小数量的样本。14.根据权利要求1所述的计算机实现的方法,其中对至少一个附加图像、附加重要性图和附加每像素随机值重复所述确定、分布和量化的步骤。15.根据权利要求1所述的计算机实现的方法,其中所述确定、分布和量化的步骤在云
    计算环境内执行。16.根据权利要求1所述的计算机实现的方法,其中所述确定、分布和量化的步骤在服务器上执行或在数据中心中执行,并且所述图像被流传输到用户设备。17.根据权利要求1所述的计算机实现的方法,其中所述图像用于训练、测试或证实在机器、机器人或自主车辆中采用的神经网络。18.根据权利要求1所述的计算机实现的方法,其中所述确定、分布和量化的步骤在包括图形处理单元的部分的虚拟机上执行。19.一种系统,包括:处理器,被配置为:基于图像的目标每像素采样率来确定用于所述图像的样本的总数;根据重要性图跨所述图像中包括的像素分布所述样本的总数,以产生用于所述图像的初始采样图;以及使用每像素随机值对所述初始采样图进行量化,以产生所述图像的采样图,所述采样图包括用于所述图像中的每个像素的整数数量的样本。20.根据权利要求19所述的系统,其中针对所述图像中的每个像素并行地执行所述分布和量化。21.一种非暂态计算机可读介质,其存储用于自适应采样的计算机指令,所述计算机指令在由一个或更多个处理器执行时,使所述一个或更多个处理器执行以下步骤:基于图像的目标每像素采样率来确定用于所述图像的样本的总数;根据重要性图跨所述图像中包括的像素分布所述样本的总数,以产生用于所述图像的初始采样图;以及使用每像素随机值对所述初始采样图进行量化,以产生所述图像的采样图,所述采样图包括用于所述图像中的每个像素的整数数量的样本。

    技术总结
    图像质量可通过基于重要性图渲染图像来改善,该重要性图指示将受益于更多样本的图像区域。自适应采样使用目标采样率和用于图像的重要性图来确定用于图像的每个像素的样本的数量。每个像素的样本数目需要是非负整数值,因此使用每像素随机值来量化每像素采样率。所得到的经量化采样率提供紧密匹配重要性图的样本分布。每像素随机值可随时间变化,使得分布的平均值更紧密地匹配重要性图。布的平均值更紧密地匹配重要性图。布的平均值更紧密地匹配重要性图。


    技术研发人员:T
    受保护的技术使用者:辉达公司
    技术研发日:2021.11.01
    技术公布日:2022/5/25
    转载请注明原文地址:https://tc.8miu.com/read-8953.html

    最新回复(0)