CN114647527A - 在基于云的流式应用程序中测量和检测空闲处理时段并确定其根本原因 - Google Patents

在基于云的流式应用程序中测量和检测空闲处理时段并确定其根本原因 Download PDF

Info

Publication number
CN114647527A
CN114647527A CN202111560820.2A CN202111560820A CN114647527A CN 114647527 A CN114647527 A CN 114647527A CN 202111560820 A CN202111560820 A CN 202111560820A CN 114647527 A CN114647527 A CN 114647527A
Authority
CN
China
Prior art keywords
event
computing device
dead zone
host computing
data
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
Application number
CN202111560820.2A
Other languages
English (en)
Inventor
A·D·拉森
B·托杜尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN114647527A publication Critical patent/CN114647527A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/355Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an MPEG-stream for transmitting to a mobile phone or a thin client
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/358Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/77Game security or game management aspects involving data related to game devices or game servers, e.g. configuration data, software version or amount of memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/61Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
    • H04L65/612Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio for unicast
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • H04L65/762Media network packet handling at the source 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/131Protocols for games, networked simulations or virtual reality
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/85Providing additional services to players
    • A63F13/86Watching games played by other players
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network

Abstract

本发明公开了在基于云的流式应用程序中测量和检测空闲处理周期时段并确定其根本原因。公开了一种用于分析数据以检测基于云的服务内的问题的技术。数据中心中的主机计算设备启动虚拟机,其中至少有一些虚拟机为流式服务运行管线堆栈。主机计算设备中的虚拟机生成包括时间戳的事件数据。分析每个流会话期间由管道堆栈生成的元数据,以识别相应主机计算设备中的死区,并处理事件数据以识别相应死区的潜在根本原因。事件数据可以由承载流媒体服务的虚拟机生成,也可以由同一主机计算设备上的不同虚拟机生成。确定相对于所识别的死区的每种事件类型的事件的分布,并且可以基于该分布调整主机计算设备的操作。

Description

在基于云的流式应用程序中测量和检测空闲处理时段并确定 其根本原因
背景技术
许多服务提供商允许数百万用户将客户端设备连接到托管的基于云的服务。基于云的服务的示例包括视频流服务,以及最近的游戏流服务。与通过控制台系统或计算设备本地执行应用程序的传统视频游戏应用程序不同,基于云的游戏流服务中的游戏应用程序托管在服务器计算机上,并且由游戏应用程序生成的视频内容帧经由网络传输到客户端设备。
流媒体服务通常使用在一个或更多个数据中心的一个或更多个主机上运行的多个虚拟机(VM)来实现。每个VM可以实现软件堆栈的一个或更多个阶段(即管道),其中每个阶段对数据流执行一些处理。例如,在像GeForce
Figure BDA0003410895240000011
(GFN)这样的游戏流服务中,管道可以包括用于捕获由VM托管的游戏的渲染输出(即帧)、将帧编码到比特流、向比特流添加前向纠错等的阶段。比特流通过网络传输到连接到服务的客户端设备。
每个VM都在称为主机的物理机器上运行。每个主机可以在多个内核/处理器上下文上或以时分双工方式基本上并行运行多个VM。例如,每个主机指的是包括16个CPU核、32GB随机存取存储器(RAM)和两个图形处理单元(GPU)的计算设备(例如,服务器)。在一种情况下,主机可以并行运行两个虚拟机,每个虚拟机可以访问一个GPU和8个CPU内核,外加大约16GB的内存。在另一种情况下,主机可以执行四个或更多个VM,其中每个VM都可以访问一个或更多个CPU核心和GPU资源的一部分,这些CPU核心和GPU资源根据与每个VM相关联的时间片和/或优先级进行调度。
当主机以这种方式多路复用时,物理资源可能变得非常有限。在高度虚拟化的环境中管理性能的复杂性伴随着固有的性能问题。例如,一个VM可以生成一个大内存访问请求,该请求将主机中的内存资源占用相当长的时间(例如,10秒或100秒毫秒),因为页面错误可以触发将发送到持久性存储介质(如托管在数据中心的其他位置处的硬盘驱动器阵列或存储区域网络(SAN))的加载请求。在某些情况下,一个VM使用的硬件资源可能会导致主机不同VM的执行延迟,因为VM会等待主机的资源变为可用。在具有实时要求的服务的情况下,这种延迟可以在客户端引起明显的问题,例如帧未能达到期望的帧速率,并且需要解决这些问题和/或与现有技术相关的其他问题。
发明内容
本公开的实施例涉及用于在主机计算设备上识别死区(定义为软件堆栈空闲且在管道的任何阶段不产生任何输出的时间段)的系统和方法。
根据本公开的第一个方面,公开了一种计算机实现的方法,用于识别主机计算设备上的死区并确定死区的根本原因。该方法包括识别与多个流会话中的至少一个流会话相关联的一个或更多个死区的步骤,其中至少一个流会话对应于在主机计算设备的虚拟机上执行的软件堆栈的至少一部分;对于为特定流会话识别的每个死区,在由主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在死区附近的事件;对于多个事件类型中的每个事件类型,确定相对于所识别的死区的事件类型的事件分布;以及基于多个事件类型的事件分布来调整主机计算设备的操作。
在第一方面的一些实施例中,软件堆栈包括游戏流服务的多个阶段。所述阶段包括帧捕获阶段、编码阶段和发射阶段中的至少一个。
在第一方面的一些实施例中,主机计算设备执行配置为执行游戏应用程序的第二虚拟机。游戏应用程序被配置为生成图像帧,该图像帧由软件堆栈处理以向客户端设备发送比特流,该客户端设备被配置为向游戏流服务的用户显示图像帧。客户端设备被配置为将输入从客户端设备发送到游戏应用程序,以渲染游戏应用程序的后续帧。
在第一方面的一些实施例中,识别主机计算设备的一个或更多个附加虚拟机生成的事件数据中发生在死区附近的事件包括,对于事件数据中的每个事件,计算与所述事件相关联的时间戳和与所识别的每个死区相关联的时间戳之间的差;以及对于特定死区,将具有小于阈值的差的绝对值的每个事件标记为与死区相关。
在第一方面的一些实施例中,确定相对于相应死区时间的事件类型的事件分布包括通过对每个事件类型在围绕相应的死区的时间窗口中的多个时间段内的出现次数进行计数来生成直方图。
在第一方面的一些实施例中,基于多个事件类型的事件分布调整主机计算设备的操作包括确定特定事件类型的事件分布包括特定时间段中的事件数,该特定时间段中的事件数以阈值量超过每个时间段的平均事件数;以及基于特定事件类型识别操作。
在第一方面的一些实施例中,调整主机计算设备的操作包括将主机计算设备上的第二虚拟机迁移到第二主机计算设备。
在第一方面的一些实施例中,调整主机计算设备的操作包括将对应于事件类型的数据从第一存储设备迁移到第二存储设备。
在第一方面的一些实施例中,识别与多个流会话中的至少一个流会话相关联的死区包括将至少一个流会话的元数据中包含的一个或更多个时间戳排序为一系列;计算系列中的每个时间戳与先前时间戳之间的差;以及将每个差与阈值进行比较,其中大于阈值的任何差指示所识别的死区。
根据本发明的第二方面,公开了一种系统,该系统包括至少一个主机计算设备和分析引擎。每个主机计算设备被配置为启动至少一个虚拟机,该虚拟机被配置为处理一个或更多个流会话的内容。所述至少一个流会话对应于在主机计算设备的虚拟机上执行的软件堆栈,所述主机计算设备被配置为生成供相应客户端设备显示的内容。分析引擎被配置为识别与多个流会话中的至少一个流会话相关联的死区;对于为特定主机计算设备的特定流会话识别的每个死区,在由特定主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在死区附近的事件;对于多个事件类型中的每个事件类型,确定相对于所识别的死区的事件类型的事件分布;以及基于所述多个事件类型的事件分布来调整所述至少一个主机计算设备的操作。
在第二方面的一些实施例中,软件堆栈包括游戏流服务的多个阶段,其中包括帧捕获阶段、编码阶段和传输阶段中的至少一个。
在第二方面的一些实施例中,主机计算设备执行配置为执行游戏应用程序的第二虚拟机。游戏应用程序被配置为生成图像帧,该图像帧由软件堆栈处理以向客户端设备发送比特流,该客户端设备被配置为向游戏流服务的用户显示图像帧。客户端设备被配置为将输入从客户端设备发送到游戏应用程序,以渲染游戏应用程序的后续帧。
在第二方面的一些实施例中,识别主机计算设备的一个或更多个附加虚拟机生成的事件数据中发生在死区附近的事件包括,对于事件数据中的每个事件,计算与所述事件相关联的时间戳和与所识别的每个死区相关联的时间戳之间的差;以及对于特定死区,将具有小于阈值的差的绝对值的每个事件标记为与死区相关。
在第二方面的一些实施例中,确定相对于相应死区时间的事件类型的事件分布包括通过对每个事件类型在围绕相应死区的时间窗口中的多个时间段内的出现次数进行计数来生成直方图。
在第二方面的一些实施例中,基于多个事件类型的事件分布调整主机计算设备的操作包括确定特定事件类型的事件分布包括特定时间段中的事件数,该特定时间段中的事件数以阈值量超过每个时间段的平均事件数;以及基于特定事件类型识别操作。
在第二方面的一些实施例中,调整主机计算设备的操作包括将主机计算设备上的第二虚拟机迁移到第二主机计算设备。
在第二方面的一些实施例中,调整主机计算设备的操作包括将对应于事件类型的数据从第一存储设备迁移到第二存储设备。
在第二方面的一些实施例中,识别与多个流会话中的至少一个流会话相关联的死区包括将至少一个流会话的元数据中包含的一个或更多个时间戳排序为一系列;计算系列中的每个时间戳与先前时间戳之间的差;以及将每个差与阈值进行比较,其中大于阈值的任何差指示所识别的死区。
根据本发明的第三方面,公开了一种存储指令的非暂时性计算机可读介质。当由处理器执行指令时,使处理器执行包括如下的步骤:针对多个流会话中的至少一个流会话,识别与流会话相关联的死区,其中,所述至少一个流会话对应于在主机计算设备的虚拟机上执行的软件堆栈;对于为特定流会话识别的每个死区,在由主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在死区附近的事件;对于多个事件类型中的每个事件类型,确定相对于所识别的死区的事件类型的事件分布;以及基于多个事件类型的事件分布来调整主机计算设备的操作。
在第三方面的一些实施例中,软件堆栈包括游戏流服务的多个阶段,其中包括帧捕获阶段、编码阶段和传输阶段中的至少一个。
附图说明
以下参考附图详细描述用于测量和检测主机计算设备上死区的现有系统和方法,其中:
图1示出了根据一些实施例的用于基于云的服务的管线堆栈。
图2A示出了根据一些实施例的用于识别与主机计算设备中死区的发生相关联的事件的方法的流程图。
图2B示出了根据一些实施例的用于实现图2A的方法的系统。
图2C示出了根据一些实施例的用于检测死区和识别根本原因的系统。
图3示出了根据一些实施例的用于确定相对于相应死区的事件分布的热图的可视化。
图4示出了适用于实施本公开的一些实施例的示例并行处理单元。
图5A是使用图4的PPU实现的处理系统的概念图,适合用于实现本发明的一些实施例。
图5B示出了一个示例性系统,其中可以实现各种先前实施例的各种架构和/或功能。
图5C示出了在至少一个实施例中可用于训练和利用机器学习的示例性系统的组件。
图6A是由图4的PPU实现的图形处理管道的概念图,适合用于实现本发明的一些实施例。
图6B示出了适用于实施本公开的一些实施例的示例性游戏流系统。
图7A-7D示出了根据一些实施例的主机设备上的剩余等待时间和死区之间的差异
具体实施方式
公开了与主机计算设备经历的死区测量和检测相关的系统和方法——当软件堆栈空闲且在应用程序处理管道的任何阶段不产生任何输出时。本文描述的技术能够检测死区并识别这些死区的根本原因,从而可以操纵基于云的服务来改善用户体验。在一个特定示例中,可以分析在各种主机设备上执行的多个虚拟机的交互,以识别可能交互以负面影响在同一主机设备的不同虚拟机上运行的流式服务的质量的特定虚拟机。一旦发现死区的根本原因,就可以手动或自动采取改进措施来改进服务,例如更改各种应用程序的优先级或将某些虚拟机迁移到同一数据中心的不同主机设备。
传统上,分析复杂系统(如数据中心的资源)以确定与异步资源争用相关的潜在间歇性问题是一个很难解决的问题。收集足够的数据以识别问题,并找到量化客观标准以识别问题根源的方法可能很困难。当不相关应用程序的虚拟机可以在不同时间在同一主机上启动时,尤其如此。用于收集和分析此类数据的自动化系统可以极大地提高开发人员解决潜在问题的能力,并且可以轻松地帮助将实时点播服务(如游戏流媒体)从几乎无法使用变为令人愉快。下文更详细地描述本文提供的技术和解决方案。
图1示出了根据一些实施例的用于基于云的服务的管线堆栈100。管线堆栈100可包括多个级。每个级包括一个或更多个组件,一个级的输出在后续级的输入处接收。尽管针对实时游戏流服务描述了管线堆栈100,但其他实施例可以使用管线堆栈100中的不同阶段集实现不同类型的服务(例如,视频流、音频流、生产力应用等)。
如图1所示,用于游戏流媒体服务的管线堆栈100包括多个阶段。管线堆栈100的服务器侧102在一个或更多个服务器设备上实现多个阶段,这些级包括帧捕获阶段110、编码阶段120、前向纠错(FEC)阶段130和发送阶段140。管线堆栈100还包括网络阶段150,其包括通过网络104将数据分组从服务器侧102传输到客户端106。管线堆栈100的客户端106在一个或更多个客户端设备上实现多个阶段,这些阶段包括解码阶段160、显示阶段170和客户端再同步(再同步)阶段180。
应当理解,为了说明本文描述的各种技术,图1中描述了用于游戏流媒体服务的示例性管线堆栈100。在其他实施例中,管线堆栈100中的阶段的特定布置可以不同,例如通过包括图1中未示出的附加阶段或省略图1中所示的阶段。例如,在FEC不是由服务实现的情况下,可以省略FEC阶段130。此外,一些实现可以将两个或多个阶段的方面组合成单个阶段(例如,FEC和传输可以组合成管线堆栈100的单个阶段)。
图1所示的每一阶段可包括一个或更多个组件。例如,编码阶段120可以包括队列组件,该队列组件在前一帧由编码器组件编码时从帧捕获阶段110异步接收帧。编码阶段120还可以包括发送队列组件,该发送队列组件从编码器组件异步接收编码帧,并在编码帧可用且FEC阶段130准备就绪时将编码帧发送到FEC阶段130。如将更详细地讨论的,由管线堆栈100的各个阶段处理的内容的元数据可以由每个阶段更新,或者由该阶段内的每个组件更新。
在一个实施例中,内容包括一个或更多个帧,并且为每个帧生成元数据。每个组件或阶段在完成对帧的处理后,通过向帧的元数据添加时间戳来更新元数据。元数据随后与处理后的内容一起转发到下一个组件/阶段。
在管线堆栈100的末端,客户端设备将元数据传输回服务器设备以进行存储和/或分析。帧的元数据包括多个时间戳,每个时间戳对应于特定阶段或阶段的组件完成对帧的处理。在一些实施例中,客户端设备被配置为在将数据结构发送到服务器设备之前收集数据结构(例如,文件)中的多个帧(例如,每秒30-60帧的60秒视频)的元数据。在这样的实施例中,服务器设备为多个会话收集文件,每个会话等于,例如,若干秒的视频。将理解,可以调整会话的大小以匹配所收集元数据的期望大小,例如通过在会话中收集30分钟到60分钟的元数据。在一些实施例中,客户端设备在循环缓冲区中收集元数据,使得为会话收集的元数据仅是会话中最后n帧的元数据。例如,具有适合以每秒60帧的速度收集10分钟数据的大小的循环缓冲区(例如,36000帧的元数据)可以在会话期间连续收集元数据,当会话长度超过10分钟时覆盖最旧的元数据。在会话结束时(例如,当游戏应用程序终止时),客户端设备可以编码循环缓冲区的内容并将其发送到服务器设备。应当理解,当用户体验到降低用户体验的问题时,会话很可能提前终止,因此,会话的最后m分钟(对应于n帧)通常足以突出显示降低用户体验的问题的原因。
在一个特定用例中,特定主机可以在第一个VM上运行游戏,并在第二个VM上运行软件堆栈,用于流式传输游戏生成的帧。流式传输服务的软件堆栈可能不需要很多计算资源,但可能需要每小时(例如,16.6ms)对少量计算周期的一致访问,以在客户端设备上保持60hz的帧速率。如果在第一个VM上运行的游戏与主机产生问题,通常是由于主机的一个或更多个资源上需要繁重的工作负载,则流式处理的软件堆栈可能会因缺少可用资源而出现延迟。
可以理解,死区不同于在特定管道阶段引入的延迟,该延迟会暂停管道的后续阶段。由于可变工作负载而产生的一些固有延迟固有地隐藏在管道的体系结构中,这是意料之中的。因此,如果管道的编码阶段将图像帧编码到比特流中所花费的时间比平均时间长(例如,24ms),则管道的其他阶段可以继续处理先前帧的比特流,这可以允许隐藏一些延迟,因为后续阶段弥补了部分或全部丢失的时间。另一方面,死区表示不同的问题,其中管道的所有阶段,或在特定主机的VM上运行的至少多个阶段,由于主机中缺少可用资源而立即停止。
图7A-7C示出了根据一些实施例的主机设备上的剩余等待时间和死区之间的差异。如图7A所示,示出了在管线堆栈100的服务器侧102上由三个阶段处理的多个帧的时序图710。服务器侧102包括帧捕获阶段110、编码阶段120和发送阶段140,其中省略了FEC阶段130(即,未实现)。时序图710中的每个块表示该阶段对特定帧的处理的完成。显然,时序图710没有显示该特定主机中的死区,因为所有三个阶段大约每16.6ms一致地完成处理对应帧,对应于60Hz刷新率。
如图7B所示,示出了由管线堆栈100的服务器侧102上的三个阶段处理的多个帧的时序图720。在这种情况下,编码阶段120在帧2和帧3之间经历一些等待时间。反过来,这使得发送阶段140在等待来自编码阶段120的第三帧时停止。然而,这并不表示死区,因为帧捕获阶段110在编码阶段120的等待时间期间仍在处理第四帧。只要某些阶段仍在主机设备上执行,那么等待时间可能是由与主机的资源可用性无关的其他问题引起的。
如图7C所示,示出了由管线堆栈100的服务器侧102上的三个阶段处理的多个帧的时序图730。在这种情况下,帧捕获阶段110似乎在第二帧之后停止,从而使管道饥饿。接着,编码120和发送阶段140在完成第二帧的处理之后停止。然而,在由发送阶段140处理第二帧的结束与由帧捕获阶段110处理第三帧的结束之间存在显著的间隙。这种延迟可能是由潜在的死区引起的,尽管延迟也可能只是由游戏应用程序遇到的问题引起的,该问题延迟了第三帧的生成。因此,无法保证该延迟与死区有关。
如图7D所示,示出了由管线堆栈100的服务器侧102上的三个阶段处理的多个帧的时序图740。在这种情况下,管线堆栈100的三个阶段中的任何一个在大约50ms的时间段内没有活动。第三帧的处理由帧捕获阶段110在50ms等待时间段的开始处完成,但是编码阶段120直到在显著延迟之后才完成第三帧的处理。类似地,第二帧的处理由编码阶段120在50ms等待时间段的开始处完成,但是发送阶段140直到在显著延迟之后才完成第二帧的处理。假设管线堆栈100的阶段都同时被延迟,并且延迟显然不是由阶段缺少输入引起的,这表示可能由主机设备的某个问题引起的死区。
现在回到图1,测量死区的天真方法可以使用周期性(例如,每毫秒)生成时间戳的独立线程(例如,在管线堆栈100的VM内运行或在主机计算设备上的单独VM中运行)。在线程位于管线堆栈100的VM内的情况下,当主机计算设备未能按时执行线程时,时间戳将被延迟。测量以这种方式生成的时间戳之间的大增量将产生关于死区的信息。但是,这种方法只捕获虚拟机管理程序未调度虚拟机的情况,而不会捕获虚拟机正在运行但处于死锁状态等待某些资源(例如内存资源、网络资源等)响应的实例。在线程位于不同VM上的情况下,时间戳将仅测量何时虚拟机监控程序未调度该特定VM,即使管线堆栈100的VM运行良好。因此,这种生成时间戳以识别死区的方法并不理想。
相反,在优选实施例中,应当理解,可以通过计算管线堆栈100的服务器侧102的多个阶段中的每一阶段处的每个帧的残差度量来识别与该流式会话相关联的死区。管道给定阶段的残差度量可计算如下:
Figure BDA0003410895240000091
等式1测量两帧(例如,帧(i)和帧(i-1))处理之间的时间与基于目标帧速率(TargetFPS)(以帧/秒为单位)的帧间预期时间之间的差异。残差度量以毫秒为单位进行测量。
在一个实施例中,可以通过将每个帧的每个残差与阈值进行比较来识别流会话的大残差。应当理解,可以针对整个管线堆栈100中的不同时间戳计算帧的残差。例如,管线堆栈100的三个阶段、帧捕获阶段110、编码阶段120和发送阶段140可以在处理单个帧期间生成20个以上的时间戳,其中每个阶段生成至少一个时间戳。因此,与前一帧相比,对于为该帧生成的20个时间戳中的每一个,每个帧可以与20个不同的残差值相关联。在一个实施例中,可以通过对管线堆栈100的多个阶段中的每一阶段的高于阈值的残差度量进行比较来识别死区,以寻找同时由管线处理的不同帧的大残差之间的重叠。下面将对识别死区的技术进行更详细的说明。
图2A示出了根据一些实施例的用于识别与主机计算设备中死区的发生相关联的事件的方法200的流程图。图2的方法200可以通过硬件、软件或其一些组合来实现。在实施例中,方法200由服务器设备实现,该服务器设备包括中央处理单元、并行处理单元或能够执行使服务器设备执行下述操作的指令的任何其他类型的处理器中的至少一个。
在步骤202,对于多个流会话中的每个流会话,识别与流会话相关联的死区。在实施例中,流式会话至少部分地由在主机计算设备的虚拟机上执行的管线堆栈执行。管线堆栈生成元数据,该元数据包括流会话期间与管线堆栈的每个阶段相关联的时间戳。应当理解,尽管流会话以大约每16.6ms一个帧的速率向客户端设备发送帧,但是在元数据的给定16.6ms时间片内可以存在对应于不同阶段和不同帧的多个时间戳。例如,在包括帧捕获阶段110、编码阶段120和发送阶段140的管线堆栈100的简化版本中,不同阶段可以同时处理三个或更多帧,并且在处理单个帧期间每个阶段可以生成一个或更多个时间戳。因此,即使发送阶段140由于任何原因被延迟,帧捕获阶段110和编码阶段120也可以在与发送阶段140正在处理的相同帧或不同帧相对应的给定16.6ms周期内生成时间戳。
在一个实施例中,在流式会话的元数据中收集的时间戳都用对应于该时间戳的帧的标识符(即帧编号)进行标记。然后将流会话中所有帧的时间戳联结成一系列,该系列根据时间戳的值进行排序,使得每个时间戳表示管线堆栈100在一段时间内完成的不同事件,但是不同帧的时间戳可以在序列中交错,因为多个帧由管道的不同阶段同时处理。对于序列中的每个时间戳,计算序列中当前时间戳和先前时间戳之间的差值。此差异表示与当前时间戳的帧相关联的延迟。应当理解,该差异不是管线堆栈100中的前一阶段对帧的处理与管线堆栈100中的后一阶段对帧的处理之间的时间度量,但是仅仅是由管线堆栈100的任何阶段处理任何帧与由当前时间戳表示的管线堆栈100中的特定阶段处理该帧之间的时间度量。因此,即使例如发送阶段140对特定帧的处理被延迟,如果管线堆栈100的帧捕获阶段110或编码阶段120正在积极地处理游戏应用程序输出的稍后帧,则差异仍然可以很小。
在一个实施例中,识别死区包括对流会话中的帧序列中与每个唯一帧相关联的差异进行排序,并针对每个帧确定最大差异是否大于阈值。在期望的16.6ms帧速率的情况下,阈值可以是,例如,33.3ms。然后,差值大于阈值的任何帧都可以标记为主机中出现死区。
在步骤204,对于为特定流会话标识的每个死区,主机计算设备的一个或更多个附加虚拟机生成的事件数据中的事件被标识为发生在死区附近。在一个实施例中,收集在主机计算设备上执行的多个VM的事件数据。尽管事件数据可以与其他流会话的VM相关,但事件数据不限于其他流会话。例如,事件数据可以与运行游戏应用程序或完全独立的进程(例如网络应用程序、独立的基于云的服务等)的VM相关。可以为一个或更多个事件类型生成事件数据并包括指示事件发生时间的时间戳的任何VM都在本公开的范围内。
同样,每个主机计算设备可以实现多个不同的虚拟机,每个虚拟机可以运行到不同客户端设备的不同流会话,多个主机可以为不同的流会话运行不同的虚拟机。此外,其他虚拟机可以在主机上同时运行以执行,例如,游戏应用程序或其他工具或应用程序,例如用于管理网络的工具。每个流式会话可被配置为记录不同事件的时间戳,例如但不限于VM开始事件、客户端连接事件、着色器缓存加载事件、游戏启动事件和会话结束事件等。事件数据反映在特定流会话中发生的每个事件的时间戳。将理解,特定流会话X中的事件与不同流会话Y中的相同事件不相关,因为两个客户端可以在不同的时间连接到流服务,并且相同游戏的执行可以基于高度可变的用户输入而发散。因此,会话X中的游戏启动事件等事件可能在时间上接近于会话Y中的会话结束事件等不同事件。
在一个实施例中,对于为特定流会话识别的每个死区,过滤事件数据中的事件,以包括位于特定主机上的那些事件(即,发生在不同VM内但与特定流会话在同一主机上的事件)这发生在接近死区的一个时间窗内。应当理解,其他主机上的事件可能不会影响特定主机内计算资源的缺乏,因此这些事件被过滤掉。一个例外情况是,由其他主机生成的网络流量可能导致特定主机上的网络资源出现问题,例如,由于客户端未接收到数据分组,导致管线堆栈中出现延迟。另一个例外是,如果两个或多个主机试图从每个主机外部的网络存储资源加载数据。然而,将所有主机上的所有事件与特定主机上的死区关联起来是一个更难解决的问题,因为例如,网络流量的波动可能是高度随机的,因此,通过研究与特定主机上死区发生相关的事件类型的分布来识别的可能性较小。
在过滤的事件中,在死区特定时间内(例如,在死区之前或之后最多M秒)发生的事件被标记为触发事件(即,可能导致导致死区问题的事件)。在一个实施例中,在由主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在死区附近的事件包括:对于过滤后的事件数据中的每个事件(例如,与特定主机计算设备相关联并在特定时间内发生的事件),计算与所述事件相关联的时间戳和与所识别的每个死区相关联的时间戳之间的差;以及对于特定死区,将具有小于阈值的差值的绝对值的每个事件标记为与死区相关。
在步骤206,对于多个事件类型的每个事件类型,确定相对于所识别的死区的事件类型的事件分布。在一个实施例中,可以绘制特定事件类型的触发事件相对于相应死区的位置分布,以识别可能导致主机中死区的事件。事件的位置可以是相对于死区时间的事件时间,如基于死区时间戳和事件时间戳识别的。例如,如果触发事件发生在死区前3秒,则触发事件的位置定义为-3秒。或者,如果触发事件发生在死区后5秒,则触发事件的位置定义为+5秒。
应了解,如果不同VM中的事件在主机中造成其他流会话的死区,则与该事件类型相对应的事件分布,相对于在同一主机中检测到的一个或更多个流会话中记录的死区,将显示特定时间相对于主机上发生的死区的事件浓度。但是,如果事件与死区的原因无关,则该事件类型的事件分布相对于主机中死区的发生将是随机的或大致均一的。例如,如果为流式会话启动的游戏导致内存在游戏启动后L秒加载游戏的大量数据,然后,在其他流式会话中发生的游戏启动事件的分布很可能会在同一主机上运行的不同流式会话中的死区出现前L秒发生。
可以理解,触发事件可以发生在死区之前或之后,因为针对事件生成的时间戳可以在死区的根本原因之前或死区的根本原因之后生成。例如,如果游戏启动事件是在游戏数据加载到主机内存后由游戏应用程序生成的,则事件的时间戳可能出现在死区之后,因为死区与主机上内存资源不足有关,而数据是从远程存储位置加载到主机RAM中的。或者,如果死区是在游戏启动后的某个时间执行游戏应用程序期间造成的,则死区可能在游戏启动事件之后出现。该分布提供了一些线索,说明死区的发生是否是由在给定事件之前或之后相对稳定的时间发生的不同VM中的某个事件引起的。
在一个实施例中,可以通过针对每个事件类型创建直方图来确定分布。每当为特定死区识别触发事件时,确定事件相对于死区的位置,并递增直方图的时间段(例如,区间、切片等),以显示该事件类型的事件发生在相对于检测到的死区的特定时间段中。应当理解,分布和直方图可以与多个不同主机和在不同时间发生的任意数量的死区相关,并且不仅仅是单个死区在同一主机上发生事件的测量。在单个主机上的单个死区附近发生的事件几乎不足以使数据与确定该死区的根本原因相关,因此,在大量不同的流会话中识别的多个主机和死区中跟踪事件,以便找到足够的数据点,以准确表示特定事件类型的事件分布。
在一个实施例中,直方图是使用死区前30秒和死区后30秒左右的时间窗口的大约1秒宽度的时间段生成的。换句话说,直方图至少包括60个时间段或时段。在其他实施例中,可以增大或减小时间窗口的大小,并且还可以增大或减小每个时间段的宽度。例如,可以创建一个直方图,该直方图在死区前后具有100毫秒宽的时间段和10秒的时间窗口。直方图可以包含在热图中,因为每个时间段的值与该位置相对于相应死区发生的事件数直接相关。如果事件类型与死区的发生不相关,则事件的位置应是随机的,并大致均匀地分布在直方图的一组时间段上(例如,均匀分布)。但是,如果事件类型与死区的发生相关,则事件的位置应高度集中在直方图时间段的一小部分。下面更详细地描述的图3示出了包括多个事件类型的多个直方图的热图的可视化。
在步骤208,基于多个事件类型的事件分布来调整主机计算设备的操作。在一个实施例中,主机计算设备响应于确定特定事件类型的事件分布包括特定时间段中的事件数量,该特定时间段中的事件数量以阈值量超过每个时间段的平均事件数量,其中时间段指直方图。在一个实施例中,基于特定事件类型识别正在调整的操作。例如,映射表可以将特定事件类型与要执行的操作类型以及基于分布形状的不同操作相关联(例如,直方图中出现相对于相应死区的尖峰)。
在一个实施例中,可以通过将虚拟机从一个主机迁移到另一个主机来调整主机计算设备。例如,如果确定特定VM是主机设备中死区的根本原因,则该VM和在其中运行的应用程序可以移动到不同的主机,以便一个主机上的流式服务不受在不同主机中的VM中运行的应用程序的影响。在一些实施例中,运行游戏应用程序的VM可以从运行管线堆栈100的至少一部分的流式服务的VM移动到单独的主机。应当理解,在一些情况下,将VM从一个主机移动到另一个主机可能不实际,例如,当将图像帧的数据从一个主机传输到另一个主机时,将导致正在渲染的帧与正在客户端设备上显示的帧之间的延迟过大。
在其他实施例中,可以通过改变特定VM的操作参数来调整主机计算设备。例如,可以将游戏应用程序重新配置为使用不同的设置(例如,分辨率、帧速率、别名设置等)。在其他实施例中,可以调整存储资源,例如通过将一些数据(例如,高优先级数据)从较慢的存储介质(例如,SAN、HDD)移动到连接到主机的较快的存储介质(例如,SSD)。例如,如果游戏启动事件导致死区的发生,则将要从HDD上的第一存储位置移动到SSD上的第二存储位置的特定游戏的数据优先级更改可以降低或减轻主机中死区的频率。当不同的游戏应用程序可以在同一主机的不同VM中运行时,调整游戏应用程序的优先级可能会影响游戏应用程序的存储位置。
应了解,主机的某些操作可自动调整,以响应与不同事件类型相关的分布的分析。然而,其他情况可能不容易调整,并且在某些情况下,服务器设备可以向网络管理器发送通知(即,报告)。在一些实施例中,通知可以包括由服务器生成的热图,可以手动分析这些热图并由设计者用于调整某些应用程序的代码。通过改变某些应用程序的设计,这些应用程序可以更有效地利用主机计算设备的某些资源,从而导致主机中死区的发生频率降低。
图2B示出了根据一些实施例的用于实现图2A的方法200的系统。该系统包括位于数据中心250中的多个服务器设备260。服务器设备260连接到诸如网络交换机、路由器等的一个或更多个网络设备270。网络设备270使得服务器设备260能够在数据中心内通信,并且使得服务器设备260能够经由网络104向多个客户端设备280发送数据分组。
在一些实施例中,多个服务器设备260中的每一个都是运行一个或更多个VM的主机。特定服务器设备160可以在第一VM中运行流服务,并在第二VM中运行游戏应用程序。游戏应用程序可以生成用于在相应的客户端设备280上显示的帧,并且流式传输服务可以将帧编码成比特流,该比特流经由网络104发送到客户端设备280。游戏应用程序可以接收来自客户端设备280的输入,该输入用于渲染后续帧以供显示。
在其他实施例中,可以在第一服务器设备260上的VM中执行流式服务,并且可以在第二服务器设备260上的VM中执行游戏应用程序。由游戏应用程序渲染的帧从第二服务器设备260传输到第一服务器设备260,使得流式传输服务可以编码帧的比特流并将其发送到客户端设备280。
图2C示出了根据一些实施例的用于检测死区和识别根本原因的系统。该系统包括分析引擎290。在一个实施例中,分析引擎290是配置为由服务器设备执行的一组指令。分析引擎290可以托管在与基于云的服务的管线堆栈100相同的主机计算设备中的虚拟机上,或者,可选地,可以托管在不同的主机计算设备甚至客户端设备中。
在一个实施例中,服务器设备260和/或客户端设备280将由管线堆栈100生成的元数据发送到分析引擎290。元数据可以存储在数据库292中。在一些实施例中,分析引擎290在接收特定流会话的元数据之后处理元数据,以便识别该流会话内的死区(如果有的话)。分析引擎290不存储整个会话的元数据,而仅存储用于识别死区的信息。例如,对于识别的每个死区,分析引擎可以存储流会话的标识符、指示死区开始的时间戳以及死区的持续时间或长度。分析引擎290还可以存储与死区相关的任何其他相关信息,例如在死区开始之前由管线堆栈100最后处理的帧的帧标识符以及处理该帧的管线堆栈100的阶段的标识符。
应当理解,流会话的元数据可以从服务器设备260传输到分析引擎290,包括服务器设备260从客户端设备280接收的元数据,或者直接从客户端设备280接收的元数据,而不必路由到服务器设备260。
分析引擎290还从存储在数据库294中的多个服务器设备260接收事件数据。在实施例中,分析引擎290实现应用编程接口(API),其允许在服务器设备260中执行的任何处理生成事件数据并将事件数据发送到分析引擎290以进行存储和/或处理。因此,将用于生成事件数据的功能构建到用于该应用的软件中的任何应用将生成存储在数据库294中的事件数据。
在实施例中,事件数据包括事件的时间戳、指示事件类型的标识符、虚拟机标识符、主机计算设备标识符、数据中心标识符和/或与事件相关的任何其他有用信息中的至少一个。
一旦分析引擎290具有相关元数据和事件数据,分析引擎290被配置为处理数据以执行上述方法200。在一些实施例中,分析引擎290能够对服务器设备260、管线堆栈100的参数和/或主机计算设备的虚拟机中承载的任何其他应用进行更改。
图3示出了根据一些实施例的用于确定相对于相应死区的事件分布的热图300的可视化。热图300是指包括一个或更多个事件类型的直方图数据的数据结构。如图3所示,热图300对游戏启动事件、附加应用图像事件、完成的最大(Max)事件、事件流媒体事件和事件座椅启动事件的多个直方图的数据进行编码。这些事件类型对应于在不同主机上运行的一个或更多个不同VM中生成的特定事件。应当理解,各种软件的开发者可以定义任意数量的事件,并且图3中公开的事件类型示例仅用于说明目的。
在一个实施例中,每个直方图包括对应于相对于死区的时间段的多个桶。每个桶都根据相应死区相关时间段内事件发生的相对频率进行着色。在一个实施例中,每个桶对应于一秒的时间段,并且在死区时间之后有30个桶和30个桶,其由直方图中间的白线表示。横轴表示时间戳偏移量(以秒为单位),它是事件时间戳和相应的死区时间戳之间的差值。与相应的相对频率相关的色标显示在热图300的可视化右侧,并且不同事件类型的各种直方图堆叠在垂直维度中。在其他实施例中,每个桶可以表示不同的时间段(例如,5秒或3秒),并且直方图表示的时间长度可以增加或减少(例如,死区前后60秒)。此外,可以修改热图300的可视化以显示单个事件类型或任意数量的事件类型(例如,30个事件类型)的直方图。
在一些实施例中,网络管理器可以配置会话分析工具以周期性地生成热图300,并指定要包括在特定热图300中的任何选定事件类型组合。在实施例中,服务器设备被配置成周期性地分析事件数据并生成对应于事件类型的不同子集的一个或更多个热图300。然后,热图300用于自动或手动调整网络的操作。例如,在一个实施例中,可以生成热图300,并且热图300的可视化自动通过电子邮件定期发送给网络管理器以供审查。作为另一示例,生成热图300,然后基于热图300中的分布执行用于重新配置服务或网络的操作(例如,迁移VM、供应新主机等)。
如图3所示,热图300的可视化可快速指示特定事件类型是否可能是死区的根本原因。例如,附加应用程序图像事件类型表明,这些事件可能是死区的根本原因,并且发生在死区之前,但是这些事件相对于死区的时间变化很大。相反,事件流媒体事件与时间上与事件时间非常接近的死区高度相关。相比之下,相对于相应的死区,完成的最大事件类型似乎显示出更均匀的事件分布,这表明完成的最大事件不太可能是相应死区的根本原因。
根据用户的愿望,现在将阐述关于各种可选架构和功能的更多说明性信息,可以使用这些架构和功能实现上述框架。应特别注意,以下信息仅供说明,不应被解释为以任何方式限制。以下任何特征可选择性地与所述其他特征合并或不排除所述其他特征。
应当理解,本文所述的系统和组件布置仅作为示例进行阐述。除了所示的布置和元件之外,还可以使用其他布置和元件(例如,机器、接口、功能、顺序、功能分组等),或者可以使用其他布置和元件代替所示布置和元件,并且可以完全省略一些元件。此外,本文所描述的许多元件是功能实体,其可以作为离散或分布式组件实现,或者与其他组件结合实现,并且可以以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以通过硬件、固件和/或软件来执行。例如,各种功能可以由执行存储在存储器中的指令的处理器执行。此外,本领域普通技术人员将理解,执行本文所述操作的任何系统都在本发明实施例的范围和精神内。
并行处理体系结构
图4示出了根据实施例的并行处理单元(PPU)400。PPU 400可用于至少部分地实现管线堆栈100的一个或更多个阶段。例如,PPU 400可用于实现由主机设备执行的编码阶段120、解码阶段160、游戏应用服务器的呈现引擎、分析引擎290等中的一个或更多个。
在一个实施例中,PPU 400是在一个或更多个集成电路设备上实现的多线程处理器。PPU 400是一种延迟隐藏体系结构,设计用于并行处理多个线程。线程(例如,执行线程)是配置为由PPU 400执行的一组指令的实例化。在一个实施例中,PPU 400是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形呈现管道,以便生成用于在显示设备上显示的二维(2D)图像数据。在其他实施例中,PPU 400可用于执行通用计算。虽然本文中提供了一个示例性并行处理器用于说明目的,但应强烈注意,所述处理器仅用于说明目的,并且可以使用任何处理器来补充和/或替代所述处理器。
一个或更多个PPU 400可配置为加速数千个高性能计算(HPC)、数据中心、云计算和机器学习应用程序。PPU 400可被配置为加速用于自主车辆、模拟、计算图形(例如射线或路径跟踪)、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断等的许多深度学习系统和应用,天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等。
如图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管芯。
NVLink 410互连使系统能够扩展并包括与一个或更多个CPU组合的一个或更多个PPU 400,支持PPU 400和CPU之间的缓存一致性,以及CPU主控。数据和/或命令可由NVLink410通过集线器430发送到PPU 400的其他单元,或从PPU 400的其他单元发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 410。
I/O单元405被配置为通过互连402从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元405可以直接经由互连402或通过诸如存储器桥接器的一个或更多个中间设备与主机处理器通信。在一个实施例中,I/O单元405可以经由互连402与一个或更多个其他处理器通信,例如一个或更多个ppu 400。在一个实施例中,I/O单元405实现用于通过PCIe总线进行通信的外围组件互连直通(PCIe)接口,并且互连402是PCIe总线。在替代实施例中,I/O单元405可以实现用于与外部设备通信的其他类型的众所周知的接口。
I/O单元405解码经由互连402接收的分组。在一个实施例中,分组表示配置为使PPU 400执行各种操作的命令。I/O单元405将经解码的命令发送到PPU 400的各种其他单元,如命令所指定的。例如,一些命令可以被发送到前端单元415。其他命令可以发送到集线器430或PPU 400的其他单元,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元405被配置为在PPU 400的各种逻辑单元之间路由通信。
在一个实施例中,由主机处理器执行的程序在向PPU 400提供工作负载以进行处理的缓冲器中对命令流进行编码。一个工作负载可以包括多个指令和由这些指令处理的数据。缓冲区是主机处理器和PPU 400都可以访问(例如,读/写)的存储器中的区域。例如,I/O单元405可被配置为经由经由经由互连402发送的存储器请求来访问连接到互连402的系统存储器中的缓冲器。在一个实施例中,主机处理器将命令流写入缓冲器,然后将指向命令流开始的指针发送到PPU 400。前端单元415接收指向一个或更多个命令流的指针。前端单元415管理一个或更多个流,从流读取命令并将命令转发到PPU 400的各个单元。
前端单元415耦合到调度器单元420,调度器单元420配置各种gpc 450以处理由一个或更多个流定义的任务。调度器单元420被配置为跟踪与调度器单元420管理的各种任务相关的状态信息。该状态可以指示将任务分配给哪个GPC 450、该任务是活动的还是非活动的、与该任务相关联的优先级,等等。调度器单元420管理在一个或更多个gpc 450上执行多个任务。
调度器单元420耦合到工作分配单元425,工作分配单元425被配置为调度任务以在GPCs 450上执行。工作分配单元425可以跟踪从调度器单元420接收的多个调度任务。在一个实施例中,工作分配单元425为每个gpc 450管理未决任务池和活动任务池。当GPC 450完成任务的执行时,该任务从GPC 450的活动任务池中退出,并且从挂起的任务池中选择并调度其他任务之一在GPC 450上执行。如果活动任务在GPC 450上处于空闲状态,例如在等待解决数据依赖关系时,则活动任务可以从GPC 450中移出并返回到挂起任务池,同时选择挂起任务池中的另一个任务并计划在GPC 450上执行。
在一个实施例中,主机处理器执行驱动程序内核,该驱动程序内核实现应用程序编程接口(API),该接口使在主机处理器上执行的一个或更多个应用程序能够调度在PPU400上执行的操作。在一个实施例中,多个计算应用程序由PPU 400同时执行,并且PPU 400为多个计算应用程序提供隔离、服务质量(QoS)和独立的地址空间。应用程序可以生成指令(例如,API调用),这些指令使驱动程序内核生成一个或更多个任务以供PPU 400执行。驱动内核将任务输出到PPU 400正在处理的一个或更多个流。每个任务可以包括一组或多组相关线程,在本文中称为warp。在一个实施例中,翘曲包括32个可并行执行的相关线程。协作线程可以指多个线程,包括执行任务的指令,并且可以通过共享内存交换数据。任务可以分配给GPC 450内的一个或更多个处理单元,并且指令被调度由至少一个warp执行。
工作分配单元425通过XBar 470与一个或更多个GPC 450通信。XBar 470是将PPU400的许多单元耦合到PPU 400的其他单元的互连网络。例如,XBar 470可被配置为将工作分配单元425耦合到特定GPC 450。尽管未明确示出,但是PPU 400的一个或更多个其他单元也可以经由集线器430连接到XBar 470。
任务由调度器单元420管理,并由工作分配单元425调度到GPC 450。GPC 450被配置为处理任务并生成结果。结果可由GPC 450内的其他任务使用,经由XBar 470路由到不同的GPC 450,或存储在存储器404中。可以经由存储器分区单元480将结果写入存储器404,存储器分区单元480实现用于向存储器404读取数据和从存储器404写入数据的存储器接口。结果可以经由NVLink 410传输到另一个PPU 400或CPU。在一个实施例中,PPU 400包括数量为U的存储器分区单元480,其等于耦合到PPU 400的存储器404的独立和不同的存储器装置的数量。每个GPC 450可包括存储器管理单元,以提供虚拟地址到物理地址的转换、存储器保护和存储器请求的仲裁。在一个实施例中,存储器管理单元提供一个或更多个转换查找缓冲器(tlb),用于在存储器404中将虚拟地址转换为物理地址。
在一个实施例中,存储器分区单元480包括光栅操作(ROP)单元、二级(L2)缓存和耦合到存储器404的存储器接口。存储器接口可以实现32、64、128、1024位数据总线等,用于高速数据传输。PPU 400可以连接到多达Y个存储器设备,例如高带宽存储器堆栈或图形双数据速率、版本5、同步动态随机存取存储器或其他类型的持久存储器。在一个实施例中,存储器接口实现HBM2存储器接口,Y等于U的一半。在一个实施例中,HBM2存储器堆栈位于与PPU 400相同的物理封装上,与传统GDDR5 SDRAM系统相比,提供了大量的功率和面积节约。在一个实施例中,每个HBM2堆栈包括四个内存管芯,Y等于4,每个HBM2堆栈包括两个128位通道,每个管芯总共有8个通道,数据总线宽度为1024位。
在一个实施例中,存储器404支持单纠错双检错(SECDED)纠错码(ECC)以保护数据。ECC为对数据损坏敏感的计算应用程序提供了更高的可靠性。在大规模集群计算环境中,可靠性尤其重要,因为PPU400处理非常大的数据集和/或长时间运行应用程序。
在一个实施例中,PPU 400实现多级存储器层次结构。在一个实施例中,存储器分区单元480支持统一的存储器,以便为CPU和PPU 400存储器提供单个统一的虚拟地址空间,从而实现虚拟存储器系统之间的数据共享。在一个实施例中,跟踪PPU 400对位于其他处理器上的存储器的访问频率,以确保将存储器页面移动到更频繁地访问页面的PPU 400的物理存储器。在一个实施例中,NVLink 410支持地址转换服务,允许PPU 400直接访问CPU的页表,并提供PPU 400对CPU内存的完全访问。
在一个实施例中,复制引擎在多个PPU 400之间或PPU 400和CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页错误。然后,存储器分区单元480可以服务页面错误,将地址映射到页面表中,之后,复制引擎可以执行传输。在传统系统中,内存被固定(例如,不可分页)以用于多个处理器之间的多个复制引擎操作,从而大大减少了可用内存。通过硬件页面故障,可以将地址传递到复制引擎,而无需担心内存页面是否驻留,并且复制过程是透明的。
来自存储器404或其他系统存储器的数据可由存储器分区单元480提取并存储在二级缓存460中,二级缓存460位于芯片上并在各种GPC 450之间共享。如图所示,每个存储器分区单元480包括与相应存储器404相关联的二级缓存的一部分。然后,可以在GPC 450内的各种单元中实现较低级别的高速缓存。例如,GPC 450内的每个处理单元可以实现一级(L1)高速缓存。一级缓存是专用于特定处理单元的专用内存。二级缓存460耦合到存储器接口470和XBar 470,来自二级缓存的数据可以被提取并存储在每个一级缓存中进行处理。
在一个实施例中,每个GPC 450内的处理单元实现SIMD(单指令多数据)体系结构,其中一组线程(例如,warp)中的每个线程配置为基于同一组指令处理不同的数据集。线程组中的所有线程执行相同的指令。在另一个实施例中,处理单元实现SIMT(单指令、多线程)体系结构,其中线程组中的每个线程被配置为基于同一组指令处理不同的数据集,但是线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个warp维护程序计数器、调用堆栈和执行状态,当warp内的线程发散时,允许warp之间的并发和warp内的串行执行。在另一个实施例中,为每个单独的线程维护程序计数器、调用堆栈和执行状态,从而实现所有线程之间、warp内部和warp之间的平等并发。当为每个单独的线程保持执行状态时,执行相同指令的线程可以聚合并并行执行,以获得最大效率。
协作组是一种用于组织通信线程组的编程模型,它允许开发人员表示线程通信的粒度,从而实现更丰富、更高效的并行分解。协作启动API支持线程块之间的同步,以执行并行算法。传统的编程模型为同步协作线程提供了一个简单的构造:线程块中所有线程之间的屏障(例如syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的方式定义线程组,并在定义的组内进行同步,以实现更高的性能、设计灵活性,以及以集体组范围功能接口的形式实现软件重用。
协作组使程序员能够在子块(例如,小到一个线程)和多块粒度上明确定义线程组,并在协作组中的线程上执行集体操作,如同步。编程模型支持跨软件边界的干净组合,因此库和实用程序函数可以在其本地上下文中安全地同步,而无需对收敛性进行假设。协作组原语支持新的协作并行模式,包括生产者-消费者并行、机会主义并行和跨整个线程块网格的全局同步。
每个处理单元包括大量(如128等)不同的处理核心(如功能单元),这些处理核心可以是完全管线、单精度、双精度和/或混合精度,并包括浮点算术逻辑单元和整数算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮点算术的IEEE 754-2008标准。在一个实施例中,核包括64个单精度(32位)浮点核、64个整数核、32个双精度(64位)浮点核和8个张量核。
配置为执行矩阵运算的张量磁芯。特别地,张量核被配置为执行深度学习矩阵算法,例如在神经网络训练和推理期间用于卷积运算的GEMM(矩阵乘法)。在一个实施例中,每个张量核在4x4矩阵上操作,并执行矩阵乘法和累加操作D=A×B+C,其中A、B、C和D是4x4矩阵。
在一个实施例中,矩阵乘法输入A和B可以是整数、定点或浮点矩阵,而累加矩阵C和D可以是位宽度相等或更高的整数、定点或浮点矩阵。在一个实施例中,张量核对具有32位整数累积的一位、四位或八位整数输入数据进行操作。8位整数矩阵乘法需要1024次运算,并产生全精度乘积,然后使用32位整数加法与8x16矩阵乘法的其他中间乘积累加。在一个实施例中,张量核对具有32位浮点累加的16位浮点输入数据进行操作。16位浮点乘法需要64次运算,结果是全精度乘积,然后使用32位浮点加法与4x4矩阵乘法的其他中间乘积累加。实际上,张量核用于执行更大的二维或更高维矩阵运算,这些运算是由这些较小的元素构成的。API,如CUDA 9C++API,公开了专门的矩阵加载、矩阵乘法和累加运算以及矩阵存储操作,以有效地使用CUDA—C++程序中的张量核。在CUDA级别,warp级别的接口假定16x16大小的矩阵跨越warp的所有32个线程。
每个处理单元还可以包括M个特殊功能单元(SFU),它们执行特殊功能(例如,属性求值、平方根倒数等)。在一个实施例中,sfu可以包括树遍历单元,该树遍历单元被配置为遍历分层树数据结构。在一个实施例中,sfu可以包括被配置为执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器404加载纹理贴图(例如,纹理的2D阵列),并对纹理贴图进行采样,以产生采样的纹理值,用于由处理单元执行的着色器程序中。在一个实施例中,纹理贴图存储在共享存储器中,共享存储器可以包括或包括一级缓存。纹理单元实现纹理操作,例如使用mip贴图(例如,不同细节级别的纹理贴图)进行过滤操作。在一个实施例中,每个处理单元包括两个纹理单元。
每个处理单元还包括N个加载存储单元(LSU),用于在共享内存和寄存器文件之间执行加载和存储操作。每个处理单元包括互连网络,该互连网络将每个内核连接到寄存器文件,并将LSU连接到寄存器文件共享存储器。在一个实施例中,互连网络是一个交叉开关,可以配置为将任何内核连接到寄存器文件中的任何寄存器,并将lsu连接到寄存器文件和共享存储器中的存储器位置。
共享存储器是一个片上存储器阵列,允许在处理单元之间以及处理单元内的线程之间进行数据存储和通信。在一个实施例中,共享存储器包括128KB的存储容量,并且位于从每个处理单元到存储器分区单元480的路径中。共享内存可用于缓存读写操作。共享存储器、一级缓存、二级缓存和存储器404中的一个或更多个是后备存储器。
将数据缓存和共享内存功能组合到一个内存块中,可为两种类型的内存访问提供最佳的总体性能。该容量可用作不使用共享内存的程序的缓存。例如,如果将共享内存配置为使用一半的容量,则纹理和加载/存储操作可以使用剩余的容量。共享内存中的集成使共享内存能够作为流式数据的高通量管道发挥作用,同时为频繁重用的数据提供高带宽和低延迟访问。
当配置为通用并行计算时,可以使用比图形处理更简单的配置。特别是,绕过了固定功能图形处理单元,创建了一个简单得多的编程模型。在通用并行计算配置中,工作分配单元425将线程块直接分配和分配给GPCs 450内的处理单元。线程执行相同的程序,在计算中使用唯一的线程ID以确保每个线程生成唯一的结果,使用处理单元执行程序并执行计算,共享内存在线程之间通信,LSU通过共享存储器和存储器分区单元480读取和写入全局存储器。当被配置用于通用并行计算时,处理单元还可以写入调度器单元420可用于在处理单元上启动新工作的命令。
PPU 400可各自包括和/或配置为执行一个或更多个处理核心和/或其组件的功能,例如张量核心(TC)、张量处理单元(TPU)、像素视觉核心(PVC)、光线跟踪(RT)核心、视觉处理单元(VPU)、图形处理集群(GPC)、纹理处理集群(TPC)、流式多处理器(SMs)、树遍历单元(TTU)、人工智能加速器(AIA)、深度学习加速器(DLA)、算术逻辑单元(ALU)、专用集成电路(ASIC)、浮点单元(FPU)、输入/输出(I/O)元件、外围组件互连(PCI)或外围组件互连直通(PCIe)元件等。
PPU 400可包括在台式计算机、笔记本电脑、平板电脑、服务器、超级计算机、智能手机(例如,无线手持设备)、个人数字助理(PDA)中、数码相机、车辆、头戴式显示器、手持式电子设备等。在一个实施例中,PPU 400包含在单个半导体衬底上。在另一个实施例中,PPU400包含在片上系统(SoC)中以及一个或更多个其他设备,例如附加ppu 400、存储器404、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等。
在一个实施例中,PPU 400可以包括在包括一个或更多个存储设备的图形卡上。图形卡可以配置为与台式计算机主板上的PCIe插槽接口。在另一个实施例中,PPU 400可以是集成图形处理单元(iGPU)或包括在主板芯片组中的并行处理器。在另一实施例中,PPU 400可在可重构硬件中实现。在另一实施例中,PPU 400的部分可在可重构硬件中实现。
示范计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发人员在诸如人工智能计算等应用程序中公开并利用更多的并行性。在数据中心、研究设施和超级计算机中部署了具有数万到数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统中处理设备数量的增加,通信和数据传输机制需要扩展以支持增加的带宽。
图5A是根据实施例,使用图4的PPU 400实现的处理系统500的概念图。示例性系统565可被配置为实现图2中所示的方法200。处理系统500包括CPU 530、交换机510、多个ppu400以及相应的存储器404。
NVLink 410在每个PPU 400之间提供高速通信链路。尽管在图5B中示出了特定数量的NVLink 410和互连402连接,但是到每个PPU 400和CPU 530的连接的数量可以变化。交换机510在互连402和CPU 530之间进行接口。ppu 400、存储器404和NVLinks 410可位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或多个协议以在各种不同连接和/或链路之间进行接口。
在另一个实施例(未示出)中,NVLink 410提供每个PPU 400和CPU 530之间的一个或更多个高速通信链路,以及互连402和每个PPU 400之间的交换机510接口。ppu 400、存储器404和互连402可位于单个半导体平台上以形成并行处理模块525。在又一实施例(未示出)中,互连402提供每个ppu 400和CPU 530之间的一个或更多个通信链路,交换机510使用NVLink 410提供每个ppu 400之间的接口,以提供ppu 400之间的一个或更多个高速通信链路。在另一实施例(未示出)中,NVLink 410通过交换机510在ppu 400和CPU 530之间提供一个或更多个高速通信链路。在又一实施例(未示出)中,互连402直接在每个ppu 400之间提供一个或更多个通信链路。NVLink 410高速通信链路中的一个或更多个可以使用与NVLink410相同的协议实现为物理NVLink互连或片上或片上互连。
在本说明的上下文中,单个半导体平台可指在管芯或芯片上制造的唯一单一的基于半导体的集成电路。应注意,术语单半导体平台也可指具有增加的连接性的多芯片模块,其模拟芯片上操作,并且与利用传统总线实现相比作出实质性改进。当然,根据用户的期望,各种电路或装置也可以单独地或以半导体平台的各种组合来定位。或者,并行处理模块525可以实现为电路板基板,并且ppu 400和/或存储器404中的每一个都可以是封装设备。在一个实施例中,CPU 530、开关510和并行处理模块525位于单个半导体平台上。
在一个实施例中,每个NVLink 410的信令速率为20到25千兆位/秒,每个PPU 400包括六个NVLink 410接口(如图5A所示,每个PPU 400包括五个NVLink 410接口)。每个NVLink 410在每个方向上提供25千兆字节/秒的数据传输速率,六个链路提供400千兆字节/秒的数据传输速率。当CPU 530还包括一个或更多个NVLink 410接口时,NVLink 410可专用于如图5A所示的PPU到PPU通信,或PPU到PPU和PPU到CPU的某种组合。
在一个实施例中,NVLink 410允许从CPU 530到每个PPU的400存储器404的直接加载/存储/原子访问。在一个实施例中,NVLink 410支持一致性操作,允许从存储器404读取的数据存储在CPU 530的高速缓存层次中,从而减少CPU 530的高速缓存访问延迟。在一个实施例中,NVLink 410包括对地址转换服务(ATS)的支持,允许PPU 400直接访问CPU 530内的页表。NVLink 410中的一个或更多个还可以配置为在低功率模式下操作。
图5B示出了示例性系统565,其中可以实现各种先前实施例的各种架构和/或功能。示例性系统565可被配置为实现图2中所示的方法200。
如图所示,系统565包括至少一个连接到通信总线575的中央处理单元530。通信总线575可以直接或间接地耦合以下一个或更多个设备:主存储器540、网络接口535、CPU530、显示设备545、输入设备560、开关510和并行处理系统525。通信总线575可以使用任何合适的协议来实现,并且可以表示一个或更多个链路或总线,例如地址总线、数据总线、控制总线或其组合。通信总线575可以包括一个或更多个总线或链路类型,例如工业标准体系结构(ISA)总线、扩展工业标准体系结构(EISA)总线、视频电子标准协会(VESA)总线、外围组件互连(PCI)总线、外围组件互连直通(PCIe)总线、HyperTransport、,和/或其他类型的总线或链路。在一些实施例中,组件之间存在直接连接。例如,CPU 530可以直接连接到主存储器540。此外,CPU 530可以直接连接到并行处理系统525。在组件之间存在直接连接或点对点连接的情况下,通信总线575可包括执行连接的PCIe链路。在这些示例中,PCI总线不需要包括在系统565中。
尽管图5C的各个模块显示为通过通信总线575与线路连接,但这并非旨在限制,仅为清楚起见。例如,在一些实施例中,诸如显示设备545的呈现组件可以被视为诸如输入设备560(例如,如果显示器是触摸屏)的I/O组件。作为另一示例,CPU 530和/或并行处理系统525可以包括存储器(例如,除了并行处理系统525、CPU 530和/或其他组件之外,主存储器540可以代表存储设备)。换句话说,图5C的计算设备仅仅是说明性的。不区分“工作站”、“服务器”、“笔记本电脑”、“台式机”、“平板电脑”、“客户端设备”、“移动设备”、“手持设备”、“游戏控制台”、“电子控制单元(ECU)、“虚拟现实系统”和/或其他设备或系统类型,正如在图5C的计算设备的范围内所设想的那样。
系统565还包括主存储器540。控制逻辑(软件)和数据存储在主存储器540中,主存储器540可以采用各种计算机可读介质的形式。计算机可读介质可以是可由系统565访问的任何可用介质。计算机可读介质可以包括易失性介质和非易失性介质,以及可移动和不可移动介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质可以包括易失性和非易失性介质和/或以任何方法或技术实现的可移动和不可移动介质,用于存储信息,例如计算机可读指令、数据结构、程序模块和/或其他数据类型。例如,主存储器540可以存储计算机可读指令(例如,表示程序和/或程序元素的指令),例如操作系统。计算机存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储器、磁带、磁带、磁盘存储器或其他磁存储设备,或可用于存储所需信息并可由系统565访问的任何其他介质。如本文所用,计算机存储介质本身不包括信号。
计算机存储介质可将计算机可读指令、数据结构、程序模块和/或其他数据类型包含在调制数据信号中,例如载波或其他传输机制,并包括任何信息传递介质。术语“调制数据信号”可指以编码信号中的信息的方式设置或改变其一个或更多个特性的信号。作为示例而非限制,计算机存储介质可以包括有线介质,例如有线网络或直接有线连接,以及无线介质,例如声学、RF、红外和其他无线介质。上述任何组合也应包括在计算机可读介质的范围内。
执行计算机程序时,使系统565能够执行各种功能。CPU 530可被配置为执行计算机可读指令中的至少一些以控制系统565的一个或更多个组件以执行本文所述的方法和/或过程中的一个或更多个。CPU 530可各自包括能够同时处理多个软件线程的一个或更多个内核(例如,一个、两个、四个、八个、二十八个、七十二个等)。CPU 530可以包括任何类型的处理器,并且可以根据所实现的系统565的类型包括不同类型的处理器(例如,对于移动设备具有较少内核的处理器和对于服务器具有较多内核的处理器)。例如,根据系统565的类型,处理器可以是使用精简指令集计算(RISC)实现的高级RISC机器(ARM)处理器或使用复杂指令集计算(CISC)实现的x86处理器。除了一个或更多个微处理器或补充协处理器(例如数学协处理器)之外,系统565还可以包括一个或更多个cpu 530。
除了CPU 530之外,或者从CPU 530选择,并行处理模块525可以被配置为执行至少一些计算机可读指令,以控制系统565的一个或更多个组件执行本文所述的一个或更多个方法和/或过程。并行处理模块525可由系统565用于呈现图形(例如,3D图形)或执行通用计算。例如,并行处理模块525可用于gpu(GPGPU)上的通用计算。在实施例中,CPU530和/或并行处理模块525可以离散地或联合地执行方法、过程和/或其部分的任意组合。
系统565还包括输入设备560、并行处理系统525和显示设备545。显示设备545可包括显示器(例如,监视器、触摸屏、电视屏幕、平视显示器(HUD)、其他显示类型或其组合)、扬声器和/或其他呈现组件。显示设备545可以从其他组件(例如,并行处理系统525、CPU 530等)接收数据,并输出数据(例如,作为图像、视频、声音等)。
网络接口535可使系统565与其他设备逻辑耦合,包括输入设备560、显示设备545和/或其他组件,其中一些组件可内置于(例如,集成在)系统565中。说明性输入设备560包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、卫星天线、扫描仪、打印机、无线设备等。输入设备560可以提供自然用户界面(NUI),该自然用户界面处理空气手势、语音或用户生成的其他生理输入。在一些情况下,可以将输入传输到适当的网络元件以进行进一步处理。NUI可以实现与系统565的显示器相关联的语音识别、手写笔识别、面部识别、生物测定识别、屏幕上和屏幕附近的手势识别、空中手势、头部和眼睛跟踪以及触摸识别(如下更详细地描述)的任意组合。系统565可以包括深度相机,例如立体相机系统、红外相机系统、RGB相机系统、触摸屏技术以及这些技术的组合,用于手势检测和识别。此外,系统565可包括能够检测运动的加速计或陀螺仪(例如,作为惯性测量单元(IMU)的一部分)。在一些示例中,加速度计或陀螺仪的输出可由系统565用于呈现沉浸式增强现实或虚拟现实。
此外,出于通信目的,系统565可以通过网络接口535耦合到网络(例如,电信网络、局域网(LAN)、无线网络、诸如因特网的广域网(WAN)、对等网络、电缆网络等)。系统565可以包括在分布式网络和/或云计算环境中。
网络接口535可包括一个或更多个接收器、发射器和/或收发器,使系统565能够通过包括有线和/或无线通信的电子通信网络与其他计算设备通信。网络接口535可以包括组件和功能,以支持通过多个不同网络中的任何一个进行通信,例如无线网络(例如,Wi-Fi、Z-Wave、蓝牙、蓝牙LE、ZigBee等)、有线网络(例如,通过以太网或InfiniBand进行通信)、低功耗广域网(例如,LoRaWAN、SigFox等),和/或互联网。
系统565还可包括辅助存储器(未显示)。辅助存储器610包括例如硬盘驱动器和/或可移动存储驱动器,表示软盘驱动器、磁带驱动器、光盘驱动器、数字多功能磁盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移动存储驱动器以众所周知的方式读取和/或写入可移动存储单元。系统565还可以包括硬接线电源、电池电源或其组合(未示出)。电源可向系统565供电,以使系统565的组件能够工作。
上述每个模块和/或装置甚至可以位于单个半导体平台上,以形成系统565。或者,根据用户的期望,各种模块也可以单独地或以半导体平台的各种组合来定位。虽然上面已经描述了各种实施例,但是应当理解,它们仅作为示例而不是限制来呈现。因此,优选实施例的宽度和范围不应受到上述任何示例性实施例的限制,而应仅根据以下权利要求及其等效物来定义。
示例网络环境
适用于实施本发明实施例的网络环境可包括一个或更多个客户端设备、服务器、网络连接存储(NAS)、其他后端设备和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图5A的处理系统500和/或图5B的示例性系统565的一个或更多个实例上实现——例如,每个设备可以包括处理系统500和/或示例性系统565的类似组件、特征和/或功能。
网络环境的组件可通过有线、无线或两者兼有的网络相互通信。该网络可以包括多个网络,或者网络的网络。举例来说,该网络可包括一个或更多个广域网(wan)、一个或更多个局域网(lan)、一个或更多个公共网络(例如因特网和/或公共交换电话网(PSTN))和/或一个或更多个专用网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或甚至接入点的组件(以及其他组件)可以提供无线连接。
兼容的网络环境可能包括一个或更多个对等网络环境(在这种情况下,服务器可能不包括在网络环境中)和一个或更多个客户机-服务器网络环境(在这种情况下,一个或更多个服务器可能包括在网络环境中)。在对等网络环境中,本文描述的关于服务器的功能可以在任意数量的客户端设备上实现。
在至少一个实施例中,网络环境可包括一个或更多个基于云的网络环境、分布式计算环境及其组合等。基于云的网络环境可包括框架层、作业调度器、资源管理器、,以及在一个或更多个服务器上实现的分布式文件系统,其可以包括一个或更多个核心网络服务器和/或边缘服务器。框架层可以包括支持软件层的软件和/或应用层的一个或更多个应用的框架。软件或应用程序可分别包括基于web的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于web的服务软件或应用(例如,通过经由一个或更多个应用编程接口(api)访问服务软件和/或应用)。框架层可以是,但不限于,一种免费的开源软件web应用框架,例如,可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)。
基于云的网络环境可提供云计算和/或云存储,以执行本文所述的计算和/或数据存储功能的任何组合(或其中的一个或更多个部分)。这些各种功能中的任何一种都可以从中央或核心服务器(例如,一个或更多个数据中心的服务器)分布到多个位置,这些数据中心可以分布在一个州、一个地区、一个国家、全球等地。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环境)。
客户端设备可以包括图5B的示例处理系统500和/或图5C的示例系统565的至少一些组件、特征和功能。作为示例而非限制,客户端设备可以实现为个人计算机(PC)、膝上型计算机、移动设备、智能手机、平板计算机、智能手表、可穿戴计算机、个人数字助理(PDA)、MP3播放器、虚拟现实头戴式耳机、全球定位系统(GPS)或设备、视频播放器,摄像机、监控设备或系统、车辆、船只、飞艇、虚拟机、无人机、机器人、手持通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、设备、消费电子设备、,工作站、边缘设备、这些划定设备的任何组合或任何其他合适的设备。
机器学习
在处理器(如PPU 400)上开发的深度神经网络(DNN)已用于多种用途,从自动驾驶汽车到更快的药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种模拟人脑神经学习过程的技术,它可以不断学习,不断变得更聪明,并随着时间的推移更快地提供更准确的结果。一开始,成人会教孩子正确识别和分类各种形状,最终能够在没有任何指导的情况下识别形状。类似地,深度学习或神经学习系统需要在对象识别和分类方面进行训练,因为它在识别基本对象、遮挡对象等方面更智能、更有效,同时也为对象分配上下文。
在最简单的层面上,人脑中的神经元查看接收到的各种输入,将重要性级别分配给每个输入,并将输出传递给其他神经元以采取行动。人工神经元或感知器是神经网络最基本的模型。在一个示例中,感知器可以接收一个或更多个输入,这些输入表示感知器正被训练以识别和分类的对象的各种特征,并且基于该特征在定义对象形状中的重要性,为这些特征中的每一个分配一定的权重。
深度神经网络(DNN)模型包括多层多个连接节点(例如,感知器、Boltzmann机器、径向基函数、卷积层等),可使用大量输入数据进行训练,以快速高精度解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为不同的部分,并查找诸如直线和角度之类的基本模式。第二层组合线条,寻找更高层次的图案,如车轮、挡风玻璃和镜子。下一层标识车辆类型,最后几层为输入图像生成标签,标识特定汽车品牌的型号。
一旦对DNN进行培训,就可以部署DNN,并在一个称为推理的过程中用于识别和分类对象或模式。推理示例(DNN从给定输入中提取有用信息的过程)包括识别存入ATM机支票上的手写数字、识别照片中朋友的图像、向5000多万用户提供电影推荐、识别和分类不同类型的汽车,无人驾驶汽车的行人和道路危险,或实时翻译人类语音。
在训练期间,数据在前向传播阶段流经DNN,直到生成一个预测,该预测指示与输入相对应的标签。如果神经网络没有正确标记输入,则分析正确标记和预测标记之间的误差,并在反向传播阶段调整每个特征的权重,直到DNN正确标记训练数据集中的输入和其他输入。训练复杂的神经网络需要大量的并行计算性能,包括PPU 400支持的浮点乘法和加法。推理的计算密集度低于训练,这是一个对延迟敏感的过程,在这个过程中,经过训练的神经网络被应用于它以前从未见过的新输入,以分类图像、检测情绪、识别建议、识别和翻译语音,并通常推理出新信息。
神经网络在很大程度上依赖于矩阵数学运算,复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。PPU 400拥有数千个处理核心,针对矩阵数学运算进行了优化,并提供了数十到数百个TFLOPS的性能,是一个能够提供基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
此外,应用本文公开的一种或多种技术生成的图像可用于训练、测试或认证用于识别现实世界中的对象和环境的DNN。此类图像可包括道路、工厂、建筑物、城市环境、农村环境、人类、动物和任何其他物理对象或真实世界环境的场景。此类图像可用于训练、测试或认证机器或机器人中用于操纵、处理或修改现实世界中物理对象的DNN。此外,此类图像可用于训练、测试或认证自动驾驶车辆中用于在真实世界中导航和移动车辆的DNN。此外,应用本文公开的一种或多种技术生成的图像可用于向此类机器、机器人和车辆的用户传送信息。
图5C示出了根据至少一个实施例的可用于训练和利用机器学习的示例性系统555的组件。如将要讨论的,各种组件可以由计算设备和资源的各种组合提供,或者由单个实体或多个实体控制的单个计算系统提供。此外,方面可由不同实体触发、发起或请求。在至少一个实施例中,神经网络的训练可由与提供商环境506相关联的提供者指示,而在至少一个实施例中,训练可由通过客户端设备502或其他此类资源访问提供商环境的客户或其他用户请求。在至少一个实施例中,训练数据(或将由训练的神经网络分析的数据)可由提供者、用户或第三方内容提供者524提供。在至少一个实施例中,客户端设备502可以是代表用户导航的车辆或对象,例如,其可以提交请求和/或接收帮助设备导航的指令。
在至少一个实施例中,请求能够通过至少一个网络504提交,以供提供商环境506接收。在至少一个实施例中,客户端设备可以是任何适当的电子和/或计算设备,使用户能够生成和发送此类请求,例如但不限于台式计算机、笔记本计算机、计算机服务器、智能手机、平板计算机、游戏控制台(便携式或其他)、计算机处理器、计算逻辑、,和机顶盒。网络504可包括用于传输请求或其他此类数据的任何适当网络,如可包括因特网、内联网、以太网、蜂窝网络、局域网(LAN)、广域网(WAN)、个人局域网(PAN)、对等方之间直接无线连接的自组织网络等。
在至少一个实施例中,可以在接口层508处接收请求,在此示例中,接口层508可以将数据转发给训练和推理管理器532。训练和推理管理器532可以是包括用于管理请求和服务对应数据或内容的硬件和软件的系统或服务,在至少一个实施例中,训练和推理管理器532可以接收训练神经网络的请求,并且可以向训练模块512提供用于请求的数据。在至少一个实施例中,如果请求未指定,训练模块512可以选择要使用的适当模型或神经网络,并且可以使用相关训练数据训练模型。在至少一个实施例中,训练数据可以是存储在训练数据存储库514中、从客户端设备502接收或从第三方提供商524获得的一批数据。在至少一个实施例中,训练模块512可负责训练数据。神经网络可以是任何合适的网络,例如递归神经网络(RNN)或卷积神经网络(CNN)。一旦训练并成功评估神经网络,训练后的神经网络可存储在模型存储库516中,例如,该模型存储库可存储用于用户、应用或服务等的不同模型或网络。在至少一个实施例中,可存在用于单个应用或实体的多个模型,可以基于许多不同的因素来使用。
在至少一个实施例中,在随后的时间点,可以从客户端设备502(或另一个这样的设备)接收对内容(例如,路径确定)或数据的请求,该内容或数据至少部分地由经过训练的神经网络确定或影响。该请求可以包括,例如,要使用神经网络来处理的输入数据,以获得一个或更多个推理或其他输出值、分类或预测,或者对于至少一个实施例,输入数据可以由接口层508接收并定向到推理模块518,尽管也可以使用不同的系统或服务。在至少一个实施例中,如果推理模块518尚未本地存储到推理模块518,则推理模块518可以从模型存储库516获得适当的训练网络,例如本文所讨论的经训练的深度神经网络(DNN)。推理模块518可将数据作为输入提供给训练网络,训练网络随后可生成一个或更多个推理作为输出。例如,这可以包括对输入数据的实例的分类。在至少一个实施例中,然后可以将推理发送到客户端设备502以用于显示或与用户进行其他通信。在至少一个实施例中,用户的上下文数据还可以存储到用户上下文数据存储库522,该存储库522可以包括关于用户的数据,该数据在生成推理或确定在获得实例后返回给用户的数据时可用作网络的输入。在至少一个实施例中,可以包括至少一些输入或推理数据的相关数据也可以存储到本地数据库534以用于处理未来的请求。在至少一个实施例中,用户可以使用账户信息或其他信息来访问提供商环境的资源或功能。在至少一个实施例中,如果允许且可用,还可以收集用户数据并将其用于进一步训练模型,以便为将来的请求提供更准确的推理。在至少一个实施例中,可以通过用户接口接收到在客户端设备502上执行的机器学习应用526的请求,并通过相同接口显示结果。客户端设备可以包括用于生成请求和处理结果或响应的资源,例如处理器528和存储器562,以及用于存储用于机器学习应用526的数据的至少一个数据存储元件552。
在至少一个实施例中,处理器528(或训练模块512或推理模块518的处理器)将是中央处理单元(CPU)。然而,如上所述,此类环境中的资源可以利用GPU来处理至少某些类型请求的数据。GPU(如PPU300)拥有数千个内核,设计用于处理大量并行工作负载,因此,在深度学习中,它已成为训练神经网络和生成预测的热门工具。虽然将GPU用于离线构建能够更快地训练更大、更复杂的模型,但离线生成预测意味着不能使用请求时输入功能,或者必须为所有功能排列生成预测,并存储在查找表中以服务于实时请求。如果深度学习框架支持CPU模式,并且模型足够小而简单,能够以合理的延迟在CPU上执行前馈,那么CPU实例上的服务可以承载模型。在这种情况下,训练可以在GPU上离线完成,推理可以在CPU上实时完成。如果CPU方法不可行,那么服务可以在GPU实例上运行。但是,由于GPU与CPU具有不同的性能和成本特征,因此运行将运行时算法卸载到GPU的服务可能需要与基于CPU的服务设计不同。
在至少一个实施例中,可以从客户端设备502提供视频数据,以在提供商环境506中进行增强。在至少一个实施例中,可以在客户端设备502上处理视频数据以进行增强。在至少一个实施例中,视频数据可以从第三方内容提供商524流式传输,并由第三方内容提供商524、提供商环境506或客户端设备502增强。在至少一个实施例中,可以从客户端设备502提供视频数据以用作提供商环境506中的训练数据。
在至少一个实施例中,可由客户端设备502和/或提供商环境506执行监督和/或非监督训练。在至少一个实施例中,提供一组训练数据514(例如,分类或标记数据)作为输入以用作训练数据。在一个实施例中,训练数据集514可用于生成对抗性训练配置中,以训练生成器神经网络。
在至少一个实施例中,训练数据可包括至少一个人类主体、化身或角色的图像,神经网络将针对其进行训练。在至少一个实施例中,训练数据可以包括要为其训练神经网络的至少一种类型的对象的实例,以及识别该类型对象的信息。在至少一个实施例中,训练数据可以包括一组图像,每个图像包括对象类型的表示,其中每个图像还包括或与标识在相应图像中表示的对象类型的标签、元数据、分类或其他信息片段相关联。各种其他类型的数据也可以用作训练数据,还可以包括文本数据、音频数据、视频数据等。在至少一个实施例中,训练数据514被提供为训练模块512的训练输入。在至少一个实施例中,训练模块512可以是包括硬件和软件的系统或服务,例如执行训练应用的一个或更多个计算设备,用于训练神经网络(或其他模型或算法等)。在至少一个实施例中,训练模块512接收指示要用于训练的模型的类型的指令或请求,在至少一个实施例中,模型可以是用于此类目的的任何适当的统计模型、网络或算法,如可包括人工神经网络、深度学习算法、学习分类器、贝叶斯网络等。在至少一个实施例中,训练模块512可以从适当的存储库516中选择初始模型或其他未经训练的模型,并利用训练数据514训练模型,从而生成可用于分类类似类型数据或生成其他此类推理的经训练的模型(例如,经训练的深度神经网络)。在不使用训练数据的至少一个实施例中,仍然可以为每个训练模块512的输入数据的训练选择适当的初始模型。
在至少一个实施例中,模型可以通过多种不同的方式进行训练,这部分取决于所选模型的类型。在至少一个实施例中,可以向机器学习算法提供一组训练数据,其中模型是由训练过程创建的模型工件。在至少一个实施例中,训练数据的每个实例包含正确答案(例如,分类),其可被称为目标或目标属性。在至少一个实施例中,学习算法在将输入数据属性映射到目标的训练数据中查找模式、要预测的答案,并且输出捕获这些模式的机器学习模型。在至少一个实施例中,然后可以使用机器学习模型来获得对未指定目标的新数据的预测。
在至少一个实施例中,训练和推理管理器532可以从一组机器学习模型中进行选择,包括二进制分类、多类分类、生成和回归模型。在至少一个实施例中,要使用的模型类型可以至少部分地取决于要预测的目标类型。
图形处理管线
在一个实施例中,PPU 400包括一个图形处理单元(GPU)。PPU 400被配置为接收指定用于处理图形数据的着色器程序的命令。图形数据可以定义为一组基本体,例如点、线、三角形、四边形、三角形条带等。通常,基本体包括指定基本体顶点数量的数据(例如,在模型空间坐标系中)以及与基本体每个顶点关联的属性。PPU 400可被配置为处理图形原语以生成帧缓冲器(例如,显示器的每个像素的像素数据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入内存,如系统内存或内存404。模型数据定义了可能在显示器上可见的每个对象。然后,应用程序对驱动程序内核进行API调用,请求呈现和显示模型数据。驱动程序内核读取模型数据,并将命令写入一个或更多个流,以执行处理模型数据的操作。这些命令可以引用要在PPU 400内的处理单元上实现的不同着色器程序,包括顶点着色器、外壳着色器、域着色器、几何体着色器和像素着色器中的一个或更多个。例如,一个或更多个处理单元可被配置为执行顶点着色器程序,该程序处理由模型数据定义的多个顶点。在一个实施例中,不同的处理单元可被配置为同时执行不同的着色器程序。例如,处理单元的第一子集可配置为执行顶点着色器程序,而处理单元的第二子集可配置为执行像素着色器程序。处理单元的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入二级缓存460和/或存储器404。在处理后的顶点数据被光栅化(例如,在屏幕空间中从三维数据转换为二维数据)以产生片段数据之后,处理单元的第二子集执行像素着色器以产生处理后的片段数据,然后将其与其他处理的片段数据混合并写入存储器404中的帧缓冲器。顶点着色器程序和像素着色器程序可以并行执行,以管线方式处理来自同一场景的不同数据,直到场景的所有模型数据都已渲染到帧缓冲区。然后,帧缓冲器的内容被发送到显示控制器以在显示设备上显示。
图6A是根据实施例由图4的PPU 400实现的图形处理管道600的概念图。图形处理管道600是用于从三维几何数据生成二维计算机生成图像的处理步骤的抽象流程图。众所周知,管道体系结构可以通过将操作分为多个阶段来更有效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管道600接收从图形处理管道600的一级传输到下一级的输入数据601,以生成输出数据602。在一个实施例中,图形处理管道600可以表示由
Figure BDA0003410895240000371
API定义的图形处理管道。作为选项,图形处理管道600可以在先前附图和/或任何后续附图的功能和架构的上下文中实现。
如图6A所示,图形处理管道600包括多个阶段的管道体系结构。这些阶段包括但不限于数据组装级610、顶点着色阶段620、基本体组装阶段630、几何体着色阶段640、视口缩放、消隐和剪裁(VSCC)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括配置处理单元以实现图形处理管道600的各个阶段和要由这些阶段处理的几何原语(例如,点、线、三角形、四边形、三角形条带或扇形等)的命令。输出数据602可以包括被复制到帧缓冲器或存储器中的其他类型的表面数据结构中的像素数据(例如,颜色数据)。
数据组装级610接收指定高阶曲面、基本体等的顶点数据的输入数据601。数据组装级610在临时存储器或队列中收集顶点数据,例如通过从主机处理器接收包括指向存储器中的缓冲器的指针的命令并从缓冲器读取顶点数据。然后将顶点数据发送到顶点着色阶段620以进行处理。
顶点着色阶段620通过对每个顶点执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如指定为与一个或更多个顶点属性(例如颜色、纹理坐标、曲面法线等)相关联的4坐标向量(例如,<x、y、z、w>)。顶点着色阶段620可以操纵各个顶点属性,例如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对顶点坐标或与顶点相关联的其他顶点属性执行操作。此类操作通常包括照明操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,通过将坐标乘以将坐标从对象坐标空间转换为世界空间或标准化设备坐标(NCD)空间的矩阵来转换这些坐标。顶点着色级620生成传输到基本体组装级630的变换顶点数据。
基本体组装级630收集顶点着色台620输出的顶点,并将顶点分组为几何基本体,以供几何体着色台640处理。例如,基本体组装级630可以被配置为将每三个连续顶点分组为几何原语(例如,三角形),以便传输到几何体着色台640。在一些实施例中,特定顶点可用于连续几何基本体(例如,三角形带中的两个连续三角形可共享两个顶点)。基本体组装级630将几何基本体(例如,相关联顶点的集合)发送到几何体着色台640。
几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。细分操作可以从每个几何图元生成一个或更多个几何图元。换句话说,几何着色阶段640可以将每个几何原语细分为两个或多个几何原语的更细网格,以供图形处理管道600的其余部分处理。几何着色阶段640将几何原语发送到视口阶段650。
在一个实施例中,图形处理管道600可在流式多处理器内操作,顶点着色阶段620、基本体组装级630、几何体着色阶段640、片段着色阶段670和/或与之相关的硬件/软件可顺序执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC台650可利用该数据。在一个实施例中,由图形处理管道600中的一个或更多个级处理的基本数据可以写入高速缓存(例如,一级高速缓存、顶点高速缓存等)。在这种情况下,在一个实施例中,视口SCC台650可以访问高速缓存中的数据。在一个实施例中,视区SCC级650和光栅化级660实现为固定功能电路。
视口SCC阶段650执行几何图元的视口缩放、剔除和剪裁。渲染到的每个曲面都与抽象摄影机位置相关联。摄影机位置表示查看场景的查看器的位置,并定义包围场景对象的视锥体。视锥台可以包括一个视平面、一个后平面和四个剪裁平面。完全位于视锥体之外的任何几何图元都可能被剔除(例如,丢弃),因为几何图元不会对最终渲染场景做出贡献。可以剪裁部分位于视锥台内部部分位于视锥台外部的任何几何图元(例如,转换为封闭在视锥体内的新几何原语。此外,每个几何原语可根据视锥的深度进行缩放。所有潜在可见的几何原语随后被传输到光栅化阶段660。
光栅化阶段660将3D几何图元转换为2D片段(例如,能够用于显示等).光栅化阶段660可以配置为利用几何原语的顶点来建立一组平面方程,从中可以插值各种属性。光栅化阶段660还可以计算多个像素的覆盖掩模,该覆盖掩模指示像素截距的一个或更多个采样位置几何原语。在一个实施例中,还可以执行z测试以确定几何原语是否被已经光栅化的其他几何原语遮挡。光栅化阶段660生成片段数据(例如,与每个覆盖像素的特定样本位置相关联的插值顶点属性),其被传输到片段着色阶段670。
片段着色阶段670通过对每个片段执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可生成像素数据(例如,颜色值)对于片段,例如通过使用片段的插值纹理坐标执行照明操作或采样纹理贴图。片段着色阶段670生成像素数据,该像素数据被传输到光栅操作阶段680。
光栅操作阶段680可以对像素数据执行各种操作,例如执行alpha测试、模板测试,以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680完成对像素数据的处理时(例如,输出数据602),可以将像素数据写入诸如帧缓冲器、颜色缓冲器等的渲染目标。
应当理解,图形处理管道600中可以包括一个或更多个附加阶段,作为上述一个或更多个阶段的补充或替代。抽象图形处理管道的各种实现可以实现不同的阶段。此外,可以包括上述一个或更多个阶段在一些实施例中,从图形处理管道中排除(例如几何体着色阶段640)。其他类型的图形处理管道被视为在本公开的范围内。此外,图形处理管道600的任何一级可由图形处理器(如PPU 400)内的一个或更多个专用硬件单元实现。图形处理管道600的其他级可以由可编程硬件单元(例如PPU 400内的处理单元)实现。
图形处理管道600可通过主机处理器(如CPU)执行的应用程序实现。在一个实施例中,设备驱动器可以实现应用程序编程接口(API),该API定义应用程序可以使用的各种功能,以便生成用于显示的图形数据。设备驱动程序是包括控制PPU 400的操作的多条指令的软件程序。API为程序员提供了一种抽象,它允许程序员利用专用图形硬件(例如PPU 400)来生成图形数据,而无需程序员利用用于PPU 400的特定指令集。应用程序可以包括路由到PPU 400的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在某些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其它实例中,设备驱动器可通过利用CPU和PPU 400之间的输入/输出接口在PPU 400上启动操作来执行操作,至少部分地。在一个实施例中,设备驱动程序被配置为利用PPU 400的硬件实现图形处理管道600。
为了实现图形处理管道600的各个阶段,可以在PPU 400内执行各种程序。例如,设备驱动程序可以在PPU 400上启动内核,以在一个处理单元(或多个处理单元)上执行顶点着色阶段620。设备驱动程序(或由PPU 400执行的初始内核)还可以在PPU 400上启动其他内核以执行图形处理管道600的其他阶段,例如几何体着色阶段640和片段着色阶段670。此外,图形处理管道600的一些级可以在固定单元硬件上实现,例如在PPU 400内实现的光栅化器或数据汇编器。应当理解,来自一个内核的结果可以在被处理单元上的后续内核处理之前由一个或更多个介入的固定功能硬件单元处理。
应用本文公开的一种或多种技术生成的图像可显示在监视器或其他显示设备上。在一些实施例中,显示设备可直接耦合到生成或呈现图像的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接地耦合到系统或处理器。此类网络的示例包括互联网、移动电信网络、WIFI网络以及任何其他有线和/或无线网络系统。当显示设备间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。例如,这种流允许在服务器、数据中心或基于云的计算环境中执行渲染图像的视频游戏或其他应用程序,并允许在一个或更多个用户设备(例如计算机、视频游戏控制台、智能手机、其他移动设备等)上传输和显示渲染图像与服务器或数据中心物理上分离的。因此,本文公开的技术可用于增强流式传输的图像并增强流式传输图像的服务,例如NVIDIA GeForce Now(GFN)、Google Stadia等。
示例游戏流媒体系统
图6B是根据本公开的一些实施例的游戏流系统605的示例系统图。图6B包括游戏服务器603(其可包括与图5A的示例性处理系统500和/或图5B的示例性系统565类似的组件、特征和/或功能)、客户端设备604(可以包括与图5A的示例性处理系统500和/或图5B的示例性系统565类似的组件、特征和/或功能)和网络606(可以类似于本文描述的网络)。在本公开的一些实施例中,可以实现系统605。
在系统605中,对于游戏会话,客户端设备604可以仅接收响应于输入设备的输入的输入数据,将输入数据发送到游戏服务器603,从游戏服务器接收编码显示数据这样,计算强度更高的计算和处理被卸载到游戏服务器603(例如,游戏会话的图形输出的渲染-特别是光线或路径跟踪-由游戏服务器603的GPU执行)换句话说,游戏会话从游戏服务器603流式传输到客户端设备604,从而降低客户端设备604对图形处理和呈现的要求。
例如,关于游戏会话的实例化,客户端设备604可以基于从游戏服务器603接收显示数据而在显示器624上显示游戏会话的帧。客户端设备604可以接收到输入设备之一的输入客户端设备604可以经由通信接口621并通过网络606(例如,因特网)将输入数据发送到游戏服务器603,并且游戏服务器603可以经由通信接口618接收输入数据可接收输入数据,处理输入数据,并将数据传输至引起GPU的GPU生成游戏会话的渲染。例如,输入数据可以代表游戏中用户角色的移动、发射武器、重新加载、传球、转动车辆等。渲染组件612可以渲染游戏会话(例如,代表输入数据的结果)并且渲染捕获组件614可以捕获游戏会话的渲染作为显示数据(例如,作为捕获游戏会话的渲染帧的图像数据)。游戏会话的渲染可包括光线或路径跟踪照明和/或阴影效果,使用游戏服务器的一个或更多个并行处理单元(如GPU)计算,GPU可进一步使用一个或更多个专用硬件加速器或处理核心来执行光线或路径跟踪技术603.编码器616随后可以对显示数据进行编码以生成编码显示数据,并且编码显示数据可以通过网络发送到客户端设备604客户端设备604可经由通信接口621接收编码显示数据,解码器622可解码编码显示数据以生成显示数据。客户端设备604随后可经由显示器624显示显示数据。
注意,本文描述的技术可体现在存储在计算机可读介质中的可执行指令中,以供基于处理器的指令执行机器、系统、装置或设备使用或与之结合使用。本领域技术人员将理解,对于一些实施例,可以包括用于存储数据的各种类型的计算机可读介质。如本文所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适介质中的一个或更多个,使得指令执行机器、系统、装置或设备可以读取(或提取)这些指令来自计算机可读介质,并执行用于执行所述实施例的指令。合适的存储格式包括电子、磁、光和电磁格式中的一种或多种。传统示例性计算机可读介质的非详尽列表包括:便携式计算机软盘;随机存取存储器(RAM);只读存储器(ROM);可擦除可编程只读存储器(EPROM);闪存装置;以及光学存储设备,包括便携式光盘(CD)、便携式数字视频光盘(DVD)等。
应理解,附图中所示的部件布置仅用于说明目的,其他布置也是可能的。例如,本文描述的一个或更多个元件可以全部或部分地实现为电子硬件组件。其他元件可以在软件、硬件或软件和硬件的组合中实现。此外,可以组合这些其他元件中的一些或所有元件,可以完全省略一些元件,并且可以在仍然实现本文描述的功能性的同时添加附加组件。因此,本文所描述的主题可以体现在许多不同的变化中,并且所有这些变化都被预期在权利要求的范围内。
为了便于理解本文描述的主题,根据动作顺序描述了许多方面。本领域技术人员将认识到,各种动作可由专用电路或电路、由一个或更多个处理器执行的程序指令或两者的组合来执行。本文对任何动作序列的描述并不意味着必须遵循为执行该序列而描述的特定顺序。除非本文另有说明或上下文另有明确矛盾,否则本文所述的所有方法可按任何适当顺序执行。
在描述标的物的上下文中(特别是在以下权利要求的上下文中),术语“a”和“an”以及“The”和类似引用的使用应解释为涵盖单数和复数,除非本文另有说明或与上下文明显矛盾。术语“至少一个”后跟一个或更多个项目的列表(例如,“a和B中的至少一个”)的使用应解释为指从所列项目(a或B)中选择的一个项目或两个或多个所列项目(a和B)的任何组合,除非本文另有说明或与上下文明显矛盾。此外,上述描述仅用于说明目的,而非限制目的,因为所寻求的保护范围由下文所述的权利要求及其任何等价物定义。使用本文提供的任何和所有示例或示例性语言(例如,“例如”)仅旨在更好地说明主题,并且不构成对主题范围的限制,除非另有要求。在权利要求书和书面说明中使用术语“基于”和其他类似短语表示产生结果的条件,并不意味着取消产生该结果的任何其他条件。说明书中的任何语言都不应被解释为表明任何非权利要求保护的元素对于权利要求保护的本发明的实施是必不可少的。

Claims (20)

1.一种计算机实现的方法,包括:
识别与多个流会话中的至少一个流会话相关联的一个或更多个死区,其中所述至少一个流会话对应于在主机计算设备的虚拟机上执行的软件堆栈的至少一部分;
对于为特定流会话识别的每个死区,在由所述主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在所述死区附近的事件;
对于多个事件类型中的每个事件类型,确定相对于所识别的死区的所述事件类型的事件分布;和
基于所述多个事件类型的事件分布来调整所述主机计算设备的操作。
2.根据权利要求1所述的计算机实现的方法,其中所述软件堆栈包括游戏流服务的多个阶段,所述游戏流服务包括帧捕获阶段、编码阶段和传输阶段中的至少一个。
3.根据权利要求2所述的计算机实现的方法,其中所述主机计算设备执行配置为执行游戏应用程序的第二虚拟机,其中,所述游戏应用程序被配置为生成图像帧,所述图像帧由所述软件堆栈处理以向客户端设备发送比特流,所述客户端设备被配置为向所述游戏流服务的用户显示所述图像帧,并且其中,所述客户端设备被配置为将来自所述客户端设备的输入发送到所述游戏应用程序,以渲染所述游戏应用程序的后续帧。
4.根据权利要求1所述的计算机实现的方法,其中识别由所述主机计算设备的一个或更多个附加虚拟机生成的所述事件数据中发生在所述死区附近的事件包括:
对于所述事件数据中的每个事件,计算与所述事件相关联的时间戳和与每个识别的死区相关联的时间戳之间的差;和
对于特定死区,标记所述差的绝对值小于与所述死区相关的阈值的每个事件。
5.根据权利要求1所述的计算机实现的方法,其中确定相对于相应的死区的时间的所述事件类型的所述事件分布包括:
通过对每个事件类型在围绕所述相应的死区的时间窗口中的多个时间段内的出现次数进行计数来生成直方图。
6.根据权利要求5所述的计算机实现的方法,其中基于所述多个事件类型的所述事件分布来调整所述主机计算设备的操作包括:
确定特定事件类型的所述事件分布包括特定时间段中的事件数量,所述事件数量以阈值量超过每个时间段的事件平均数量;和
基于所述特定事件类型识别所述操作。
7.根据权利要求1所述的计算机实现的方法,其中调整所述主机计算设备的所述操作包括将所述主机计算设备上的第二虚拟机迁移到第二主机计算设备。
8.根据权利要求1所述的计算机实现的方法,其中调整所述主机计算设备的所述操作包括将对应于所述事件类型的数据从第一存储设备迁移到第二存储设备。
9.根据权利要求1所述的计算机实现的方法,其中识别与所述多个流会话中的至少一个流会话相关联的一个或更多个死区包括:
将用于所述至少一个流会话的元数据中包括的一个或更多个时间戳排序为系列;
计算所述系列中的每个时间戳与先前时间戳之间的差;和
将每个差与阈值进行比较,其中大于所述阈值的任何差指示已识别的死区。
10.一种系统,包括:
至少一个主机计算设备,每个主机计算设备被配置为启动至少一个虚拟机,所述虚拟机被配置为处理一个或更多个流会话的内容,其中每个流会话对应于在主机计算设备的虚拟机上执行的软件堆栈,所述主机计算设备被配置为由相应客户端设备生成用于显示的内容;和
分析引擎,被配置为:
识别与多个流会话中的至少一个流会话相关联的死区;
对于为特定主机计算设备的特定流会话识别的每个死区,在由所述特定主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在所述死区附近的事件;
对于多个事件类型中的每个事件类型,确定相对于所识别的死区的所述事件类型的事件分布;和
基于所述多个事件类型的所述事件分布来调整所述至少一个主机计算设备的操作。
11.根据权利要求10所述的系统,其中所述软件堆栈包括游戏流媒体服务的多个阶段,所述游戏流媒体服务包括帧捕获阶段、编码阶段和传输阶段中的至少一个。
12.根据权利要求11所述的系统,其中所述主机计算装置执行经配置以执行游戏应用程序的第二虚拟机,其中所述游戏应用程序被配置为生成图像帧,所述图像帧由所述软件堆栈处理以向客户端设备发送比特流,所述客户端设备被配置为向所述游戏流服务的用户显示所述图像帧,并且其中,所述客户端设备被配置为将来自所述客户端设备的输入发送到所述游戏应用程序,以渲染所述游戏应用程序的后续帧。
13.根据权利要求10所述的系统,其中识别所述主机计算设备的一个或更多个附加虚拟机生成的所述事件数据中发生在所述死区附近的事件包括:
对于所述事件数据中的每个事件,计算与所述事件相关联的时间戳和与每个识别的死区相关联的时间戳之间的差;和
对于特定死区,标记所述差的绝对值小于与所述死区相关的阈值的每个事件。
14.根据权利要求10所述的系统,其中确定相对于相应的死区的时间的所述事件类型的所述事件分布包括:
通过对每个事件类型在围绕所述相应的死区的时间窗口中的多个时间段内的出现次数进行计数来生成直方图。
15.根据权利要求14所述的系统,其中基于所述多个事件类型的所述事件分布调整所述主机计算设备的所述操作包括:
确定特定事件类型的所述事件分布包括特定时间段中的事件数量,所述事件数量以阈值量超过每个时间段的事件平均数量;和
基于所述特定事件类型识别所述操作。
16.根据权利要求10所述的系统,其中调整所述主机计算设备的所述操作包括将所述主机计算设备上的第二虚拟机迁移到第二主机计算设备。
17.根据权利要求10所述的系统,其中调整所述主机计算设备的所述操作包括将对应于所述事件类型的数据从第一存储设备迁移到第二存储设备。
18.根据权利要求10所述的系统,其中识别与所述多个流会话中的至少一个流会话相关联的一个或更多个死区包括:
将用于所述至少一个流会话的元数据中包括的一个或更多个时间戳排序为系列;
计算所述系列中的每个时间戳与先前时间戳之间的差;和
将每个差与阈值进行比较,其中大于所述阈值的任何差指示已识别的死区。
19.一种非暂时性计算机可读介质,其存储指令,当所述指令由处理器执行时,使所述处理器执行包括以下步骤的步骤:
对于多个流会话中的至少一个流会话,识别与所述至少一个流会话相关联的一个或更多个死区,其中每个流会话对应于在主机计算设备的虚拟机上执行的软件堆栈;
对于为特定流会话识别的每个死区,在由所述主机计算设备的一个或更多个附加虚拟机生成的事件数据中识别发生在所述死区附近的事件;
对于多个事件类型中的每个事件类型,确定相对于所识别的死区的所述事件类型的事件分布;和
基于所述多个事件类型的所述事件分布来调整所述主机计算设备的操作。
20.根据权利要求19所述的非暂时性计算机可读介质,其中所述软件堆栈包括游戏流服务的多个阶段,所述游戏流服务包括帧捕获阶段、编码阶段和传输阶段中的至少一个。
CN202111560820.2A 2020-12-17 2021-12-14 在基于云的流式应用程序中测量和检测空闲处理时段并确定其根本原因 Pending CN114647527A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/124,967 2020-12-17
US17/124,967 US11498007B2 (en) 2020-12-17 2020-12-17 Measuring and detecting idle processing periods and identifying root causes thereof in cloud-based, streaming applications

Publications (1)

Publication Number Publication Date
CN114647527A true CN114647527A (zh) 2022-06-21

Family

ID=81846868

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111560820.2A Pending CN114647527A (zh) 2020-12-17 2021-12-14 在基于云的流式应用程序中测量和检测空闲处理时段并确定其根本原因

Country Status (3)

Country Link
US (1) US11498007B2 (zh)
CN (1) CN114647527A (zh)
DE (1) DE102021132992A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115328665A (zh) * 2022-10-12 2022-11-11 中瓴智行(成都)科技有限公司 基于Hypervisor的GPU虚拟化方法、装置及电子设备

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11811623B2 (en) * 2016-10-26 2023-11-07 Zscaler, Inc. Deep tracing of user experience
US11023729B1 (en) * 2019-11-08 2021-06-01 Msg Entertainment Group, Llc Providing visual guidance for presenting visual content in a venue

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080220854A1 (en) * 2007-03-08 2008-09-11 Timothy Michael Midgley Method and apparatus for collecting user game play data and crediting users in an online gaming environment
US8095680B2 (en) * 2007-12-20 2012-01-10 Telefonaktiebolaget Lm Ericsson (Publ) Real-time network transport protocol interface method and apparatus
US9805479B2 (en) * 2013-11-11 2017-10-31 Amazon Technologies, Inc. Session idle optimization for streaming server
US9596280B2 (en) * 2013-11-11 2017-03-14 Amazon Technologies, Inc. Multiple stream content presentation
US9832578B2 (en) * 2015-02-23 2017-11-28 Intricon Corporation Enabling concurrent proprietary audio and Bluetooth low energy using enhanced LE link layer for hearing device
US11429454B2 (en) * 2020-03-30 2022-08-30 Citrix Systems, Inc. Cloud resource utilization management

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115328665A (zh) * 2022-10-12 2022-11-11 中瓴智行(成都)科技有限公司 基于Hypervisor的GPU虚拟化方法、装置及电子设备
CN115328665B (zh) * 2022-10-12 2023-02-28 中瓴智行(成都)科技有限公司 基于Hypervisor的GPU虚拟化方法、装置及电子设备

Also Published As

Publication number Publication date
DE102021132992A1 (de) 2022-06-23
US11498007B2 (en) 2022-11-15
US20220193558A1 (en) 2022-06-23

Similar Documents

Publication Publication Date Title
US10762620B2 (en) Deep-learning method for separating reflection and transmission images visible at a semi-reflective surface in a computer image of a real-world scene
US11498007B2 (en) Measuring and detecting idle processing periods and identifying root causes thereof in cloud-based, streaming applications
US11734890B2 (en) Three-dimensional model recovery from two-dimensional images
US11954830B2 (en) High dynamic range support for legacy applications
US11165848B1 (en) Evaluating qualitative streaming experience using session performance metadata
US11522565B2 (en) Packed error correction code (ECC) for compressed data protection
US20220392160A1 (en) Joint shape and appearance optimization through topology sampling
CN114792331A (zh) 应用于半监督环境中以在图像帧序列中执行实例跟踪的机器学习框架
US20230062503A1 (en) Pruning and accelerating neural networks with hierarchical fine-grained structured sparsity
US11475549B1 (en) High dynamic range image generation from tone mapped standard dynamic range images
US11282258B1 (en) Adaptive sampling at a target sampling rate
US20230298243A1 (en) 3d digital avatar generation from a single or few portrait images
US20230237342A1 (en) Adaptive lookahead for planning and learning
US20220398283A1 (en) Method for fast and better tree search for reinforcement learning
US11925860B2 (en) Projective hash maps
US11966765B2 (en) Memory bandwidth throttling for virtual machines
US11790598B2 (en) Three-dimensional tomography reconstruction pipeline
US20220189011A1 (en) End-to-end training for a three-dimensional tomography reconstruction pipeline
US20230104782A1 (en) Generation of differentiable, manifold meshes of arbitrary genus
US11783532B1 (en) View synthesis using attribute correspondences and geometric relationship constraints
US11689750B2 (en) Workload-based dynamic throttling of video processing functions using machine learning
US11270161B2 (en) Deep-learning method for separating reflection and transmission images visible at a semi-reflective surface in a computer image of a real-world scene
US20240112308A1 (en) Joint neural denoising of surfaces and volumes
US11595152B1 (en) Forward error correction encoding using binary clustering
US20230111375A1 (en) Augmenting and dynamically configuring a neural network model for real-time systems

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