一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

使用会话性能元数据评估定性流体验的制作方法

2022-02-24 12:14:21 来源:中国专利 TAG:


1.本公开涉及数据分析。更具体地,下面阐述的实施例描述了用于基于由管线捕获的性能元数据来评估与流会话(streaming session)相关联的流体验(streaming experience)的定性度量的技术。


背景技术:

2.基于云的服务已经被开发用于各种应用,诸如网络存储、虚拟计算资源等。流行的视频点播(vod)流服务(streaming service)提供将视频递送到客户端设备(例如,电视或平板计算机)的服务。流视频提供了要求最小服务质量(qos)以确保足够的用户体验的某些挑战。例如,低网络带宽或高网络拥塞可导致视频被延迟,从而导致客户端侧视频的重复缓冲,这阻止了无缝观看体验。
3.正在开发新的基于云的服务以用于通过网络将视频游戏和/或虚拟现实/增强现实图形流传输至客户端设备。这些应用从客户端侧接收反馈(例如,控制器反馈、惯性反馈等)以起作用。用于在显示设备或头戴式显示器(hmd)上显示图形输出的帧可在服务器上渲染并通过网络传送到客户端设备以供显示。来自客户端设备的反馈经由网络被传送到服务器设备。该反馈信号被服务器设备用来调整递送给客户端设备的后续帧。
4.这些基于云的服务的管理者不断努力改善其用户的体验。网络拥塞、渲染管线的配置、图像的编码或解码等可全部促成用户可感知的延时(latency)问题。例如,在客户端设备处的控制器的输入与在客户端设备的显示器上查看对该输入的响应之间的长延迟(delay)(也被称为“滞后”)可以使得用户的体验降级。延迟可由从客户端到服务器的网络拥塞、渲染管线的长延时、长编码程序、从服务器到客户端的网络拥塞或长解码程序引起。
5.然而,为用户定义和测量流会话的质量可能是困难的。不同用户可对同一体验具有非常不同的感知。例如,具有较高性能客户端设备的用户比具有较低性能客户端设备的用户可能感觉体验更差,这仅仅是因为具有较高性能设备的用户可能由于客户端设备所利用的硬件而期望所显示图像的更好质量。类似地,世界上不同区域中的用户可简单地基于其区域中可用的公共基础设施而具有不同的期望。
6.用于评估流会话的质量的一种常见方法是在会话结束时请求用户反馈。例如,客户端设备可以提示用户输入评级(例如,1至5星的星级评级),该评级指示用户对流会话的主观满意级别。然而,以这种方式收集主观反馈存在问题。首先,反馈可被稀疏地收集(例如,每周或每10个会话等),以使得用户在重复出现的反馈提示下不会变得烦恼。第二,由用户提供的主观反馈可能不是最准确的。一些用户可简单地选择5星,而不管其体验如何,以快速打发反馈提示。作为另一示例,即使特定用户由于例如网络拥塞而具有不良体验,但如果用户在其位置中具有不良互联网连接且习惯于不良网络性能,那么该用户仍可高度评级会话。
7.期望开发与稀疏用户反馈所提供的主观质量测量高度相关的流会话的质量的客观测量。客观测量可以是人口密集的(例如,针对每个流会话和所有流会话提供),并且从个
体终端用户移除偏差,所述偏差可以随用户而显著变化。因此,需要用于评估消费者对用于流服务的管线的满意度的新技术或方法。


技术实现要素:

8.公开了一种用于使用会话性能元数据来评估定性流体验的方法、计算机可读介质和系统。流服务的管线可适于从管线的各个组件收集元数据,例如时间戳。然后,可以对元数据进行分析,以使用从元数据导出的针对多个不同成分的加权分数来计算每个流会话的质量度量,所述多个不同成分包括但不限于卡顿、延迟和/或图片质量。
9.在本公开内容的第一方面中,描述了一种用于评估由流服务提供的流会话的质量的系统。所述系统包括一个或更多个处理器,其被配置为:接收用于所述流会话中包括的多个帧的元数据;针对所述多个帧中的每个帧,计算从所述元数据导出的多个成分中的每个成分的分数和权重;基于所述多个成分的所述分数和权重来计算用于所述流会话的质量度量;以及基于所述质量度量来调整由所述流服务实现的管线的至少一个组件。
10.在一些实施例中,质量度量被计算为图片质量分数与组合的卡顿-延时分数之和。可通过以下步骤来计算所述组合的卡顿-延时分数:针对所述多个帧中的每个帧,基于第一滑动窗口计算至少一个延时成分和至少一个卡顿成分中的每个成分的滚动加权分数;以及针对所述至少一个延时成分和至少一个卡顿成分中的每一个,计算所述滚动加权分数的组合加权和的滚动均值,其中所述组合加权和的所述滚动均值基于第二滑动窗口。
11.在一些实施例中,所述组合的卡顿-延时分数被计算为基于第一参数集合计算的总计加权均值与基于第二参数集合的标准偏差之间的差。
12.在一些实施例中,所述图片质量分数被计算为针对所述多个帧的多个图片质量分数的均值与针对所述多个帧的所述多个图片质量分数的系数和标准偏差的乘积之间的差。
13.在一些实施例中,基于所述质量度量来调整由所述流服务实现的所述管线的所述至少一个组件包括:调整由所述管线生成的所述帧的量化参数、目标比特率和编码参数、或目标分辨率中的至少一个。
14.在一些实施例中,所述一个或更多个处理器进一步被配置成生成所述流会话的所述质量度量的视觉表示。
15.在一些实施例中,其中所述多个成分包括以下成分中的至少一个:基于对应于由应用程序渲染帧的第一时间戳与对应于由所述管线的第一阶段捕获所述帧的第二时间戳之间的增量的第一卡顿成分;基于对应于在客户端设备上呈现所述帧的第一时间戳与对应于在所述客户端设备上呈现先前帧的第二时间戳之间的增量的第二卡顿成分;基于所述帧的往返延迟的第一延时成分;以及基于所述帧的堆栈延时的第二延时成分。
16.在本发明的第二方面中,描述一种用于评估流会话的质量度量的方法。该方法包括以下步骤:接收用于所述流会话中包括的多个帧的元数据,针对所述多个帧中的每个帧,计算从所述元数据导出的多个成分中的每个成分的分数和权重;以及基于所述多个成分的所述分数和权重来计算所述流会话的质量度量。所述元数据包括与由流服务实现的管线中的阶段的数量相关的信息,并且其中所述管线包括由服务器设备实现的至少一个阶段以及由经由网络连接到所述服务器设备的客户端设备实现的至少一个附加阶段。
17.在一些实施例中,所述方法还包括以下步骤:生成用于一个或更多个流会话的所
述质量度量的视觉表示。可替代地,该方法包括基于质量度量调整管线的至少一个组件的步骤。
18.在本发明的第三方面中,一种非暂时性计算机可读介质,其存储计算机指令,所述计算机指令在由一个或更多个处理器执行时,使所述一个或更多个处理器执行第二方面的方法。
19.将认识到,一个方面的特征或实施例可以与本公开的另一方面的实施例的特征组合。
附图说明
20.图1示出了根据一些实施例的用于基于云的服务的管线化堆栈。
21.图2示出了根据一些实施例的用于评估会话的质量度量的方法的流程图。
22.图3示出了根据一个实施例的并行处理单元。
23.图4a示出了根据一个实施例的图3的并行处理单元内的通用处理集群。
24.图4b示出了根据一个实施例的图3的并行处理单元的存储器分区单元。
25.图5a示出了根据一个实施例的图4a的流式多处理器。
26.图5b是根据一个实施例的使用图3的ppu实现的处理系统的概念图。
27.图5c示出了可以实现各种先前实施例的各种架构和/或功能的示例性系统。
28.图6a是根据一个实施例的由图3的ppu实现的图形处理管线的概念图。
29.图6b是根据一些实施例的游戏流式传输系统的示例系统图
30.图7示出了根据一些实施例的用于计算从流会话元数据中导出的成分的滚动加权均值度量的逻辑。
31.图8a和图8b示出了根据一些实施例的用于质量度量的卡顿成分的一对传递函数。
32.图9a和图9b示出了根据一些实施例的用于质量度量的延时成分的一对传递函数。
33.图10示出了根据一些实施例的用于根据多个每帧成分分数来计算表示流会话的质量的组合分数的逻辑。
34.图11示出了根据一些实施例的用于生成用于流会话的质量度量的逻辑。
35.图12示出了根据一些实施例的将目标比特率映射为图片质量分数的传递函数。
具体实施方式
36.用于基于云的服务的管线被配置为通过更新与内容相对应的元数据来跟踪该管线正在处理的内容的进度。当内容的处理由该阶段完成时,由服务器设备实现的管线的每个阶段可将时间戳插入到元数据中。在接收到内容和元数据时,客户端设备可更新由客户端设备实现的管线的任何附加阶段的元数据,并然后将经更新的元数据传送回服务器设备。
37.服务器设备可以分析流会话的元数据,以便计算流会话的客观质量度量。将认识到,表征流会话的常规方法对终端用户有些不可靠或冒失,并且因此,需要一种用于基于由管线针对流会话收集的元数据客观地计算质量度量的新方法。本文所公开的用于计算质量度量的技术基于元数据的各种成分,所述各种成分被选择以便将客观质量度量与由多个终端用户提供的主观质量分数相关,所述主观质量分数如可以是通过多个配置或不同成分的
集合的统计分析确定的。所得到的客观质量度量与由终端用户提供的主观质量度量具有良好的相关性,但是不需要来自终端用户的任何反馈,因为用于质量度量的所有输入变量可以从由管线自动收集的元数据导出。
38.这个客观质量度量的使用可以帮助基于云的服务(诸如游戏流式传输平台)的管理员或设计者调整管线的组件以改善该服务的所有用户的体验。例如,游戏流式传输管线可以被配置为递送与多于一种类型的游戏应用相对应的视频。当新游戏被添加到流服务时,则可能需要调整管线以匹配新游戏的特性。可以通过改变管线的编码阶段的帧速率或量化参数来调整管线以减少延时,以便改善体验并考虑新游戏应用的增加的渲染时间。在没有任何反馈的情况下,管理员可能难以确定应当调整什么参数以及新游戏应用比之前的游戏应用表现更好还是更差。由质量度量(诸如以下描述的质量度量)提供并且基于由服务器侧和客户端侧两者上的流服务收集的客观数据的信息可以极大地改善平台的用户体验。在一些情况下,质量度量还可以用于自动调整管线的参数以改善管线的功能,从而减小网络管理员的负担。
39.图1示出了根据一些实施例的用于基于云的服务的管线化堆栈100。基于云的服务被实现为多个阶段的管线化堆栈100。每个阶段包括一个或更多个组件,并且一个阶段的输出在后续阶段的输入处被接收,除了最后阶段之外。如图1所示,用于基于云的游戏流服务的管线化堆栈100包括多个阶段。服务器侧102在一个或更多个服务器设备上实现多个阶段,这些阶段包括帧捕获阶段110、编码阶段120、前向纠错(fec)阶段130和传送阶段140。管线化堆栈100还包括网络阶段150,网络阶段150包含通过网络104从服务器侧102到客户端侧106的数据分组的传送。网络阶段150在一个或更多个网络设备(诸如网络路由器、交换机、接入点等)上执行。客户端侧106在一个或更多个客户端设备上实现多个阶段,这些阶段包括解码阶段160、渲染阶段170和呈现阶段180。
40.将认识到,出于示出在此描述的各种技术的目的,在图1中描绘了用于游戏流服务的示例性管线化堆栈100。在其他实施例中,管线化堆栈100中的各阶段的特定布置可以是不同的,例如通过包括图1中未示出的附加阶段或省略图1中所示的阶段。例如,当服务未实现fec时,可以省略fec阶段130。另外,一些实现可将两个或更多个阶段的方面组合到单个阶段中(例如,fec和传送可组合到管线化堆栈100的单个阶段中)。
41.此外,虽然在图1中未明确示出,但是管线化堆栈100的初始阶段(帧捕获阶段100)与生成要流式传输至客户端设备的视频帧的一个或更多个应用程序(诸如游戏应用)交互。游戏应用100可以从客户端设备接收输入并且基于该输入渲染视频的每个后续帧。该视频帧可以存储在帧捕获阶段100可访问的存储器中,该帧捕获阶段监视存储器或者每当新的视频帧准备好被流式传输至客户端时从游戏应用接收信号。将理解,在一些实施例中,管线化堆栈100的第一阶段可适于包括游戏应用,该游戏应用重复地生成被传送到管线化堆栈100的第二编码阶段120的新帧。
42.图1中所示的每个阶段可包括一个或更多个成分。例如,编码阶段120可以包括队列组件,该队列组件在先前帧由编码器组件编码的同时异步地从帧捕获阶段110接收帧。编码阶段120还可包括发送队列组件,该发送队列组件从编码器组件异步地接收经编码帧,并在经编码帧可用且fec阶段130准备好时将经编码帧传送到fec阶段130。如将更详细讨论的,由管线化堆栈100的各阶段处理的内容的元数据可由每个阶段更新,或可替代地,由阶
段内的每个组件更新,以使得多个时间戳由管线化堆栈100的至少一个阶段附加到元数据。
43.在实施例中,内容包括渲染的视频的一个或更多个帧,并且针对每个帧生成元数据。如本文中所使用,帧可指代编码图像数据以供在显示设备上显示的数据结构。所述帧可包括像素值数组,其中每个像素值包括颜色信息的一个或更多个通道。例如,像素值可包括例如经由8或10位指示像素的颜色的红色通道、蓝色通道和绿色通道。当然,在其他实施例中,像素值可以用不同的格式来编码,诸如通过在分开的通道中编码亮度和色度信息。在一些实施例中,管线化堆栈100的每个组件或阶段可被配置成通过在那个阶段/组件已完成处理帧时向元数据添加时间戳来更新对应于经处理的帧的元数据。元数据然后连同经处理的内容一起被转发到下一组件/阶段。此外,将领会,将视频帧传送至客户端设备可指将一个或更多个数据分组传送至客户端设备,其中帧数据可被包括在该一个或更多个数据分组的有效载荷中。
44.在由基于云的服务执行的游戏应用的上下文中,其中游戏的经渲染帧经由网络被递送至客户端设备,每个帧的元数据可包括指示以下内容的时间戳:何时由服务器设备上的游戏应用渲染帧,何时经由帧捕获阶段110捕获帧(例如,从游戏应用所使用的存储器加载),何时经由编码阶段120完成帧的编码,何时在传送阶段140经由服务器设备的网络接口在网络上传送帧,何时客户端设备经由网络阶段150接收帧,何时客户端设备已经经由解码阶段160解码帧,何时经解码帧被处理以生成用于经由渲染阶段170显示在客户端设备上的图像,或者何时图像被呈现在显示设备180上等等。在一些情况下,元数据可包括用于每个帧的其他时间戳,诸如与来自客户端侧106的输入(例如,按键信息、鼠标事件信息或控制器信息等)相关联的时间戳,该时间戳用于在由管线化堆栈100进行帧处理之前由服务器侧102的游戏应用渲染该帧。帧的这些时间戳中的每一者可与其他帧(例如,先前帧或后续帧)的对应时间戳组合,以便生成表示质量度量的各种成分的原始值的增量值。如本文中所使用,增量值指代两个时间戳之间的差。在一些情况下,可基于两个后续帧之间的预期时间来移位增量值,该预期时间基于目标帧速率。由此,如果两个时间戳之间的差小于帧之间的预期时间,那么增量值可为负,且如果两个时间戳之间的差大于帧之间的预期时间,那么增量值可为正。帧之间的预期时间是指在给定目标帧速率的情况下显示每个帧的平均时间。例如,对于60hz的帧速率,帧之间的预期时间为大约16.6ms。
45.在管线化堆栈100的末端,客户端设备将元数据传送回服务器设备以用于存储和/或分析。在一个实施例中,返回到服务器设备的帧的元数据包括多个时间戳,每个时间戳对应于指示由特定阶段或阶段的组件完成帧的处理的时间。在一些实施例中,客户端设备被配置为在将数据结构(例如,文件)传送到服务器设备之前收集所述数据结构(例如,文件)中的多个帧(例如,每秒30-60帧下的60秒视频)的元数据。在这样的实施例中,服务器设备收集用于多个会话的文件,每个会话的数量为例如视频的秒数。将领会,会话的大小可被调整以匹配所收集的元数据的期望大小,诸如通过在会话中收集30分钟至60分钟价值的元数据。在一些实施例中,客户端设备收集循环缓冲器中的元数据,使得针对会话收集的元数据仅是针对会话中的最后n个帧的元数据。例如,具有适合于以每秒60帧(例如,等于36000帧的元数据)收集10分钟的数据的大小的循环缓冲器可以在会话期间连续地收集元数据,当会话在长度上延伸超过10分钟时覆写最旧的元数据。在会话结束时(例如,当游戏应用终止时),客户端设备可编码循环缓冲器的内容且将其传送到服务器设备。将领会,当用户经历
使该用户体验降级的问题时,该会话将可能较早终止,并且照此,会话的最后m分钟(对应于n个帧)通常足以突出(highlight)使该用户体验降级的问题的原因。在其他实施例中,循环缓冲器可以存在于管线的服务器侧。客户端设备可被配置为将每一帧的元数据发送回到服务器设备,所述元数据接着存储在循环缓冲器中。在会话结束时,服务器设备可以处理循环缓冲器的内容。在其他实施例中,由管线的每个阶段添加的元数据可被服务器设备剥离并临时存储在服务器设备处,使得元数据不连同内容一起被转发到客户端设备。然后,当在管线的客户端侧上处理内容时,在客户端设备处的管线的阶段生成新的元数据,并且当完成在客户端设备处正在处理内容时,元数据被编码并被传送到服务器设备。来自客户端设备的元数据然后与来自服务器设备的对应元数据组合并且存储在服务器设备处的循环缓冲器中。将领会,用于在服务器设备处收集元数据的任何技术(包括使每一阶段单独地将该阶段的对应元数据传送回服务器设备)都在本公开的范围内。
46.在实施例中,质量度量的开发依赖于三个不同的客观测量。第一测量涉及基于视频流的目标比特率的图片质量。参数“每像素位”可以通过将目标比特率(例如,每秒位)除以以像素计的帧的高度、以像素计的帧的宽度以及帧速率(例如,每秒帧)的乘积来计算。在其他实施例中,图片质量可以基于其他客观测量,诸如编码帧的分辨率和量化参数。
47.第二测量包括与延时有关的两个成分。第一成分与往返延迟(rtd)相关,并且第二成分与堆栈延时(stack latency)相关。rtd测量跨网络的延迟并包括从服务器到客户端的延迟和从客户端到服务器的延迟。在一个实施例中,当从服务器设备接收到帧(例如,帧的数据分组)时,捕获客户端设备时钟的第一时间戳(例如,在网络阶段150完成时附加到元数据的时间戳),以及当帧由客户端设备呈现(例如,在附接到或包括在客户端设备中的显示器上)时捕获客户端设备时钟的第二时间戳(例如,在完成呈现阶段180时附加到元数据的时间戳)。第二时间戳与第一时间戳之间的差被添加到附加到帧元数据的第三时间戳,该第三时间戳表示与服务器设备时钟相关联的时间(例如,帧在传送阶段140结束时被传送到客户端设备的时间),其被返回服务器设备。可通过在接收到元数据时对服务器设备时钟采样且将第三时间戳的总和与第二时间戳和第一时间戳之间的差相减来计算rtd。换句话说,rtd表示相对于服务器设备中维持的时钟对应于去往和来自服务器设备的网络延时的往返延迟,但排除客户端设备处的处理延迟(例如,第一时间戳与第二时间戳之间的差)。堆栈延时是在客户端侧捕获到输入(例如,按键、鼠标输入、控制器输入等)时的时间与包含该输入的帧被显示在客户端设备上的时间之间的差。堆栈延时可通常称为滞后测量。在实施例中,客户端设备捕获与输入的捕获相对应的时间戳。使用应用的渲染速率的短期历史,可以评估由服务器执行的应用生成的下一帧,以便将对应于客户端处的输入捕获事件的时间戳关联到由服务器渲染的帧。然后服务器等待从客户端接收指示客户端向用户呈现帧的时间的时间戳,并且与输入捕获相关联的时间戳和与帧呈现相关联的时间戳之间的差表示堆栈延迟。将了解,输入与帧渲染异步,且因此,并非每一帧都将具有堆栈延时值。
48.在一些实施例中,前向填充技术可以用于替换被确定为特殊的非数字(nan)值的成分的任何值。例如,并非每一帧可与输入相关联,且因此,仅某些帧可具有对应的堆栈延时值。其他帧可简单地用特殊nan值填充此值。实际上,一个帧的堆栈延时成分对于下一帧可能是相同的,使得如由用户的感知所指示的,针对后续帧的序列向前填充先前帧的最后好的成分值,直到元数据允许针对后续帧计算新的有效成分值的点。此前向填充技术对于
确保流会话中的每个帧和每一帧与有效值相关联是有用的,即使所述帧的元数据不可用。例如,远程输入可以在客户端设备处以1000hz被采样,如果时间戳以这种高采样速率被存储,这可能导致存储器存储溢出问题。在一些实施例中,用于监视远程输入的采样率可以较低(例如,每样本10hz或100ms),以用于生成时间戳以便减少存储装置的过载。因为对于与远程输入相关的单个时间戳实例,多个帧可对应于100ms窗口,所以窗口内的时间戳可被转发填充到窗口内的每个帧。该概念可应用于从内容的帧速率异步生成的任何元数据(例如,时间戳)。
49.在一些实施例中,某些帧可以被管线丢弃。例如,在客户端设备已显示先前帧之前到达客户端设备的帧可使客户端设备丢弃先前帧且替代地在下一帧呈现时段呈现最近的帧。在这样的情况下,依赖于用于帧呈现的时间戳(其可能不存在于丢弃的帧的元数据中)的任何成分可使用上文讨论的技术来向前填充。在一些情况下,帧也可以在服务器设备处被丢弃,诸如当帧捕获阶段110准备好在来自游戏应用的新帧中读取时在存储器中呈现多个帧时。向前填充成分的原始值对于完成稀疏元数据可以是有用的。
50.第三测量包括与卡顿相关的两个成分。第一成分通过游戏应用与卡顿相关,并且可以被称为与帧捕获相关的卡顿。换句话说,第一成分是服务器设备未能基于预期帧速率按时渲染帧的频率的测量。在一个实施例中,卡顿是指高于阈值的延时。例如,如果预期每16.6ms呈现一帧(对应于每秒60帧),那么每当在先前帧之后至少24ms渲染帧(计算为与当前帧和先前帧的渲染的完成相关联的时间戳的差)时,可定义卡顿。第二成分与管线的呈现阶段处的卡顿相关,并且可被称为与帧呈现相关的卡顿。换言之,第二成分是客户端设备在预期的帧过渡时间未能呈现新帧的频率的测量。将了解,当客户端在下一呈现时段未能接收到帧时,可在下一呈现时段期间再次显示先前帧,从而导致潜在可察觉的卡顿,其中运动看起来对于观看者而言停止。
51.在一个实施例中,基于每一帧的元数据来计算上文讨论的成分中的每一者的原始值。然后使用将原始值缩放到期望的尺度(例如,0-100)的传递函数来转换原始值。传递函数不必是线性的。还基于固定函数(取决于原始值)来分配权重,并且权重可对应于不同尺度(例如,1至10、1至200等)。应当理解,对于每个成分,传递函数和权重函数可以是不同的。例如,堆栈延时成分的传递函数可不同于帧捕获卡顿成分的传递函数。
52.质量的主观评级可以取决于事件的频率以及事件的严重性。例如,单个严重事件(诸如3秒延时)可被感知为比频繁发生的300毫秒延时更好,因为用户可将单个事件视为仅影响会话的一小部分,而更频繁发生的事件可导致用户负面地观看整个会话。为了解决质量与事件频率的这种依赖性,在滑动窗口内对每个成分求平均,使得在任何给定帧处成分的分数取决于在该帧之前的多个帧的成分的分数,这将更准确地反映个体的整体体验,该个体将记住在一段时间内的负面事件,该负面事件将影响他们对该会话的感知,甚至在该事件消失之后。
53.在实施例中,每个成分的原始值乘以相应的权重,并且通过对落入滑动窗口内的加权分数取平均来计算每个成分的每帧的滚动加权均值。由于滑动窗内的加权分数针对每一新帧而改变,因此滚动加权均值实质上为对应于滑动窗口内的x数目个帧的特定时间段的加权移动均值。
54.然后将各个成分滚动加权均值进行组合以基于该多个成分计算每帧合计值。在实
施例中,组合的加权分数被计算为所述多个成分的部分乘积之和。组合的加权分数是基于转换后的分数(例如,由传递函数处理的原始值)和来自多个成分的权重的每帧值。特定成分的部分乘积被计算为权重与滚动加权均值和转换后的分数中较小者(例如,最小值)的乘积。在其他实施例中,该部分乘积仅仅是权重与滚动加权均值的乘积。将领会,在计算组合加权分数时计算该成分的部分乘积时,给定帧的权重被重新使用。通过将权重应用于滚动加权均值,对该特定帧期间的负面事件的强调可被突出显示,即使在该帧期间该成分的原始分数最初被滑动窗口计算静默。
55.组合加权分数是每帧值,并且使用第二滑动窗口,可以计算组合加权分数的滚动均值和组合加权分数的滚动标准偏差。所述组合加权分数的滚动均值实质上为对应于第二滑动窗口内的y数目个帧的特定时间段的移动平均值,且所述滚动标准偏差实质上为特定时间段内的所述组合加权分数的变化的测量。在一个或更多个实施例中,组合加权分数的滚动均值和滚动标准偏差两者可以是每帧值。
56.然后可以基于滚动均值和滚动标准偏差来计算质量度量的组合值。在一些实施例中,质量度量(有时被称为流体验分数(ses))是卡顿-延时分数和图片质量分数之和。在一个实施例中,质量度量还可被移位和/或归一化以在设置尺度(例如,0至100)上对体验进行排名。在一个实施例中,通过对基本分数和分数偏移求和来计算卡顿-延时分数。通过使用第一和第二滑动窗口的第一配置(例如,第一参数集合)生成组合加权分数的滚动均值和组合加权分数的滚动标准偏差来计算基础分数。第一和第二滑动窗口的示例性配置是x=600帧和y=3600帧(例如,第二滑动窗口大于第一滑动窗口)。然后通过取组合加权分数的滚动均值与系数(z)和组合加权分数的滚动标准偏差的乘积之间的差来计算每帧流体验卡顿延时分数。在示例性配置中,z被设置为6.0以计算基础分数。以与基础分数类似的方式但针对第一和第二滑动窗口以及系数使用不同配置(例如,第二参数集合)来计算分数偏移。第一滑动窗口和第二滑动窗口的示例性配置是x=3600帧和y=600帧(例如,第一滑动窗口大于第二滑动窗口),并且z被设置为4.0以计算分数偏移。
57.将了解,可每帧计算基础分数及分数偏移。然而,在一些实施例中,卡顿-延时分数可以是每会话合计值。照此,可以将卡顿-延时分数计算为(每帧)基本分数的合计加权均值与分数偏移的标准偏差之间的差,其中从远程输入频率导出合计加权均值的权重。如本文中所使用的,远程输入频率指代对应于主动输入(例如,按键事件、鼠标事件、控制器按钮或操纵杆事件等)的时间百分比的测量值。
58.在实施例中,图片质量分数是使用与上文针对卡顿和延时成分所描述的算法分离的算法来导出的。在这种实施例中,基于图片质量的原始分数来计算图片质量分数,所述原始分数是与视频流的每像素比特率的目标比特相关的每会话值。在一些情况下,目标比特率可以在流会话期间动态地改变。在这样的情况下,图片质量分数可以被计算为会话期间的目标比特率的均值(例如,通过对每个帧的目标比特率求和并且然后除以帧数量)。
59.然后通过对图片质量分数和卡顿-延时分数求和来计算质量度量。原始质量度量分数可随后被归一化和移位,使得分数落在管理员或开发者容易评估的期望范围(例如,0-100)内。
60.将领会,对流服务的改变(诸如调整编码/解码参数、或调整视频内容的目标比特率或分辨率)可被快速评估以确定该改变可能对终端用户具有的影响。类似地,管线可被配
置成自动调整参数以尝试改善质量度量分数。例如,在添加新视频游戏以由流服务递送的情况下,管线可自动被配置为调整管线的各个阶段的参数以尝试改进流服务的质量,以适应管线的新渲染部分。例如,新游戏可能需要较长的渲染时间,这使得尝试每秒流式传输60帧引起严重的卡顿。随着与新游戏相关联的流会话的质量度量降低,服务器设备可将帧速率从60fps降低至30fps。可替代地,编码器的量化参数可以被改变以尝试减小视频流的目标比特率,从而使得网络带宽减小。管理员或开发者还可查看多个流的质量度量的图并作出如何手动地调整管线的决定(例如,通过增加可用于处理管线的某些阶段的群集的数量等)。
61.图2示出了根据一些实施例的用于评估会话的质量度量的方法200的流程图。方法200在由一个或更多个处理器执行的软件的上下文中描述。在一些实施例中,方法200至少部分地可由服务器设备执行的指令来执行。在其他实施例中,方法200可由硬件或硬件和软件的某种组合来执行。
62.在步骤202处,在服务器设备处接收流会话的元数据。元数据包括流会话中包括的多个帧的信息。所述信息可包括指示管线中的多个点处的处理完成(例如,管线中的每一阶段的完成)的时间戳的数目。
63.在步骤204,为从元数据导出的多个成分中的每个成分计算分数和权重。针对流会话中包括的多个帧中的每个帧计算分数和权重。在一些实施例中,从应用于将原始值转换成分数的传递函数的原始值导出分数。原始值可计算为增量值,其为当前帧的时间戳与先前帧的对应时间戳之间的差。在一些实施例中,基于帧速率将原始值移位预期延时,使得原始值为正或负。在一些实施例中,权重源自依赖于原始值的函数。
64.在步骤206,基于多个成分的分数和权重来计算流会话的质量度量。在一些实施例中,质量度量被计算为图片质量分数和组合的卡顿-延时分数之和。通过以下步骤来计算所述组合的卡顿-延时分数:针对所述多个帧中的每一帧,基于第一滑动窗口计算至少一个延时成分和至少一个卡顿成分中的每一成分的滚动加权分数;以及计算针对所述至少一个延迟成分和至少一个卡顿成分中的每一个的所述滚动加权分数的组合加权和的滚动均值,其中所述组合加权和的滚动均值基于第二滑动窗口。将图片质量分数计算为用于多个帧的多个图片质量分数的均值与用于多个帧的多个图片质量分数的系数和标准偏差的乘积之间的差。在一些实施例中,质量度量被归一化和/或移位。
65.在步骤208,基于质量度量来调整管线的至少一个成分。所述调整可包括调整由管线生成的所述帧的量化参数、目标比特率、编码参数或目标分辨率中的至少一者。在一些实施例中,当一个或更多个流会话的质量度量低于阈值时,调整诸如量化参数之类的参数。例如,可计算多个会话的质量度量的平均值,并将其与阈值进行比较以确定是否调整参数。在一些实施例中,如果一个或更多个流会话的质量度量高于阈值,则也可以调整管线的成分。例如,如果质量度量非常高(即,指示高用户满意度),则可以调整某些参数以例如增加流会话的分辨率、比特率、帧速率等,同时尝试避免由于例如由网络拥塞引起的卡顿或延时而对感知质量的负面影响。
66.将认识到,管线化堆栈100的阶段和/或方法200的步骤通过以下各项中的至少一项来实现:一个或更多个服务器设备、一个或更多个网络设备、和/或客户端设备。服务器设备、网络设备和客户端设备中的每一个至少包括处理器、存储器和网络接口。所述处理器可
包括常规可编程处理器,例如中央处理单元。可替代地,该处理器可包括精简指令集计算机(risc),诸如arm处理器或片上系统(soc),该精简指令集计算机在单个集成电路或包括在层叠封装(pop)设备中的多个集成电路上包括一个或更多个cpu核和一个或更多个gpu核。在一些实施例中,尤其对于任务为执行帧渲染操作或可受益于并行架构(诸如单指令、多数据(simd),或单指令、多线程(simt)处理器架构)的其他类型的操作的阶段,处理器可包括并行处理单元(ppu)或张量处理器。在一个或更多个其他实施例中,该一个或更多个服务器设备可至少部分地被实现为使用一个或更多个虚拟组件的虚拟机的实例化,该一个或更多个虚拟组件可包括但不限于虚拟cpu、虚拟gpu和虚拟存储器中的一个或更多个。
67.现在将根据用户的期望,阐述关于可以实现前述框架的各种可选架构和特征的更多说明性信息。应该特别注意的是,出于说明性目的阐述了以下信息,并且不应该被解释为以任何方式进行限制。任选的以下特征可以任选地并入或不排除所描述的其他特征。
68.并行处理架构
69.图3示出了根据一个实施例的并行处理单元(ppu)300。在一个实施例中,ppu 300是在一个或更多个集成电路器件上实现的多线程处理器。ppu 300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由ppu 300执行的指令集的实例。在一个实施例中,ppu 300是图形处理单元(gpu),其被配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成用于在显示设备(诸如液晶显示(lcd)设备)上显示的二维(2d)图像数据。在其他实施例中,ppu 300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
70.一个或更多个ppu 300可以被配置为加速数千个高性能计算(hpc)、数据中心和机器学习应用。ppu 300可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化,如本文所描述的用于测试、验证、或认证涉及光线追踪技术的自主车辆机器人应用的其他模拟平台,以及个性化用户推荐,等等。
71.如图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)堆叠在每个设备内。
72.nvlink 310互连使得系统能够扩展并且包括与一个或更多个cpu结合的一个或更多个ppu 300,支持ppu 300和cpu之间的高速缓存一致性,以及cpu主控。数据和/或命令可以由nvlink 310通过集线器330发送到ppu 300的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5b更详细地描述nvlink 310。
73.i/o单元305被配置为通过互连302从主机处理器(未示出)发送和接收通信(例如,
命令、数据等)。i/o单元305可以经由互连302直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,i/o单元305可以经由互连302与一个或更多个其他处理器(例如,一个或更多个ppu 300)通信。在一个实施例中,i/o单元305实现外围组件互连高速(pcie)接口,用于通过pcie总线进行通信,并且互连302是pcie总线。在替代的实施例中,i/o单元305可以实现其他类型的已知接口,用于与外部设备进行通信。
74.i/o单元305对经由互连302接收的数据包进行解码。在一个实施例中,数据包表示被配置为使ppu 300执行各种操作的命令。i/o单元305按照命令指定将解码的命令发送到ppu 300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或ppu300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,i/o单元305被配置为在ppu300的各种逻辑单元之间和之中路由通信。
75.在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向ppu 300提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和ppu300两者访问(例如,读/写)的区域。例如,i/o单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向ppu 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到ppu 300的各个单元。
76.前端单元315耦合到调度器单元320,其配置各种gpc 350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个gpc 350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个gpc 350上的多个任务的执行。
77.调度器单元320耦合到工作分配单元325,其被配置为分派任务以在gpc 350上执行。工作分配单元325可以跟踪从调度器单元320接收到的若干调度的任务。在一个实施例中,工作分配单元325为每个gpc 350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定gpc 350处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由gpc 350主动处理的任务。当gpc 350完成任务的执行时,该任务从gpc 350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在gpc 350上执行。如果gpc 350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从gpc 350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在gpc 350上执行。
78.工作分配单元325经由xbar(交叉开关)370与一个或更多个gpc 350通信。xbar370是将ppu 300的许多单元耦合到ppu 300的其他单元的互连网络。例如,xbar 370可以被配置为将工作分配单元325耦合到特定的gpc 350。虽然没有明确示出,但ppu 300的一个或更多个其他单元也可以经由集线器330连接到xbar 370。
79.任务由调度器单元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。
80.在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在ppu 300上执行。在一个实施例中,多个计算应用由ppu 300同时执行,并且ppu 300为多个计算应用程序提供隔离、服务质量(qos)和独立地址空间。应用程序可以生成指令(例如,api调用),其使得驱动程序内核生成一个或更多个任务以由ppu 300执行。驱动程序内核将任务输出到正在由ppu 300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图5a更详细地描述线程和协作线程。
81.图4a示出了根据一个实施例的图3的ppu 300的gpc 350。如图4a所示,每个gpc 350包括用于处理任务的多个硬件单元。在一个实施例中,每个gpc 350包括管线管理器410、预光栅操作单元(prop)415、光栅引擎425、工作分配交叉开关(wdx)480、存储器管理单元(mmu)490以及一个或更多个数据处理集群(dpc)420。应当理解,图4a的gpc 350可以包括代替图4a中所示单元的其他硬件单元或除图4a中所示单元之外的其他硬件单元。
82.在一个实施例中,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中的至少一个以实现神经网络模型和/或计算管线。
83.prop单元415被配置为将由光栅引擎425和dpc 420生成的数据路由到光栅操作(rop)单元,结合图4b更详细地描述。prop单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
84.光栅引擎425包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎425的输出包括例如要由在dpc 420内实现的片段着色器处理的片段。
85.包括在gpc 350中的每个dpc 420包括m管道控制器(mpc)430、图元引擎435和一个
或更多个sm 440。mpc 430控制dpc 420的操作,将从管线管理器410接收到的数据包路由到dpc 420中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到sm 440。
86.sm 440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个sm 440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,sm 440实现simd(单指令、多数据)体系架构,其中线程组(例如,线程束)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,sm 440实现simt(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使能线程束之间的并发和线程束内的串行执行。在另一个实施例中,为每个个体线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个个体线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5a更详细地描述sm 440。
87.mmu 490提供gpc 350和存储器分区单元380之间的接口。mmu 490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,mmu 490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲器(tlb)。
88.图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的同步动态随机存取存储器或其他类型的持久存储器。
89.在一个实施例中,存储器接口470实现hbm2存储器接口,并且y等于u的一半。在一个实施例中,hbm2存储器堆叠位于与ppu 300相同的物理封装上,提供与常规gddr5 sdram系统相比显著的功率高和面积节约。在一个实施例中,每个hbm2堆叠包括四个存储器裸晶并且y等于4,其中hbm2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
90.在一个实施例中,存储器304支持单错校正双错检测(secded)纠错码(ecc)以保护数据。对于对数据损毁敏感的计算应用程序,ecc提供了更高的可靠性。在大型集群计算环境中,ppu 300处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
91.在一个实施例中,ppu 300实现多级存储器层次。在一个实施例中,存储器分区单元380支持统一存储器以为cpu和ppu 300存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪ppu 300对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的ppu 300的物理存储器。在一个实施例中,nvlink 310支持地址转换服务,其允许ppu 300直接访问cpu的页表并
且提供由ppu 300对cpu存储器的完全访问。
92.在一个实施例中,复制引擎在多个ppu 300之间或在ppu 300与cpu之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元380可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
93.来自存储器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和xbar 370。
94.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或另一个单元中。
95.图5a示出了根据一个实施例的图4a的流式多处理器440。如图5a所示,sm 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元(sfu)552、一个或更多个加载/存储单元(lsu)554、互连网络580、共享存储器/l1高速缓存570。
96.如上所述,工作分配单元325调度任务以在ppu 300的gpc 350上执行。任务被分配给gpc 350内的特定dpc 420,并且如果该任务与着色器程序相关联,则该任务可以被分配给sm 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给sm 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、sfu 552和lsu 554)。
97.协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动api支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小
于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
98.协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
99.分派单元515被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元510包括两个分派单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个分派单元515或附加分派单元515。
100.每个sm 440包括寄存器文件520,其提供用于sm 440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在另一个实施例中,寄存器文件520在由sm 440执行的不同线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储器。
101.每个sm 440包括l个处理核心550。在一个实施例中,sm 440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的ieee 754-2008标准。在一个实施例中,核心550包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
102.张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4
×
4矩阵上运算并且执行矩阵乘法和累加运算d=a
×
b c,其中a、b、c和d是4
×
4矩阵。
103.在一个实施例中,矩阵乘法输入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个线程。
104.每个sm 440还包括执行特殊函数(例如,属性评估、倒数平方根等)的m个sfu 552。在一个实施例中,sfu 552可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,sfu 552可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器304加载纹理图(例如,纹理像素的2d阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由sm 440执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/l1高速缓存470中。纹理单元实现纹理操作,诸如使用mip图
(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个sm 440包括两个纹理单元。
105.每个sm 440还包括n个lsu 554,其实现共享存储器/l1高速缓存570和寄存器文件520之间的加载和存储操作。每个sm 440包括将每个功能单元连接到寄存器文件520以及将lsu 554连接到寄存器文件520、共享存储器/l1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将lsu 554连接到寄存器文件和共享存储器/l1高速缓存570中的存储器位置。
106.共享存储器/l1高速缓存570是片上存储器阵列,其允许数据存储和sm 440与图元引擎435之间以及sm 440中的线程之间的通信。在一个实施例中,共享存储器/l1高速缓存570包括128kb的存储容量并且在从sm 440到存储器分区单元380的路径中。共享存储器/l1高速缓存570可以用于高速缓存读取和写入。共享存储器/l1高速缓存570、l2高速缓存460和存储器304中的一个或更多个是后备存储。
107.将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/l1高速缓存570内的集成使共享存储器/l1高速缓存570起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
108.当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给dpc 420。块中的线程执行相同的程序,使用计算中的唯一线程id来确保每个线程生成唯一结果,使用sm 440执行程序并执行计算,使用共享存储器/l1高速缓存570以在线程之间通信,以及使用lsu 554通过共享存储器/l1高速缓存570和存储器分区单元380读取和写入全局存储器。当被配置用于通用并行计算时,sm 440还可以写入调度器单元320可用来在dpc 420上启动新工作的命令。
109.ppu 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数码相机、运载工具、头戴式显示器、手持式电子设备、虚拟机(vm)或其他共享计算资源等中。在一个实施例中,ppu 300包含在单个半导体衬底上。在另一个实施例中,ppu 300与一个或更多个其他器件(诸如附加ppu 300、存储器304、精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数字-模拟转换器(dac)等)一起被包括在片上系统(soc)上。
110.在一个实施例中,ppu 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备。图形卡可以被配置为与台式计算机的主板上的pcie插槽接口。在又一个实施例中,ppu 300可以是包含在主板的芯片集中的集成图形处理单元(igpu)或并行处理器。
111.示例性计算系统
112.具有多个gpu和cpu的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能gpu加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
113.图5b是根据一个实施例的使用图3的ppu 300实现的处理系统500的概念图。处理系统500包括cpu 530、交换机510和多个ppu 300以及相应的存储器304。nvlink 310提供每个ppu 300之间的高速通信链路。尽管图5b中示出了特定数量的nvlink 310和互连302连接,但是连接到每个ppu 300和cpu 530的连接的数量可以改变。交换机510在互连302和cpu 530之间接口。ppu 300、存储器304和nvlink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
114.在另一个实施例(未示出)中,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互连或者片上或裸晶上互连。
115.在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且ppu 300和/或存储器304中的每一个可以是封装器件。在一个实施例中,cpu 530、交换机510和并行处理模块525位于单个半导体平台上。
116.在一个实施例中,每个nvlink 310的信令速率是20到25千兆位/秒,并且每个ppu 300包括六个nvlink 310接口(如图5b所示,每个ppu 300包括五个nvlink 310接口)。每个nvlink 310在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当cpu 530还包括一个或更多个nvlink 310接口时,nvlink 310可专门用于如图5b所示的ppu到ppu通信,或者ppu到ppu以及ppu到cpu的某种组合。
117.在一个实施例中,nvlink 310允许从cpu 530到每个ppu 300的存储器304的直接加载/存储/原子访问。在一个实施例中,nvlink 310支持一致性操作,允许从存储器304读取的数据被存储在cpu 530的高速缓存分层结构中,减少了cpu 530的高速缓存访问延迟。在一个实施例中,nvlink 310包括对地址转换服务(ats)的支持,允许ppu 300直接访问cpu 530内的页表。一个或更多个nvlink 310还可以被配置为以低功率模式操作。
118.图5c示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。如图所示,提供系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以使用任何合适的协议来实现,诸如pci(外围组件互连)、pci-express、agp(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取随机存取存储器(ram)的形式。
119.系统565还包括输入设备560、并行处理系统525和显示设备545,例如常规crt(阴极光线管)、lcd(液晶显示器)、led(发光二极管)、等离子显示器等。可以从输入设备560(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
120.此外,系统565可以出于通信目的通过网络接口535耦合到网络(例如,电信网络、局域网(lan)、无线网络、广域网(wan)(诸如因特网)、对等网络、电缆网络等)。
121.系统565还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
122.计算机程序或计算机控制逻辑算法可以存储在主存储器540和/或辅助存储中。这些计算机程序在被执行时使得系统565能够执行各种功能。存储器540、存储和/或任何其他存储是计算机可读介质的可能示例。
123.各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
124.虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
125.机器学习
126.在处理器(诸如ppu 300)上开发的深度神经网络(dnn)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。
127.在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
128.深度神经网络(dnn)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,dnn模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸
如线条和角)。第二层组装线条以寻找更高级别的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
129.一旦dnn经过训练,dnn就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(dnn从给定输入中提取有用信息的过程)包括识别存入atm机中的支票存款上的手写数字,识别照片中朋友的图像,向超过五千万用户提供电影推荐,在无人驾驶汽车中识别和分类不同类型的汽车、行人和道路危险,或实时翻译人类言语。
130.在训练期间,数据在前向传播阶段流过dnn,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到dnn正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由ppu 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理出新的信息。
131.神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百tflops的性能,ppu 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
132.此外,应用本文所公开的一种或更多种技术生成的图像可被用于训练、测试或证实被用于识别现实世界中的对象和环境的dnn。此类图像可包括道路、工厂、建筑物、城市环境、农村环境、人、动物和任何其他物理对象或真实世界环境的场景。此类图像可用于训练、测试或证实在机器或机器人中采用以操纵、处理或修改现实世界中的物理对象的dnn。此外,此类图像可以用于训练、测试或证实在自主车辆中采用的dnn,以便在真实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术生成的图像可用于向这种机器、机器人和车辆的用户传达信息。
133.图形处理管线
134.在一个实施例中,ppu 300包括图形处理单元(gpu)。ppu 300被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。ppu 300可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
135.应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器304)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行api调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在ppu 300的sm 440上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,sm 440中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的sm 440可以被配置为同时执行不同的着色程序。例如,sm 440的第一子集可以被配置为执行顶点着色程序,而sm 440
的第二子集可以被配置为执行像素着色程序。sm 440的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入l2高速缓存460和/或存储器304。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,sm 440的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器304中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
136.图6a是根据一个实施例的由图3的ppu 300实现的图形处理管线600的概念图。图形处理管线600是被实现以从3d几何数据生成2d计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由api定义的图形处理管线。作为选择,图形处理管线600可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
137.如图6a所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,vscc)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
138.数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。
139.顶点着色阶段620通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,《x,y,z,w》)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,ncd)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。
140.图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。
141.几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何图元传送到视口scc阶段650。
142.在一个实施例中,图形处理管线600可以在流式多处理器和顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口scc阶段650可以利用数据。在一个实施例中,由图形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,l1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口scc阶段650可以访问高速缓存中的数据。在一个实施例中,视口scc阶段650和光栅化阶段660被实现为固定功能电路。
143.视口scc阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段660。
144.光栅化阶段660将3d几何图元转换成2d片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。
145.片段着色阶段670通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
146.光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(例如,输出数据602)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
147.应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段640)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线600的任何阶段可以由图形处理器(诸如ppu 300)内的一个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由可编程
硬件单元(诸如ppu 300的sm 440)来实现。
148.图形处理管线600可以经由由主机处理器(诸如cpu)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(api),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制ppu 300的操作的多个指令。api为程序员提供抽象,其允许程序员利用专用图形硬件(诸如ppu 300)来生成图形数据而不要求程序员利用ppu 300的特定指令集。应用程序可以包括被路由到ppu 300的设备驱动程序的api调用。设备驱动程序解释api调用并执行各种操作以响应api调用。在一些情况下,设备驱动程序可以通过在cpu上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用cpu和ppu 300之间的输入/输出接口在ppu 300上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用ppu300的硬件来实现图形处理管线600。
149.可以在ppu 300内执行各种程序以便实现图形处理管线600的各个阶段。例如,设备驱动程序可以启动ppu 300上的内核以在一个sm 440(或多个sm 440)上执行顶点着色阶段620。设备驱动程序(或由ppu 400执行的初始内核)还可启动ppu 400上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在固定单元硬件(诸如在ppu 400内实现的光栅器或数据组装器)上实现。应当领会,在被sm 440上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
150.应用本文中所公开的一种或更多种技术生成的图像可显示在监视器或其他显示设备上。在一些实施例中,显示设备可直接耦合到生成或渲染图像的系统或处理器。在其他实施例中,显示设备可例如经由网络间接耦合到系统或处理器。此类网络的示例包括互联网、移动电信网络、wifi网络、以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或处理器生成的图像可通过网络流式传输到显示设备。例如,此类流式传输允许例如渲染图像的视频游戏或其他应用在服务器上或在数据中心中执行,并且所渲染的图像被传送并在与服务器或数据中心物理地分开的一个或更多个用户设备(诸如计算机、视频游戏控制台、智能电话、其他移动设备等)上显示。所以,本文公开的技术可以应用于增强流式传输的图像以及增强流式传输图像的服务,诸如nvidia geforce now(gfn)、google stadia等。
151.经由光线追踪进行渲染
152.尽管通常使用基于光栅的渲染技术来实现渲染任务,但用于执行渲染的一些算法利用被称为光线跟踪的光传输模拟。光线跟踪算法模拟光与场景中的虚拟对象的交互以便计算图像的像素的颜色。针对由视窗和虚拟相机位置定义的图像的每个像素,光线被投射到场景中。通过从光线与虚拟对象的交点投射新的光线,可以在光线与虚拟对象的每个相交处模拟诸如漫反射和镜面反射、折射、吸收之类的效果。当光线与光源交互时,可以跟踪从虚拟相机到光源的光路径以确定穿过对应于光线的像素的光的颜色。可计算来自穿过像素的多条光线的合计颜色以生成图像的像素的颜色。
153.在一些实施例中,ppu 300可以用于根据各种光线追踪技术渲染图像。例如,可以通过在一个或更多个sm 440上执行多个线程来并行地为多个光线实现光线投射。每个线程将光线的参数与场景中的虚拟对象的表示进行比较,以确定光线是否与虚拟对象相交。在
一些实施例中,虚拟对象的表示包括包围体分层结构,其用于高效地确定光线是否与场景中的任何虚拟对象相交。被确定为与虚拟对象相交的光线可生成与由sm 440执行的第二多个线程相对应的一个或更多个新光线,以便模拟照明效果。当光线与光源相交时,则从虚拟相机到光源的光线链被标识为光路径,并且可以针对光路径计算像素的颜色。
154.可以使用光线追踪算法来产生逼真的计算机生成的图像。已经利用这样的算法来产生动画特征电影或电视节目、用于商业应用的模拟图像(例如,包括在手册或目录中的图像)等。虽然光线追踪传统上对于实时应用而言太复杂,但是处理能力和底层算法的进步使得实时光线追踪在一些应用中是实用的。
155.游戏流式传输系统
156.图6b是根据本公开的一些实施例的游戏流式传输系统605的示例系统图。图6b包括一个或更多个游戏服务器603(其可以包括与图5b的示例处理系统500和/或图5c的示例性系统565类似的组件、特征和/或功能),一个或更多个客户端设备604(其可以包括与图5b的示例处理系统500和/或图5c的示例性系统565类似的组件、特征和/或功能),以及一个或更多个网络606(其可以类似于本文描述的一个或更多个网络)。在本公开的一些实施例中,系统605可被实现。
157.在系统605中,对于游戏会话,一个或更多个客户端设备604可以仅响应于对一个或更多个输入设备的输入接收输入数据,将输入数据传送到一个或更多个游戏服务器603,从一个或更多个游戏服务器603接收编码的显示数据,并且在显示器624上显示显示数据。如此,将计算上更密集的计算和处理卸载到一个或更多个游戏服务器603(例如,渲染——具体为光线或路径跟踪——以供一个或更多个游戏服务器603的一个或更多个gpu执行游戏会话的图形输出)。换言之,将游戏会话从一个或更多个游戏服务器603流式传输到一个或更多个客户端设备604,由此降低一个或更多个客户端设备604对图形处理和渲染的要求。
158.例如,关于游戏会话的实例化,客户端设备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显示该显示数据。将领会,管线化堆栈100的一个或更多个阶段可由游戏服务
器603和/或客户端设备604来实现。
159.评估流质量
160.图7示出了根据一些实施例的用于计算从流会话元数据中导出的成分的滚动加权均值度量的逻辑。如上所述,流会话的元数据包括与管线100的不同阶段或成分相关的各种时间戳。成分分数732和与成分分数732相关联的权重714可以由被配置成处理元数据的模块700生成。如本文所使用的,模块700可以用硬件、软件或硬件和软件的组合来实现。在实施例中,模块700用由服务器设备的一个或更多个处理器执行的软件实现。例如,模块700可以被实现为存储在存储器中的、由一个或更多个处理器执行的一组指令。
161.在一个实施例中,原始值702包括基于从元数据读取的两个或更多个时间戳计算的增量。针对流会话的每个帧计算原始值702,并且给定帧的原始值702可以基于与该帧相关联的时间戳以及与一个或更多个单独帧相关联的时间戳来导出。例如,成分可包括但不限于捕获增量、呈现增量、rtd和堆栈延时。
162.如图7中所描绘的,特定成分的每帧原始值702由成分模块700接收。在一个实施例中,原始值702被存储在存储器中存储的数组中,该数组使用处理器来生成,该处理器被配置成处理流会话中的每一帧的元数据以计算原始值702。处理器生成对应于质量度量的两个或更多个成分(例如,一个或更多个卡顿成分和一个或更多个延时成分)的两个或更多个数组。
163.然后使用一对传递函数710来处理原始值以生成分数712和权重714。图8a和图8b示出了根据一些实施例的用于质量度量的卡顿成分的一对传递函数。传递函数仅出于说明性目的而提供,且不应解释为限制本文中所公开的实施例。可基于对大量流会话元数据的统计分析以及准确筛选或过滤的主观质量度量来选择实施例实现的特定传递函数,以最大化客观质量度量与主观质量度量之间的相关性。
164.如图8a中所描绘的,质量度量的卡顿成分的分数的传递函数802,诸如还可被称为与帧呈现有关的卡顿的第一卡顿成分,在图上示出,其将以毫秒给出的原始值702映射到指定范围内的无维度分数712。在这种情况下,分数712被映射到0和100之间的范围,但是在其他实施例中,该范围可以被选择为任意值的范围,并且可以包括负值以及正值。由此,对于与流会话的帧相关联的卡顿成分的每个原始值702,通过将原始值702映射到由传递函数给出的对应值来生成分数712。
165.图8a中所示的传递函数802可描述如下。如果原始值702小于最小阈值(称为delta_min),则分数712等于最大分数(例如,100)。如果原始值702大于最小阈值,则分数712等于线性区域中的最大分数(例如,score_linear_max)(其可小于最大分数(例如,50))与线性区域中的最大分数和线性区域的范围的最大值和最小值之间的差(例如,delta_max和delta_min)之比乘以原始值702和delta_min之间的差之间的差。delta_max值可设定为等于总增量(delta)(例如,所计算的时间戳的差与预期帧速率之间的差),高于所述总delta,所有原始值被指派分数0,其在此实例中设定为116ms。delta_min可被设置为等于帧速率的乘数(例如,1.5*1000/{frames_per_second})。
166.如图8b中所描绘的,质量度量的卡顿成分的权重的第二传递函数804被显示在将原始分数702映射到指定范围中的维度权重的图上。如本文所示,权重714也在0和100之间的尺度上给出,但是针对权重传递函数可以选择不同的尺度(例如,0.0和1.0之间的尺度、0
至200之间的尺度等)。
167.图9a和图9b示出了根据一些实施例的质量度量的延时成分的一对传递函数。例如,延时成分可以是rtd。将领会,延时成分的传递函数不同于以上示出的卡顿成分的传递函数。通过实现不同传递函数的使用,原始延迟值可被解释为具有反映各种成分对最终质量度量的影响的相对差的不同分数和权重。
168.如图9a中所描绘,质量度量的延时成分的分数的传递函数902示出在图上,所述图将以毫秒给出的原始值702映射到指定范围内的无维度分数712。传递函数902将0和100的delta_min和delta_max之间的线性区域中的原始值702分别映射到分数712。在delta_max之上,分数712被给定为0;否则,该分数的范围以从delta_min到delta_max的线性方式在100与0之间。尽管在此实例中,delta_min被设定为等于最小可能delta值(0ms),但在一些实施例中,delta_min可被设定为例如16-32ms的值,使得低于此阈值的任何原始值702被视为等于最大分数。
169.如图9b中所描绘的,传递函数904使用线性递增函数将原始值702映射到权重714。在实施例中,权重被设置为等于原始值的1/10,直到最大阈值(例如,200)。在一些实施例中,权重714也可被设置成低于最小阈值的最小值(例如,权重等于低于10ms的原始值的1.0)。
170.将领会,不同的原始值702可被指派相同的分数712,但不同的权重714,使得该成分对质量度量的贡献是基于两个不同的传递函数的组合来调整的,并且不限于单个传递函数。例如,200ms和1000ms的原始值两者可以被认为远远超出正常范围,使得它们都被分配等于最小分数的分数。然而,通过应用不同的权重,1000ms的原始值可能比200ms的原始值对质量度量贡献更多。
171.返回图7,分数712和对应的权重714被提供给滑动窗口单元720,滑动窗口单元720应用滑动窗口以基于对应的权重714计算分数712的滚动加权均值。将领会,较高分数对应于良好性能而较低分数对应于较差性能。为了表征流会话,应当存在一种随时间对分数进行合计的方式(例如,对包括在流会话中的多个帧的分数进行合计)。一个目标是在多个帧上散布分数的严重下降。例如,直观地,突然但严重的卡顿通常将被用户感知为影响可能已经经历过该问题的多于单个帧。用户的感知是坏帧周围的多个帧也是坏的,因为当正确显示下一帧时用户不能立即从事件完全恢复。换言之,负面体验将倾向于对我们的主观感知做出贡献:紧接着负面体验的其他体验也比它们将孤立地更负面。另一个目标是分数的更频繁但较不严重的下降应当与孤立的严重的下降不同地进行加权。
172.在一个实施例中,滑动窗口的大小是x帧(例如,x=30、600等)。对于每一帧,通过对滑动窗口中包括的当前帧和x-1个先前帧的加权分数712求和来计算特定成分的滚动加权均值,其中每个分数在求和之前乘以对应的权重714,并且通过滑动窗口内的权重714之和归一化加权和,以生成滚动加权均值(rwm)722。
173.最后,通过经由选择逻辑730为每个帧选择分数712或rwm 722中的最小值,计算作为每帧值的最终成分质量分数732。
174.在一些实施例中,成分模块700可被配置为基于每个成分的不同传递函数710顺序地计算两个或更多个不同成分的多个每帧成分分数732和对应权重714。在其他实施例中,多个成分模块700可并行操作以并行计算两个或更多个成分的每帧成分分数732和对应权
重714。
175.图10图示了根据一些实施例的用于根据多个每帧成分分数来计算表示流会话的质量的组合分数的逻辑。从一个或更多个模块700接收多个成分的成分数据(例如,每帧成分分数732和对应的权重714)。模块1000处理成分数据以生成组合分数1032。在一个实施例中,组合分数1032表示基于卡顿和延时成分的流会话的质量度量的至少一部分。如本文所使用的,模块1000可以用硬件、软件或硬件和软件的组合来实现。在一个实施例中,模块1000用由服务器设备的一个或更多个处理器执行的软件实现。例如,模块1000可以被实现为存储在存储器中的、由一个或更多个处理器执行的一组指令。
176.在实施例中,组合逻辑1010从一个或更多个模块700接收至少四组成分数据。成分数据可以包括但不限于用于帧捕获和呈现卡顿以及rtd和堆栈延时的成分分数732和对应的权重714。组合逻辑1010通过对每个成分的部分积求和来计算每帧加权均值(称为组合加权分数(cws)1012),部分积通过将成分分数732乘以对应的权重714,然后通过除以所有成分上的权重714之和来归一化该和,来计算。
177.cws 1012是基于与卡顿和延时有关的多个成分的成分分数732的每帧值。将领会,已经针对质量度量的一个实现选择了卡顿和延时成分;然而,在其他实施例中,除了或代替本文公开的卡顿/延时成分,还可以在质量度量中包括不同成分。
178.cws 1012然后由分配逻辑1020处理,分配逻辑1020根据第二滑动窗口计算cws 1012值的分布的参数。在一个实施例中,第二滑动窗口的大小为y帧(例如,y=30、600等)。将了解,第二滑动窗口的大小可不同于模块700中实现的第一滑动窗口的大小。对于每个帧,计算第二滑动窗口内的cws 1012值的滚动均值1022和滚动标准偏差(std)1024。通过对cws 1012值进行求和并且除以y来计算滚动均值1022。然后通过取cws 1012值与滚动均值1022之间的平方差之和的平方根来计算滚动std 1024。
179.在一个实施例中,滚动均值1022可用作组合分数1032。然而,如图10所示,在其他实施例中,置信度单元1030处理滚动均值1022和滚动std 1024,置信度单元1030被配置为从滚动均值1022中减去多个滚动std 1024,以产生组合分数1032。在实施例中,倍数是6.0,但是其他倍数(例如,1.5、3.0等)被预期为以较低的置信度使用。将领会,置信度单元1030用于确保组合分数1032反映包括在滑动窗口中的cws 1012值的分布的低范围,以使得该分布中的大多数值(例如,基于多个std)高于组合分数1032,且是基于计算出的质量分数在指定时间段内的方差来调整第二滑动窗口内的平均质量分数的方式。由此,对于滑动窗口内的cws值1012的两个不同样本,组合分数1032对于具有较高方差的样本集合将是较低的,即使当这两组样本具有相同的滚动均值1022时。
180.将领会,组合分数1032仍作为每帧值来计算,即使每个组合分数1032是根据在模块700和模块1000中实现的第一滑动窗口和第二滑动窗口两者的来自给定帧的邻域中的多个帧的元数据的原始值702的反映。虽然在流会话的过程期间组合分数1032的图表对于可视化特定流会话在客观质量方面的变量如何设置是有用的,但是通常更有用的是在整体会话方面而非仅在逐帧的基础上表征流会话。结果,可以将卡顿/延时组合分数与每会话图片质量分数组合,以便计算流会话的质量度量。
181.图11示出了根据一些实施例的用于生成针对流会话的质量度量的逻辑。如图11所示,质量度量1132基于元数据1110。在实施例中,流体验引擎1130通过组合图片质量成分和
卡顿/延时成分两者来计算质量度量。通过使用模块1000根据两个不同参数集合计算基础分数来生成所述卡顿/延时成分。在模块1000-1的第一实例中,第一参数集合1002将第一滑动窗口配置为使用参数x=600并且将第二滑动窗口配置为使用参数y=3600,其分别对应于以60hz的帧速率的10秒和1分钟的滑动窗口。在模块1000-2的第二实例中,第二参数集合1004将第一滑动窗口配置为使用参数x=3600,并且将第二滑动窗口配置为使用参数y=600。
182.然后卡顿/延时质量引擎1110接收对应于不同参数集合的两组组合分数1032。然后合计这些每帧组合分数以产生合计均值和合计标准偏差(std)。通过计算每帧组合分数1032的加权均值来合计来自第一参数集合1102的组合分数1032以生成合计均值,其中基于远程输入频率来选择权重。远程输入频率指的是客户端设备记录输入(例如,按键、鼠标事件等)的频率的测量,并且因此,基于输入活动的量对合计均值进行加权。
183.在一个实施例中,由客户端设备根据10hz采样率来收集远程输入信号。如果在先前的100ms中接收到任何输入,则远程输入信号的样本是活动的(例如,1或逻辑高),并且相反地,如果在先前的100ms中未接收到输入,则远程输入的样本是不活动的(例如,0或逻辑低)。将领会,多个帧可与单个远程输入样本重叠(例如,由于采样频率和帧速率的差),并且不活动的远程输入信号的权重可以是非零,使得合计均值不仅仅基于活动的远程输入期间的基本分数。
184.在一些实施例中,权重可基于远程输入信号的滑动窗口。例如,使用100个样本(例如,10秒)的滑动窗口来计算该滑动窗口中的远程输入信号的频率。然后,远程输入频率是活动样本与滑动窗口中的总样本之比,在本文以10hz采样频率使用100个样本提供的示例中,该比将是0和100之间的整数值。在一个实施例中,最小权重是1.0,使得即使在先前的10秒内没有接收到输入,权重也被设置为1.0而不是0.0。
185.合计均值提供卡顿/延时质量成分的基础分数。基础分数是偏移,其中分数偏移值基于第二参数集合1104被计算为组合分数1032的合计std。应当理解,合计std不仅仅是用于计算基础分数的合计均值的组合分数1032的标准偏差,因为合计std基于使用滑动窗口大小的不同参数生成的组合分数1032。通过基于第二参数集合1104使用组合分数1032,取组合分数1032与组合分数1032的均值之间的平方差之和的平方根,来计算合计std。然后通过从基础分数(例如,合计均值)减去分数偏移(例如,合计std)来生成质量度量的卡顿/延时成分。
186.质量度量的图片成分与卡顿/延时成分不同地计算,因为与图片质量相关的原始值在流会话期间预期不会改变太多。在第一实施例中,通过使用传递函数1202将在整个会话中恒定的流会话的每像素位目标比特率映射到分数值来简单地导出图片质量分数。图12示出了根据一些实施例的将目标比特率(即,原始值1106)映射到图片质量分数1112的传递函数。传递函数1202表示对以下点集的曲线拟合:
187.表1
[0188][0189]
分数可被限制为最大分数100(即,超过最大目标比特率1.608的bpp全部被设置为分数100)。
[0190]
现在返回至图11,在一些实施例中,目标比特率在流会话的过程期间可以偶尔改变。例如,网络条件可以由服务器设备监视(例如,基于返回的元数据),并且服务器设备可以基于网络条件来调整目标比特率以尝试并帮助改进流会话的体验。在这样的实施例中,目标比特率并且因此图片质量的分数在整个流会话上不是恒定的。结果,图片质量引擎1020可被配置成计算图片质量的基本分数和分数偏移。通过计算会话过程中图片质量分数的均值来生成基本分数,并且通过计算会话过程中图片质量分数的std来生成分数偏移。然后通过从基础分数减去分数偏移的倍数(例如,1.5等)来计算质量度量的图片质量成分。
[0191]
最后,流体验引擎通过将由图片质量引擎1020生成的质量度量的图片质量成分与由卡顿/延时质量引擎1010生成的质量度量的卡顿/延时成分求和来计算质量度量1132。在一些实施例中,质量度量1032也被移位和/或归一化(例如,通过将基本质量分数50添加到未移位的质量度量或通过在移位之前将未移位的质量度量乘以0.5)。
[0192]
将了解,上文所描述的技术不限于流视频游戏或vr/ar应用。要求在客户端-服务器框架中实现的管线化堆栈并且要求某种类型的客户端侧反馈的任何内容都被构想为在本公开的范围内。例如,视频电话会议应用和/或作为服务的业务生产力软件流传输都在本公开的范围内。
[0193]
应注意,本文中所描述的技术可体现于存储在计算机可读介质中的可执行指令
中,以供基于处理器的指令执行机器、系统、设备或装置使用或结合基于处理器的指令执行机器、系统、设备或装置使用。所属领域的技术人员将了解,对于一些实施例,可包括不同类型的计算机可读介质用于存储数据。如本文中所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适的介质中的一个或更多个,从而使得指令执行机器、系统、装置或设备可以从计算机可读介质读取(或获取)指令并且执行用于实现所描述的实施例的指令。合适的存储格式包括电子格式、磁格式、光格式和电磁格式中的一个或更多个。常规示例性计算机可读介质的非穷举列表包括:便携式计算机盘;随机存取存储器(ram);只读存储器(rom);可擦除可编程只读存储器(eprom);闪存设备;以及光存储设备,包括便携式压缩盘(cd)、便携式数字视频盘(dvd)等。
[0194]
应当理解,附图中示出的部件的布置是为了说明的目的,并且其他布置也是可能的。例如,本文中所描述的元件中的一个或更多个可整体或部分地实现为电子硬件组件。其他元件可用软件、硬件或软件和硬件的组合实现。此外,可以组合这些其他元件中的一些或全部,可以完全省略一些元件,并且可以在仍然实现本文所描述的功能的同时添加附加组件。由此,本文描述的主题可以许多不同的变型来体现,并且所有这样的变型都被设想为在权利要求的范围内。
[0195]
为了促进对本文所描述的主题的理解,就动作序列来描述许多方面。所属领域的技术人员将认识到,各种动作可由专用电路或电路、由一个或更多个处理器执行的程序指令或由两者的组合来执行。本文中对任何动作序列的描述并不旨在暗示必须遵循所描述的用于执行该序列的特定顺序。除非本文另有指示或上下文明显矛盾,本文所述的所有方法都可以任何合适的顺序执行。
[0196]
在描述主题的上下文中(特别是在以下权利要求的上下文中),术语“一个(a)”和“一种(an)”和“该(the)”以及类似参考的使用应被解释为覆盖单数和复数两者,除非本文另外指明或与上下文明显矛盾。跟随有一个或更多个项目的列表(例如,“a和b中的至少一个”)的术语“至少一个”的使用应被解释为意指选自所列出的项目(a或b)的一个项目或所列出的项目(a和b)中的两个或更多个项目的任何组合,除非本文另有说明或与上下文明显矛盾。此外,前面的描述仅用于说明的目的,而不是用于限制的目的,因为所寻求的保护范围由阐述的权利要求及其任何等同物限定。本文提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅旨在更好地说明该主题,并且不对该主题的范围造成限制,除非另外要求。在权利要求书和书面说明书中使用术语“基于”和指示引起结果的条件的其他类似短语并不旨在排除引起该结果的任何其他条件。说明书中的语言不应被解释为指示任何未要求保护的元素是对于如所要求保护的本发明的实践是必不可少的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献