CN115205091A - 动态场景中改进的时间降噪器质量 - Google Patents
动态场景中改进的时间降噪器质量 Download PDFInfo
- Publication number
- CN115205091A CN115205091A CN202210304420.3A CN202210304420A CN115205091A CN 115205091 A CN115205091 A CN 115205091A CN 202210304420 A CN202210304420 A CN 202210304420A CN 115205091 A CN115205091 A CN 115205091A
- Authority
- CN
- China
- Prior art keywords
- pixel
- frame
- value
- algorithm
- determining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000002123 temporal effect Effects 0.000 title abstract description 4
- 239000003638 chemical reducing agent Substances 0.000 title abstract description 3
- 238000000034 method Methods 0.000 claims abstract description 81
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 40
- 238000012935 Averaging Methods 0.000 claims abstract description 18
- 230000015654 memory Effects 0.000 claims description 105
- 230000033001 locomotion Effects 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 7
- 230000000153 supplemental effect Effects 0.000 claims description 4
- 238000012545 processing Methods 0.000 description 69
- 239000012634 fragment Substances 0.000 description 28
- 230000008569 process Effects 0.000 description 28
- 238000003860 storage Methods 0.000 description 23
- 238000004891 communication Methods 0.000 description 20
- 238000005192 partition Methods 0.000 description 20
- 239000000872 buffer Substances 0.000 description 17
- 230000006870 function Effects 0.000 description 17
- 239000011159 matrix material Substances 0.000 description 12
- 238000009877 rendering Methods 0.000 description 10
- 239000004065 semiconductor Substances 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 238000012360 testing method Methods 0.000 description 8
- 238000013519 translation Methods 0.000 description 7
- 230000014616 translation Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 238000002156 mixing Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000001934 delay Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000001052 transient effect Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000010076 replication Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 229920000147 Styrene maleic anhydride Polymers 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000005266 casting Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000003745 diagnosis Methods 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 238000007876 drug discovery Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000012900 molecular simulation Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0007—Image acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/50—Image enhancement or restoration using two or more images, e.g. averaging or subtraction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/70—Denoising; Smoothing
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10016—Video; Image sequence
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2320/00—Control of display operating conditions
- G09G2320/06—Adjustment of display parameters
- G09G2320/0613—The adjustment depending on the type of the information to be displayed
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2320/00—Control of display operating conditions
- G09G2320/10—Special adaptations of display systems for operation with variable images
- G09G2320/103—Detection of image changes, e.g. determination of an index representative of the image change
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2340/00—Aspects of display data processing
- G09G2340/16—Determination of a pixel data signal depending on the signal applied in the previous frame
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Computer Hardware Design (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
本发明公开了动态场景中改进的时间降噪器质量。提出了在计算机生成的视频中发生动态事件时减少时间延迟的装置、系统和技术。在一个实施例中,第一平均算法被用来至少部分地基于之前的像素值来确定像素的显示值。一旦检测到动态事件,就会使用第二平均算法对一组先前的像素值进行平均。基于像素值的第一平均和像素值的第二平均来更新像素值以确定当前像素值。
Description
技术领域
本申请总体上涉及计算机生成图形的改进性能。具体地说,本申请旨在改进对包括具有快速变化值的像素的图像的渲染。
背景技术
由于像素值的快速变化,在计算机生成的视频图形中表示移动对象的像素经常受到噪声的影响。例如,在光源快速改变位置的情况下,由于需要快速更新像素值以补偿阴影效果的计算,在光投射的阴影边缘可能会出现模糊。通常,随时间变化的像素值是基于移动平均线确定的,例如指数移动平均线(EMA)。虽然资源高效,但当像素值在帧之间快速变化时,这种方法会导致延迟。另一种计算像素值的方法是简单移动平均线(SMA),虽然计算成本更高,但当像素值快速变化时,延迟更小。
附图说明
图1A、1B和1C示出了根据至少一个实施例的可以在计算机动画中投射的示例阴影;
图2示出了针对一系列帧上的像素值的指数移动平均计算的示例以及针对一系列帧上的像素值的混合移动平均的示例;
图3A-3F示出了一个或更多个实施例的示例实现方式;
图4示出了一个或更多个实施例的流程图;
图5A-5B示出了一个或更多个实施例的流程图。
图6示出了根据一个实施例的并行处理单元;
图7A示出了根据一个实施例的、图6的并行处理单元内的通用处理集群;
图7B示出了根据一个实施例的、图6的并行处理单元的存储器分区单元;
图8A示出了根据一个实施例的、图7A的流式多处理器;
图8B是根据一个实施例的、使用图6的PPU实现的处理系统的概念图;
图8C示出了示例性系统,其中各种架构和/或可以实现各种先前实施例的功能;以及
图9是根据一个实施例的、图6的PPU实施的图形处理管线的概念图。
具体实施方式
在为动态场景生成图像或视频内容时,可以使用随机技术来提供逼真的运动。示例随机技术可以尝试通过利用来自过去图像帧的数据并确定位置的各种概率来最小化动态场景的图像帧中对象位置的不确定性。例如,考虑图1A的图像帧100。在该帧中,存在光源102和被该光源102照亮的物体,例如球体104。为了使图像帧100看起来更逼真,可以从该光源106投射或追踪一系列光线106,其与球体104相交,并且可以使阴影108投射到下面的表面上。这种方法可以很好地适用于具有静态对象的单帧。然而,如图1B中的后续图像帧130所示,诸如球体104的对象可以在帧之间移动。除了移动球体之外,生成这些图像帧的渲染引擎还必须确定如何调整阴影以随球移动。为了提供平滑的运动和外观,并减少噪声的存在,可以基于一个或更多个先前帧执行一定量的像素混合。然而,如图1B所示,这会导致至少一定量的时间延迟(temporal lag),其中渲染的阴影132在球体移动时看起来延迟于球体。为了消除这种时间延迟,渲染引擎可以避免混合并且仅基于表示该球体104的运动的当前帧160投射光线,如图1C所示,但这种方法往往会生成噪声阴影162,对于该动态场景而言,该阴影看起来不真实或不平滑。
通常,计算机生成的视频中的像素值是根据该像素的多个值计算得出的,包括该像素的过去值。通过随时间平均像素值以确定像素的当前值,锯齿状边缘和异常可能会随着对对象的更准确表示而减少,否则可能由于视频中的快速运动而显现。例如,典型的计算机生成的视频可能具有每秒60帧的帧率,其中像素值可能在该组帧中重复变化。如果对象或光源正在快速改变位置,则仅仅帧的像素值可能导致对象在这组帧上的渲染不一致。此外,快速变化的对象(或对象投射的阴影)可能会导致延迟,因为运动对于对象的渲染来说太快而无法跟上已计算出的对象的运动。
在典型情况下,指数移动平均线(EMA)可用于基于像素的先前值找到像素的值,从而随着时间平滑像素值,尤其是在具有显著移动的情况下。虽然在大多数情况下,像素值的EMA可能就足够了,但在像素快速变化的情况下使用EMA可能会导致显示的对象移动延迟。然而,EMA是一种相对廉价的平均方法,需要较少的算力和内存。
例如,图2给出了表明一系列帧的先前像素值对于确定当前像素值的贡献的图表。如图所示,先前像素值的贡献随着时间的推移而减少。因此,指数衰减被用来最小化距当前帧较远的帧中像素的贡献。例如,前一帧中的像素值对当前帧的贡献比前一帧之前的帧中的像素值对当前像素值的贡献更大。由此可以取得当前像素值的准确表示。但是,由于更多帧数对当前像素值有贡献,因此值的快速变化会在较长的一组值上平均化,这可能会导致延迟。
还可以利用简单移动平均线(SMA)来根据过去的值确定像素的值。使用SMA时,对所有先前值的贡献进行平均,使得在计算当前值时所有值具有相同的权重。这使得像素的当前值更准确,但需要更多计算资源。例如,使用SMA计算的像素的当前值可能有10%的值是根据10个先前帧中的每一帧计算得出的。如果像素数量较多需要持续计算并占用内存,执行这样的平均将非常昂贵。因此,SMA在用于持续计算像素值时效率低下。
此处提供的实施例使用混合方法来计算像素值,若采用EMA方法会另外引入延迟。最近帧的窗口(即帧上的像素值)是使用SMA计算的,而EMA用于第二个帧窗口。例如,图2给出了说明此处的一个或更多个实施例的混合方法的图。该图包括SMA部分205和EMA部分210。SMA是在4个最近帧的窗口上计算的,仅用于说明目的。剩余的帧(即,EMA部分210)将EMA用于先前像素值对当前像素值的贡献的剩余部分。
在此公开的实施例使用结合了SMA部分和EMA部分的混合方法。当检测到动态事件时,应使用SMA方法,并且可以删除EMA部分,使其不再对像素的显示值有贡献。例如,在可能出现延迟的情况下,比如在对象上投射阴影的光源在快速移动,可以利用SMA方法来减少移动阴影的渲染中的延迟。因此,在使用混合方法计算像素值时,视频帧之间快速变化的像素值可以被识别出来,像素值计算方法可以从混合方法改变为SMA方法。当那些像素不再出现快速变化的像素值时,可以恢复使用混合方法进行计算。这样做可以在需要时随着时间的推移减少这些像素的延迟,并降低减少延迟的成本。
此处描述的实施例减少延迟的方法是基于先前帧中像素值的SMA和EMA的混合平均值确定像素的平均显示像素并在识别动态事件时切换到仅使用SMA方法。在一些说明性实施例中,系统和方法使用SMA和EMA作为算法的一部分来确定计算机模拟视频的多个帧中像素位置的显示值,并且这种确定可以涉及一个或更多个先前的像素值、其更新列表,以及视频中指定位置的平均值。帧之间的像素时间延迟可以被确定,并可能具有包括附加帧的补充像素信息和/或时间滞后阈值的使用的特征。
参照图3A-3F给出了说明一系列像素值的图,根据此处公开的一个或更多个实施例,这些像素值可以被用于确定一个新的像素值。所示出的每个像素可用于确定所述像素的显示值。例如,基于所示出的像素值确定的像素,其值可被计算出来。在一些实施例中,仅存储最终平均像素值,然后可以利用所述平均像素值来确定下一个像素显示值。此外,例如,SMA值可能在每次被接收时被存储,像素的EMA值可以被存储为单个值,其随着附加像素值被接收到而更新。
如图3A中所示,帧列表300是像素的像素值随时间变化的示例,每个像素值由像素301…304表示。像素值304(如此处所公开的,像素值也可称为“像素”)是视频帧中的特定像素的最新值。像素值301是所述像素在当前帧之前3帧接收到的像素值。因此,随着像素值在帧与帧之间变化,对于每个像素301…304,帧列表构成该像素的历史值。这可以存储为单个值。帧中像素的值可以由图2-5及上文中描述和图示的一个或更多个组件确定。
如图3A中所示,混合方法被用来确定第1帧中像素的显示值。在确定该值的过程中,对4帧(即,301…304)使用了SMA方法,对其他先前帧,即像素接收值301之前的帧,使用了EMA方法。当新的值被接收,如图3B中所示,SMA部分中最旧的值被移动到EMA部分,此后将被用于重新计算EMA部分。
关于图3A和图3B中的“先前帧”部分,该部分被显示为单独存储的值的列表。在一些实施例中,由EMA计算的“先前帧”部分反而可能是单个值,该值被存储进而在每次接收到新值时被更新。因此,例如图3B中,“先前帧”可以是单个存储值。当301被接收到时,该像素值以及被存储的“先前帧”值可以被用来计算新的“先前帧”值。这可能会一直持续到EMA部分被丢弃如下所述。
参照图3C,在帧3处可能检测到动态事件。例如,这可以基于最近接收的帧与一个或更多个先前接收的帧值之间的差。在这种情况下,在这种情况下,之前的值(包括301和302,现在已经超过了4帧SMA窗口)被从当前显示像素值的计算中丢弃。取而代之的是仅使用SMA部分(在此示例中为4个值)来确定当前像素值。因此,对当前像素值有贡献的像素值仅有303…306。
参照图3D,给出了一旦不再检测到动态事件就对像素值求平均的图示。该示例发生在帧60,这距离动态事件开始已经过去了一些帧了。由于动态事件已经完成,已经不再需要丢弃EMA部分中像素的贡献。因此,如图所示,当接收到新值(即,364)时,最旧的像素360就进入了EMA部分。参照图3E,图中说明了帧61的情况,最旧的像素361(以及之前最旧的像素360)被用来计算像素值的EMA部分。当不再检测到动态事件时,对EMA部分有贡献的像素值的数量如图3F所示。在这种情况下,从动态事件结束以来接收到的所有像素值都对像素值的EMA部分有贡献。由于EMA算法的指数衰减特性,当像素值代表过去的像素时,其对于新像素值的贡献会降低到不再影响新像素值的最终点。
仅出于说明目的,像素计算的SMA部分设置为4帧,EMA部分由包含多个标记为“先前帧”的值的部分表示。然而,SMA部分可以使用任意数量的帧,EMA部分可以包含任意数量的值。例如,SMA列表可以包括更多或更少的像素值,而EMA列表包括比图3A至图3F更多或更少的值。
参照图4,给出了此处所述的示例实施例的流程图。一些实施例可以具有更多或更少的步骤,和/或可以以不同的顺序执行一个或更多个步骤。图4中所示的方法可以在与此处说明和描述的环境共同具有一个或更多个特征的环境中执行。
在步骤405中,第一算法和第二算法被用于通过对像素的多个先前值进行平均来确定像素值。在一些实施例中,第一算法可以是简单移动平均线并且第二算法可以是指数移动平均线(EMA)。例如,像素显示值可以基于来自先前帧的值的SMA窗口来确定,例如来自4个先前帧的4个先前值。参照图2,给出的图表说明了像素的每个先前值对当前显示值的贡献。通过对先前值求平均以确定当前像素值,像素显示可以被“平滑”处理以减少可能导致不必要的模糊的像素值的突然变化。
在步骤410中,包括像素的第二像素值的后续像素信息被接收到。后续像素信息可以包括已经用于确定显示像素值的帧值之后的帧中的像素的值。因此,新的像素值可以使用当前值和一些先前像素值集合的SMA/EMA平均值来确定。
在415中,基于第一像素值和第二像素值检测出时间延迟。在这种情况下,在这种情况下,对时间延迟的检测可以基于当前像素值和最近像素值之间的一个或更多个变化(例如,前一帧、两个前一帧的值,或基于当前值和以前的值的其他确定方式)。在一些实施例中,可以基于检测在一系列帧上发生的一个或更多个事件来确定时间延迟。例如,一个或更多个光源可能在帧之间快速移动,导致一个或更多个像素从图像的亮区快速改变为图像的暗区。在需要快速改变像素值的情况下,使用更多帧来“平滑”像素值可能导致像素的阴影/去阴影由于先前像素值数量的贡献而延迟。因此,当确定存在时间延迟时,相较于旧的像素值更多考虑最近像素值的像素的平均可以改善延迟。
在步骤420中,像素的第二显示值的确定是通过对先前像素值的子集使用第一平均算法来完成的。在一些实施例中,一旦时间延迟被确定,用于确定显示像素值的算法可能是比第一平均算法更占用计算机资源的算法。例如,当检测到时间延迟时,可以利用简单移动平均线(SMA)来确定像素显示值。任何代表落在先前像素值子集之外的先前值的值或累积值都会被从平均中丢弃,使得第一算法仅被用于针对感兴趣的像素的最近的一组像素值上。
在一些实施例中,第一平均算法可用于先前显示值的一部分,第二平均算法可用于先前显示值的另一部分。例如,可以使用SMA方法利用来自一组先前帧的值而较旧的值可以通过使用EMA方法来对显示值做出贡献。再次参照图2,使用SMA对4帧的一组值进行平均,较旧的帧对EMA的平均值有贡献。图2以及关于图3A-3F所描述的帧的讨论计算显示值时使用SMA计算前4帧并使用EMA计算较旧的帧值;然而,可以使用任意数量的先前像素值来确定哪些部分的先前帧将使用第一算法求平均,哪些帧将使用第二算法求平均。
在一些实施例中,新像素值的接收可以表明时间延迟事件已经结束。例如,被接收的新像素值可能与一个或更多个先前像素值相差一个阈值量。因此,由于像素值已经在一帧或多帧内稳定,所以可以推断事件已经结束。在这种情况下,像素值的平均可以变回第一和第二平均算法的混合方法,例如SMA/EMA方法。这样做通过不再对多个帧使用SMA来减少确定像素值时不必要的资源消耗。
参照图5A-5B,给出了描述此处所述的示例实施例的流程图。一些实施例可能具有更多或更少的步骤,和/或可能以不同的顺序执行一个或更多个步骤。图5A-5B中示出的方法可以在与此处说明和描述的环境共同具有一个或更多个特征的环境中执行。
在步骤505中,生成像素的先前像素值的第一列表和第二列表。再次参照图3A,生成两个像素值列表。第一列表包括先前值304…301的SMA部分。第二个像素值列表包括“先前帧”。尽管第一列表显示为具有4个值,第二列表显示为具有一些值,但两个列表都可以具有任意数量的值。例如,第一列表可以包括5个值而第二列表反而可能只有单个值,这个值的计算基于先前帧的贡献,如前所述。通常,与第二列表相比,第一列表具有更少的有意义地对像素的当前显示值做出贡献的值第二列表。在步骤510中,显示像素值基于第一部分的SMA平均值和剩余像素值的EMA平均值确定。在某些情况下,该EMA平均值可能是“移动总计”的,以便收到新值时存储和更新单个值。
在步骤515中,确定两帧之间的像素值变化超过了阈值。例如,参照图3A,为该帧接收得值305可能与值304相差一个阈值,从而可以判定时间延迟。在一些实施例中,附加像素值可以用来判定超过了阈值的时间延迟。例如,像素值的阈值变化可能会考虑到值301,302和/或303,以确定是否存在时间延迟以使得混合平均方法应被替换为仅SMA方法。
在步骤520,为像素接收了新的用于显示的像素值。参照图3C,新像素值306被接收到且像素的显示值可以用该像素的一个或更多个先前像素值来确定。可以以已知或可变的帧率接收新的像素值,例如每秒60帧。此外,第一列表的大小可基于接收像素的新值的速率来确定。
在步骤525中,第一列表被更新以包括新的像素值。参照图3B,先前的新值(即305)被添加到列表中。这之后是下一个值306,当它被接收时被添加到列表中。如图3C所示。如前所述,图3B与图3C中所展示的帧之间的差异正是被识别出的刚发生的动态事件。因此,在接收到每个新值时,最近的值被添加到SMA列表中。SMA列表继续用最新值更新,并且在步骤530中,最旧的像素值被从第一列表中移除。例如,参照图3C,值301和值302被从SMA列表中移除。
在步骤535中,在步骤535,仅对来自第一列表的那些值使用第一平均算法(例如,SMA)来确定像素的新显示值。其余的值,例如301、302和一个或更多个指示“先前帧”的值被从平均计算中丢弃。因此,只有来自最近帧的前4个值对像素的显示值有贡献。
在步骤540中,像素的显示值基于新的平均值被更新。在一些实施例中,一旦显示值根据第一列表和第二列表中的值被确定,一个或更多个组件可能使像素显示在具有显示值的帧中。当接收到新的像素值时,可以继续仅使用SMA窗口来确定像素值。
在一些实施例中,一旦不再检测到时间延迟或动态事件,就可以重新建立初始的SMA/EMA混合方法。例如,参照图3D,时间在帧60结束。因此,最新的4个值仍使用SMA方法进行平均,而最旧的值(即360)被用于确定EMA平均(此时这不是必须的,因为平均值时用于单个值的)。在图3E中,新值365被添加到SMA列表中,并且SMA列表中最旧的值(即361)与360结合,用于确定新的EMA平均值。参照图3F,这会无限期地持续使用新值直到检测出新的动态事件。
图6依据实施例示出了并行处理单元(PPU)600。在一个实施例中,PPU 600是在一个或更多个集成电路设备上实现的多线程处理器。PPU 600是一种延迟隐藏架构,旨在并行处理多个线程。线程(即,执行线程)是被配置为由PPU 600执行的一组指令的实例。在一个实施例中,PPU 600是一个图形处理单元(GPU),被配置为实现图形渲染管线处理三维(3D)图形数据以生成二维(2D)图像数据以显示在诸如液晶显示(LCD)设备之类的显示设备上。在其他实施例中,PPU 600可用于执行通用计算。虽然此处提给出了一个示例性并行处理器以用于说明目的,但应强烈注意,阐述此类处理器仅用于说明目的,并且可以采用任何处理器来补充和/或替代相同的处理器。
一个或更多个PPU 600可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 600可配置为加速多种深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等。
如图6中所示,PPU 600包括输入/输出(I/O)单元605、前端单元615、调度器单元620、工作分配单元625、集线器630、交叉开关(XBar)670、一个或更多个通用处理集群(GPC)650以及一个或更多个分区单元680。PPU 600可以通过一个或更多个高速NVLink 610互连连接到主机处理器或其他PPU 600。PPU 600可以经由互连602连接到主机处理器或其他外围设备。PPU 600还可以连接到包括多个存储设备604的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以配置为高带宽存储器(HBM)子系统,其中多个DRAM裸晶(die)堆叠在每个设备内。
NVLink 610互连使系统能够扩展并包括一个或更多个PPU 600与一个或更多个CPU的组合,支持PPU 600和CPU之间的缓存一致性以及CPU主控。数据和/或命令可以由NVLink 610通过集线器630传送往返于PPU 600的其他单元,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确给出)。结合图8B更详细地描述了NVLink610的细节。
I/O单元605被配置为通过互连602从主处理器(未示出)发送和接收通信(即,命令、数据等)。I/O单元605可以直接通过互连602或通过一个或更多个中间设备例如存储器桥与主处理器通信。在一个实施例中,I/O单元605可经由互连602与一个或更多个其他处理器(例如一个或更多个PPU 600)通信。在一个实施例中,I/O单元605实现用于通过PCIe总线进行通信的外围组件互连快速(PCIe)接口并且互连602是PCIe总线。在其他实施例中,I/O单元605可以实现用于其他类型的常见的接口以实现与外部设备通信。
I/O单元605对经由互连602接收的包进行解码。在一个实施例中,数据包表示被配置为使PPU 600执行各种操作的命令。I/O单元605将解码的命令传送到PPU 600的各种其他单元,如命令所指定的那样。例如,一些命令可以传输到前端单元615。其他命令可以传输到集线器630或PPU 600的其他单元,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换言之,I/O单元605被配置为在PPU 600的各个逻辑单元之间路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲器中编码命令流,该缓冲器向PPU 600提供工作负载以供处理。工作负载可包括若干指令和要由这些指令处理的数据。缓冲区是主机处理器和PPU 600均可访问(即读/写)的存储器中的区域。例如,I/O单元605可以被配置为通过由互连602传输的存储器请求来访问连接到互连602的系统存储器中的缓冲器。在一个实施例中,主机处理器将命令流写入缓冲器,然后将指向命令流开始的指针发送到PPU 600。前端单元615接收指向一个或更多个命令流的指针。前端单元615管理一个或更多个流,从流中读取命令并将命令转发到PPU 600的各个单元。
前端单元615耦合到调度器单元620,该调度器单元620配置各种GPC 650以处理由一个或更多个流定义的任务。调度器单元620被配置为跟踪与由调度器单元620管理的各种任务相关的状态信息。状态可以指示任务被分配给哪个GPC 650、任务是活动的还是非活动的、与任务相关联的优先级等等。调度器单元620管理多个任务在一个或更多个GPC 650上的执行。
调度器单元620耦合到工作分配单元625,该工作分配单元625被配置为分派任务以在GPC 650上执行。工作分配单元625可以跟踪从调度器单元620接收的多个调度任务。在一个实施例中,工作分配单元625管理每个GPC 650的待处理任务池和活动任务池。待处理任务池可以包括多个槽(例如,32个槽),其中包含分配给特定GPC 650处理的任务。活动任务池可以包括用于由GPC 650正在积极处理的任务的多个槽(例如,4个槽)。当GPC 650完成任务的执行时,该任务被从GPC 650的活动任务池中驱逐,而待处理任务池中的其他任务之一被选择并安排在GPC 650上执行。如果活动任务在GPC 650上一直处于空闲状态,例如在等待解决数据依赖关系时,则活动任务可能会从GPC 650中驱逐并返回到待处理任务池,而待处理任务池中的另一个任务被选中并安排在GPC 650上执行。
工作分配单元625通过XBar 670与一个或更多个GPC 650通信。XBar 670是一个互连网络,它将PPU 600的许多单元连接到PPU 600的其他单元。例如,XBar 670可以被配置为将工作分配单元625耦合到特定的GPC 650。尽管未明确示出,PPU 600的一个或更多个其他单元也可以通过集线器630连接到XBar 670。
任务由调度器单元620管理并由工作分配单元625分派到GPC 650。GPC 650被配置为处理任务并生成结果。结果可由GPC 650内的其他任务消耗,经由XBar 670路由到不同的GPC 650,或存储在存储器604中。结果可以经由分区单元680写入存储器604,分区单元680实现用于向/从存储器604读取和写入数据的存储器接口。结果可以通过NVLink 610传输到另一个PPU 600或CPU。在一个实施例中,PPU 600包括数目为U的分区单元680,其数目等于耦合到PPU 600的单独且不同的存储器设备604的数量。下面将结合图7B更详细地描述分区单元680。
在一个实施例中,主处理器执行驱动程序内核,该驱动程序内核实现应用程序编程接口(API),该API使在主处理器上执行的一个或更多个应用程序能够调度操作以在PPU600上执行。在一个实施例中,多个计算应用程序由PPU 600同时执行,并且PPU 600为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),使驱动程序内核生成一个或更多个任务以供PPU 600执行。驱动程序内核将任务输出到由PPU 600处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图8A更详细地描述线程和协作线程。
图7A示出了根据一个实施例的图6的PPU 600的GPC 650。如图7A所示,每个GPC650包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 650包括管线管理器710、预光栅操作单元(PROP)715、光栅引擎725、工作分配交叉开关(WDX)780、存储器管理单元(MMU)790以及一个或更多个数据处理集群(DPC)720。应当理解,图7A的GPC650可以包括代替图7A中所示单元的其他硬件单元或除图7A中所示单元之外的其他硬件单元。
在一个实施例中,GPC 650的操作由管线管理器710控制。管线管理器710管理用于处理分配给GPC 650的任务的一个或更多个DPC 720的配置。在一个实施例中,管线管理器710可以配置一个或更多个DPC 720中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 720可以被配置为在可编程流式多处理器(SM)740上执行顶点着色程序。管线管理器710还可以被配置为将从工作分配单元625接收的数据包路由到GPC 650中适当的逻辑单元。例如,一些数据包可以被路由到PROP 715和/或光栅引擎725中的固定功能硬件单元,而其他数据包可以被路由到DPC 720以供图元引擎735或SM 740处理。在一个实施例中,管线管理器710可以配置一个或更多个DPC 720中的至少一个以实现神经网络模型和/或计算管线。
PROP单元715被配置为将由光栅引擎725和DPC 720生成的数据路由到光栅操作(ROP)单元,结合图7B更详细地描述。PROP单元715还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎725包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎725包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且未剔除的片段被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎725的输出包括例如要由在DPC 720内实现的片段着色器处理的片段。
包括在GPC 650中的每个DPC 720包括M管线控制器(MPC)730、图元引擎735和一个或更多个SM 740。MPC 730控制DPC 720的操作,将从管线管理器710接收到的数据包路由到DPC 720中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎735,图元引擎735被配置为从存储器604提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM740。
SM 740包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM740是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 740实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 740实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图8A更详细地描述SM740。
MMU 790提供GPC 650和分区单元680之间的接口。MMU790可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 790提供用于执行从虚拟地址到存储器604中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图7B示出了根据一个实施例的图6的PPU 600的存储器分区单元680。如图7B所示,存储器分区单元680包括光栅操作(ROP)单元750、二级(L2)高速缓存760和存储器接口770。存储器接口770耦合到存储器604。存储器接口770可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 600合并了U个存储器接口770,每对分区单元680有一个存储器接口770,其中每对分区单元680连接到对应的存储器设备604。例如,PPU 600可以连接到多达Y个存储器设备604,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口770实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 600相同的物理封装上,提供与常规GDDR5 SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器604支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,PPU 600处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,PPU 600实现多级存储器层次。在一个实施例中,存储器分区单元680支持统一存储器以为CPU和PPU 600存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪PPU 600对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的PPU 600的物理存储器。在一个实施例中,NVLink 610支持地址转换服务,其允许PPU 600直接访问CPU的页表并且提供由PPU 600对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 600之间或在PPU 600与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元680可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(即,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器604或其他系统存储器的数据可以由存储器分区单元680取回并存储在L2高速缓存760中,L2高速缓存760位于芯片上并且在各个GPC 650之间共享。如图所示,每个存储器分区单元680包括与对应的存储器设备604相关联的L2高速缓存760的一部分。然后可以在GPC 650内的多个单元中实现较低级高速缓存。例如,每个SM 740可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 740的专用存储器。来自L2高速缓存760的数据可以被获取并存储在每个L1高速缓存中,以在SM 740的功能单元中进行处理。L2高速缓存760被耦合到存储器接口770和XBar 670。
ROP单元750执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。ROP单元750还与光栅引擎725一起实现深度测试,从光栅引擎725的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元750更新深度缓冲区并将深度测试的结果发送给光栅引擎725。将理解的是,分区单元680的数量可以不同于GPC 650的数量,并且因此每个ROP单元750可以耦合到每个GPC 650。ROP单元750跟踪从不同GPC 650接收到的数据包并且确定由ROP单元750生成的结果通过Xbar 670被路由到哪个GPC 650。尽管在图7B中ROP单元750被包括在存储器分区单元680内,但是在其他实施例中,ROP单元750可以在存储器分区单元680之外。例如,ROP单元750可以驻留在GPC 650或另一个单元中。
图8A示出了根据一个实施例的图7A的流式多处理器740。如图8A所示,SM 740包括指令高速缓存805、一个或更多个调度器单元810(K)、寄存器文件820、一个或更多个处理核心850、一个或更多个特殊功能单元(SFUs)852、一个或更多个加载/存储单元(LSUs)854、互连网络880、共享存储器/L1高速缓存870。
如上所述,工作分配单元625调度任务以在PPU 600的GPC 650上执行。任务被分配给GPC 650内的特定DPC 720,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 740。调度器单元510接收来自工作分配单元625的任务并且管理指派给SM 740的一个或更多个线程块的指令调度。调度器单元810(K)调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元810(K)可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心850、SFUs852和LSUs 854)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(即,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(即,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元815被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元810(K)包括两个分派单元815,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元810(K)可以包括单个分派单元815或附加分派单元815。
每个SM 740包括寄存器文件820,其提供用于SM740的功能单元的一组寄存器。在一个实施例中,寄存器文件820在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件820的专用部分。在另一个实施例中,寄存器文件820在由SM 740执行的不同线程束之间被划分。寄存器文件820为连接到功能单元的数据路径的操作数提供临时存储器。
每个SM740包括L个处理核心850。在一个实施例中,SM 740包括大量(例如128个等)不同的处理核心850。每个核心850可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心850包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心850中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在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 740还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFUs852。在一个实施例中,SFUs 852可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFUs 852可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器604加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由SM 740执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存370中。纹理单元实现纹理操作,诸如使用多级渐远纹理(mip)图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个SM640包括两个纹理单元。
每个SM 740还包括N个LSUs 854,其实现共享存储器/L1高速缓存870和寄存器文件820之间的加载和存储操作。每个SM 740包括将每个功能单元连接到寄存器文件820以及将LSU 854连接到寄存器文件820、共享存储器/L1高速缓存870的互连网络880。在一个实施例中,互连网络880是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件820中的任何寄存器,以及将LSUs 854连接到寄存器文件和共享存储器/L1高速缓存870中的存储器位置。
共享存储器/L1高速缓存870是片上存储器阵列,其允许数据存储和SM 740与图元引擎735之间以及SM 740中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存870包括128KB的存储容量并且在从SM 740到分区单元680的路径中。共享存储器/L1高速缓存870可以用于高速缓存读取和写入。共享存储器/L1高速缓存870、L2高速缓存760和存储器604中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存870内的集成使共享存储器/L1高速缓存870起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图6所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元625将线程块直接指派并分配给DPC 720。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 740执行程序并执行计算,使用共享存储器/L1高速缓存870以在线程之间通信,以及使用LSU 854通过共享存储器/L1高速缓存870和存储器分区单元680读取和写入全局存储器。当被配置用于通用并行计算时,SM 740还可以写入调度器单元620可用来在DPC 720上启动新工作的命令。
PPU 600可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 600包含在单个半导体衬底上。在另一个实施例中,PPU 600与一个或更多个其他器件(诸如附加PPU 600、存储器604、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 600可以被包括在图形卡上,图形卡包括一个或更多个存储器设备604。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 600可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图8B是根据一个实施例的使用图6的PPU 600实现的处理系统800的概念图。示例性系统865可以被配置为实现图3-5中所示以及如下所述的方法。处理系统800包括CPU830、交换机810和多个PPU 600中的每一个以及相应的存储器604。NVLink 610提供每个PPU600之间的高速通信链路。尽管图8B中示出了特定数量的NVLink 610和互连602连接,但是连接到每个PPU 600和CPU 830的连接的数量可以改变。交换机810在互连602和CPU 830之间接口。PPU 600、存储器604和NVLink 610可以位于单个半导体平台上以形成并行处理模块825。在一个实施例中,交换机810支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 610在每个PPU 600和CPU 830之间提供一个或更多个高速通信链路,并且交换机810在互连602和每个PPU 600之间进行接口。PPU 600、存储器604和互连602可以位于单个半导体平台上以形成并行处理模块825。在又一个实施例(未示出)中,互连602在每个PPU 600和CPU 830之间提供一个或更多个通信链路,并且交换机810使用NVLink 610在每个PPU 600之间进行接口,以在PPU 600之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 610在PPU 600和CPU 830之间通过交换机810提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连602在每个PPU 600之间直接地提供一个或更多个通信链路。可以使用与NVLink 610相同的协议将一个或更多个NVLink 610高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块825可以被实现为电路板衬底,并且PPU 600和/或存储器604中的每一个可以是封装器件。在一个实施例中,CPU 830、交换机810和并行处理模块825位于单个半导体平台上。
在一个实施例中,每个NVLink 610的信令速率是20到25千兆位/秒,并且每个PPU600包括六个NVLink 610接口(如图8B所示,每个PPU 600包括五个NVLink 610接口)。每个NVLink 610在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当CPU 830还包括一个或更多个NVLink 610接口时,NVLink 610可专门用于如图8B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 610允许从CPU 830到每个PPU 600的存储器604的直接加载/存储/原子访问。在一个实施例中,NVLink 610支持一致性操作,允许从存储器604读取的数据被存储在CPU 830的高速缓存分层结构中,减少了CPU 830的高速缓存访问延迟。在一个实施例中,NVLink 610包括对地址转换服务(ATS)的支持,允许PPU 600直接访问CPU830内的页表。一个或更多个NVLink 610还可以被配置为以低功率模式操作。
图8C示出了示例性系统865,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统865可以被配置为实现图2中所示的方法200。
如图所示,提供系统865,其包括连接到通信总线875的至少一个中央处理单元830。通信总线875可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统865还包括主存储器840。控制逻辑(软件)和数据被存储在主存储器840中,主存储器840可以采取随机存取存储器(RAM)的形式。
系统865还包括输入设备860、并行处理系统825和显示设备845,即:常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备860(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统865。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统865可以出于通信目的通过网络接口835耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如互联网)、对等网络、电缆网络等)。
系统865还可以包括辅助存储(未示出)。辅助存储包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器840和/或辅助存储中。这些计算机程序在被执行时使得系统865能够执行各种功能。存储器840、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统865可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
在一个实施例中,PPU 600包括图形处理单元(GPU)。PPU 600被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU 600可以被配置为处理图元以生成帧缓冲区(即,用于显示器的像素中的每一个的像素数据)。
应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如系统存储器或存储器604)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在PPU600的SM 740上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,SM 740中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 740可以被配置为同时执行不同的着色程序。例如,SM 740的第一子集可以被配置为执行顶点着色程序,而SM 740的第二子集可以被配置为执行像素着色程序。SM 740的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存760和/或存储器604。在经处理的顶点数据被光栅化(即,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,SM 740的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器604中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
图9是根据一个实施例的由图6的PPU 600实现的图形处理管线900的概念图。图形处理管线900是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线900接收从图形处理管线900的一个阶段传送到下一阶段的输入数据901,以生成输出数据902。在一个实施例中,图形处理管线900可表示由API定义的图形处理管线。作为选择,图形处理管线900可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
如图9所示,图形处理管线900包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段910、顶点着色阶段920、图元组装阶段930、几何着色阶段940、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段950、光栅化阶段960、片段着色阶段970和光栅操作阶段980。在一个实施例中,输入数据901包括命令,其配置处理单元以实现图形处理管线900的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据902可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
数据组装阶段910接收输入数据901,其指定用于高阶表面、图元等的顶点数据。数据组装阶段910收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段920以进行处理。
顶点着色阶段920通过对顶点中的每一个执行一次一组操作(即,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(即,<x,y,z,w>)。顶点着色阶段920可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段920对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(即,修改顶点的颜色属性)和变换操作(即,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段920生成被传送到图元组装阶段930的经变换的顶点数据。
图元组装阶段930收集由顶点着色阶段920输出的顶点并且将顶点分组成几何图元以由几何着色阶段940处理。例如,图元组装阶段930可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段940的几何图元(即,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段930将几何图元(即,相关联的顶点的集合)传送到几何着色阶段940。
几何着色阶段940通过对几何图元执行一组操作(即,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段940可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线900的其余部分进行处理。几何着色阶段940将几何图元传送到视口SCC阶段950。
在一个实施例中,图形处理管线900可以在流式多处理器和顶点着色阶段920、图元组装阶段930、几何着色阶段940、片段着色阶段970和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段950可以利用数据。在一个实施例中,由图形处理管线900中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段950可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段950和光栅化阶段960被实现为固定功能电路。
视口SCC阶段950执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(即丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(即,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段960。
光栅化阶段960将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段960可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段960还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段960生成片段数据(即,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段970。
片段着色阶段970通过对片段中的每一个执行一组操作(即,片段着色器或程序)来处理片段数据。片段着色阶段970可以生成片段的像素数据(即,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色阶段970生成像素数据,其被发送到光栅操作阶段980。
光栅操作阶段980可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段980已经完成对像素数据(即,输出数据902)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线900中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段940)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线900的任何阶段可以由图形处理器(诸如PPU200)内的一个或更多个专用硬件单元来实现。图形处理管线900的其他阶段可以由可编程硬件单元(诸如PPU 600的SM 740)来实现。
图形处理管线900可以经由由主机处理器(诸如CPU)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU 600的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如PPU 600)来生成图形数据而不要求程序员利用PPU 600的特定指令集。应用程序可以包括被路由到PPU 600的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU 600之间的输入/输出接口在PPU 600上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 600的硬件来实现图形处理管线900。
可以在PPU 600内执行各种程序以便实现图形处理管线900的各个阶段。例如,设备驱动程序可以启动PPU 600上的内核以在一个SM 740(或多个SM 740)上执行顶点着色阶段920。设备驱动程序(或由PPU 700执行的初始内核)还可启动PPU 700上的其他内核以执行图形处理管线900的其他阶段,诸如几何着色阶段940和片段着色阶段970。另外,图形处理管线900的阶段中的一些可以在固定单元硬件(诸如在PPU 700内实现的光栅器或数据组装器)上实现。应当领会,在被SM 740上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
其他变化在本公开的精神内。因此,虽然所公开的技术易于进行各种修改和替代构造,但其某些图示的实施例在附图中示出并且已经在上文中详细描述。然而,应当理解,无意将公开内容限制为所公开的具体形式,而是相反,意图是涵盖落入公开内容的精神和范围内的所有修改、替代结构和等效物,如所附权利要求中所定义的。
在描述公开的实施例的上下文中(尤其是在以下权利要求的上下文中)使用术语“一”和“一个”和“该”以及类似指代应被解释为涵盖单数和复数,除非本文另有说明或与上下文明显矛盾,并且不作为术语的定义。除非另有说明,否则术语“包括”、“具有”、“包括”和“包含”应被解释为开放式术语(意为“包括但不限于”)。术语“连接”,当未经修改并指物理连接时,应被解释为部分或全部包含在内部、连接到或连接在一起,即使有某些东西介入。除非本文另有说明,否则本文对数值范围的引用仅旨在作为单独提及落入范围内的每个单独值的速记方法,并且将每个单独值并入说明书中,就好像它在本文中单独引用一样。除非另有说明或与上下文相矛盾,否则术语“集合”(例如,“一组项目”)或“子集”的使用应被解释为包含一个或更多个成员的非空集合。此外,除非另有说明或与上下文相矛盾,否则对应集合的术语“子集”不一定表示对应集合的真子集,而子集与对应集合可以相等。
除非另有特别说明或与上下文明显矛盾,否则连词,例如形式为“A、B和C中的至少一个”或“A、B和C中的至少一个”形式的短语,应与上下文一起理解,通常用于表示项目、术语等可以是A或B或C,或A和B和C的集合的任何非空子集。例如,在具有三个成员的集合的说明性示例中,连接短语“A、B和C中的至少一个”和“A、B和C中的至少一个”是指以下集合中的任何一个:{A}、{B}、{C}、{A、B}、{A、C}、{B、C}、{A、B、C}。因此,这样的连词一般不旨在暗示某些实施例需要A中的至少一个、B中的至少一个和C中的至少一个每个都存在。此外,除非另有说明或与上下文相矛盾,否则术语“多个”表示复数的状态(例如,“多个项目”表示复数个项目)。复数中的项目数至少为两个,但在明确或通过上下文指示时可以更多。此外,除非另有说明或从上下文中明确说明,否则短语“基于”是指“至少部分基于”而非“仅基于”。
除非本文另有说明或与上下文明显矛盾,否则本文描述的过程的操作可以以任何合适的顺序执行。在至少一个实施例中,与在此处描述的那些过程(或其变体和/或组合)类似的过程在配置有可执行指令的一个或更多个计算机系统的控制下执行并且被实现为代码(例如,可执行指令、一个或更多个计算机程序或一个或更多个应用程序)通过硬件或其组合在一个或更多个处理器上共同执行。在至少一个实施例中,代码被存储在计算机可读存储介质上,例如,以包括可由一个或更多个处理器执行的多个指令的计算机程序的形式。在至少一个实施例中,计算机可读存储介质是不包括瞬态信号(例如,正在传播的瞬态电或电磁传输)但包括瞬态信号收发器内的非瞬态数据存储电路(例如,缓冲器、缓存和队列)的非暂时性计算机可读存储介质。在至少一个实施例中,代码(例如,可执行代码或源代码)存储在一组一个或更多个非暂时性计算机可读存储介质上(或其他存储可执行指令的内存),其上存储有可执行指令,当由计算机系统的一个或更多个处理器执行(即,作为被执行的结果)时,这些指令使计算机系统执行此处描述的操作。在至少一个实施例中,一组非暂时性计算机可读存储介质包括多个非暂时性计算机可读存储介质和多个非暂时性计算机可读存储介质中的一个或更多个单独的非暂时性存储介质,这一组非暂时性计算机可读存储介质缺少所有代码,而多个非暂时性计算机可读存储介质共同存储所有代码。在至少一个实施例中,可执行指令被执行以使得不同的指令由不同的处理器执行——例如,非暂时性计算机可读存储介质存储指令并且主中央处理单元(“CPU”)执行一些指令,而图形处理单元(“GPU”)执行其他指令。在至少一个实施例中,计算机系统的不同组件具有单独的处理器并且不同的处理器执行不同的指令子集。
因此,在至少一个实施例中,计算机系统被配置为实现一种或多种服务,这些服务单独或共同执行此处所述的过程的操作,并且这样的计算机系统被配置有能够执行操作的适用硬件和/或软件。此外,实现本公开中的至少一个实施例的计算机系统是单个设备,并且在另一实施例中,是包括多个设备的分布式计算机系统,这些设备以不同方式操作,使得分布式计算机系统执行本文所述的操作并且使得单个设备不执行所有操作。
除非另有声明,否则本文提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅旨在更好地阐明公开的实施例并且不对公开的范围构成限制。
在此引用的所有参考文献,包括出版物、专利申请和专利,都以相同的程度通过引用并入本文,就好像每个参考文献被单独地和具体地标明为通过引用纳入并在此完整阐述。
在说明书和权利要求中,可以使用术语“耦合”和“连接”以及它们的派生词。应该理解,这些术语可能并不旨在作为彼此的同义词。相反,在特定示例中,“连接”或“耦合”可用于指示两个或更多个元件彼此直接或间接物理或电接触。“耦合”也可能意味着两个或多个元素彼此不直接接触,但仍然相互合作或相互作用。
除非另有特别说明,否则可以理解,贯穿说明书的术语诸如“处理”、“运算”、“计算”、“确定”等,指的是计算机或计算系统的动作和/或过程,或类似的电子计算设备,用于操作和/或转换以物理量表示的数据,例如,计算系统寄存器和/或存储器中的电子量转换为其他数据,类似于计算系统存储器、寄存器或其他此类信息存储、传输或显示设备中的物理量。
以类似的方式,术语“处理器”可以指处理来自寄存器和/或存储器的电子数据并将该电子数据转换成可以存储在寄存器和/或存储器中的其他电子数据的任何设备或设备的一部分。作为非限制性示例,“处理器”可以是CPU或GPU。“计算平台”可以包括一个或更多个处理器。如这里所使用的,“软件”进程可以包括例如随时间执行工作的软件和/或硬件实体,例如任务、线程和智能代理。此外,每个进程可以指多个进程,用于依次或并行、连续或间歇地执行指令。术语“系统”和“方法”在本文中可互换使用,只要系统可以体现一种或多种方法并且方法可以被认为是系统。
在本文件中,提及了获得、获取、接收模拟或数字数据或将模拟或数字数据输入到子系统、计算机系统或计算机实现的机器中。获取、获取、接收或输入模拟和数字数据的过程可以通过多种方式来完成,例如通过接收数据作为函数调用的参数或对应用程序编程接口的调用。在一些实现中,获取、获得、接收或输入模拟或数字数据的过程可以通过串行或并行接口传输数据来完成。在另一种实现方式中,获取、获得、接收或输入模拟或数字数据的过程可以通过计算机网络从提供实体向获取实体传输数据来完成。在另一种实施方式中,获取、获得、接收或输入模拟或数字数据的过程可以通过从提供实体到获取实体的计算机网络传输数据来完成。还提及了提供、输出、传输、发送或呈现模拟或数字数据。在各种示例中,提供、输出、传输、发送或呈现模拟或数字数据的过程可以通过将数据作为函数调用的输入或输出参数、应用程序编程接口的参数或进程间通信机制的参数传输来完成。
尽管上述讨论阐述了所描述技术的示例实现,但是其他架构也可以用于实现所描述的功能,并且将被纳入本公开的范围内。此外,虽然以上为了讨论的目的定义了具体的职责分配,但是根据情况,各种功能和职责可能以不同的方式分配和划分。
此外,尽管主题已经以结构特征和/或方法论角度具体地进行了描述,但是应当理解,在所附权利要求中要求保护的主题不一定限于所描述的特定特征或动作。相反,具体特征和动作被公开为实施权利要求的示例性形式。
Claims (21)
1.一种方法,包括:
使用第一算法和第二算法确定计算机模拟视频的第一帧中的像素位置的第一显示值,所述第一显示值至少部分地基于所述像素位置的第一像素值和所述像素位置的多个先前像素值来确定;
接收所述第一帧之后的所述计算机模拟视频的第二帧的像素信息,其中所述像素信息包括所述第二帧中的所述像素位置的第二像素值;
确定所述第一帧与所述第二帧之间的时间延迟;以及
至少部分地基于对应于所述时间延迟的所述多个先前像素值的子集,使用所述第一算法确定所述第二帧中的所述像素位置的第二显示值。
2.如权利要求1所述的方法,其中所述第一算法通过对来自固定数目的最近帧的先前像素值求平均来确定所述第一显示值。
3.如权利要求2所述的方法,其中所述固定数目是四个帧。
4.如权利要求1所述的方法,其中所述第一算法比所述第二算法利用更多的资源。
5.如权利要求1所述的方法,其中所述第一算法是简单移动平均线。
6.如权利要求1所述的方法,其中所述第二算法是指数移动平均线。
7.如权利要求1所述的方法,还包括:
接收视频的所述第二帧之后的所述视频的第三帧的补充像素信息,所述补充像素信息包括所述像素的第三值;
基于所述补充像素信息,确定所述第二帧和所述第三帧之间的时间延迟低于阈值;以及
使用所述第一算法和所述第二算法,基于所述像素的所述第三值和所述像素的所述多个先前像素值的至少一部分的第三平均值来确定所述第三帧中的所述像素的第三显示值。
8.如权利要求1所述的方法,其中进一步基于所述第一显示值和所述第二像素值确定所述第二显示值。
9.如权利要求1所述的方法,还包括:
使得通过具有所述第二显示值的所述像素来显示所述第二帧。
10.如权利要求1所述的方法,其中所述时间延迟基于在所述视频的一个或更多个帧中检测的动态事件。
11.如权利要求10所述的方法,其中所述动态事件是所述多个像素中的一个或更多个被阴影部分遮挡。
12.一种用于减少一系列帧上的像素中的时间延迟的方法,包括:
生成像素的先前像素值的第一列表,其中所述第一列表中的每个像素值与所述系列帧的第一帧中的所述像素相关联;
生成所述像素的先前像素值的第二列表,其中所述第二列表中的每个像素值与所述系列帧的第二帧中的所述像素相关联,所述第二帧发生在所述第一帧之前;
基于代表使用第一算法的所述第一列表的平均值的第一值和代表使用第二算法的所述第二列表的平均值的第二值来确定像素显示值;
确定发生的所述像素值变化高于在所述第一帧和所述第二帧之间的所述像素的变化率阈值;
接收将在所述系列帧的第三帧中显示的所述像素的新像素值,所述第三帧在所述第二帧之后;
更新所述第一列表以包括所述新像素值;
从所述第一列表中移除最旧的像素值;
使用所述第一算法确定代表所述第一列表的平均值的新值;以及
基于所述新值更新所述像素的显示像素值。
13.如权利要求12所述的方法,其中所述第一值是简单移动平均。
14.如权利要求12所述的方法,其中所述第二值是指数移动平均。
15.如权利要求12所述的方法,还包括:
确定在所述第一帧和所述第二帧之间发生动态事件。
16.如权利要求15所述的方法,还包括:
确定所述动态事件完成;
使用所述第一算法确定所述第一列表中的平均值,使用所述第二算法确定所述第二列表中的平均值。
17.如权利要求15所述的方法,其中所述动态事件是所述系列帧中光源的移动。
18.如权利要求12所述的方法,其中所述第一列表的大小基于所述系列帧的帧率。
19.一种系统,包括:
一个或更多个处理器;以及
存储器,其包括指令,如果由一个或更多个处理器执行所述指令,则至少使所述系统:
使用第一算法和第二算法确定计算机模拟视频的第一帧中的像素位置的第一显示值,所述第一显示值至少部分地基于所述像素位置的第一像素值和所述像素位置的多个先前像素值;
接收所述计算机模拟视频的第二帧的像素信息,所述第二帧在所述第一帧之后,其中所述像素信息包括所述第二帧中的所述像素位置的第二像素值;
确定所述第一帧与所述第二帧之间的时间延迟;以及
使用所述第一算法确定所述第二帧中的所述像素位置的第二显示值,所述第二显示值至少部分地基于对应于所述时间延迟的所述多个先前像素值的子集。
20.如权利要求18所述的系统,其中所述第一算法是指数移动平均线。
21.如权利要求18所述的系统,其中所述第二算法是简单移动平均线。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/226,820 US11847737B2 (en) | 2021-04-09 | 2021-04-09 | Temporal denoiser quality in dynamic scenes |
US17/226,820 | 2021-04-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115205091A true CN115205091A (zh) | 2022-10-18 |
Family
ID=83361965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210304420.3A Pending CN115205091A (zh) | 2021-04-09 | 2022-03-16 | 动态场景中改进的时间降噪器质量 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11847737B2 (zh) |
CN (1) | CN115205091A (zh) |
DE (1) | DE102022108018A1 (zh) |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226327B1 (en) * | 1992-06-29 | 2001-05-01 | Sony Corporation | Video coding method and apparatus which select between frame-based and field-based predictive modes |
JP4344964B2 (ja) * | 1999-06-01 | 2009-10-14 | ソニー株式会社 | 画像処理装置および画像処理方法 |
WO2003028237A1 (en) * | 2001-09-28 | 2003-04-03 | Divxnetworks, Inc. | Dynamic bit rate control process |
JP3928424B2 (ja) * | 2001-12-26 | 2007-06-13 | コニカミノルタビジネステクノロジーズ株式会社 | 動画におけるフリッカ補正 |
KR100530223B1 (ko) * | 2003-05-13 | 2005-11-22 | 삼성전자주식회사 | 프레임 레이트 변환시의 프레임 보간 방법 및 그 장치 |
CN100568983C (zh) * | 2007-10-29 | 2009-12-09 | 威盛电子股份有限公司 | 影像信号像素点色彩值调整方法 |
US8068087B2 (en) * | 2008-05-29 | 2011-11-29 | Sharp Laboratories Of America, Inc. | Methods and systems for reduced flickering and blur |
US8610826B2 (en) * | 2009-08-27 | 2013-12-17 | Broadcom Corporation | Method and apparatus for integrated motion compensated noise reduction and frame rate conversion |
TWI399971B (zh) * | 2010-07-28 | 2013-06-21 | Vatics Inc | 降低數位影像雜訊的方法及其電子裝置 |
US9153011B2 (en) * | 2012-06-25 | 2015-10-06 | Google Inc. | Movement based level of detail adjustments |
JP2016503613A (ja) * | 2012-11-07 | 2016-02-04 | ヴィド スケール インコーポレイテッド | 高ダイナミックレンジビデオをノイズ除去するための時間フィルタ |
US9300906B2 (en) * | 2013-03-29 | 2016-03-29 | Google Inc. | Pull frame interpolation |
US9418469B1 (en) * | 2013-07-19 | 2016-08-16 | Outward, Inc. | Generating video content |
TWI549489B (zh) * | 2014-04-16 | 2016-09-11 | 智原科技股份有限公司 | 移動偵測電路與方法 |
US9449230B2 (en) * | 2014-11-26 | 2016-09-20 | Zepp Labs, Inc. | Fast object tracking framework for sports video recognition |
US10116916B2 (en) * | 2016-03-17 | 2018-10-30 | Nvidia Corporation | Method for data reuse and applications to spatio-temporal supersampling and de-noising |
US10388059B2 (en) * | 2016-10-03 | 2019-08-20 | Nvidia Corporation | Stable ray tracing |
US10789729B2 (en) * | 2017-12-07 | 2020-09-29 | Ti Training Corp. | System and method(s) for determining projectile impact location |
US10713753B2 (en) * | 2018-10-12 | 2020-07-14 | Apical Limited | Data processing systems |
KR102628911B1 (ko) * | 2019-01-07 | 2024-01-24 | 삼성전자주식회사 | 영상 처리 방법 및 이를 수행하는 영상 처리 장치 |
US20220148256A1 (en) * | 2020-11-11 | 2022-05-12 | Nvidia Corporation | Image blending using one or more neural networks |
US11727535B2 (en) * | 2021-01-14 | 2023-08-15 | Nvidia Corporation | Using intrinsic functions for shadow denoising in ray tracing applications |
US11502765B2 (en) * | 2021-02-05 | 2022-11-15 | Zoox, Inc. | Robust clock synchronization over computer network |
-
2021
- 2021-04-09 US US17/226,820 patent/US11847737B2/en active Active
-
2022
- 2022-03-16 CN CN202210304420.3A patent/CN115205091A/zh active Pending
- 2022-04-04 DE DE102022108018.8A patent/DE102022108018A1/de active Pending
-
2023
- 2023-12-18 US US18/543,753 patent/US20240153202A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240153202A1 (en) | 2024-05-09 |
DE102022108018A1 (de) | 2022-10-13 |
US20220327771A1 (en) | 2022-10-13 |
US11847737B2 (en) | 2023-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110176054B (zh) | 用于训练神经网络模型的合成图像的生成 | |
US11106261B2 (en) | Optimal operating point estimator for hardware operating under a shared power/thermal constraint | |
CN111210498B (zh) | 降低多边形网格的细节水平以减少被渲染几何的复杂度 | |
CN110766778B (zh) | 使用散列执行并行路径空间滤波的方法和系统 | |
CN110807827B (zh) | 系统生成稳定的重心坐标和直接平面方程访问 | |
CN110675480B (zh) | 用于获取纹理操作的采样位置的方法和装置 | |
US11941752B2 (en) | Streaming a compressed light field | |
CN111667542B (zh) | 适用于人工神经网络的用于处理压缩数据的解压缩技术 | |
CN112288619A (zh) | 用于在渲染图形时预加载纹理的技术 | |
CN113393564B (zh) | 利用全局照明数据结构的基于水塘的时空重要性重采样 | |
US11847733B2 (en) | Performance of ray-traced shadow creation within a scene | |
CN112041894B (zh) | 渲染期间提高涉及水面的场景的真实感 | |
CN111445003A (zh) | 神经网络生成器 | |
CN113450445A (zh) | 临时密实渲染的自适应像素采样顺序 | |
CN113609029B (zh) | 动态压缩具有统一值的存储器区域的技术 | |
CN113822975B (zh) | 用于对图像进行有效采样的技术 | |
CN113743573A (zh) | 用于访问和利用压缩数据及其状态信息的技术 | |
CN113808183A (zh) | 使用扭曲的复合估计乘积积分 | |
US11847737B2 (en) | Temporal denoiser quality in dynamic scenes | |
CN115951938A (zh) | 软件导向的发散分支目标优先级 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |