CN115202664A - 云计算环境中的编译的着色器程序的高速缓存 - Google Patents
云计算环境中的编译的着色器程序的高速缓存 Download PDFInfo
- Publication number
- CN115202664A CN115202664A CN202210313520.2A CN202210313520A CN115202664A CN 115202664 A CN115202664 A CN 115202664A CN 202210313520 A CN202210313520 A CN 202210313520A CN 115202664 A CN115202664 A CN 115202664A
- Authority
- CN
- China
- Prior art keywords
- shader
- compiled
- shader program
- application
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
- G06N3/105—Shells for specifying net layout
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Data Mining & Analysis (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Neurology (AREA)
- Stored Programmes (AREA)
Abstract
公开了云计算环境中的编译的着色器程序的高速缓存。还公开了用于云计算环境中的编译的着色器程序的高速缓存的装置、系统和技术。
Description
技术领域
至少一个实施例涉及用于执行和促进编译的着色器程序的高速缓存的处理资源。例如,根据本文描述的各种新技术,至少一个实施例涉及用于提供并使得着色器程序能够在云计算环境的一个或多个计算系统中编译并且存储在由应用程序托管平台托管的着色器高速缓存处的处理器或者计算系统。
背景技术
着色器程序是由处理设备执行的、用来为在计算系统上运行的应用程序渲染图形的程序。计算系统的编译器可以编译着色器程序,并且一旦着色器程序由应用程序引用,处理设备可以执行编译的着色器程序。在应用程序运行时间期间,应用程序可能引用数千或成千上万个不同的着色程序,每个程序可能需要大量的时间来编译。应用程序的着色器程序可以在应用程序运行时之前编译并存储在计算系统的高速缓存中。然而,用于着色器程序高速缓存的现有技术在计算上非常昂贵,并且通常在计算系统中不能提供显著的性能效益。此外,现有的着色器程序高速缓存技术通常不能根据网络和系统性能约束针对托管在云计算环境上的应用程序而实施。
附图说明
将参照附图描述根据本公开的各个实施例,其中:
图1A是根据至少一个实施例的示例系统架构的框图;
图1B是根据至少一个实施例的另一个示例系统架构的框图;
图2是根据至少一个实施例的用于运行应用程序实例的托管虚拟计算系统的客户端设备的框图;
图3是根据至少一个实施例的着色器高速缓存引擎的框图;
图4描述根据至少一个实施例的示例着色器高速缓存数据结构;
图5描述根据至少一个实施例的示例暂存缓冲区数据结构;
图6是根据至少一个实施例的在客户端设备处运行的着色器管理器的框图;
图7示出根据至少一个实施例的向客户端设备提供编译的着色器程序的示例方法的流程图;
图8示出根据至少一个实施例的由客户端设备请求编译的着色器程序的示例方法的流程图;
图9A示出根据至少一个实施例的推理和/或训练逻辑;
图9B示出根据至少一个实施例的推理和/或训练逻辑;
图10示出根据至少一个实施例的示例数据中心系统;
图11示出根据至少一个实施例的计算机系统;
图12示出根据至少一个实施例的计算机系统;
图13示出根据一个或多个实施例的图形处理器的至少部分;
图14示出根据一个或多个实施例的图形处理器的至少部分;
图15是根据至少一个实施例的用于高级计算管线的示例数据流图;
图16是根据至少一个实施例的用于在高级计算管线中训练、适应、实例化和部署机器学习模型的示例系统的系统图;以及
图17A和图17B示出根据至少一个实施例的用于训练机器学习模型的过程的数据流图,以及使用预训练的注释模型来增强注释工具的客户端-服务器架构。
具体实施方式
着色器程序是由处理设备(例如,图形处理单元(GPU))执行的程序,用于渲染在计算系统中运行的应用程序的图形。通常,编译器可以编译着色器程序,并且该编译的着色器程序可以响应于由应用程序引用的着色器程序而执行。编译的着色器程序可以特定于支持计算系统中的应用程序的特定类型的硬件(例如,处理设备)、可在系统硬件运行的驱动程序的类型或版本等。编译着色器程序可能需要大量的时间(例如,几毫秒或更长)。有些应用程序可能会在应用程序运行时期间引用数千或成千上万个不同的着色器程序。相应地,编译由应用程序引用的每个着色器程序可能会消耗大量的计算系统资源,并且在某些情况下,可能会导致计算系统的用户可注意到的图形渲染的延迟。
一些计算系统可以保持着色器高速缓存,该着色器高速缓存存储应用程序运行时期间由应用程序引用的每个着色器程序的编译的版本。例如,当应用程序在计算系统上初始化时,应用程序引用的每个着色器程序可以在应用程序运行时之前加载到计算系统、编译并存储在着色器高速缓存中。在应用程序运行时期间,编译器不需要重新编译应用程序引用的着色器程序,因为编译的着色器程序可以从着色器高速缓存中检索,并由处理设备执行。
尽管着色器高速缓存会阻止编译器在每次应用程序引用着色器程序时编译每个着色器程序,但应用程序通常会引用许多着色器程序,这需要大量的计算资源,并可能导致图形渲染的延迟。此外,由于计算系统的存储约束,着色器高速缓存的大小可能不足以存储应用程序可以引用的每个编译的着色器程序。例如,在应用程序运行时的初始阶段编译的着色器程序可能需要从着色器高速缓存中删除,以为在应用程序运行时的后续时段期间编译的着色器程序释放存储空间。但是,删除的着色器程序后续可能会由应用程序再次引用,并且因此应用程序可能需要重新编译引用的着色器程序,并将编译的着色器程序重新存储在着色器高速缓存中。
一些引用着色器程序的应用程序由应用程序托管平台托管在云计算环境中。客户端设备可以被虚拟化,并具有运行由云计算环境托管的应用程序的实例的虚拟系统(例如,作为虚拟机、容器、进程等的一部分)。当应用程序实例由客户端设备的虚拟系统初始化时,应用程序实例引用的每个着色器程序可以加载到存储器中并由编译器编译。在应用程序实例的运行时期间,虚拟系统的处理设备可以从着色器高速缓存中检索由应用程序实例引用的每个着色器程序的编译的版本。在虚拟系统上终止应用程序实例后,可以在客户端设备上解构虚拟系统,并且因此着色器高速缓存中的每个编译的着色器程序可以从存储器中删除。每次在客户端设备上由虚拟化的系统将应用程序的实例初始化时都可以重复这些操作,即使同一客户端设备后续执行引用相同着色器程序的相同应用程序的实例。
为该应用程序的每个实例所引用和编译的着色器程序在连接到该应用程序托管平台的每个各自的客户端设备上可能是相同的或实质上相似的。由于每个着色器程序被编译并存储在位于每个客户端设备的着色器高速缓存中,每个客户端设备可能消耗大量的计算和存储资源来维护在各自客户端设备的着色器高速缓存,降低整体系统效率并增加整体系统延迟。此外,运行应用程序实例的每个客户端设备的用户可能会经历在各自客户端设备处的着色器程序编译导致的图形延迟,从而对应用程序的整体用户体验产生负面影响。此外,如上所述,每个各自的客户端设备可能必须在各自的客户端设备上为每个应用程序实例运行时生成并后续解构一个着色器高速缓存,这需要大量的计算资源。
本公开的实施例通过实现云计算环境中的着色器程序高速缓存来解决上述和其他缺陷,在云计算环境中,应用程序托管平台可以配置为在每个应用程序实例初始化期间能够生成和发送预编译的着色器程序(例如,存储在网络盘存储中)到每个各自的客户端设备。着色器高速缓存可以由应用程序托管平台维护,并可以存储由该平台托管的各自应用程序的客户端设备实例所引用的着色器程序。每个客户端设备都可以与不同类型的处理设备、驱动程序的不同版本、处理管线的不同状态等相关联。在客户端设备上运行的应用程序实例可以参考着色器程序,并且客户端设备可以从着色器高速缓存中请求与处理设备的类型、设备驱动程序的版本等兼容的、与客户端设备相关联的着色器程序的编译的版本。如果编译的着色器程序存储在着色器高速缓存中,并且在某些情况下,如果平台可以根据性能约束(例如,在300微秒内)检索并发送编译的着色器程序,则平台可以将编译的着色器程序发送到客户端设备,以在客户端设备上执行。在一些实施例中,平台可以识别除了初始请求的着色器程序之外,客户端设备将来可能请求的编译的着色器程序集,并将编译的着色器程序集与初始请求的着色器程序一起发送到客户端设备。如果编译的着色器程序没有存储在着色器高速缓存中,则客户端设备可能需要编译所引用的着色器程序,并将编译的着色器程序发送到平台,以在着色器高速缓存中存储。在平台验证编译的着色器程序之后,平台可以将编译的着色器程序存储在着色器高速缓存中,供具有运行应用程序实例的相同类型的处理设备和/或版本的设备驱动程序的后续客户端设备使用。如上所述,经验证的着色器程序可以提供给运行该应用程序的实例的另一个客户端设备以响应对编译的着色器程序的请求。
在一些实施例中,应用程序托管平台的着色器高速缓存可以分布在应用程序托管平台的多个节点上。节点是指云计算环境中的硬件资源、软件资源等的分组。每个节点可以托管着色器高速缓存的一个或多个部分,并且每个节点可以服务于来自连接到各自节点的客户端设备的对编译的着色器程序的请求。例如,客户端设备可以将对编译的着色器程序的请求发送到平台的第一节点。如果请求的编译的着色程序存储在托管于第一节点的着色器高速缓存的部分处,第一节点可以响应请求而将编译的着色器程序发送到客户端设备。平台可以根据客户端设备的一个或多个键的哈希来确定所请求的编译的着色器程序是否存储在着色器高速缓存的部分处,每个键指示与客户端设备相关联的处理设备的类型和/或处理设备的驱动程序的版本。如果请求的编译的着色器程序没有存储在第一节点处托管的着色器高速缓存的部分,第一节点可以识别存储编译的着色器程序的第二节点(例如,通过一致性哈希协议)并将请求转发至第二节点。
在一些实施例中,客户端设备可以请求编译的着色器程序,并且还可以本地启动编译过程以在客户端设备将对编译的着色器程序的请求向平台(或平台的相应节点)发送的同时或近似同时生成应用程序引用的着色器程序的编译的版本。如果客户端设备在客户端设备的编译过程完成之前从平台接收到编译的着色器程序,则根据应用实例的引用,客户端设备可以终止编译过程,并可以执行接收的编译的着色器程序。如果客户端设备在接收到请求的编译的着色程序之前完成编译过程,或者如果客户端设备从平台接收到指示编译的着色器程序没有存储在着色器高速缓存中的消息,则客户端设备可以执行本地生成的着色器程序的编译的版本。
本公开的各方面和实施例能够针对由云计算环境托管的客户端设备的应用程序实例高效编译着色器程序。并非使正在运行应用程序的实例的每个客户端设备编译应用程序实例引用的每个着色器程序,每个客户端设备可以从着色器高速缓存请求着色器程序的编译的版本,从而减少在同一客户端设备处运行以及跨使用着色器程序的相同的编译版本的多个客户端设备运行的昂贵的编译进程的数量。因此,各自客户端设备的用户可能体验在客户端设备上由着色器程序编译导致的更少数量(例如零)的图形延迟,从而改进应用程序的整体用户体验。
此外,本公开的实施例能够将应用程序的编译的着色器程序存储在应用程序托管平台的着色器高速缓存中,而不是在各自客户端设备的存储器中的着色器高速缓存中。因此,对于虚拟化的客户端设备,在各自的客户端设备上解构虚拟系统之后(例如,在客户端设备上终止应用程序实例之后),编译的着色器程序保持在着色器高速缓存中,并且在相应的客户端设备初始化虚拟系统中的另一个应用程序实例之后不重新编译。这还减少了在每个各自的客户端设备以及跨整个系统的多个客户端设备上执行的编译过程的数量。通过减少为整个系统执行的编译过程的数量,大量的资源可供云计算环境中的其他过程使用,减少了整体系统等待时间,并提高了整体系统效率。
系统架构
图1A是根据至少一个实施例的示例系统架构100的框图。系统架构100(在这里也称为“系统”)包括应用程序托管平台102、应用程序开发者平台104、服务器机器106、客户端设备108A-N(统称和单独称为客户端设备108),和数据存储区112,每个都连接到网络120。在实现方式中,网络120可包括公共网络(例如,因特网)、私有网(例如,局域网(LAN)或广域网(WAN))、有线网(例如,以太网)、无线网(例如,802.11网络或Wi-Fi网络)、蜂窝网络(例如,长期演进(LTE)网络)、路由器、集线器、交换机、服务器计算机、和/或它们的组合。
在一些实施例中,数据存储区112是能够存储内容项以及用来标记、组织和索引内容项的数据结构的持久存储装置。数据存储区112可以由一个或多个存储设备托管,例如主存储器、基于磁性或光学存储的磁盘、磁带或硬盘驱动器、NAS、SAN等。在一些实现方式中,数据存储区112可以是网络附加的文件服务器,而在其他实施例中,数据存储区112可以是其他类型的持久存储,例如面向对象数据库、关系数据库等等,可以由平台102或通过网络120耦合到平台102的一个或多个不同机器托管。
应用程序托管平台102可以配置为托管一个或多个应用程序(例如,应用程序130A、应用程序130B等),所述应用程序由应用程序开发者(即,通过应用程序开发者平台104)提供。应用程序开发者平台104可以由应用程序开发者(例如,用户、公司、组织等)使用。例如,应用程序开发者可以是开发视频游戏(由应用程序130表示)以供用户在客户端设备108上进行交互的视频游戏开发者。应用程序托管平台102可以为用户提供访问由应用程序开发者平台104通过各自的客户端设备108A-N开发的应用程序130(或应用程序130的实例)的权限。例如,应用程序托管平台102可以允许用户消费、上传、下载和/或搜索应用程序130。在一些实施例中,应用程序托管平台102可以包括可用于给用户提供访问应用程序130的权限的网站(例如,一个或多个网页)。在其他或类似的实施例中,客户端设备108可以虚拟化,并具有运行应用程序130的实例的虚拟系统(例如,作为虚拟机、容器、进程等的一部分)。应该注意的是,虽然本公开的一些实施例是与运行在虚拟化客户端设备108上的应用程序130的实例相关来描述的,但本公开的实施例也可以应用于运行在未虚拟化的客户端设备108上的应用程序130。类似地,本公开的指向运行在未虚拟化的客户端设备108上的应用程序130的实施例也可以适用于运行在虚拟化客户端设备108上的应用程序130的实例。
在一些实施例中,每个应用程序130可以包括一个或多个应用对象(例如,应用程序130A的应用对象132-N、应用程序130B的应用对象132N-132Z等)。应用程序托管平台102可以通过经由在运行各自应用程序的实例的每个客户端设备上的用户界面(UI)显示来渲染每个应用对象132。每个应用程序对象132可以通过应用程序开发者经由应用程序开发者平台104提供给应用程序130。相应客户端设备108的用户可以通过经由客户端设备UI与渲染的应用对象132接洽来与应用程序的实例交互。在一个示例性的示例中,应用程序130A和130B可以是由视频游戏开发者开发的视频游戏应用程序。应用程序对象132可以是各自的视频游戏应用程序(例如,游戏对象、游戏地图等)的组成部分,组成部分被渲染用于在运行各自视频游戏应用程序的实例的客户端设备的UI上显示。各自的客户端设备108的用户可以接洽(例如,消费、交互等)渲染的应用对象132,以便通过各自的客户端设备108来推进视频游戏。下面提供了关于渲染每个应用程序对象132的进一步细节。
客户端设备108可包括设备,包括但不限于:电视、智能手机、蜂窝电话、个人数字助理(PDA)、便携式媒体播放器、上网本、笔记本电脑、电子书阅读器、平板电脑、台式机、机顶盒、游戏机等。单个客户端设备108可以包括内容查看组件(未示出),它使客户端设备108的用户能够使用应用程序130的应用程序对象132。内容查看组件可以由应用程序托管平台102托管,并且可以提供应用程序对象132的渲染版本以在应用程序130的运行时期间经由客户端设备108的UI呈现。如上所述,客户端设备108可以具有运行应用程序130的实例的虚拟系统。根据本文中描述的实施例,内容查看组件可以是虚拟系统的一部分,并且可以提供应用程序对象132的渲染版本。参考图2提供关于客户端设备108上的虚拟系统的进一步细节。
如上所述,应用程序托管平台102可以渲染运行在客户端设备108上的应用程序130中的一个或多个应用程序对象132,或应用程序130的实例。在一些实施例中,在客户端设备108上的内容查看组件的着色器管理器模块(例如,图中2所示的着色器管理器204)可以通过在客户端设备上执行一个或多个程序(称为着色器程序)来渲染应用程序对象132。每个着色器程序可以包括一组操作,使内容查看组件能够渲染应用程序对象132以经由客户端设备108的UI来呈现。在客户端设备108上的应用程序130运行时期间,应用程序130可以引用要经由客户端设备108的UI呈现的应用程序对象132。着色器管理器可以识别与引用的应用程序对象132相关联的一个或多个着色器程序,并且可以通过执行一个或多个着色器程序的编译的版本来渲染引用的应用程序对象132。
在一些实施例中,着色器管理器可以检测到应用程序130已经引用了应用程序对象132,并且可以启动编译过程,以导致运行在客户端设备108的处理器上的编译器生成引用的着色器程序的编译的版本。在其他或类似的实施例中,着色器管理器可以从由应用程序托管平台102托管的着色器高速缓存114请求引用的着色器程序的编译的版本。着色器高速缓存114是指由应用程序托管平台102托管的每个应用程序130引用的一个或多个应用程序对象132的编译的着色器程序的存储库。在一些实施例中,每个编译的着色器程序可以与客户端设备108上的特定类型的处理设备(例如,一种图形处理单元(GPU))、处理设备的特定类型的驱动程序、处理设备的特定管线状态等相关联。在一些实施例中,着色器高速缓存114可以驻留在数据存储区112中。应用程序托管平台102的着色器高速缓存引擎110可以接收对编译的着色器程序的请求。着色器高速缓存引擎110可以配置为对由应用程序托管平台102托管的每个应用程序130维护着色器高速缓存114。关于着色器高速缓存引擎110的进一步细节如关于图3提供的。应该注意的是,在一些实施例中,着色器高速缓存引擎110可以驻留在服务器机器上,例如服务器机器106,该服务器机器与支持应用程序托管平台102的服务器机器分离。在其他或类似的实施例中,着色器高速缓存引擎110可以驻留在支持应用程序托管平台102的服务器机器上。
如上所述,在一些实施例中,客户端设备108的内容查看组件的着色器管理器可以响应应用程序130(或应用程序130的实例)引用与应用程序对象132相关联的着色器程序而发送对编译的着色器程序的请求。着色器管理器可以接收对请求的响应,该响应包含请求的编译的着色器程序或不包括请求的编译的着色器程序。如果响应包括请求的编译的着色器程序,则着色器管理器可以执行编译的着色器程序,以在客户端设备108上渲染应用程序对象132。如果响应不包括请求的编译的着色器程序,则着色器管理器可以启动一个编译过程,以生成一个编译的版本的着色器程序。在执行编译的着色器程序(即,渲染关联的应用程序对象132)之后,着色器管理器在一些实施例中可以将编译的着色器程序发送到应用程序托管平台102以存储在着色器高速缓存114处。关于着色器管理器的进一步细节如关于图4提供的。
图1B是根据至少一个实施例的另一个示例性系统架构150的框图。在一些实施例中,系统架构150包括应用程序托管平台102、应用程序提供者平台104、节点152和客户端设备108,每个都连接到网络120,如图1A所描述的。每个节点152可以是分配以服务耦合到应用程序托管平台102的一个或多个客户端设备108的硬件资源和/或软件资源的分组。例如,每个节点152可以包括着色器高速缓存引擎,例如着色器高速缓存引擎110。每个节点152还可以包括存储着色器高速缓存114的一部分的数据存储区,例如数据存储区112。在示例性示例中,节点152A可以包括数据存储区112A,节点152B可以包括数据存储区112B,和节点152C可以包括数据存储区112C。数据存储区112A-C可各自配置为存储着色器高速缓存114的一部分(例如,分别地,着色器高速缓存部分114A-C)。根据关于图3所描述的实施例,还可以将节点152A-C配置为每个都托管着色器高速缓存引擎110。
在一些实施例中,存储在数据存储区112A-C中的着色器高速缓存114的每个部分可以包括编译的着色器程序的初始集。编译的着色程序的初始集可以包括一个或多个编译的着色器程序,所述编译的着色器程序由应用程序托管平台102在应用程序130的运行时的初始时段期间执行。例如,应用程序130可以是视频游戏应用程序。编译的着色器程序的初始集可以包括用于应用程序对象132的一个或多个编译的着色器程序,该应用程序对象132被渲染以使访问应用程序130的用户能够在应用程序130的用户设置时段期间经由客户端设备108来为视频游戏应用程序设置配置文件。在另一个示例中,编译的着色器程序的初始集可能包括用于应用程序对象132的一个或多个编译的着色器程序,这些应用程序对象132被渲染以使用户能够与应用程序130相关联的游戏地图的初始部分接洽。在客户端设备108处的应用程序130(或应用程序130的实例)的初始化期间,着色器管理器可以从专用于客户端设备108的节点152处的各个着色器高速缓存114检索编译的着色器程序的初始集。例如,节点152A可以包括专用于支持客户端设备108A的资源。因此,用于客户端设备108A的着色器管理器可以从数据存储区112A处的着色器高速缓存114A检索编译的着色器程序的初始集。
编译的着色器程序的初始集可以不包括在应用程序运行时的后续时段期间引用的应用程序对象132的编译的着色器程序。因此,在应用程序运行时的后续时段期间,客户端设备108A处的着色器管理器可以向节点152A处的着色器高速缓存引擎110发送对编译的着色器程序的请求。着色器高速缓存引擎110可以确定请求的编译的着色器程序是存储在数据存储区112A的着色器高速缓存114的部分还是存储在着色器高速缓存114的另一部分(例如,着色器高速缓存114B、114C)处。根据前面描述的实施例,响应于确定请求的编译的着色器程序存储在着色器高速缓存部分114A处,着色器高速缓存引擎110可以从着色器高速缓存部分114A检索请求的编译的着色器程序,并将请求的编译的着色器程序发送到客户端设备108A。响应于确定请求的编译的着色器程序存储在例如着色器高速缓存部分114B处,节点152A处的着色器高速缓存引擎110可以将请求发送到着色器高速缓存引擎110节点152B。节点152B处的着色器高速缓存引擎110可以从着色器高速缓存114B检索请求的编译的着色器程序,并将编译的着色器程序发送到客户端设备108A。
在一些实施例中,在节点152A处的着色器高速缓存引擎110可以确定由客户端设备108A请求的编译的着色器程序不存储在着色器高速缓存114的任何部分。在这样的实施例中,着色器高速缓存引擎110可以向客户端设备108A发送消息,指示编译的着色器程序没有存储在着色器高速缓存114中,并且客户端设备108A可以根据前面描述的实施例生成着色器程序的编译的版本。客户端设备108A的着色器管理器可以将编译的着色器程序发送到节点152A处的着色器高速缓存引擎110,如前所述,在节点152A处的着色器高速缓存引擎110可以将接收的编译的着色器程序存储在着色器高速缓存部分114A。在一些实施例中,着色器高速缓存引擎110可以将接收的着色器程序发送到运行在节点152B和/或152C处的着色器高速缓存引擎110。在一些实施例中,在节点152B和/或152C处的着色器高速缓存引擎110可以将接收的编译的着色器程序存储在着色器高速缓存部分114B和/或着色器高速缓存部分114C处。
图2是根据至少一个实施例的用于运行应用程序的实例222的托管虚拟系统220的客户端设备108的框图。客户端设备108可以执行系统管理程序202,该系统管理程序配置为管理在客户端设备108上运行的虚拟系统220。客户端设备108可以包括可用于支持虚拟系统220的一个或多个物理设备。例如,客户端设备108可以包括处理设备208(例如,GPU)、存储器210、和一个或多个I/O设备212。GPU 208可以通过托管总线通信地耦合到存储器210和I/O设备212。在一些实施例中,客户端设备108可对应于关于图11和图12描述的计算机系统1100和/或计算机系统1200。
一个或多个应用程序实例222可以在访客操作系统(OS)224下运行于虚拟系统220上。在一些实施例中,关于图1A和图1B描述的,应用程序实例222可以是由应用程序托管平台102托管的应用程序130的实例。例如,应用程序实例222可以是由视频游戏应用程序开发者通过应用程序开发者平台104提供并由应用程序托管平台102托管的视频游戏应用程序130的实例。在这样的示例中,虚拟系统220可以对应于在应用程序实例222的初始化期间在客户端设备108上实例化的“游戏座位”(它可以表示,例如,虚拟机或容器)。根据本文提供的实施例,“游戏座位”可以被实例化以便于在客户端设备108处执行应用程序实例222,并可以在客户端设备108处的应用程序实例222终止后解构。
系统管理程序202可以抽象客户端设备108的物理设备,并将此抽象作为一个或多个虚拟设备呈现给虚拟系统220。例如,系统管理程序202可以抽象GPU 208,并将此抽象作为抽象的GPU 230呈现给虚拟系统220。在一些实施例中,系统管理程序202可以通过调度GPU 208上的时间隙来对虚拟系统220抽象GPU 230,而不是对GPU220专用GPU 208。在其他或类似的实施例中,系统管理程序202可以抽象存储器210,并将此抽象作为抽象的存储器228呈现给虚拟系统220。系统管理程序202可以通过使用页表来利用存储器210的物理存储器地址转换与抽象的存储器228相关联的存储器访问来抽象存储器210。在虚拟系统220处的应用程序实例222的运行时期间,系统管理程序202可以拦截虚拟存储器访问操作(例如,读取操作、写操作等)并可以使用页表将与拦截操作相关联的虚拟存储器地址转换为存储器210处的物理存储器地址。抽象的存储器228可以配置为存储一个或多个编译的着色器程序226,该程序由虚拟GPU 230执行,以便在虚拟计算系统220处的应用程序130运行时期间渲染一个或多个应用程序对象132。在一些实施例中,运行在抽象的GPU上的虚拟编译器可以编译着色器程序(例如,在应用程序运行时之前或期间),以生成编译的着色器程序226。在其他或类似的实施例中,根据本文描述的实施例,虚拟系统220可以从应用程序托管平台102接收编译的着色器程序226。系统管理程序202还可以在客户端设备108处抽象一个或多个I/O设备212,并将此抽象作为一个或多个各自抽象的I/O设备232呈现给虚拟系统220。系统管理程序202可以通过将I/O设备212的接口插槽的特定端口范围指派给虚拟系统220,并将指派的端口范围呈现为抽象的I/O设备232A来抽象I/O设备212。访客OS 224可以利用抽象的GPU 230、抽象的存储器228、和/或一个或多个抽象的I/O设备232来支持在虚拟系统220上的应用实例222的执行。
在一些实施例中,系统管理程序202可以包括着色器管理器模块204(在这里称为着色器管理器204)。在其他或类似的实施例中,访客OS 224可以包括着色器管理器204。如关于图1A和图1B所描述的,着色器管理器204可以是客户端设备108的内容查看器组件的一部分,并且可以针对由应用程序实例222引用的应用程序对象132管理一个或多个编译的着色器程序226的执行。在一些实施例中,着色器管理器204可以从着色器引擎110接收编译的着色器程序的初始集(例如,在虚拟系统220处的应用程序实例222的初始化期间),并且可以将接收到的编译的着色器程序集存储在抽象的存储器228中。在应用程序实例222的运行时期间,着色器管理器204可以检测到应用程序实例222已经引用了与应用程序对象132相关联的一个或多个着色器程序。着色器管理器204可以确定针对引用的应用程序对象132的编译的着色器程序226是否已存储在抽象的存储器228中。响应于确定编译的着色器程序226已存储在抽象的存储器228中,着色器管理器204可以执行编译的着色器程序226(即,经由抽象的GPU 230)。根据前面描述的实施例,响应于确定引用的着色器程序的编译的版本还未存储在抽象的存储器228中,着色器管理器204可以从由平台102托管的着色器高速缓存114请求编译的着色器程序226。响应于接收到来自包括编译的着色器程序226的平台102的消息,着色器管理器204可以将编译的着色器程序226存储在抽象的存储器228。根据前面描述的实施例,响应于从平台102接收到指示编译的着色器程序226没有存储在着色器高速缓存114处的消息,着色器管理器204可以启动编译过程以生成着色器程序226的编译的版本,并可以将编译的着色器程序226存储在抽象的存储器228中。
在一些实施例中,系统管理程序202可以接收解构虚拟系统220的请求。例如,通过虚拟系统220访问应用程序实例222的用户可以注销与应用程序实例222相关联的帐户。响应于检测到用户已“注销”关联帐户,访客OS 224可以向系统管理程序202发送解构虚拟系统220的请求。在一些实施例中,系统管理程序202可以通过从抽象的存储器228中擦除每个编译的着色器程序226来解构虚拟系统220。系统管理程序202可以通过在抽象的存储器228处识别对应于各自编译的着色器程序226的虚拟地址的存储器210的物理地址并在存储器210处从识别的地址擦除编译的着色器程序226来从抽象的存储器228中擦除每个编译的着色器程序226。在系统管理程序202解构了虚拟系统220之后,存储器210可能不包括针对应用程序实例222的任何编译的着色器程序226。根据前面描述的实施例,系统管理程序202可以响应于通过虚拟系统220接收重构虚拟系统220和重新初始化应用程序实例222而将对应用程序实例222的编译的着色器程序226的至少一部分重新加载到抽象的存储器228。
云计算环境中高速缓存编译的着色器程序
图3是根据至少一个实施例的着色器高速缓存引擎110的框图。着色器高速缓存引擎110可以包括着色器检索组件310、着色器验证组件312和着色器编译器组件314。如前所述,着色器高速缓存引擎110可以驻留在服务器机器上,例如图1A中的服务器机器106,这是应用程序托管平台102的一部分或独立于应用程序托管平台(在这里称为平台102)。在一些实施例中,着色器高速缓存引擎110可以驻留在平台102的一个节点上,如关于图1B所描述的。根据前面描述的实施例,运行在客户端设备108上的着色器管理器,例如图2中的着色器管理器204,可以从由平台102托管的着色器高速缓存114请求编译的着色器程序302。平台102可以将该请求转发至着色器高速缓存引擎110。着色器高速缓存引擎110的着色器检索组件310可以配置为检索请求的编译的着色器程序302。在其他或类似的实施例中,如前所述,客户端设备108处的着色器管理器204可以发送将在客户端设备108上编译的着色器程序存储至着色器高速缓存114的请求。着色器高速缓存引擎110的着色器验证组件312可以配置为验证接收的编译的着色器程序302,并且响应于验证编译的着色器程序302,可以将编译的着色器程序302存储在着色器高速缓存114处。
如上所述,着色器检索组件310可以配置为响应于接收来自客户端设备108的请求,从数据存储区112中的着色器高速缓存114检索编译的着色器程序302。客户端设备108可以与基于客户端设备108的状态数据生成的着色器密钥相关联。该状态数据可以对应于与客户端设备108相关联的一个或多个硬件状态(例如,处理设备的类型等)和/或一个或多个软件状态(例如,在处理设备上运行的驱动程序的类型、处理设备管线的状态等)。例如,可以在客户端设备108处包括一种特定类型的GPU。与客户端设备108相关联的着色器密钥可以根据在客户端设备108上的GPU类型的指示来生成。在另一个示例中,设备驱动程序的特定版本可能在客户端设备108的GPU上运行。在这样的示例中,可以根据在GPU上运行的驱动程序的版本的指示来进一步生成与客户端设备108相关联的着色器密钥。在一些实施例中,着色器密钥可以通过处理设备(例如,在客户端设备108处的,在服务器机器106处的)对客户端设备108的状态数据应用哈希函数来生成。
在一些实施例中,可以根据请求的着色器程序的源代码进一步生成与客户端设备108相关联的着色器密钥。在其他或类似的实施例中,可以根据着色器程序的源代码为请求的着色器程序生成着色器值。在一些实施例中,如前所述,着色器值可以通过处理设备(例如,在客户端设备108处的,在服务器机器106处的)将哈希函数应用到着色器程序的源代码来生成。
在一些实施例中,客户端设备108可以应对于编译的着色器程序302请求而包括着色器密钥和/或着色器值。在其他或类似的实施例中,客户端设备108可以应对于编译的着色器程序302的请求来发送与客户端设备108相关联的硬件条件和/或软件条件的指示。在这样的实施例中,着色器检索组件310可以如前所述,为客户端设备108生成着色器密钥。根据前面描述的实施例,在附加的或可选的实施例中,着色器检索组件310可以获得请求的着色器程序的源代码(例如,从数据存储区112,从客户端设备108)并生成着色器值。
如上所述,数据存储区112可以存储着色器高速缓存114。在一些实施例中,数据存储区112还可以包括着色器高速缓存数据结构316,其配置为包括与存储在着色器高速缓存114中的每个编译的着色器程序302相关联的着色器密钥和/或着色器值与存储各自编译的着色器程序302的着色器高速缓存114的存储器地址之间的映射。图4描述了根据至少一个实施例的示例着色器高速缓存数据结构316。着色器高速缓存数据结构316的每个条目402可以包括着色器密钥字段404、着色器值字段406和存储器地址字段408。在一些实施例中,每个条目402可以进一步包括节点字段410和/或着色器集字段412。每个条目402的着色器密钥字段404可以包括与存储在着色器高速缓存114的存储器地址的编译的着色器程序302兼容的客户端设备的着色器密钥的指示,如存储器地址字段408所指示的。着色器值字段406可以包括与存储在着色器高速缓存114的存储器地址中的编译的着色器程序302相关联的着色器值的指示。
在一些实施例中,在条目402的着色器密钥字段404中指示的着色器密钥可以对应于与编译着色器程序并发送着色器程序至着色器高速缓存引擎110以存储在着色器高速缓存114中的另一个客户端设备相关联的着色器密钥。例如,根据前面描述的实施例,客户端设备108N可以编译着色器程序302,并将编译的着色器程序302发送到平台102,以存储在着色器高速缓存114中。着色器验证组件312可以获得与编译的着色器程序302相关联的着色器密钥(例如,“9J6K3D”)和/或着色器值(例如,“3S09V2S3N3”)并且,响应于验证编译的着色器程序302,着色器验证组件312可以将编译的着色器程序302存储在着色器高速缓存114中。着色器验证组件312还可以生成数据结构316的条目402,条目402指示对编译的着色器程序302的获得的着色器密钥(例如,“9J6K3D”)和/或获得的着色器值(例如,“3S09V2S3N3”)与存储编译的着色器程序302的着色器高速缓存114处的存储器地址(例如,“0X10010000”)的映射。这里提供了关于着色器验证组件312的进一步细节。
在一个示例性的示例中,客户端设备108A可以从着色器高速缓存114请求编译的着色器程序302,所述编译的着色器程序与着色器密钥“9J6K3D”和/或着色器值“3S09V2S3N3”相关联。着色器检索组件310可以获得与请求的编译的着色器程序302相关联的着色器密钥,并且可以将获得的着色器密钥与数据结构316的一个或多个条目402的着色密钥字段中指示的着色器密钥进行比较。着色器检索组件310还可以获得与请求的编译的着色器程序302相关联的着色器值,并将获得的着色器值与数据结构316的一个或多个条目402的着色器值字段406中指示的着色器值进行比较。着色器检索组件310可以识别数据结构316的条目402,条目402对应于请求的编译的着色器程序302的获得的着色器密钥和/或获得的着色器值(即,根据着色器密钥字段405和/或着色器值字段406)。如上所述,识别的条目可以响应于客户端设备108N编译着色器程序并提供编译的着色器程序302用于存储在高速缓存114处而已生成。响应于识别与编译的着色器程序302相关联的条目402,着色器检索组件310可以确定与在着色器高速缓存114处的编译的着色器程序302相关联的存储器地址(即,根据识别的条目的存储器地址字段408),并可以从确定的存储器地址检索编译的着色器程序302。根据前面描述的实施例,着色器检索组件310可以通过平台102将检索的编译的着色器程序302发送到客户端设备108A。
在附加或可选实施例中,与数据结构316的条目402相关联的编译的着色器程序302可以由着色器编译器组件314编译,而不是由客户端设备108编译。根据前面描述的实施例,着色器编译器组件314可以编译一个或多个着色器程序,并将编译的着色器程序存储在着色器高速缓存114中。例如,应用程序开发者可以向平台102提供可以在应用程序运行时的初始时段期间引用的着色器程序的初始集。着色器编译器组件314可以生成着色器程序的初始集的编译的版本,这些程序是与多个不同硬件状态和/或多个不同软件状态相关联的客户端设备兼容的。着色器编译器组件314还可以为编译的着色器程序302的每个版本生成着色器密钥,指示与各自编译的着色器程序版本以及在某些实施例中每个编译的着色器程序302的着色器值关联的硬件状态和/或软件状态。响应于将不同编译的着色器程序版本存储到着色器高速缓存114,着色器编译器组件314可以在着色器高速缓存数据结构316中为每个着色器程序版本生成条目,其中每个条目包括着色器密钥、着色器值和存储相应的编译的着色器程序302的着色器高速缓存114的存储器地址之间的映射。
在一些实施例中,着色器编译器组件314可以响应于检测到连接到平台102的一个或更多个客户设备108处的硬件状态和/或软件状态(例如,驱动程序版本等)已经更新或即将更新而编译一个或多个着色器程序。例如,着色器编译器组件314可以接收来自客户端设备108和/或平台102的另一个组件的通知,通知指示在客户端设备上运行的驱动程序已经从第一版本更新到第二版本或即将从第一版本更新到第二版本。在另一个示例中,着色器编译器组件314可以检测到从客户端设备108接收的当前请求(即,来自着色器高速缓存114的对编译的着色器程序302的请求或将编译的着色器程序302添加到着色器高速缓存114的请求)中包含的着色器密钥的当前版本与从客户端设备108接收的先前请求中包含的着色器密钥的先前版本不同。着色器密钥的当前版本和着色器密钥的先前版本中的差异可以指示在客户端设备108上运行的驱动程序已从第一版本更新到第二版本。响应于检测到运行在客户端设备108上的驱动程序已经从第一版本更新到第二版本或即将从第一版本更新到第二版本,着色器编译器组件314可以识别在数据结构316中的条目402,包括与驱动程序第一版本相对应的着色器密钥。着色器编译器组件314可以获取与识别的条目相关联的编译的着色器程序302的源代码,并启动编译过程以生成与驱动程序第二版本兼容的着色器程序的更新的已编译版本。根据本文提供的实施例,着色器编译器组件314可以将更新的编译的着色器程序302存储到着色器高速缓存114中,并且可以生成与更新的编译的着色器程序302对应的数据结构316的条目402。在一些实施例中,着色器编译器组件314可以从数据结构316中删除包括对应于驱动程序的第一版本的着色器密钥的条目402(例如,响应于确定驱动程序的第一版本已过时,等等)。
如图1B所述的,平台102可以在多个节点152上运行,每个节点可以托管配置为存储着色器高速缓存114的一部分的数据存储区112。数据结构316的节点字段410可以指示存储包括请求的编译的着色器程序302的着色器高速缓存114的一部分的节点152。在一个示例性的示例中,客户端设备108A可以将对编译的着色器程序302的请求发送到平台102。节点152A可以包括专门用于支持运行在客户端设备108A的虚拟系统上的应用程序130的实例(例如,运行在虚拟系统220上的应用程序实例222)的资源(例如,着色器高速缓存引擎110、数据存储区112A等)。根据前面描述的实施例,节点152A处的着色器高速缓存引擎110的着色器检索组件310可以获得与客户端设备108A相关联的着色器密钥(例如,“9J6K3D”)和/或与请求的着色器程序相关联的着色器值(例如,“3S09V2S3N3”),并且可以确定数据结构316的条目是否对应于获得的着色器密钥和/或着色器值。响应于识别与所获得的着色器密钥和/或着色器值相对应的数据结构316的条目402,着色器检索组件310可以根据识别的条目402的节点字段410来确定平台102的哪个节点152存储包括请求的编译的着色器程序302的着色器高速缓存114的部分。如图4所示,着色器检索组件310可以确定与着色器密钥“9J6K3D”和着色器值“3S09V2S3N3”相关联的请求的编译的着色器程序包含在存储在节点152A的数据存储区112A中的着色器高速缓存114的部分中。因此,着色器检索组件310可以从节点152A的着色器高速缓存114的部分中的识别的条目的存储器地址字段408中指示的存储器地址检索请求的编译的着色器程序302。然而,根据前面描述的实施例,如果着色器检索组件310确定请求的编译的着色器程序302包含在存储在节点152B的数据存储区112B中的着色器高速缓存114的部分中,例如,着色器检索组件310可以将对编译的着色器程序的请求转发至节点152B上运行的着色器高速缓存引擎110,并且节点152B上的着色器高速缓存引擎110可以检索客户端设备108A的请求的编译的着色器程序。
在一些实施例中,数据结构316的条目可以不包括节点字段410,如图4所示。在这样的实施例中,着色器检索组件310可以确定存储包含根据其他实施例的请求的编译的着色器程序的着色器高速缓存114的部分的节点。例如,包含在条目402的存储器地址字段408中的存储器地址可以分别对应于与数据存储区112A-C相关联的存储器的不同部分。因此,着色器检索组件310可以根据每个条目402的存储器地址字段408的存储器地址来确定存储包含请求的编译的着色器程序的着色器高速缓存114的部分的节点。在另一个示例中,数据结构316可以分离为数据结构316A-C,每个数据结构分别驻留在数据存储区112A-C中。每个数据结构316A-C可以配置为包括存储在着色器高速缓存的部分上的每个编译的着色器程序的映射,该着色器高速缓存也存储在数据存储区112A-C上,但不存储在其他数据存储区112A-C上。例如,数据结构316A可以配置为包括存储在数据存储区112A的着色器高速缓存部分114A处的每个编译的着色器程序302的映射,但不包括在数据存储区112B-C处的着色器高速缓存部分114B-C。响应于确定请求的编译的着色器程序没有存储在着色器高速缓存部分114A,着色器检索组件310可以向节点152B-C处的着色器高速缓存引擎110发送查询,以确定请求的编译的着色器程序302是否存储在着色器高速缓存部分114B或114C。根据前面描述的实施例,响应于确定请求的编译的着色器程序302存储在着色器高速缓存部分114B或114C,着色器检索组件310可以将来自客户端设备108A的请求转发至节点152B或152C,并且在节点152B或152C处的着色器高速缓存引擎110可以处理该请求。另外或者可替代地,根据前面描述的实施例,在节点152B或152C处的着色器高速缓存引擎110可以将请求的编译的着色器程序302发送到节点152A处的着色器高速缓存引擎110,并且着色器检索组件310可以将请求的编译的着色器程序302存储在着色器高速缓存部分114A处。着色器检索组件310然后可以根据该请求将请求的编译的着色器程序302提供给客户端设备108A。
如上所述,在一些实施例中,数据结构316的条目402可以包括着色器集字段412,该字段配置为指示包含特定着色器程序的着色器程序集。在一些实施例中,着色器程序集可对应于一个或多个编译的着色器程序,这些程序可能在对特定编译的着色器程序的请求之后被请求(例如,在特定的时间段内)。例如,请求的编译的着色程序可能对应于视频游戏绘图对象,视频游戏绘图对象与客户端设备108的用户首次访问的视频游戏应用地图的一部分相关联。请求的编译的着色器程序可能包含在与视频游戏应用程序地图的新访问部分相关联的着色器程序集中。在一些实施例中,可以由应用程序130的开发者定义一个或多个着色器程序集。在其他或类似的实施例中,在一个或多个客户端设备108上的应用程序130的运行时期间,可以通过着色器检索组件310来确定一个或多个着色器程序集。例如,在客户端设备108的初始集的应用程序130的运行时期间,着色器检索组件310可以确定在特定时间段内由客户端设备108的初始集请求的一个或多个特定的编译的着色器程序。着色器检索组件310可以将每个特定的请求的编译的着色器程序与相应的着色器程序集的标识符相关联,相应的着色器程序集的标识符被发送到请求编译的着色器程序302的后续客户端设备108。着色器检索组件310可以更新与每个编译的着色器程序相关联的条目402的着色器集字段412,以指示相应编译的着色器程序302与着色器程序集相关联,如图4所示。
在一些实施例中,着色器检索组件310可以使用条目402的着色器集字段412响应于请求来识别多个附加的编译的着色器程序302,以发送至客户端设备108。在响应于对编译的着色器程序302的请求而识别相应条目402之后,着色器检索组件310可以根据识别的条目402的着色器集字段412来确定与请求的着色器程序302相关联的着色器程序集。响应于确定与请求的着色器程序302相关联的集,着色器检索组件310可以识别存储在着色器高速缓存114中的也与确定的集相关联的每个其他编译的着色器程序302。着色器检索组件310不只将请求的编译的着色器程序302发送到客户端设备108,而可以在着色器高速缓存114处的与确定的集相关联的每个编译的着色器程序302发送至客户端设备108。
在一个说明性的示例中,着色器检索组件310可以接收对编译的着色器程序302的请求,并且该请求可以包括着色器密钥“9J6K3D”和着色器值“3S09V2S3N3”的指示。着色器检索组件310可以识别与请求的编译的着色器程序302相关联的条目402,并且可以确定请求的编译的着色器程序302与着色器集“1”相关联(即,根据条目402的着色器集字段412)。着色器检索组件310可以通过数据结构316进行解析,并确定与着色器密钥“8N3020”和着色器值“74FSW238FN”相关联的编译的着色器程序也与着色器集“1”相关联。因此,根据前面描述的实施例,着色器检索组件310可以从着色器高速缓存114处的存储器地址检索与着色器密钥“9J6K3D”和“8N3020”相关联的编译的着色器程序,如相应的条目402中所指示的,并将检索的编译的着色器程序302发送到客户端设备108。
在一些实施例中,条目402的着色器集字段412可能不包括与存储在着色器高速缓存114中的各自的编译的着色器程序302相关联的着色器程序集的标识符。相反,在一些实施例中,着色器集字段412可包括与一个集相关联的编译的着色器程序302相关联的每个着色器密钥和/或着色器值的标识符。在这些实施例中,着色器检索组件310可以识别与请求的编译的着色器程序302的着色器集字段410中指示的每个着色器密钥和/或着色器值关联的条目402,并且可以从与每个关联的编译的着色器程序302的存储器地址关联的着色器高速缓存114的部分中检索编译的着色器程序302,如每个识别的条目的存储器地址字段408中所指示的。
在附加或可选实施例中,数据结构316可以不包括着色器集字段412。在这样的实施例中,着色器检索组件310可以确定在着色器高速缓存114处的根据其他技术应该与所请求的编译的着色器程序一起发送到客户端设备108的编译的着色器程序。例如,响应于接收到来自客户端设备108的对编译的着色器程序302的请求,着色器检索组件310可以提供与请求的编译的着色器程序302相关联的着色器密钥和/或着色器值作为机器学习模型的输入。机器学习模型可以被训练(例如,根据实验数据,根据应用程序运行时数据等)以确定在收到对编译的着色器程序302的请求之后,可能请求哪个编译的着色程序302(例如,在特定的时间段内)。着色器检索组件310可以获得经训练的机器学习模型的一个或多个输出。输出可以包括存储在着色器高速缓存114中的一个或多个编译的着色器程序302的着色器密钥和/或着色器值,以及每个相应的编译的着色器程序302将由客户端设备108请求(例如,在特定的时间段内)的置信水平的指示。着色器检索组件310可以识别与超过阈值置信水平的置信水平相关联的一个或多个编译的着色器程序302,并且可以识别存储每个识别的编译的着色器程序(例如,通过数据结构316)的着色器高速缓存114的存储器地址。根据前面描述的实施例,着色器检索组件310可以从着色器高速缓存114检索请求的编译的着色器程序302和识别的编译的着色器程序302,并将检索的编译的着色器程序发送到客户端设备108。
在一些实施例中,着色器检索组件310可以确定由客户端设备108请求的编译的着色器程序302没有存储在着色器高速缓存114中。在一些实施例中,着色器检索组件310可以向客户端设备108发送消息,指示请求的编译的着色器程序302没有存储在着色器高速缓存114中。如前所述,客户端设备108可以启动编译过程以生成着色器程序的编译的版本,并可以将编译的着色器程序302发送到平台102以存储在着色器高速缓存114处。在一些实施例中,着色器验证组件314可以在存储编译的着色器程序302之前验证接收的编译的着色器程序302。着色器验证组件314可以将接收的编译的着色器程序302存储在数据存储区112的暂存缓冲区318中。暂存缓冲区318可以是数据存储区112中的存储器的一部分,该部分配置为在各自的编译的着色器程序302被着色器验证组件312验证之前暂时存储从客户端设备接收的编译的着色器程序302。
着色器验证组件312可以使用暂存缓冲区数据结构320跟踪暂时存储在暂存缓冲区318中的每个相应的编译的着色器程序302。暂存缓冲区数据结构320包括与编译的着色器程序相关联的着色器密钥和/或着色器值与暂时存储编译的着色器程序的暂存存储器缓冲区318的一部分的存储器地址的映射。图5描述了根据至少一个实施例的示例暂存缓冲区数据结构320。数据结构320的每个条目502可以包括着色器密钥字段504、着色器值字段506、暂存缓冲区存储器地址字段510和验证计数器字段512。在一些实施例中,数据结构320的每个条目502还可以包括客户端设备标识符字段508。
响应于接收到将编译的着色器程序302添加到着色器高速缓存114的请求,着色器验证组件312可以确定编译的着色器程序302是否已经存储在着色器高速缓存114和/或暂存缓冲区318处。根据前面描述的实施例,该请求可以包括与编译的着色器程序302相关联的着色器密钥和/或着色器值。在一些实施例中,请求可以包括着色器密钥,并且着色器验证组件312可以为接收的着色器程序302生成着色器值(例如,通过对接收的编译的着色器程序302的源代码应用哈希函数)。着色器验证组件312可以通过着色器高速缓存数据结构316进行解析,并确定数据结构316的条目402是否对应于接收的编译的着色器程序的着色器密钥和/或着色器值(即,根据每个条目402的着色器密钥字段404和/或着色器值字段406)。在一些实施例中,响应于确定条目402对应于接收的编译的着色器程序302的着色器密钥和/或着色器值,着色器验证组件312可以向客户端设备108发送指示接收的编译的着色器程序302已经存储在着色器高速缓存114中的通知。在其他或类似的实施例中,着色器验证组件312不能向客户端设备108发送任何通知,并且可以忽略将编译的着色器程序302存储在着色器高速缓存114处的请求。
响应于确定数据结构316没有条目对应于接收的编译的着色器程序302的着色器密钥和/或着色器值,着色器验证组件可以通过暂存缓冲区数据结构320进行解析,以确定暂存缓冲区数据结构320的条目502是否对应于与接收的编译的着色器程序302相关联的着色器密钥和/或着色器值(即,对每个条目502通过着色器密钥字段504和/或着色器值字段506)。响应于确定数据结构320没有条目502对应于编译的着色器程序302的着色器密钥和/或着色器值,着色器验证组件312可以将接收的编译的着色程序302暂时存储在暂存缓冲区318,并为编译的着色器程序302生成数据结构320的条目502。着色器验证组件312可以用与用户设备相关联的着色器密钥填充所生成的条目502的着色器密钥字段504以及用为编译的着色器程序302生成的着色器值填充着色器值字段506。着色器验证组件312还可以获得与客户端设备108相关联的标识符,并使用获得的标识符填充客户端设备标识符字段。在一些实施例中,将编译的着色器程序302存储在着色器高速缓存114处的请求可以包括与客户端设备108相关联的标识符。在其它或类似的实施例中,客户端设备标识符可以与在客户端设备108构造的虚拟化系统220相关联,以支持应用程序实例222,而不是客户端设备108本身。着色器验证组件312还可以用存储编译的着色器程序302的暂存缓冲区318的物理地址来填充暂存缓冲区存储器地址字段510。
在一些实施例中,着色器验证组件312可以初始化编译的着色器程序的验证计数器,并将验证计数器的当前值添加到验证计数器字段512。验证计数器可以跟踪运行在客户端设备上的许多不同的客户端设备或虚拟化计算系统,这些客户端设备已经发送了存储与对应着色器高速缓存114处的着色器值和着色器密钥相关联的编译的着色器程序302的请求。在一些实施例中,验证组件312可以通过将验证计数器的当前值设置为值“1”来初始化针对编译的着色器程序302的验证计数器。在一个示例性示例中,与“66HY32”的着色器密钥相关联的客户端设备108A可以发送将编译的着色器程序302存储在着色器高速缓存114处的请求。根据前面描述的实施例,着色器验证组件312可以获得编译的着色器程序302的着色器值(例如,“25FW5FN20”),并且可以确定编译的着色器程序是否已经存储在着色器高速缓存114和/或暂存缓冲区318中。响应于确定编译的着色器程序302没有存储在着色器高速缓存114或暂存缓冲区318,着色器验证组件312可以将编译的着色器程序302存储在暂存缓冲区318,并在数据结构320中生成编译的着色器程序的条目502。例如,着色器验证组件312可以获得与客户端设备108A相关联的客户端设备标识符,并使用获得的客户端设备标识符填充客户端设备标识符字段508。着色器验证组件312可以将验证计数器的当前值设置为“1”,因为没有其他客户端设备108将存储与对应的着色器密钥和着色器值相关联的编译的着色器程序302的请求发送到着色器高速缓存114。
在一些实施例中,着色器验证组件312可以根据前面描述的实施例确定接收的编译的着色器程序302已经存储在暂存缓冲区318中。着色器验证组件312可以识别对应于接收的编译的着色器程序302的数据结构320的条目502(即,根据对每个条目502的着色器密钥字段504和着色器值字段506)。着色器验证组件312可以获得与客户端设备108相关联的客户端设备标识符,并将所获得的标识符与所识别的条目的客户端设备标识符字段508中包含的设备标识符进行比较。响应于确定获得的标识符对应于已经包含在客户端设备标识符字段508中的设备标识符,着色器验证组件312可以向客户端设备108发送通知,指示着色器验证组件312已经接收到将编译的着色器程序302存储在着色器高速缓存114中的请求。在附加或可选实施例中,着色器验证组件312可以不向客户端设备108发送通知,而是可以无视将编译的着色器程序302存储在着色器高速缓存114的请求。响应于确定所获得的标识符不对应于识别的条目502的客户端设备标识符字段508中包含的设备标识符,着色器验证组件312可以增加与编译的着色器程序302相关联的验证计数器的当前值,并更新识别的条目的验证计数器字段512以反映验证计数器的增加值。
在一个示例性示例中,客户端设备108B可以向平台102发送将各自编译的着色器程序302存储在着色器高速缓存114处的请求。客户端设备108B可以与着色器密钥“3DS02F”和客户端设备标识符“5844”相关联。着色器验证组件312可以为从客户端设备108B接收的编译的着色器程序302生成第一着色器值(例如,“3DDG538WD”),并且可以识别与客户端设备108B相关联的第一着色器密钥和第一着色器值相关联的第一条目502。响应于确定与客户端设备108B相关联的客户端设备标识符(即,“5844”)不对应于第一条目502的客户端设备标识符字段508中包含的设备标识符,着色器验证组件312可以更新编译的着色器程序的验证计数器的值(例如,通过将当前值增加“1”)。
在另一个示例性示例中,客户端设备108N可以向平台102发送将各自编译的着色器程序302存储在着色器高速缓存114处的请求。客户端设备108N可以与着色器密钥“FD93X3”和客户端设备标识符“1008”相关联。着色器验证组件312可以为从客户端设备108N接收的编译的着色器程序302生成第二着色器值(例如,“ZDG26SF29”),并且可以识别与客户端设备108N相关联的第二着色器值和着色器密钥相关联的第二条目502。响应于确定与客户端设备108N相关联的客户端设备标识符(例如,“1008”)对应于第二条目502的客户端设备标识符字段508中包含的设备标识符,着色器验证组件312向客户端设备108N发送通知,如上文所述,或者可以忽视来自客户端设备108N的将编译的着色器程序302存储在着色器高速缓存114处的请求。在一些实施例中,着色器验证组件312可以启动关于客户端设备108N的安全过程(例如,通过将客户端设备108N报告给平台102的安全组件等)。
在一些实施例中,着色器验证组件312可以确定与编译的着色器程序302相关联的验证计数器的当前值满足验证标准。例如,着色器验证组件312可以确定在条目的验证计数器字段512中指示的验证计数器的当前值满足或超过阈值计数器值。阈值计数器值可能对应于先前提交了着色器程序302的编译的版本用于存储在着色器高速缓存114中以便编译的着色器程序302被确定为安全的(例如,非恶意的,不存在错误等)的先前定义的客户端设备的数量(例如,由平台102,由应用程序开发者等)。根据前面描述的实施例,响应于确定验证计数器的当前值满足验证标准,着色器验证组件312可以将编译的着色器程序302存储在着色器高速缓存114处,并在着色器高速缓存数据结构316处生成编译的着色器程序302的条目。着色器验证组件312还可以从暂存缓冲区318中擦除编译的着色器程序302,并从暂存缓冲区数据结构320中删除针对编译的着色器程序302的条目502。根据前面描述的实施例,一旦编译的着色器程序302从暂存缓冲区318移到着色器高速缓存114,着色器检索组件310可以响应于来自客户端设备108的请求来提供编译的着色器程序302。
在某些情况下,编译的着色器程序302可以保持在暂存缓冲区318,而在相当长的一段时间内不会移动到着色器高速缓存114。在一些实施例中,着色器验证组件314可以为存储在暂存缓冲区318上的每个着色器程序302维护计时器。响应于相应的着色器程序302的时间超过阈值,着色器验证组件314可以从暂存缓冲区318中擦除编译的着色器程序302,并且可以从数据结构320中擦除与编译的着色器程序302相关联的条目502。另外或者可选地,响应于确定暂存缓冲区318没有足够的空间来暂时存储每个接收的编译的着色器程序302,着色器验证组件可以从暂存缓冲区318中删除比暂存缓冲区318中其他编译的着色器程序302更老(例如,鉴于计时器)的编译的着色器程序302。
如上所述,每个编译的着色器程序302可以与特定硬件状态和/或软件状态相关联的客户端设备108兼容。如上所述,在某些情况下,连接到平台102的客户端设备108的硬件状态和/或软件状态可以从第一版本更新到第二版本。在一些实施例中,硬件状态和/或软件状态的第一版本可以过时(即,当前连接到平台102的客户端设备108都不与硬件状态和/或软件状态的第一版本相关联)。例如,向平台102请求并提供编译的着色器程序302的一组客户端设备108每个都可以包括处理设备的第一版本。因此,着色器高速缓存114可以存储与处理设备的第一版本兼容的编译的着色器程序302。随着时间的推移,该组客户端设备108处的处理设备可以更新到第二版本,这样连接到平台102的客户端设备108不包括处理设备的第二版本。根据先前公开的实施例,着色器高速缓存引擎110的一个或多个组件(例如,着色器编译器组件314)可以检测与处理设备的第一版本兼容的编译的着色器程序302已经过时,并且可以从着色器高速缓存114中删除这些编译的着色器程序302。根据用着色器编译器组件314描述的实施例,着色器高速缓存引擎110还可以从着色器高速缓存114中删除与驱动程序的过时版本相关联的编译的着色器程序302。
图6是根据至少一个实施例在客户端设备108上运行的着色器管理器204的框图。在一些实施例中,着色器管理器204可以是客户端设备108处的内容查看组件的一部分,如上述的。在其他或类似的实施例中,着色器管理器204可以由虚拟化系统220的系统管理程序202和或访客OS 224来执行。着色器管理器204可以包括应用程序模块610、着色器检索器模块612和着色器编译器模块614。在一些实施例中,客户端设备108可以耦合到存储器620。存储器620可以对应于关于图2所描述的存储器210和/或存储器228。
应用程序模块610可以配置为检测在客户端设备108上运行的应用程序130或应用程序实例222在应用程序运行时期间何时引用特定的着色器程序。在一些实施例中,应用程序130可以通过引用与着色器程序相关联的应用程序对象132来引用着色器程序。在其他或类似的实施例中,应用程序130可以通过直接引用着色器程序来引用着色器程序。响应于检测到应用程序130已经引用了着色器程序,应用程序模块610可以确定着色器程序的编译的版本(即,编译的着色器程序302)是否存储在存储器620中。如果编译的着色器程序302存储在存储器620中,则应用程序模块610可以根据应用程序130的引用来执行编译的着色器程序302。根据前面描述的实施例,响应于应用程序模块610确定编译的着色器程序302没有存储在存储器620中,着色器检索模块612可以从平台102托管的着色器高速缓存114请求编译的着色器程序302。
在一些实施例中,在客户端设备108处的应用程序130的初始化期间,或在虚拟系统220的应用程序实例222的初始化期间,平台102可以向客户端设备108发送通知,包括不应该从着色器高速缓存114请求的非请求着色器程序集626的指示。非请求着色器程序集626可以包括定义以在着色器高速缓存114处消耗大量空间,在从着色器高速缓存114检索期间消耗大量网络带宽,或者在着色器高速缓存114处存储不安全(例如,容易出现错误,容易遭受恶意攻击)的着色器程序(例如,由平台102、由应用程序开发者等)。响应于检测到应用程序130引用着色器程序,应用程序模块610可以确定所引用的着色程序是否包含在非请求着色器程序集626中。根据本文描述的实施例,响应于应用程序模块610确定在集626中包含引用的着色器程序,着色器编译器模块614可以本地编译引用的着色器程序。
在一些实施例中,着色器检索模块612可以生成与客户端设备108相关联的着色器密钥(例如,使用存储在存储器620处的状态数据624)。状态数据624可以包括与客户端设备108相关联的硬件状态(例如,在客户端设备108上的处理设备的类型)或软件状态(例如,在处理设备上运行的驱动程序的版本、处理设备的管线的当前状态等)相关联的任何数据。着色器检索模块612可以通过将哈希函数应用于与客户端设备108相关联的硬件状态和/或软件状态的指示符来生成着色器密钥。在一些实施例中,着色器检索模块612可以应对于编译的着色器程序302的请求而将着色器密钥发送到平台102,如之前所描述的。
在一些实施例中,着色器管理器204可以接收来自平台102的消息,消息可以包括或可以不包括编译的着色器程序302。着色器检索模块612可以解析接收的消息,以确定该消息是否包括编译的着色器程序302。响应于着色器检索模块612确定消息包括编译的着色器程序302,应用程序模块610可以将接收的编译的着色器程序302存储在存储器620处,并可以根据应用程序130的引用来执行编译的着色器程序302。根据前面描述的实施例,响应于着色器检索模块612确定消息不包括编译的着色器程序302,着色器编译器模块614可以检索着色器程序的源代码622,并可以启动编译过程以本地编译的着色器程序。在一些实施例中,着色器程序源代码622可以存储在存储器620中。例如,在客户端设备108上的应用程序130的初始化期间,平台102可以将用于应用程序130的每个着色器程序的源代码622发送到客户端设备108。因此,着色器编译器模块614可以从存储器620检索着色器程序的源代码622,并在本地编译着色器程序,如前所述。在其它或类似的实施例中,着色器编译器模块614可以向平台102发送对着色器程序的源代码622的请求。
根据前面描述的实施例,响应于完成生成着色器程序302的编译的版本的过程,着色器编译器模块614可以将编译的着色器程序302发送到平台102以存储在着色器高速缓存114处。在一些实施例中,着色器编译器模块614可以将编译的着色器程序302与客户端设备108相关联的着色器密钥一起发送到平台102。在其他或可选的实施例中,着色器编译器模块614可以生成与编译的着色器程序302相关联的着色器值(例如,通过将哈希函数应用于编译的着色器程序302),并将生成的着色器值与编译的着色器程序302一起发送到平台102。
在一些实施例中,响应于着色器检索模块612向平台102发送对编译的着色器程序302的请求,着色器编译器模块614可以启动编译着色器程序的过程(即,基于着色器程序源代码622),如上所述。响应于着色器编译器模块614在从平台102接收到消息之前完成编译过程,着色器检索模块612可以终止对平台102的请求,并且应用程序模块610可以执行由着色器编译器模块614编译的着色器程序。响应于着色器检索模块612在着色器编译器模块614启动的编译过程完成之前接收到编译的着色器程序302,着色器编译器模块614可以终止编译过程,并且应用程序模块610可以执行从平台102接收到的编译的着色器程序302。
图7和图8分别是根据至少一些实施例的与云计算环境中编译的着色器程序的高速缓存相关的示例方法700和800的流程图。在至少一个实施例中,方法700和/或方法800可以由服务器机器106、客户端设备108、或某些其它计算设备,或多种计算设备的组合来执行。方法700和/或方法800可以由一个或多个处理单元(例如,CPU和/或GPU)执行,其中可以包括一个或多个存储器设备(或与一个或多个存储器设备通信)。在至少一个实施例中,方法700和/或方法800可以由多个处理线程(例如,CPU线程和/或GPU线程)来执行,每个线程执行一个或多个单独的函数、例程、子例程或该方法的操作。在至少一个实施例中,实现方法700和/或方法800的处理线程可以被同步(例如,使用信号量、关键部分和/或其他线程同步机制)。可选地,实现方法700和/或方法800的处理线程可以相对于彼此异步地执行。方法700和/或方法800的各种操作可以以与图7和/或图8中所示的顺序相比不同的顺序执行。这些方法的一些操作可以与其他操作同时执行。在至少一个实施例中,图7和/或图8中所示的一个或多个操作可能并不总是被执行。
图7中示出了根据至少一个实施例的向客户端设备提供编译的着色器程序的示例方法700的流程图。在一些实施例中,方法700的一个或多个操作可以由本文所述的着色器高速缓存引擎110的一个或多个组件或模块来执行。执行方法700的处理单元可以在块710处接收对在客户端设备上运行的应用程序的编译的着色器程序的请求。在一些实施例中,执行方法700的处理单元可以从运行应用程序实例的虚拟系统接收请求,例如运行应用程序实例222的虚拟系统220。在某些实施例中,该请求可以包括与客户端设备相关联的着色器密钥和/或与该着色器程序相关联的着色器值。可以根据与客户端设备相关联的特定类型的硬件(例如,客户端设备上的GPU类型)和/或与客户端设备相关联的特定类型的软件(例如,在GPU上运行的驱动程序的类型)的指示来生成着色器密钥。着色器值可以根据着色器程序的源代码生成。
在一些实施例中,执行方法700的处理单元可以确定根据该请求提供编译的着色器程序是否将满足与应用程序托管平台相关联的性能标准。例如,执行方法700的处理单元可以确定着色器高速缓存引擎检索请求的编译的着色器程序的时间量是否超过客户端设备编译请求的着色程序的时间量。响应于确定检索请求的编译的着色程序的时间量超过了客户端设备编译请求的着色程序的时间量,执行方法700的处理单元可以向客户端设备发送消息,该消息包括用于客户端设备编译请求的着色器程序的指令。
在块712处,执行方法700的处理单元可以确定请求的编译的着色器程序是否存储在应用程序的着色器高速缓存中。执行方法700的处理单元可以通过将接收的请求包含的着色器密钥和/或着色器值与用于着色器存储的数据结构的一个或多个条目中包含的着色器密钥和/或着色器值进行比较,来确定请求的编译的着色器程序是否存储在着色器高速缓存处,例如关于图3和图4描述的着色器高速缓存数据结构316。响应于执行方法700的处理单元确定编译的着色器程序存储在应用程序的着色器高速缓存中,方法700可以继续阻止714。响应于执行方法700的处理单元确定编译的着色器程序没有存储在应用程序的着色器高速缓存中,方法700可以继续阻止718。
如前所述,在一些实施例中,系统150可以包括一个或多个节点,节点被配置为存储着色器高速缓存的一个或多个部分。在一些实施例中,执行方法700的处理单元可以对应于在各自节点上运行的着色器高速缓存引擎。在这些实施例中,执行方法700的处理单元可以确定编译的着色器程序是否存储在与相应节点关联的着色器高速缓存的部分中。根据本文提供的实施例,响应于确定编译的着色器程序存储在与相应节点关联的着色器高速缓存的部分中,执行方法700的处理单元可以检索编译的着色器程序。响应于确定编译的着色器程序没有存储在与相应节点相关联的着色器高速缓存的部分,执行方法700的处理单元可以识别系统的附加节点,附加节点包括存储请求的编译的着色器程序的着色器高速缓存的部分。执行方法700的处理单元可以将从客户端设备接收的请求转发至识别的附加节点。
在块714处,执行方法700的处理单元可以从着色器高速缓存中检索请求的编译的着色器程序。响应于执行方法700的处理单元识别与请求的着色器密钥和/或着色器值相对应的着色器数据结构的条目,执行方法400的处理单元可以从识别的条目中提取存储编译的着色器程序的数据存储区的地址。执行方法700的处理单元可以访问从该地址提取的地址,并从识别的存储器地址读取编译的着色器程序的数据。在块716处,执行方法700的处理单元可以将编译的着色器程序发送到客户端设备。
在块718处,执行方法700的处理单元可以向客户端设备发送指示请求的编译的着色器程序没有存储在着色器高速缓存中的消息。在块720处,执行方法700的处理单元可以从客户端设备接收编译的着色器程序。执行方法700的处理单元也可以接收与客户端设备相关联的着色器密钥和/或与着色器程序相关联的着色器值,如上所述。
在块722处,执行方法700的处理单元可以验证接收的编译的着色器程序。执行方法700的处理单元可以通过确定编译的着色器程序是否对应于存储在该着色器高速缓存的暂存缓冲区(例如图3中的暂存缓冲区318)中的附加的编译的着色器程序来验证接收的编译的着色器程序。例如,执行方法700的处理单元可以将与客户端设备相关联的着色器密钥与暂存缓冲区数据存储区(例如暂存缓冲区数据结构320)的一个或多个条目的着色器密钥进行比较。在附加或可选地示例中,执行方法700的处理单元可以将与着色器程序相关联的着色器密钥和/或着色器值与暂存缓冲区数据存储区的一个或多个条目的着色器密钥和/或着色器值进行比较。响应于识别与请求的着色器密钥和/或着色器值对应的暂存缓冲区数据存储区的条目,执行方法700的处理单元可以确定客户端设备是否对应于先前向着色器高速缓存引擎110提供编译着色器高速缓存的客户端设备。例如,执行方法700的处理单元可以将客户端设备的标识符与包含在数据结构条目的客户端设备标识符字段中的客户端设备标识符的列表进行比较。客户端设备标识符的列表可以包括已向着色器高速缓存引擎110提供了编译的着色器高速缓存的每个客户端设备的标识符。响应于执行方法700的处理单元确定客户端设备的标识符对应于客户端设备标识符列表的相应的客户端设备标识符,方法700可以终止。
响应于执行方法700的处理单元确定客户端设备的标识符不对应于客户端设备标识符列表的各个客户端设备标识符,执行方法700的处理单元可以更新与在暂存缓冲区中的编译的着色程序相关联的计数器值。执行方法700的处理单元可以通过根据接收的编译的着色器程序增加与暂存缓冲区数据结构的标识的条目相关联的计数器的值来更新计数器值。执行方法700的处理单元可以确定与编译的着色器程序相关联的更新的计数器是否超过阈值。响应于执行方法700的处理单元确定更新的计数器超过阈值,与块722相关联的一个或多个操作可以终止并且执行方法700的处理单元可以考虑要验证的编译的着色器程序。
在块724处,执行方法700的处理单元可以将接收的编译的着色器程序存储在着色器高速缓存中。执行方法700的处理单元可以通过将与编译的着色器程序相关联的数据写入与该着色器高速缓存相关联的数据存储区112的可用地址,从而将接收的编译的着色器程序存储在该着色器高速缓存中。在一些实施例中,执行方法700的处理单元可以从暂存缓冲区中擦除编译的着色器程序,并且在一些实施例中,可以从暂存缓冲区数据结构中擦除与编译的着色器程序相关联的条目。执行方法700的处理单元还可以向与编译的着色器程序对应的着色器高速缓存数据结构中添加一个条目。
图8示出了根据至少一些实施例的由客户端设备请求编译的着色器程序的示例方法800的流程图。在一些实施例中,方法800的一个或多个操作可以由本文中所描述的着色器管理器204的一个或多个组件或模块来执行。执行方法800的处理单元可以在块810处检测到在客户端设备上运行的应用程序或应用程序的实例引用了特定的着色器程序。在块812处,执行方法800的处理单元可以确定引用的着色器程序的编译的版本是否存储在存储器中(例如,用于虚拟系统)。响应于执行方法800的处理单元确定引用着色器程序的编译的版本存储在存储器中(例如,对于虚拟系统),方法800可以继续到块814。在块814处,执行方法800的处理单元可以从存储器中检索编译的着色器程序。根据应用程序的引用,在块816处,执行方法800的处理单元可以执行编译的着色器程序。
响应于执行方法800的处理单元确定引用的着色器程序的编译的版本没有存储在存储器中(例如,对于虚拟系统),方法800可以继续到块818。在块818处,执行方法800的处理单元可以向应用程序托管平台发送对编译的着色程序的请求。在块820处,执行方法800的处理单元可以接收来自应用程序托管平台的消息。在块822处,执行方法800的处理单元可以确定接收的消息是否包括编译的着色程序。响应于执行方法800的处理单元确定接收的消息包含编译的着色器程序,执行方法800的处理单元可以继续到块822。在块822处,执行方法800的处理单元可以将编译的着色程序存储在虚拟存储器中。响应于执行方法800的处理单元将编译的着色器程序存储在虚拟存储器中,方法800可以继续到块816。
响应于执行方法800的处理单元确定从应用程序托管平台接收的消息不包括编译的着色器程序,方法800可以继续到块824。在块824处,执行方法800的处理单元可以在本地编译着色器程序。根据本文描述的实施例,在块826处,执行方法800的处理单元将编译的着色器程序发送到应用程序托管平台,以存储在着色器高速缓存中。在一些实施例中,方法800可以继续到块822,其中执行方法800的处理单元可以将编译的着色程序存储在存储器中(例如,用于虚拟系统)。
推理和训练逻辑
图9A示出了用于执行与一个或更多个实施例相关联的推理和/或训练操作的推理和/或训练逻辑915。下面结合图9A和/或图9B提供关于推理和/或训练逻辑915的细节。
在至少一个实施例中,推理和/或训练逻辑915可以包括但不限于代码和/或数据存储901,用于存储前向和/或输出权重和/或输入/输出数据,和/或在一个或更多个实施例的方面中配置被训练为和/或用于推理的神经网络的神经元或层的其他参数。在至少一个实施例中,训练逻辑915可以包括或耦合到用于存储图形代码或其他软件以控制时序和/或顺序的代码和/或数据存储901,其中权重和/或其他参数信息被加载以配置逻辑,包括整数和/或浮点单元(统称为算术逻辑单元(ALU))。在至少一个实施例中,代码(诸如图代码)基于该代码所对应的神经网络的架构将权重或其他参数信息加载到处理器ALU中。在至少一个实施例中,代码和/或数据存储901存储在使用一个或更多个实施例的方面训练和/或推理期间的输入/输出数据和/或权重参数的前向传播期间结合一个或更多个实施例训练或使用的神经网络的每个层的权重参数和/或输入/输出数据。在至少一个实施例中,代码和/或数据存储901的任何部分都可以包括在其他片上或片外数据存储内,包括处理器的L1、L2或L3高速缓存或系统存储器。
在至少一个实施例中,代码和/或数据存储901的任何部分可以在一个或更多个处理器或其他硬件逻辑设备或电路的内部或外部。在至少一个实施例中,代码和/或代码和/或数据存储901可以是高速缓存存储器、动态随机可寻址存储器(“DRAM”)、静态随机可寻址存储器(“SRAM”)、非易失性存储器(例如闪存)或其他存储。在至少一个实施例中,对代码和/或代码和/或数据存储901是在处理器的内部还是外部的选择,例如,或者由DRAM、SRAM、闪存或某种其他存储类型组成,可以取决于存储片上与片外的可用存储空间,正在执行训练和/或推理功能的延迟要求,在神经网络的推理和/或训练中使用的数据的批大小或这些因素的某种组合。
在至少一个实施例中,推理和/或训练逻辑915可以包括但不限于代码和/或数据存储905,以存储与在一个或更多个实施例的方面中被训练为和/或用于推理的神经网络的神经元或层相对应的反向和/或输出权重和/或输入/输出数据。在至少一个实施例中,在使用一个或更多个实施例的方面训练和/或推理期间,代码和/或数据存储905存储在输入/输出数据和/或权重参数的反向传播期间结合一个或更多个实施例训练或使用的神经网络的每个层的权重参数和/或输入/输出数据。在至少一个实施例中,训练逻辑915可以包括或耦合到用于存储图代码或其他软件以控制时序和/或顺序的代码和/或数据存储905,其中权重和/或其他参数信息被加载以配置逻辑,该逻辑包括整数和/或浮点单元(统称为算术逻辑单元(ALU))。在至少一个实施例中,代码(诸如图代码)基于该代码所对应的神经网络的架构将权重或其他参数信息加载到处理器ALU中。在至少一个实施例中,代码和/或数据存储905的任何部分可以与其他片上或片外数据存储一起包括,包括处理器的L1、L2或L3高速缓存或系统存储器。在至少一个实施例中,代码和/或数据存储905的任何部分可以在一个或更多个处理器或其他硬件逻辑设备或电路上的内部或外部。在至少一个实施例中,代码和/或数据存储905可以是高速缓存存储器、DRAM、SRAM、非易失性存储器(例如闪存)或其他存储。在至少一个实施例中,代码和/或数据存储905是在处理器的内部还是外部的选择,例如,是由DRAM、SRAM、闪存还是其他某种存储类型组成,取决于可用存储是片上还是片外,正在执行的训练和/或推理功能的延迟要求,在神经网络的推理和/或训练中使用的数据批量大小或这些因素的某种组合。
在至少一个实施例中,代码和/或数据存储901以及代码和/或数据存储905可以是分开的存储结构。在至少一个实施例中,代码和/或数据存储901以及代码和/或数据存储905可以是相同的存储结构。在至少一个实施例中,代码和/或数据存储901以及代码和/或数据存储905可以部分地是相同的存储结构和部分分离的存储结构。在至少一个实施例中,代码和/或数据存储901以及代码和/或数据存储905的任何部分可以与其他片上或片外数据存储包括在一起,包括处理器的L1、L2或L3高速缓存或系统存储器。
在至少一个实施例中,推理和/或训练逻辑915可以包括但不限于一个或更多个算术逻辑单元(“ALU”)910(包括整数和/或浮点单元),用于至少部分地基于训练和/或推理代码(例如,图代码)或由其指示来执行逻辑和/或数学运算,其结果可能会产生存储在激活存储920中的激活(例如,来自神经网络内部的层或神经元的输出值),其是存储在代码和/或数据存储901和/或代码和/或数据存储905中的输入/输出和/或权重参数数据的函数。在至少一个实施例中,激活响应于执行指令或其他代码,由ALU 910执行的线性代数和/或基于矩阵的数学生成在激活存储920中存储的激活,其中存储在代码和/或数据存储905中和/或代码和/或数据存储901中的权重值用作具有其他值的操作数,例如偏置值、梯度信息、动量值或其他参数或超参数,可以将任何或所有这些存储在代码和/或数据存储905或代码和/或数据存储901或其他片上或片外存储中。
在至少一个实施例中,一个或更多个处理器或其他硬件逻辑设备或电路中包括一个或更多个ALU 910,而在另一实施例中,一个或更多个ALU 910可以在处理器或其他硬件逻辑设备或使用它们(例如协处理器)的电路外。在至少一个实施例中,可以将一个或更多个ALU 910包括在处理器的执行单元之内,或者以其他方式包括在由处理器的执行单元可访问的ALU组中,该处理器的执行单元可以在同一处理器内或者分布在不同类型的不同处理器之间(例如,中央处理单元、图形处理单元、固定功能单元等)。在至少一个实施例中,代码和/或数据存储901、代码和/或数据存储905以及激活存储920可以在相同处理器或其他硬件逻辑设备或电路上,而在另一实施例中,它们可以在不同的处理器或其他硬件逻辑设备或电路或相同和不同处理器或其他硬件逻辑设备或电路的某种组合中。在至少一个实施例中,激活存储920的任何部分可以与其他片上或片外数据存储包括在一起,包括处理器的L1、L2或L3高速缓存或系统存储器。此外,推理和/或训练代码可以与处理器或其他硬件逻辑或电路可访问的其他代码一起存储,并可以使用处理器的提取、解码、调度、执行、退出和/或其他逻辑电路来提取和/或处理。
在至少一个实施例中,激活存储920可以是高速缓存存储器、DRAM、SRAM、非易失性存储器(例如,闪存)或其他存储。在至少一个实施例中,激活存储920可以完全地或部分地在一个或更多个处理器或其他逻辑电路内部或外部。在至少一个实施例中,可以取决于片上或片外可用的存储,执行训练和/或推理功能的延迟要求,在推理和/或训练神经网络中使用的数据的批量大小或这些因素的某种组合,选择激活存储920是处理器的内部还是外部,例如,或者由DRAM、SRAM、闪存或一些其他存储类型组成。在至少一个实施例中,图9A中所示的推理和/或训练逻辑915可以与专用集成电路(“ASIC”)结合使用,例如来自Google的处理单元、来自GraphcoreTM的推理处理单元(IPU)或来自Intel Corp的(例如“Lake Crest”)处理器。在至少一个实施例中,图9A所示的推理和/或训练逻辑915可与中央处理单元(“CPU”)硬件,图形处理单元(“GPU”)硬件或其他硬件,例如数据处理单元(“DPU”)硬件,或现场可编程门阵列(“FPGA”)。
图9B示出了根据至少一个或多个实施例的推理和/或训练逻辑915。在至少一个实施例中,推理和/或训练逻辑915可以包括但不限于硬件逻辑,其中计算资源被专用或以其他方式唯一地连同对应于神经网络内的一层或更多层神经元的权重值或其他信息一起使用。在至少一个实施例中,图9B中所示的推理和/或训练逻辑915可以与专用集成电路(ASIC)结合使用,例如来自Google的处理单元,来自GraphcoreTM的推理处理单元(IPU)或来自Intel Corp的(例如“Lake Crest”)处理器。在至少一个实施例中,图9B中所示的推理和/或训练逻辑915可以与中央处理单元(CPU)硬件、图形处理单元(GPU)硬件或其他硬件,例如数据处理单元(“DPU”)硬件或现场可编程门阵列(FPGA)。在至少一个实施例中,推理和/或训练逻辑915包括但不限于代码和/或数据存储901以及代码和/或数据存储905,其可以用于存储代码(例如,图代码)、权重值和/或其他信息,包括偏置值、梯度信息、动量值和/或其他参数或超参数信息。在图9B中所示的至少一个实施例中,代码和/或数据存储901以及代码和/或数据存储905中的每一个都分别与专用计算资源(例如计算硬件902和计算硬件906)相关联。在至少一个实施例中,计算硬件902和计算硬件906中的每一个包括一个或更多个ALU,这些ALU仅分别对存储在代码和/或数据存储901和代码和/或数据存储905中的信息执行数学函数(例如线性代数函数),执行函数的结果被存储在激活存储920中。
在至少一个实施例中,代码和/或数据存储901和905以及相应的计算硬件902和906中的每一个分别对应于神经网络的不同层,使得从代码和/或数据存储901和计算硬件902的一个“存储/计算对901/902”得到的激活提供作为代码和/或数据存储905和计算硬件906的下一个“存储/计算对905/906”的输入,以便反映神经网络的概念组织。在至少一个实施例中,每个存储/计算对901/902和905/906可以对应于一个以上的神经网络层。在至少一个实施例中,在推理和/或训练逻辑915中可以包括在存储计算对901/902和905/906之后或与之并行的附加存储/计算对(未示出)。
数据中心
图10示出了可以使用至少一个实施例的示例数据中心1000。在至少一个实施例中,数据中心1000包括数据中心基础设施层1010、框架层1020、软件层1030和应用程序层1040。
在至少一个实施例中,如图10所示,数据中心基础设施层1010可以包括资源协调器1012、分组计算资源1014和节点计算资源(“节点C.R.”)1016(1)-1016(N),其中“N”代表任何正整数。在至少一个实施例中,节点C.R.1016(1)-1016(N)可以包括但不限于任何数量的中央处理单元(“CPU”)或其他处理器(包括加速器、现场可编程门阵列(FPGA)、数据处理单元、图形处理器等),存储器设备(例如动态只读存储器)、存储设备(例如,固态硬盘或磁盘驱动器),网络输入/输出(“NW I/O”)设备,网络交换机,虚拟机(“VM”),电源模块和冷却模块等。在至少一个实施例中,节点C.R.1016(1)-1016(N)中的一个或更多个节点C.R.可以是具有一个或更多个上述计算资源的服务器。
在至少一个实施例中,分组计算资源1014可以包括容纳在一个或更多个机架内的节点C.R.的单独分组(未示出),或者容纳在各个地理位置的数据中心内的许多机架(也未示出)。分组的计算资源1014内的节点C.R.的单独分组可以包括可以被配置或分配为支持一个或更多个工作负载的分组的计算、网络、存储器或存储资源。在至少一个实施例中,可以将包括CPU或处理器的几个节点C.R.分组在一个或更多个机架内,以提供计算资源来支持一个或更多个工作负载。在至少一个实施例中,一个或更多个机架还可以包括任何数量的电源模块、冷却模块和网络交换机,以任意组合。
在至少一个实施例中,资源协调器1012可以配置或以其他方式控制一个或更多个节点C.R.1016(1)-1016(N)和/或分组的计算资源1014。在至少一个实施例中,资源协调器1012可以包括用于数据中心1000的软件设计基础结构(“SDI”)管理实体。在至少一个实施例中,资源协调器可以包括硬件、软件或其某种组合。
在至少一个实施例中,如图10所示,框架层1020包括作业调度器1022、配置管理器1024、资源管理器1026和分布式文件系统1028。在至少一个实施例中,框架层1020可以包括支持软件层1030的软件1032和/或应用程序层1040的一个或更多个应用程序1042的框架。在至少一个实施例中,软件1032或一个或更多个应用程序1042可以分别包括基于Web的服务软件或应用程序,例如由Amazon Web Services,Google Cloud和Microsoft Azure提供的服务或应用程序。在至少一个实施例中,框架层1020可以是但不限于一种免费和开放源软件网络应用程序框架,例如可以利用分布式文件系统1028来进行大范围数据处理(例如“大数据”)的Apache SparkTM(以下称为“Spark”)。在至少一个实施例中,作业调度器1022可以包括Spark驱动器,以促进对数据中心1000的各个层所支持的工作负载进行调度。在至少一个实施例中,配置管理器1024可以能够配置不同的层,例如软件层1030和包括Spark和用于支持大规模数据处理的分布式文件系统1028的框架层1020。在至少一个实施例中,资源管理器1026能够管理映射到或分配用于支持分布式文件系统1028和作业调度器1022的集群或分组计算资源。在至少一个实施例中,集群或分组计算资源可以包括数据中心基础设施层1010上的分组计算资源1014。在至少一个实施例中,资源管理器1026可以与资源协调器1012协调以管理这些映射的或分配的计算资源。
在至少一个实施例中,包括在软件层1030中的软件1032可以包括由节点C.R.1016(1)-1016(N)的至少一部分,分组的计算资源1014和/或框架层1020的分布式文件系统1028使用的软件。一种或更多种类型的软件可以包括但不限于Internet网页搜索软件、电子邮件病毒扫描软件、数据库软件和流视频内容软件。
在至少一个实施例中,应用程序层1040中包括的一个或更多个应用程序1042可以包括由节点C.R.1016(1)-1016(N)的至少一部分、分组计算资源1014和/或框架层1020的分布式文件系统1028使用的一种或更多种类型的应用程序。一种或更多种类型的应用程序可以包括但不限于任何数量的基因组学应用程序、认知计算和机器学习应用程序,包括训练或推理软件,机器学习框架软件(例如PyTorch、TensorFlow、Caffe等)或其他与一个或更多个实施例结合使用的机器学习应用程序。
在至少一个实施例中,配置管理器1024、资源管理器1026和资源协调器1012中的任何一个可以基于以任何技术上可行的方式获取的任何数量和类型的数据来实现任何数量和类型的自我修改动作。在至少一个实施例中,自我修改动作可以减轻数据中心1000的数据中心操作员做出可能不好的配置决定并且可以避免数据中心的未充分利用和/或执行差的部分。
在至少一个实施例中,数据中心1000可以包括工具、服务、软件或其他资源,以根据本文所述的一个或更多个实施例来训练一个或更多个机器学习模型或者使用一个或更多个机器学习模型来预测或推理信息。例如,在至少一个实施例中,可以通过使用上文关于数据中心1000描述的软件和计算资源,根据神经网络架构通过计算权重参数来训练机器学习模型。在至少一个实施例中,通过使用通过本文所述的一种或更多种训练技术计算出的权重参数,可以使用上面与关于数据中心1000所描述的资源,使用对应于一个或更多个神经网络的经训练的机器学习模型来推理或预测信息。
在至少一个实施例中,数据中心可以使用CPU、专用集成电路(ASIC)、GPU、DPU、FPGA或其他硬件来使用上述资源来执行训练和/或推理。此外,上述的一个或更多个软件和/或硬件资源可以配置成一种服务,以允许用户训练或执行信息推理,例如图像识别、语音识别或其他人工智能服务。
推理和/或训练逻辑915用于执行与一个或更多个实施例相关联的推理和/或训练操作。本文以下结合图9A和/或图9B提供关于推理和/或训练逻辑915的细节。在至少一个实施例中,推理和/或训练逻辑915可以在系统图10中使用,用于至少部分地基于使用神经网络训练操作、神经网络函数和/或体系架构,或者本文所描述的神经网络用例计算的权重参数推理或预测操作。
这些组件可用于生成网络训练过程中模仿失败案例的合成数据,这可以帮助改进所述网络的性能,同时限制合成数据的量以避免过度拟合。
计算机系统
图11是示出根据至少一个实施例示例性计算机系统的框图,该示例性计算机系统可以是具有互连的设备和组件的系统,片上系统(SOC)或它们的某种形成有处理器的组合1100,该处理器可以包括执行单元以执行指令。在至少一个实施例中,根据本公开,例如本文所述的实施例,计算机系统1100可以包括但不限于组件,例如处理器1102,其执行单元包括逻辑以执行用于过程数据的算法。在至少一个实施例中,计算机系统1100可以包括处理器,例如可从加利福尼亚圣塔克拉拉的英特尔公司(Intel Corporation of Santa Clara,California)获得的处理器家族、XeonTM、XScaleTM和/或StrongARMTM,CoreTM或 NervanaTM微处理器,尽管也可以使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等)。在至少一个实施例中,计算机系统1100可以执行可从华盛顿州雷蒙德市的微软公司(Microsoft Corporation of Redmond,Wash.)获得的WINDOWS操作系统版本,尽管其他操作系统(例如UNIX和Linux)、嵌入式软件和/或图形用户界面也可以使用。
实施例可以用在其他设备中,例如手持设备和嵌入式应用程序。手持设备的一些示例包括蜂窝电话、互联网协议(Internet Protocol)设备、数码相机、个人数字助理(“PDA”)和手持PC。在至少一个实施例中,嵌入式应用程序可以包括微控制器、数字信号处理器(“DSP”)、片上系统、网络计算机(“NetPC”)、机顶盒、网络集线器、广域网(“WAN”)交换机,边缘设备、物联网(“IoT”)设备,或根据至少一个实施例可以执行一个或更多个指令的任何其他系统。
在至少一个实施例中,计算机系统1100可包括但不限于处理器1102,该处理器1102可包括但不限于一个或更多个执行单元1108,以根据本文描述的技术执行机器学习模型训练和/或推理。在至少一个实施例中,计算机系统1100是单处理器台式机或服务器系统,但是在另一实施例中,计算机系统1100可以是多处理器系统。在至少一个实施例中,处理器1102可以包括但不限于复杂指令集计算机(“CISC”)微处理器、精简指令集计算(“RISC”)微处理器、超长指令字(“VLIW”)微处理器、实现指令集组合的处理器,或任何其他处理器设备,例如数字信号处理器。在至少一个实施例中,处理器1102可以耦合到处理器总线1110,该处理器总线1110可以在处理器1102与计算机系统1100中的其他组件之间传输数据信号。
在至少一个实施例中,处理器1102可以包括但不限于1级(“L1”)内部高速缓存存储器(“高速缓存”)1104。在至少一个实施例中,处理器1102可以具有单个内部高速缓存或多级内部缓存。在至少一个实施例中,高速缓存存储器可以驻留在处理器1102的外部。根据特定的实现和需求,其他实施例也可以包括内部和外部高速缓存的组合。在至少一个实施例中,寄存器文件1106可以在各种寄存器中存储不同类型的数据,包括但不限于整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器。
在至少一个实施例中,包括但不限于执行整数和浮点运算的逻辑的执行单元1108,其也位于处理器1102中。在至少一个实施例中,处理器1102还可以包括微码(“ucode”)只读存储器(“ROM”),用于存储某些宏指令的微代码。在至少一个实施例中,执行单元1108可以包括用于处理封装指令集1109的逻辑。在至少一个实施例中,通过将封装指令集1109包括在通用处理器1102的指令集中,以及要执行指令的相关电路,可以使用通用处理器1102中的封装数据来执行许多多媒体应用程序使用的操作。在一个或更多个实施例中,可以通过使用处理器的数据总线的全宽度来在封装的数据上执行操作来加速和更有效地执行许多多媒体应用程序,这可能不需要在该处理器的数据总线上传输较小的数据单元来一次执行一个数据元素的一个或更多个操作。
在至少一个实施例中,执行单元1108也可以用在微控制器、嵌入式处理器、图形设备、DSP和其他类型的逻辑电路中。在至少一个实施例中,计算机系统1100可以包括但不限于存储器1120。在至少一个实施例中,存储器1120可以实施为动态随机存取存储器(“DRAM”)设备、静态随机存取存储器(“SRAM”)设备、闪存设备或其他存储设备。在至少一个实施例中,存储器1120可以存储由处理器1102可以执行的由数据信号表示的指令1119和/或数据1121。
在至少一个实施例中,系统逻辑芯片可以耦合到处理器总线1110和存储器1120。在至少一个实施例中,系统逻辑芯片可以包括但不限于存储器控制器集线器(“MCH”)1116,并且处理器1102可以经由处理器总线1110与MCH 1116通信。在至少一个实施例中,MCH1116可以提供到存储器1120的高带宽存储器路径1118以用于指令和数据存储以及用于图形命令、数据和纹理的存储。在至少一个实施例中,MCH 1116可以在处理器1102、存储器1120和计算机系统1100中的其他组件之间启动数据信号,并且在处理器总线1110、存储器1120和系统I/O接口1122之间桥接数据信号。在至少一个实施例中,系统逻辑芯片可以提供用于耦合到图形控制器的图形端口。在至少一个实施例中,MCH 1116可以通过高带宽存储器路径1118耦合到存储器1120,并且图形/视频卡1112可以通过加速图形端口(Accelerated Graphics Port)(“AGP”)互连1114耦合到MCH 1116。
在至少一个实施例中,计算机系统1100可以使用系统I/O 1122作为专有集线器接口总线来将MCH 1116耦合到I/O控制器集线器(“ICH”)1130。在至少一个实施例中,ICH1130可以通过本地I/O总线提供与某些I/O设备的直接连接。在至少一个实施例中,本地I/O总线可以包括但不限于用于将外围设备连接到存储器1120、芯片组和处理器1102的高速I/O总线。示例可以包括但不限于音频控制器1129、固件集线器(“Flash BIOS”)1128、无线收发器1126、数据存储1124、包含用户输入和键盘接口1125的传统I/O控制器1123、串行扩展端口1127(例如通用串行总线(USB))和网络控制器1134,在一些实施例中其可以包括数据处理单元。数据存储1124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备或其他大容量存储设备。
在至少一个实施例中,图11示出了包括互连的硬件设备或“芯片”的系统,而在其他实施例中,图11可以示出示例性的片上系统(“SoC”)。在至少一个实施例中,设备可以与专有互连、标准化互连(例如,PCIe)或其某种组合互连。在至少一个实施例中,计算机系统1100的一个或更多个组件使用计算快速链路(CXL)互连来互连。
推理和/或训练逻辑915用于执行与一个或更多个实施例相关联的推理和/或训练操作。本文以下结合图9A和/或图9B提供关于推理和/或训练逻辑915的细节。在至少一个实施例中,推理和/或训练逻辑915可以在图11的系统中使用,用于至少部分地基于使用神经网络训练操作、神经网络函数和/或架构或本文所描述的神经网络用例计算的权重参数来推理或预测操作。
这些组件可用于生成网络训练过程中模仿失败案例的合成数据,这可以帮助改进所述网络的性能,同时限制合成数据的量以避免过度拟合。
图12是示出根据至少一个实施例的用于利用处理器1210的电子设备1200的框图。在至少一个实施例中,电子设备1200可以是,例如但不限于,笔记本电脑、塔式服务器、机架服务器、刀片服务器、膝上型计算机、台式机、平板电脑、移动设备、电话、嵌入式计算机、边缘设备、IoT设备、或任何其他合适的电子设备。
在至少一个实施例中,系统1200可以包括,但不限于,处理器1210通信地耦合至任何合适数量或种类的组件、外围设备、模块或设备。在至少一个实施例中,处理器1210使用总线或接口耦合,诸如1℃总线、系统管理总线(“SMBus”)、低引脚数(LPC)总线、串行外围接口(“SPI”)、高清音频(“HDA”)总线、串行高级技术附件(“SATA”)总线、通用串行总线(“USB”)(1、2、3版)或通用异步接收器/发送器(“UART”)总线。在至少一个实施例中,图12示出了系统,该系统包括互连的硬件设备或“芯片”,而在其他实施例中,图12可以示出示例性片上系统(“SoC”)。在至少一个实施例中,图12中所示的设备可以与专有互连线、标准化互连(例如,PCIe)或其某种组合互连。在至少一个实施例中,图12的一个或更多个组件使用计算快速链路(CXL)互连线来互连。
在至少一个实施例中,图12可以包括显示器1224、触摸屏1225、触摸板1230、近场通信单元(“NFC”)1245、传感器集线器1240、热传感器1246、快速芯片组(“EC”)1235、可信平台模块(“TPM”)1238、BIOS/固件/闪存(“BIOS,FW Flash”)1222、DSP 1260、驱动器1220(例如固态磁盘(“SSD”)或硬盘驱动器(“HDD”))、无线局域网单元(“WLAN”)1250、蓝牙单元1252、无线广域网单元(“WWAN”)1256、全球定位系统(GPS)单元1255、相机(“USB 3.0相机”)1254(例如USB 3.0相机)和/或以例如LPDDR3标准实现的低功耗双倍数据速率(“LPDDR”)存储器单元(“LPDDR3”)1215。这些组件可以各自以任何合适的方式实现。
在至少一个实施例中,其他组件可以通过如上讨论的组件通信地耦合到处理器1210。在至少一个实施例中,加速度计1241、环境光传感器(“ALS”)1242、罗盘1243和陀螺仪1244可以可通信地耦合到传感器集线器1240。在至少一个实施例中,热传感器1239、风扇1237、键盘1236和触摸板1230可以通信地耦合到EC 1235。在至少一个实施例中,扬声器1263、耳机1264和麦克风(“mic”)1265可以通信地耦合到音频单元(“音频编解码器和D类放大器”)1262,其又可以通信地耦合到DSP 1260。在至少一个实施例中,音频单元1264可以包括例如但不限于音频编码器/解码器(“编解码器”)和D类放大器。在至少一个实施例中,SIM卡(“SIM”)1257可以通信地耦合到WWAN单元1256。在至少一个实施例中,组件(诸如WLAN单元1250和蓝牙单元1252以及WWAN单元1256)可以被实现为下一代形式因素(NGFF)。
推理和/或训练逻辑915用于执行与一个或更多个实施例相关联的推理和/或训练操作。本文以下结合图9A和/或图9B提供关于推理和/或训练逻辑915的细节。在至少一个实施例中,推理和/或训练逻辑915可以在系统图12中使用,用于至少部分地基于使用神经网络训练操作、神经网络函数和/或架构或本文所述的神经网络用例计算的权重参数来推理或预测操作。
这些组件可用于生成网络训练过程中模仿失败案例的合成数据,这可以帮助改进所述网络的性能,同时限制合成数据的量以避免过度拟合。
图13是根据至少一个实施例的处理系统的框图。在至少一个实施例中,系统1300包括一个或更多个处理器1302和一个或更多个图形处理器1308,并且可以是单处理器台式机系统、多处理器工作站系统或具有大量处理器1302或处理器核心1307的服务器系统。在至少一个实施例中,系统1300是结合在片上系统(SoC)集成电路内的处理平台,以在移动、手持、网络连接或嵌入式设备使用。
在至少一个实施例中,系统1300可以包括或结合在基于服务器的游戏平台中,包括游戏和媒体控制台的游戏控制台、移动游戏控制台、手持游戏控制台或在线游戏控制台。在至少一个实施例中,系统1300是移动电话、智能电话、平板计算设备或移动互联网设备。在至少一个实施例中,处理系统1300还可包括与可穿戴设备耦合或集成在可穿戴设备中,例如智能手表可穿戴设备、智能眼镜设备、增强现实设备或虚拟现实设备。在至少一个实施例中,处理系统1300是电视或机顶盒设备,其具有一个或更多个处理器1302以及由一个或更多个图形处理器1308生成的图形界面。
在至少一个实施例中,一个或更多个处理器1302每个包括一个或更多个处理器核心1307,以处理指令,该指令在被执行时执行针对系统和用户软件的操作。在至少一个实施例中,一个或更多个处理器核心1307中的每一个被配置为处理特定指令集1309。在至少一个实施例中,指令集1309可以促进复杂指令集计算(CISC)、精简指令集计算(RISC),或通过超长指令字(VLIW)进行计算。在至少一个实施例中,处理器核心1307可以各自处理不同的指令集1309,该指令集可以包括有助于仿真其他指令集的指令。在至少一个实施例中,处理器核心1307还可以包括其他处理设备,例如数字信号处理器(DSP)。
在至少一个实施例中,处理器1302包括高速缓存存储器1304。在至少一个实施例中,处理器1302可以具有单个内部高速缓存或多个级别的内部高速缓存。在至少一个实施例中,高速缓存存储器在处理器1302的各个组件之间共享。在至少一个实施例中,处理器1302还使用外部高速缓存(例如,三级(L3)高速缓存或最后一级高速缓存(LLC))(未示出),可以使用已知的高速缓存一致性技术在处理器核心1307之间共享该外部高速缓存。在至少一个实施例中,处理器1302中另外包括寄存器文件1306,处理器可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。在至少一个实施例中,寄存器文件1306可以包括通用寄存器或其他寄存器。
在至少一个实施例中,一个或更多个处理器1302与一个或更多个接口总线1310耦合,以在处理器1302与系统1300中的其他组件之间传输通信信号,例如地址、数据或控制信号。在至少一个实施例中,接口总线1310,在一个实施例中可以是处理器总线,例如直接媒体接口(DMI)总线的版本。在至少一个实施例中,接口1310不限于DMI总线,并且可以包括一个或更多个外围组件互连总线(例如,PCI,PCI Express)、存储器总线或其他类型的接口总线。在至少一个实施例中,一个或更多个处理器1302包括集成存储器控制器1316和平台控制器集线器1330。在至少一个实施例中,存储器控制器1316促进存储器设备与处理系统1300的其他组件之间的通信,而平台控制器集线器(PCH)1330通过本地I/O总线提供到输入/输出(I/O)设备的连接。
在至少一个实施例中,存储器设备1320可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备、相变存储设备或具有适当的性能以用作处理器存储器。在至少一个实施例中,存储设备1320可以用作处理系统1300的系统存储器,以存储数据1322和指令1321,以在一个或更多个处理器1302执行应用程序或过程时使用。在至少一个实施例中,存储器控制器1316还与可选的外部图形处理器1312耦合,其可以与处理器1302中的一个或更多个图形处理器1308通信以执行图形和媒体操作。在至少一个实施例中,显示设备1311可以连接至一个或更多个处理器1302。在至少一个实施例中,显示设备1311可以包括内部显示设备中的一个或更多个,例如在移动电子设备或膝上型设备或通过显示器接口(例如显示端口(DisplayPort)等)连接的外部显示设备中。在至少一个实施例中,显示设备1311可以包括头戴式显示器(HMD),诸如用于虚拟现实(VR)应用或增强现实(AR)应用中的立体显示设备。
在至少一个实施例中,平台控制器集线器1330使外围设备能够通过高速I/O总线连接到存储设备1320和处理器1302。在至少一个实施例中,I/O外围设备包括但不限于音频控制器1346、网络控制器1334、固件接口1328、无线收发器1326、触摸传感器1325、数据存储设备1324(例如,硬盘驱动器、闪存等)。在至少一个实施例中,数据存储设备1324可以经由存储接口(例如,SATA)或经由外围总线来连接,诸如外围组件互连总线(例如,PCI、PCIe)。在至少一个实施例中,触摸传感器1325可以包括触摸屏传感器、压力传感器或指纹传感器。在至少一个实施例中,无线收发器1326可以是Wi-Fi收发器、蓝牙收发器或移动网络收发器,诸如3G、4G或长期演进(LTE)收发器。在至少一个实施例中,固件接口1328使能与系统固件的通信,并且可以是例如统一可扩展固件接口(UEFI)。在至少一个实施例中,网络控制器1334可以启用到有线网络的网络连接。在至少一个实施例中,高性能网络控制器(未示出)与接口总线1310耦合。在至少一个实施例中,音频控制器1346是多通道高清晰度音频控制器。在至少一个实施例中,系统1300包括可选的传统(legacy)I/O控制器1340,用于将传统(例如,个人系统2(PS/2))设备耦合到系统。在至少一个实施例中,平台控制器集线器1330还可以连接到一个或更多个通用串行总线(USB)控制器1342,该控制器连接输入设备,诸如键盘和鼠标1343组合、相机1344或其他USB输入设备。
在至少一个实施例中,存储器控制器1316和平台控制器集线器1330的实例可以集成到离散的外部图形处理器中,例如外部图形处理器1312。在至少一个实施例中,平台控制器集线器1330和/或存储器控制器1316可以在一个或更多个处理器1302的外部。例如,在至少一个实施例中,系统1300可以包括外部存储器控制器1316和平台控制器集线器1330,其可以配置成在与处理器1302通信的系统芯片组中的存储器控制器集线器和外围控制器集线器。
推理和/或训练逻辑915用于执行与一个或更多个实施例相关联的推理和/或训练操作。本文以下结合图9A和/或图9B提供关于推理和/或训练逻辑915的细节。在至少一个实施例中,部分或全部推理和/或训练逻辑915可以结合到图形处理器1400中。例如,在至少一个实施例中,本文描述的训练和/或推理技术可以使用一个或更多个ALU,所述ALU体现在图形处理器中。此外,在至少一个实施例中,本文描述的推理和/或训练操作可以使用除图9A或图9B所示的逻辑之外的逻辑来完成。在至少一个实施例中,权重参数可以存储在片上或片外存储器和/或寄存器(示出或未示出)中,其配置图形处理器的ALU,以执行一种或更多种本文所描述的机器学习算法、神经网络架构、用例或训练技术。
这些组件可用于生成网络训练过程中模仿失败案例的合成数据,这可以帮助改进所述网络的性能,同时限制合成数据的量以避免过度拟合。
图14是根据至少一个实施例的具有一个或更多个处理器核心1402A-1402N、集成存储器控制器1414和集成图形处理器1408的处理器1400的框图。在至少一个实施例中,处理器1400可以包含附加核心,多达并包括以虚线框表示的附加核心1402N。在至少一个实施例中,每个处理器核心1402A-1402N包括一个或更多个内部高速缓存单元1404A-1404N。在至少一个实施例中,每个处理器核心还可以访问一个或更多个共享高速缓存单元1406。
在至少一个实施例中,内部高速缓存单元1404A-1404N和共享高速缓存单元1406表示处理器1400内的高速缓存存储器层次结构。在至少一个实施例中,高速缓存存储器单元1404A-1404N可以包括每个处理器核心内的至少一级指令和数据高速缓存以及共享中级高速缓存中的一级或更多级缓存,例如2级(L2)、3级(L3)、4级(L4)或其他级别的高速缓存,其中将外部存储器之前的最高级别的高速缓存归类为LLC。在至少一个实施例中,高速缓存一致性逻辑维持各种高速缓存单元1406和1404A-1404N之间的一致性。
在至少一个实施例中,处理器1400还可包括一组一个或更多个总线控制器单元1416和系统代理核心1410。在至少一个实施例中,一个或更多个总线控制器单元1416管理一组外围总线,例如一个或更多个PCI或PCIe总线。在至少一个实施例中,系统代理核心1410为各种处理器组件提供管理功能。在至少一个实施例中,系统代理核心1410包括一个或更多个集成存储器控制器1414,以管理对各种外部存储器设备(未示出)的访问。
在至少一个实施例中,一个或更多个处理器核心1402A-1402N包括对多线程同时进行的支持。在至少一个实施例中,系统代理核心1410包括用于在多线程处理期间协调和操作核心1402A-1402N的组件。在至少一个实施例中,系统代理核心1410可以另外包括电源控制单元(PCU),该电源控制单元包括用于调节处理器核心1402A-1402N和图形处理器1408的一个或更多个电源状态的逻辑和组件。
在至少一个实施例中,处理器1400还包括用于执行图处理操作的图形处理器1408。在至少一个实施例中,图形处理器1408与共享高速缓存单元1406和包括一个或更多个集成存储器控制器1414的系统代理核心1410耦合。在至少一个实施例中,系统代理核心1410还包括用于驱动图形处理器输出到一个或更多个耦合的显示器的显示器控制器1411。在至少一个实施例中,显示器控制器1411也可以是经由至少一个互连与图形处理器1408耦合的独立模块,或者可以集成在图形处理器1408内。
在至少一个实施例中,基于环的互连单元1412用于耦合处理器1400的内部组件。在至少一个实施例中,可以使用替代性互连单元,例如点对点互连、交换互连或其他技术。在至少一个实施例中,图形处理器1408经由I/O链路1413与环形互连1412耦合。
在至少一个实施例中,I/O链路1413代表多种I/O互连中的至少一种,包括促进各种处理器组件与高性能嵌入式存储器模块1418(例如eDRAM模块)之间的通信的封装I/O互连。在至少一个实施例中,处理器核心1402A-1402N和图形处理器1408中的每一个使用嵌入式存储器模块1418作为共享的最后一级高速缓存。
在至少一个实施例中,处理器核心1402A-1402N是执行公共指令集架构的同质核心。在至少一个实施例中,处理器核心1402A-1402N在指令集架构(ISA)方面是异构的,其中一个或更多个处理器核心1402A-1402N执行公共指令集,而一个或更多个其他处理器核心1402A-1402N执行公共指令集的子集或不同指令集。在至少一个实施例中,就微架构而言,处理器核心1402A-1402N是异构的,其中具有相对较高功耗的一个或更多个核心与具有较低功耗的一个或更多个功率核心耦合。在至少一个实施例中,处理器1400可以在一个或更多个芯片上实现或被实现为SoC集成电路。
推理和/或训练逻辑915用于执行与一个或更多个实施例相关联的推理和/或训练操作。本文以下结合图9A和/或图9B提供关于推理和/或训练逻辑915的细节。在至少一个实施例中,部分或全部推理和/或训练逻辑915可以结合到图形处理器1400中。例如,在至少一个实施例中,本文描述的训练和/或推理技术可以使用一个或更多个ALU,所述ALU体现在图14中的图形处理器1408、一个或更多个图形核心1402A-1402N、或其他组件中。此外,在至少一个实施例中,本文描述的推理和/或训练操作可以使用除图9A或图9B所示的逻辑之外的逻辑来完成。在至少一个实施例中,权重参数可以存储在片上或片外存储器和/或寄存器(示出或未示出)中,其配置图形处理器1400的ALU以执行一种或更多种本文所描述的机器学习算法、神经网络架构、用例或训练技术。
这些组件可用于生成网络训练过程中模仿失败案例的合成数据,这可以帮助改进所述网络的性能,同时限制合成数据的量以避免过度拟合。
虚拟化的计算平台
图15是根据至少一个实施例的生成和部署图像处理和推理管线的过程1500的示例数据流图。在至少一个实施例中,过程1500可以被部署用于成像设备、处理设备、和/或一个或更多个设施1502处的其他设备类型。过程1500可以在训练系统1504和/或部署系统1506内执行。在至少一个实施例中,训练系统1504可以用于执行机器学习模型(例如,神经网络、对象检测算法、计算机视觉算法等)的训练、部署和实现,以用于部署系统1506。在至少一个实施例中,部署系统1506可以被配置为在分布式计算环境中卸载处理和计算资源,以减少设施1502的基础设施需求。在至少一个实施例中,管线中的一个或更多个应用程序在应用程序执行期间,可以使用或调用部署系统1506的服务(例如,推理、可视化、计算、AI等)。
在至少一个实施例中,在高级处理和推理管线中使用的一些应用程序可以使用机器学习模型或其他AI来执行一个或更多个处理步骤。在至少一个实施例中,可以使用在设施1502处生成(并存储在设施1502处的一个或更多个图片存档和通信系统(PACS)服务器上)的数据1508(例如成像数据)在设施1502处训练机器学习模型,可以使用来自另一个或更多个设施的成像或测序数据1508来训练机器学习模型,或其组合。在至少一个实施例中,训练系统1504可以用于提供应用程序、服务和/或其他资源,以生成用于部署系统1506的工作的、可部署的机器学习模型。
在至少一个实施例中,模型注册表1524可以由对象存储支持,该对象存储可以支持版本控制和对象元数据。在至少一个实施例中,可以从云平台内通过例如云存储(例如,图16的云1626)兼容的应用程序编程接口(API)来访问对象存储。在至少一个实施例中,模型注册表1524内的机器学习模型可以由与API交互的系统的开发者或合作伙伴上传、列出、修改或删除。在至少一个实施例中,API可以提供对方法的访问,所述方法允许具有适当凭证的用户将模型与应用程序相关联,使得模型可以作为应用程序的容器化实例化的执行的一部分来执行。
在至少一个实施例中,训练管线1604(图16)可以包括以下情形:其中设施1502正在训练他们自己的机器学习模型,或者具有需要优化或更新的现有机器学习模型。在至少一个实施例中,可以接收由成像设备、测序设备和/或其他类型设备生成的成像数据1508。在至少一个实施例中,一旦接收到成像数据1508,AI辅助注释1510就可以用于帮助生成与成像数据1508相对应的注释,以用作机器学习模型的地面实况数据。在至少一个实施例中,AI辅助注释1510可以包括一个或更多个机器学习模型(例如,卷积神经网络(CNN)),可以对该机器学习模型进行训练,以生成对应于某些类型的成像数据1508(例如,来自某些设备)的注释。在至少一个实施例中,然后AI辅助注释1510可以被直接使用,或者可以使用注释工具进行调整或微调,以生成地面实况数据。在至少一个实施例中,AI辅助注释1510、标记的临床数据1512或其组合可以用作训练机器学习模型的地面实况数据。在至少一个实施例中,经训练的机器学习模型可以被称为输出模型1516,并且可以由部署系统1506使用,如本文所述。
在至少一个实施例中,训练管线1604(图16)可以包括以下情形:其中设施1502需要机器学习模型,以用于执行用于部署系统1506中的一个或更多个应用程序的一个或更多个处理任务,但是设施1502当前可能没有这种机器学习模型(或者可能没有为此目的而优化的、高效的或有效的模型)。在至少一个实施例中,可以从模型注册表1524中选择现有的机器学习模型。在至少一个实施例中,模型注册表1524可以包括机器学习模型,其被训练为对成像数据执行各种不同的推理任务。在至少一个实施例中,可以在来自不同的设施(例如,位于远处的设施)而不是设施1502的成像数据上训练模型注册表1524中的机器学习模型。在至少一个实施例中,机器学习模型可能已经在来自一个位置、两个位置或任意数量的位置的成像数据上进行训练。在至少一个实施例中,当在来自特定位置的成像数据上进行训练时,可以在该位置处进行训练,或者至少以保护成像数据的机密性或限制成像数据从场外转移的方式进行训练。在至少一个实施例中,一旦在一个位置处训练了模型或部分地训练了模型,则可以将机器学习模型添加到模型注册表1524。在至少一个实施例中,然后可以在任意数量的其他设施处对机器学习模型进行重新训练或更新,经重新训练或更新的模型可以在模型注册表1524中使用。在至少一个实施例中,然后可以从模型注册表1524中选择机器学习模型(并称为输出模型1516),并且可以在部署系统1506中,以执行用于部署系统的一个或更多个应用程序的一个或更多个处理任务。
在至少一个实施例中,训练管线1604(图16),场景可包括设施1502需要机器学习模型,以用于执行用于部署系统1506中的一个或更多个应用程序的一个或更多个处理任务,但是设施1502当前可能没有这样的机器学习模型(或者可能没有为此目的的优化的、高效的或有效的模型)。在至少一个实施例中,由于用于训练机器学习模型的训练数据的种群差异、稳健性,训练数据异常的多样性,和/或训练数据的其他问题,从模型注册表1524中选择的机器学习模型可能不会针对在设施1502处生成的成像数据1508进行微调或优化。在至少一个实施例中,AI辅助注释1510可以用于帮助生成与成像数据1508相对应的注释,以用作重新训练或更新机器学习模型的地面实况数据。在至少一个实施例中,标记的数据1512可以用作训练机器学习模型的地面实况数据。在至少一个实施例中,重新训练或更新机器学习模型可以称为模型训练1514。在至少一个实施例中,模型训练1514(例如AI辅助注释1510,标记的临床数据1512或其组合)可以用作重新训练或更新机器学习模型的地面实况数据。在至少一个实施例中,如本文描述的,训练的机器学习模型可以被称为输出模型1516,并且可以由部署系统1506使用。
在至少一个实施例中,部署系统1506可以包括软件1518、服务1520、硬件1522和/或其他组件、特征和功能。在至少一个实施例中,部署系统1506可以包括软件“栈”,以使软件1518可以构建在服务1520的顶部上,并且可以使用服务1520来执行一些或全部处理任务,并且服务1520和软件1518可以构建在硬件1522的顶部上,并使用硬件1522来执行部署系统1506的处理、存储和/或其他计算任务。在至少一个实施例中,软件1518可以包括任意数量的不同容器,其中每个容器可以执行应用程序的实例化。在至少一个实施例中,每个应用程序可以在高级处理和推理管线中执行一个或更多个处理任务(例如,推理、对象检测、特征检测、分割、图像增强、校准等)。在至少一个实施例中,除了接收和配置成像数据以供每个容器使用和/或在通过管线处理后由设施1502使用的容器以外,还可以基于对处理成像数据1508想要的或所需的不同容器的选择来定义高级处理和推理管线(例如,以将输出转换回可用的数据类型。在至少一个实施例中,软件1518内的容器组合(例如,其构成管线)可以被称为虚拟仪器(如本文中更详细地描述的),并且虚拟仪器可以利用服务1520和硬件1522来执行容器中实例化的应用程序的部分或全部处理任务。
在至少一个实施例中,数据处理管线可以响应于推理请求(例如,来自部署系统1506的用户的请求)接收特定格式的输入数据(例如,成像数据1508)。在至少一个实施例中,输入数据可以代表由一个或更多个成像设备生成的一个或更多个图像、视频和/或其他数据表示。在至少一个实施例中,数据可以作为数据处理管线的一部分进行预处理,以准备数据用于由一个或更多个应用程序处理。在至少一个实施例中,可以在管线的一个或更多个推理任务或其他处理任务的输出上执行后处理,以准备下一个应用程序的输出数据和/或准备输出数据,以供用户发送和/或使用(例如作为对推理请求的响应)。在至少一个实施例中,推理任务可以由一个或更多个机器学习模型执行,例如经训练或部署的神经网络,所述模型可以包括训练系统1504的输出模型1516。
在至少一个实施例中,数据处理管线的任务可以封装在容器中,每个容器表示能够引用机器学习模型的应用程序和虚拟化计算环境的离散、全功能实例化。在至少一个实施例中,容器或应用程序可被发布到容器注册表(本文更详细地描述)的私有(例如,有限访问)区域中,并且经训练或部署的模型可存储在模型注册表1524中,并与一个或更多个应用程序相关联。在至少一个实施例中,应用程序的图像(例如,容器图像)可在容器注册表中使用,并且一旦用户从容器注册表中选择图像以用于在管线中部署,则该图像可用于生成用于应用程序的实例化的容器,以供用户的系统使用。
在至少一个实施例中,开发者(例如,软件开发者、临床医生、医生等)可以开发、发布和存储应用程序(例如,作为容器),用于对所提供的数据执行图像处理和/或推理。在至少一个实施例中,可以使用与系统相关联的软件开发工具包(SDK)来执行开发、发布和/或存储(例如,以确保开发的应用程序和/或容器符合系统或与系统兼容)。在至少一个实施例中,所开发的应用程序可以使用SDK在本地测试(例如,在第一设施处,对来自第一设施的数据进行测试),所述SDK作为系统(例如图16中的系统1600)可以支持至少某些服务1520。在至少一个实施例中,由于DICOM对象可能包含一到数百个图像或其他数据类型,并且由于数据的变化,因此开发者可负责管理(例如,设置构造,用于将预处理构建到应用程序中等)传入的数据的提取和准备。在至少一个实施例中,一旦通过系统1600的验证(例如,为了准确性),应用程序便会在容器注册表中可用,以供用户选择和/或实现,以对用户的设施(例如第二设施)处的数据执行一个或更多个处理任务。
在至少一个实施例中,开发者随后可以通过网络共享应用程序或容器,以供系统(例如,图16的系统1600)的用户访问和使用。在至少一个实施例中,可以将完成并经过验证的应用程序或容器存储在容器注册表中,并且可以将相关的机器学习模型存储在模型注册表1524中。在至少一个实施例中,请求实体(其提供推理或图像处理请求)可以浏览容器注册表和/或模型注册表1524,以获得应用程序、容器、数据集、机器学习模型等,选择所需的元素组合以包含在数据处理管线中,并提交图像处理请求。在至少一个实施例中,请求可以包括执行请求所必需的输入数据(以及在一些示例中与患者相关的数据),和/或可以包括对在处理请求时要执行的应用程序和/或机器学习模型的选择。在至少一个实施例中,然后可以将请求传递到部署系统1506的一个或更多个组件(例如,云),以执行数据处理管线的处理。在至少一个实施例中,由部署系统1506进行的处理可以包括引用从容器注册表和/或模型注册表1524中选择的元素(例如,应用程序、容器、模型等)。在至少一个实施例中,一旦通过管线生成结果,结果可返回给用户以供参考(例如,用于在本地、本地工作站或终端上执行的查看应用程序套件中进行查看)。
在至少一个实施例中,为了帮助处理或执行管线中的应用程序或容器,可以利用服务1520。在至少一个实施例中,服务1520可以包括计算服务、人工智能(AI)服务、可视化服务和/或其他服务类型。在至少一个实施例中,服务1520可以提供软件1518中的一个或更多个应用程序所共有的功能,因此可以将功能抽象为可以被应用程序调用或利用的服务。在至少一个实施例中,由服务1520提供的功能可以动态且更有效地运行,同时还可以通过允许应用程序并行地处理数据(例如,使用图16中的并行计算平台1630)来很好地缩放。在至少一个实施例中,不是要求共享服务1520提供的相同功能的每个应用程序都必须具有服务1520的相应实例,而是可以在各种应用程序之间和之中共享服务1520。在至少一个实施例中,作为非限制性示例,服务可包括可用于执行检测或分割任务的推理服务器或引擎。在至少一个实施例中,可以包括模型训练服务,其可以提供机器学习模型训练和/或重新训练能力。在至少一个实施例中,可以进一步包括数据增强服务,其可以提供GPU加速的数据(例如,DICOM、RIS、CIS、符合REST、RPC、原始等)提取、调整大小、缩放和/或其他增强。在至少一个实施例中,可以使用可视化服务,其可以添加图像渲染效果(例如光线跟踪、光栅化、去噪、锐化等),以向二维(2D)和/或三维(3D)模型添加真实感。在至少一个实施例中,可以包括虚拟仪器服务,其为虚拟仪器的管线内的其他应用程序提供波束赋形、分割、推理、成像和/或支持。
在至少一个实施例中,在服务1520包括AI服务(例如,推理服务)的情况下,作为应用程序执行的一部分,可以通过调用(例如,作为API调用)推理服务(例如,推理服务器),以执行一个或更多个机器学习模型或其处理,来执行一个或更多个机器学习模型。在至少一个实施例中,在另一应用程序包括用于分割任务的一个或更多个机器学习模型的情况下,应用程序可以调用推理服务来执行机器学习模型,以用于执行与分割任务相关联的一个或更多个处理操作。在至少一个实施例中,实现高级处理和推理管线的软件1518,其包括分割应用程序和异常检测应用程序,可以被流水线化,因为每个应用程序可以调用相同的推理服务来执行一个或更多个推理任务。
在至少一个实施例中,硬件1522可包括GPU、CPU、DPU、图形卡、AI/深度学习系统(例如,AI超级计算机,诸如NVIDIA的DGX)、云平台或其组合。在至少一个实施例中,可以使用不同类型的硬件1522,以为部署系统1506中的软件1518和服务1520提供高效的、专门构建的支持。在至少一个实施例中,可以实现使用GPU处理来在AI/深度学习系统内、云系统中、和/或部署系统1506的其他处理组件中进行本地处理(例如,在设施1502处),以提高图像处理和生成的效率、准确性和效能。在至少一个实施例中,作为非限制性示例,可以针对关于深度学习、机器学习、和/或高性能计算的GPU处理优化软件1518和/或服务1520。在至少一个实施例中,部署系统1506和/或训练系统1504的计算环境中的至少一些可以在具有GPU优化的软件(例如,NVIDIA DGX系统的硬件和软件组合)的数据中心、一个或更多个超级计算机或高性能计算机系统中执行。在至少一个实施例中,如本文所述,硬件1522可包括任意数量的GPU,所述GPU可被调用以并行执行数据处理。在至少一个实施例中,云平台还可包括用于深度学习任务的GPU优化执行、机器学习任务或其他计算任务的GPU处理。在至少一个实施例中,云平台还可包括DPU处理来将通过网络和/或通过网络控制器或其他网络接口接收的数据直接发送至一个或更多个GPU(例如一个或更多个GPU的存储器)。在至少一个实施例中,可以使用AI/深度学习超级计算机和/或GPU优化的软件(例如,如在NVIDIA的DGX系统上提供的)作为硬件抽象和缩放平台,来执行云平台(例如,NVIDIA的NGC)。在至少一个实施例中,云平台可以在多个GPU上集成应用程序容器集群系统或协调系统(例如,KUBERNETES),以实现无缝缩放和负载均衡。
图16是根据至少一个实施例的用于生成和部署成像部署管线的示例系统1600的系统图。在至少一个实施例中,系统1600可以用于实现图15的过程1500和/或其他过程,包括高级处理和推理管线。在至少一个实施例中,系统1600可以包括训练系统1504和部署系统1506。在至少一个实施例中,可以使用软件1518、服务1520和/或硬件1522,来实现训练系统1504和部署系统1506,如本文所述。
在至少一个实施例中,系统1600(例如,训练系统1504和/或部署系统1506)可以在云计算环境中(例如,使用云1626)实现。在至少一个实施例中,系统1600可以在本地实现(关于医疗服务设施),或者作为云计算资源和本地计算资源的组合来实现。在至少一个实施例中,可以通过制定安全措施或协议,将对云1626中的API的访问权限限制为授权用户。在至少一个实施例中,安全协议可以包括网络令牌,其可以由认证(例如,AuthN、AuthZ、Gluecon等)服务签名,并且可以携带适当的授权。在至少一个实施例中,虚拟仪器的API(本文中描述)或系统1600的其他实例可以被限制为已被审核或授权用于交互的一组公共IP。
在至少一个实施例中,系统1600的各个组件可以使用多种不同网络类型中的任何一种在彼此之间进行通信,所述不同网络类型包括但不限于经由有线和/或无线通信协议的局域网(LAN)和/或广域网(WAN)。在至少一个实施例中,系统1600的设施和组件之间的通信(例如,用于发送推理请求、用于接收推理请求的结果等)可以通过一个或更多个数据总线、无线数据协议(Wi-Fi)、有线数据协议(例如以太网)等进行传送。
在至少一个实施例中,类似于本文关于图15所描述的,训练系统1504可以执行训练管线1604。在至少一个实施例中,其中部署系统1506将在部署管线1610中使用一个或更多个机器学习模型,训练管线1604可用于训练或重新训练一个或更多个(例如,预训练的)模型,和/或实现一个或更多个预训练模型1606(例如,无需重新训练或更新)。在至少一个实施例中,作为训练管线1604的结果,可以生成输出模型1516。在至少一个实施例中,训练管线1604可以包括任意数量的处理步骤,诸如但不限于成像数据(或其他输入数据)的转换或适配。在至少一个实施例中,对于由部署系统1506使用的不同的机器学习模型,可以使用不同的训练管线1604。在至少一个实施例中,类似于关于图15描述的第一示例的训练管线1604可用于第一机器学习模型,类似于关于图15描述的第二示例的训练管线1604可用于第二机器学习模型,类似于关于图15描述的第三示例的训练管线1604可用于第三机器学习模型。在至少一个实施例中,可以根据每个相应机器学习模型的要求来使用训练系统1504内任务的任何组合。在至少一个实施例中,一个或更多个机器学习模型可能已经被训练并准备好用于部署,因此训练系统1504可能不会对机器学习模型进行任何处理,并且一个或更多个机器学习模型可以由部署系统1506来实现。
在至少一个实施例中,根据实现或实施例,输出模型1516和/或预训练模型1606可包括任何类型的机器学习模型。在至少一个实施例中并且不限于此,系统1600使用的机器学习模型可以包括使用线性回归、逻辑回归、决策树、支持向量机(SVM)、朴素贝叶斯、k-最近邻(Knn)、k均值聚类、随机森林、降维算法、梯度提升算法、神经网络(例如,自动编码器、卷积、递归、感知器、长/短期记忆(LSTM)、Hopfield、Boltzmann、深层信念、反卷积、生成对抗、液体状态机等),和/或其他类型的机器学习模型。
在至少一个实施例中,训练管线1604可以包括AI辅助注释,如本文关于至少图17B更详细描述的。在至少一个实施例中,可以通过任何数量的技术来生成标记的数据1512(例如,传统注释)。在至少一个实施例中,在一些示例中可以在绘图程序(例如,注释程序)、计算机辅助设计(CAD)程序、标记程序、适用于生成地面实况的注释或标签的另一类型的应用程序中、和/或可以手绘,生成标签或其他注释。在至少一个实施例中,地面实况数据可以被合成产生(例如,从计算机模型或渲染生成)、真实产生(例如,从真实世界数据设计和生成)、机器自动产生(例如,使用特征分析和学习从数据中提取特征,然后生成标签)、人工注释(例如,标记器或注释专家,定义标签的位置)和/或其组合。在至少一个实施例中,对于成像数据1508(或机器学习模型使用的其他数据类型)的每个实例,可以存在由训练系统1504生成的相应的地面实况数据。在至少一个实施例中,可以作为部署管线1610的一部分执行AI辅助注释;补充或代替训练管线1604中包括的AI辅助注释。在至少一个实施例中,系统1600可以包括多层平台,所述多层平台可以包括诊断应用程序(或其他应用程序类型)的软件层(例如软件1518),其可以执行一个或更多个医学成像和诊断功能。在至少一个实施例中,系统1600可以通信地耦合到(例如,经由加密链路)一个或更多个设施的PACS服务器网络。在至少一个实施例中,系统1600可被配置为从PACS服务器访问和引用数据,以执行操作,例如训练机器学习模型、部署机器学习模型、图像处理、推理和/或其他操作。
在至少一个实施例中,软件层可以被实现为安全的、加密的和/或经认证的API,通过所述API可以从外部环境(例如,设施1502)援引(invoke)(例如,调用(call))应用程序或容器。在至少一个实施例中,应用程序随后可以调用或执行一个或更多个服务1520,以执行与各自的应用程序相关联的计算、AI或可视化任务,并且软件1518和/或服务1520可以利用硬件1522以有效和高效的方式执行处理任务。
在至少一个实施例中,部署系统1506可以执行部署管线1610。在至少一个实施例中,部署管线1610可以包括任意数量的应用程序,所述应用程序可以是顺序的、非顺序的,或者以其他方式应用于成像数据(和/或其他数据类型)-包括AI辅助注释,所述成像数据由成像设备、测序设备、基因组学设备等生成,如上所述。在至少一个实施例中,如本文所述,用于个体设备的部署管线1610可以被称为用于设备的虚拟仪器(例如,虚拟超声仪器、虚拟CT扫描仪器、虚拟测序仪器等)。在至少一个实施例中,对于单个设备,可以存在不止一个部署管线1610,这取决于从设备生成的数据所期望的信息。在至少一个实施例中,在期望从MRI机器检测到异常的情况下,可以存在第一部署管线1610,并且在期望从MRI机器的输出进行图像增强的情况下,可以存在第二部署管线1610。
在至少一个实施例中,图像生成应用程序可以包括包含使用机器学习模型的处理任务。在至少一个实施例中,用户可能希望使用他们自己的机器学习模型,或者从模型注册表1524中选择机器学习模型。在至少一个实施例中,用户可以实现他们自己的机器学习模型或选择机器学习模型,以包含在执行处理任务的应用程序中。在至少一个实施例中,应用程序可以是可选择的和可定制的,并且通过定义应用程序的构造,针对特定用户的应用程序的部署和实现被渲染为更加无缝的用户体验。在至少一个实施例中,通过利用系统1600的其他特征(例如服务1520和硬件1522),部署管线1610可以更加用户友好,提供更容易的集成,并且产生更准确、高效和及时的结果。
在至少一个实施例中,部署系统1506可以包括用户接口1614(例如,图形用户接口、Web接口等),所述用户接口可以被用于选择要包括在部署管线1610中的应用程序、布置应用程序、修改或改变应用程序或其参数或构造、在设置和/或部署期间使用部署管线1610以及与其交互,和/或以其他方式与部署系统1506交互。在至少一个实施例中,尽管没有关于训练系统1504示出,但是用户接口1614(或不同的用户接口)可用于选择在部署系统1506中使用的模型、用于选择用于在训练系统1504中训练或重新训练的模型,和/或用于以其他方式与训练系统1504交互。
在至少一个实施例中,除了应用程序协调系统1628之外,还可以使用管线管理器1612来管理部署管线1610的应用程序或容器与服务1520和/或硬件1522之间的交互。在至少一个实施例中,管线管理器1612可以被配置为促进从应用程序到应用程序、从应用程序到服务1520,和/或从应用程序或服务到硬件1522的交互。在至少一个实施例中,尽管示出为包括在软件1518中,这并不旨在进行限制,并且在一些示例中(例如,如图14所示),管线管理器1612可以被包括在服务1520中。在至少一个实施例中,应用程序协调系统1628(例如,Kubernetes、DOCKER等)可以包括容器协调系统,其可以将应用程序分组到容器中,作为用于协调、管理、缩放和部署的逻辑单元。在至少一个实施例中,通过将来自部署管线1610的应用程序(例如,重建应用程序、分割应用程序等)与各个容器相关联,每个应用程序可以在自包含的环境(例如,在内核级)中执行,以提高速度和效率。
在至少一个实施例中,每个应用程序和/或容器(或其映像)可以被单独开发、修改和部署(例如,第一用户或开发者可以开发、修改和部署第一应用程序,第二用户或开发者可以开发、修改和部署与第一用户或开发者分开的第二应用程序),这可以允许专注并关注单个应用程序和/或容器的任务,而不受另一个应用程序或容器的任务的阻碍。在至少一个实施例中,管线管理器1612和应用程序协调系统1628可以辅助不同容器或应用程序之间的通信和协作。在至少一个实施例中,只要每个容器或应用程序的预期输入和/或输出是系统已知的(例如,基于应用程序或容器的构造),则应用程序协调系统1628和/或管线管理器1612可以促进每个应用程序或容器之间和之中的通信以及资源的共享。在至少一个实施例中,由于部署管线1610中的一个或更多个应用程序或容器可以共享相同的服务和资源,因此应用程序协调系统1628可以在各个应用程序或容器之间和之中进行协调、负载均衡,并确定服务或资源的共享。在至少一个实施例中,调度器可用于跟踪应用程序或容器的资源需求、这些资源的当前使用或计划使用,以及资源可用性。因此,在至少一个实施例中,考虑到系统的需求和可用性,调度器可以将资源分配给不同的应用程序,并在应用程序之间和之中分配资源。在一些示例中,调度器(和/或应用程序协调系统1628的其他组件)可以基于施加在系统上的约束(例如,用户约束)来确定资源可用性和分布,例如服务质量(QoS)、对数据输出的迫切需求(例如,以确定是执行实时处理还是延迟处理)等。
在至少一个实施例中,由部署系统1506中的应用程序或容器利用并由其共享的服务1520,可以包括计算服务1616、AI服务1618、可视化服务1620和/或其他服务类型。在至少一个实施例中,应用程序可以调用(例如,执行)一个或更多个服务1520,以执行针对应用程序的处理操作。在至少一个实施例中,应用程序可以利用计算服务1616来执行超级计算或其他高性能计算(HPC)任务。在至少一个实施例中,可以利用一个或更多个计算服务1616来执行并行处理(例如,使用并行计算平台1630),以通过一个或更多个应用程序和/或单个应用程序的一个或更多个任务基本上同时地处理数据。在至少一个实施例中,并行计算平台1630(例如,NVIDIA的CUDA)可以在GPU(GPGPU)(例如,GPU 1622)上实现通用计算。在至少一个实施例中,并行计算平台1630的软件层可以提供对GPU的虚拟指令集和并行计算元素的访问,以执行计算内核。在至少一个实施例中,并行计算平台1630可以包括存储器,并且在一些实施例中,可以在多个容器之间和之中,和/或在单个容器内的不同处理任务之间和之中共享存储器。在至少一个实施例中,可以为多个容器和/或容器内的多个进程生成进程间通信(IPC)调用,以使用来自并行计算平台1630的共享存储器段的相同数据(例如,其中一应用程序或多个应用程序的多个不同阶段正在处理相同的信息)。在至少一个实施例中,不是复制数据并将数据移动到存储器中的不同位置(例如,读/写操作),而是可以将存储器相同位置中的相同数据用于任何数量的处理任务(例如,在同一时间、不同时间等)。在至少一个实施例中,由于作为处理的结果数据被用于生成新数据,因此数据的新位置的该信息可以在各个应用程序之间存储和共享。在至少一个实施例中,数据的位置以及经更新或修改的数据的位置可以是如何理解容器中的有效负载的定义的一部分。
在至少一个实施例中,可以利用AI服务1618来执行推理服务,该推理服务用于执行与应用程序相关联的机器学习模型(例如,任务为执行应用程序的一个或更多个处理任务)。在至少一个实施例中,AI服务1618可以利用AI系统1624来执行机器学习模型(例如,诸如CNN之类的神经网络)以用于分割、重建、对象检测、特征检测、分类和/或其他推理任务。在至少一个实施例中,部署管线1610的应用程序可以使用来自训练系统1504的一个或更多个输出模型1516和/或应用程序的其他模型,来对成像数据执行推理。在至少一个实施例中,使用应用程序协调系统1628(例如,调度器)进行推理的两个或更多个示例可以是可用的。在至少一个实施例中,第一类别可以包括高优先级/低延时路径,其可以实现更高服务水平协议,例如用于在紧急情况下对紧急请求执行推理,或者在诊断过程中用于放射科医生。在至少一个实施例中,第二类别可以包括标准优先级路径,其可用于可能不紧急的请求或者可以在稍后的时间执行分析的情况。在至少一个实施例中,应用程序协调系统1628可以基于优先级路径来分配资源(例如,服务1520和/或硬件1522),以用于AI服务1618的不同推理任务。
在至少一个实施例中,共享存储器可以被安装到系统1600中的AI服务1618。在至少一个实施例中,共享存储器可以操作为高速缓存(或其他存储设备类型),并且可以用于处理来自应用程序的推理请求。在至少一个实施例中,当提交推理请求时,部署系统1506的一组API实例可以接收请求,并且可以选择一个或更多个实例(例如,为了最佳拟合、为了负载均衡等)来处理请求。在至少一个实施例中,为了处理请求,可以将请求输入到数据库中,如果尚未在高速缓存中,则可以从模型注册表1524定位机器学习模型,验证步骤可以确保将适当的机器学习模型加载到高速缓存中(例如,共享存储),和/或可以将模型的副本保存到高速缓存中。在至少一个实施例中,如果应用程序尚未运行或没有足够的应用程序的实例,则可使用调度器(例如,管线管理器1612的调度器)来启动在请求中引用的应用程序。在至少一个实施例中,如果尚未启动推理服务器来执行模型,则可以启动推理服务器。每个模型可以启动任意数量的推理服务器。在至少一个实施例中,在将推理服务器聚类的拉(pull)模型中,每当负载均衡有利时,就可以将模型高速缓存。在至少一个实施例中,推理服务器可以静态加载到相应的分布式服务器中。
在至少一个实施例中,可以使用在容器中运行的推理服务器来执行推理。在至少一个实施例中,推理服务器的实例可以与模型(并且可选地与模型的多个版本)相关联。在至少一个实施例中,如果在接收到对模型执行推理的请求时推理服务器的实例不存在,则可以加载新实例。在至少一个实施例中,当启动推理服务器时,可以将模型传递到推理服务器,使得可以使用相同的容器来服务不同的模型,只要推理服务器作为不同的实例运行即可。
在至少一个实施例中,在应用程序执行期间,可以接收对给定应用程序的推理请求,并且可以加载(如果尚未加载的话)容器(例如,托管推理服务器的实例),以及可以调用启动程序。在至少一个实施例中,容器中的预处理逻辑可以(例如,使用CPU和/或GPU和/或DPU)对传入的数据进行加载、解码和/或执行任何附加的预处理。在至少一个实施例中,一旦数据准备好进行推理,容器就可以根据需要对数据进行推理。在至少一个实施例中,这可以包括对一个图像(例如,手部X射线)的单个推理调用,或可要求对数百个图像(例如,胸部CT)进行推理。在至少一个实施例中,应用程序可在完成之前总结结果,其可以包括但不限于单个置信度得分、像素级分割、体素级分割、生成可视化或生成文本以总结结果。在至少一个实施例中,可以为不同的模型或应用程序分配不同的优先级。例如,一些模型可具有实时(TAT<1分钟)优先级,而其他模型可具有较低的优先级(例如,TAT<12分钟)。在至少一个实施例中,模型执行时间可以从请求机构或实体进行测量,并且可以包括合作网络遍历时间以及推理服务的执行时间。
在至少一个实施例中,请求在服务1520和推理应用程序之间的传送可以隐藏在软件开发工具包(SDK)后面,并且可以通过队列提供鲁棒的传输。在至少一个实施例中,将通过API将请求放置在队列中,以用于个体应用程序/租户ID组合,并且SDK将从队列中拉取请求并将请求提供给应用程序。在至少一个实施例中,在SDK将从中拾取队列的环境中,可以提供队列的名称。在至少一个实施例中,通过队列的异步通信可能有用,因为它可以允许应用程序的任何实例在其可用时拾取工作。可以通过队列将结果传送回去,以确保没有数据丢失。在至少一个实施例中,队列还可以提供对工作进行分割的能力,因为最高优先级的工作可以进入与应用程序的大多数实例连接的队列,而最低优先级的工作可以进入与单个实例连接的队列,所述实例按照接收到的顺序处理任务。在至少一个实施例中,应用程序可以在GPU加速的实例上运行,所述实例在云1626中生成,并且推理服务可以在GPU上执行推理。
在至少一个实施例中,可以利用可视化服务1620来生成用于查看应用程序和/或部署管线1610输出的可视化。在至少一个实施例中,可视化服务1620可以利用GPU 1622来生成可视化。在至少一个实施例中,可视化服务1620可以实现诸如光线追踪之类的渲染效果,以生成更高质量的可视化。在至少一个实施例中,可视化可以包括但不限于2D图像渲染、3D体渲染、3D体重建、2D层析切片、虚拟现实显示、增强现实显示等。在至少一个实施例中,可以使用虚拟化环境来生成虚拟交互显示或环境(例如,虚拟环境),以供系统用户(例如,医生、护士、放射科医生等)进行交互。在至少一个实施例中,可视化服务1620可以包括内部可视化器、电影和/或其他渲染或图像处理能力或功能(例如,光线追踪、光栅化、内部光学器件等)。
在至少一个实施例中,硬件1522可以包括GPU 1622、AI系统1624、云1626和/或用于执行训练系统1504和/或部署系统1506的任何其他硬件。在至少一个实施例中,GPU 1622(例如,NVIDIA的TESLA和/或QUADRO GPU)可包括可用于执行计算服务1616、AI服务1618、可视化服务1620、其他服务和/或软件1518的任何特征或功能的处理任务的任意数量的GPU。例如,对于AI服务1618,GPU 1622可用于对成像数据(或机器学习模型使用的其他数据类型)执行预处理,对机器学习模型的输出执行后处理和/或执行推理(例如以执行机器学习模型)。在至少一个实施例中,云1626、AI系统1624和/或系统1600的其他组件可以使用GPU1622。在至少一个实施例中,云1626可以包括用于深度学习任务的GPU优化的平台。在至少一个实施例中,AI系统1624可以使用GPU,并且可以使用一个或更多个AI系统1624来执行云1626(或者任务为深度学习或推理的至少部分)。同样,尽管硬件1522被示出为离散组件,但这并不意图是限制,并且硬件1522的任何组件可以与硬件1522的任何其他组件组合,或由硬件1522的任何其他组件利用。
在至少一个实施例中,AI系统1624可包括专门构建的计算系统(例如,超级计算机或HPC),该计算系统配置用于推理、深度学习、机器学习和/或其他人工智能任务。在至少一个实施例中,除了DPU、CPU、RAM、存储装置和/或其他组件、特征或功能之外,AI系统1624(例如,NVIDIA的DGX)还可以包括可以使用多个GPU 1622来执行分GPU优化的软件(例如,软件栈)。在至少一个实施例中,可以在云1626中(例如,在数据中心中)实现一个或更多个AI系统1624,以执行系统1600的一些或全部基于AI的处理任务。
在至少一个实施例中,云1626可以包括GPU加速的基础设施(例如,NVIDIA的NGC),其可以提供用于执行系统1600的处理任务的GPU优化的平台。在至少一个实施例中,云1626可以包括AI系统1624,其用于执行系统1600的一个或更多个基于AI的任务(例如,作为硬件抽象和缩放平台)。在至少一个实施例中,云1626可以与利用多个GPU的应用程序协调系统1628集成,以实现应用程序和服务1520之间和之中的无缝缩放和负载均衡。在至少一个实施例中,如本文所述,云1626可以负责执行系统1600的至少一些服务1520,包括计算服务1616、AI服务1618和/或可视化服务1620。在至少一个实施例中,云1626可以执行大小批的推理(例如,执行NVIDIA的TENSOR RT),提供加速的并行计算API和平台1630(例如,NVIDIA的CUDA),执行应用程序协调系统1628(例如,KUBERNETES),提供图形渲染API和平台(例如,用于光线跟踪,2D图形、3D图形和/或其他渲染技术以产生更高质量的电影效果),和/或可以为系统1600提供其他功能。
图17A示出了根据至少一个实施例的用于训练、重新训练或更新机器学习模型的过程1700的数据流图。在至少一个实施例中,可以使用作为非限制性示例的图16的系统1600来执行过程1700。在至少一个实施例中,过程1700可以利用系统1600的服务1520和/或硬件1522,如本文所述。在至少一个实施例中,由过程1700生成的精炼模型1712可以由部署系统1506针对部署管线1610中的一个或更多个容器化的应用程序执行。
在至少一个实施例中,模型训练1514可包括使用新的训练数据(例如,新的输入数据(诸如客户数据集1706),和/或与输入数据相关联的新的地面实况数据)重新训练或更新初始模型1704(例如,预训练模型)。在至少一个实施例中,为了重新训练或更新初始模型1704,可以重置或删除初始模型1704的输出或损失层,和/或用更新的或新的输出或损失层代替。在至少一个实施例中,初始模型1704可以具有从先前的训练中保留下来的先前精细调整的参数(例如,权重和/或偏差),因此训练或重新训练1514可能不需要花费与从头开始训练模型一样长的时间或不需要那么多的处理。在至少一个实施例中,在模型训练1514期间,通过重置或替换初始模型1704的输出或损失层,在新的客户数据集1706(例如图15的图像数据1508)上生成预测时,可以基于与输出或损失层的精度相关联的损失计算,更新和重新调整新数据集的参数。
在至少一个实施例中,可以将经预训练的模型1606存储在数据存储或注册表中(例如,图15的模型注册表1524)。在至少一个实施例中,经预训练的模型1606可能已经至少部分地在除了执行过程1700的设施之外的一个或更多个设施处被训练。在至少一个实施例中,为了保护患者、受试者或不同设施的客户的隐私和权利,经预训练的模型1606可能已经使用本地生成的客户或患者数据在本地进行了训练。在至少一个实施例中,可以使用云1626和/或其他硬件1522来训练经预训练的模型1606,但是机密的、受隐私保护的患者数据可以不被传送到云1626的任何组件(或其他非本地硬件)、由其使用或由其访问。在至少一个实施例中,如果使用来自不止一个设施的患者数据来训练经预训练的模型1606,则在来自另一设施的患者或客户数据上进行训练之前,经预训练的模型1606可能已经针对每个设施进行了单独训练。在至少一个实施例中,例如在客户或患者数据已发布隐私问题(例如,通过放弃,用于实验用途等),或者其中客户或患者数据包括在公共数据集中的情况下,来自任意数量的设施的客户或患者数据可以用于在本地和/或外部训练经预训练的模型1606,例如在数据中心中或其他云计算基础设施中。
在至少一个实施例中,在选择应用程序以在部署管线1610中使用时,用户还可以选择用于特定应用程序的机器学习模型。在至少一个实施例中,用户可能没有模型以使用,因此用户可以选择要与应用程序一起使用的经预训练的模型1606。在至少一个实施例中,经预训练的模型1606可能没有被优化用于在用户设施的客户数据集1706上生成准确的结果(例如,基于患者多样性、人口统计、所使用的医学成像设备的类型等)。在至少一个实施例中,在将经预训练的模型1606部署到部署管线1610中以与一个或更多个应用程序一起使用之前,经预训练的模型1606可以被更新、重新训练和/或微调,以用于在各个设施处使用。
在至少一个实施例中,用户可以选择要更新、重新训练和/或微调的经预训练的模型1606,并且经预训练的模型1606可以称为过程1700中训练系统1504的初始模型1704。在至少一个实施例中,客户数据集1706(例如,成像数据、基因组数据、测序数据或由设施处的设备生成的其他数据类型)可用于对初始模型1704执行模型训练1514(其可包括但不限于传递学习),以生成精炼模型1712。在至少一个实施例中,可以由训练系统1504生成与客户数据集1706相对应的地面实况数据。在至少一个实施例中,可以至少部分地由临床医生、科学家、医生、从业者在设施处生成地面实况数据(例如,如图15中的标记的临床数据1512)。
在至少一个实施例中,在一些示例中可以使用AI辅助注释1510来生成地面实况数据。在至少一个实施例中,AI辅助注释1510(例如,使用AI辅助注释SDK实现)可以利用机器学习模型(例如,神经网络)来生成用于客户数据集的建议或预测的地面实况数据。在至少一个实施例中,用户1710可以在计算设备1708上的用户界面(图形用户界面(GUI))内使用注释工具。
在至少一个实施例中,用户1710可以经由计算设备1708与GUI交互,以编辑或微调(自动)注释。在至少一个实施例中,多边形编辑特征可以用于将多边形的顶点移动到更精确或微调的位置。
在至少一个实施例中,一旦客户数据集1706具有相关联的地面实况数据,则地面实况数据(例如,来自AI辅助注释、手动标记等)可以在模型训练1514期间用于生成精炼模型1712。在至少一个实施例中,客户数据集1706可以被应用到初始模型1704任意次数,并且地面实况数据可以用于更新初始模型1704的参数,直到对于精炼模型1712达到可接受的精度水平为止。在至少一个实施例中,一旦生成精炼模型1712,就可以在设施处的一个或更多个部署管线1610内部署精炼模型1712,以用于执行关于医学成像数据的一个或更多个处理任务。
在至少一个实施例中,可以将精炼模型1712上传到模型注册表1524中的经预训练的模型1606,以由另一个设施选择。在至少一个实施例中,他的过程可以在任意数量的设施处完成,使得可以在新数据集上对精炼模型1712进一步精炼任意次数,以生成更通用的模型。
图17B是根据至少一个实施例的用于利用经预训练的注释模型来增强注释工具的客户端-服务器架构1732的示例图示。在至少一个实施例中,可以基于客户端-服务器架构1732来实例化AI辅助注释工具1736。在至少一个实施例中,成像应用程序中的注释工具1736可以帮助放射线医生,例如识别器官和异常。在至少一个实施例中,成像应用程序可以包括软件工具,作为非限制性示例,所述软件工具帮助用户1710识别原始图像1734中(例如,在3D MRI或CT扫描中)的特定感兴趣器官上的几个极值点,并接收特定器官的所有2D切片的自动注释结果。在至少一个实施例中,结果可以作为训练数据1738存储在数据存储中,并且用作(例如但不限于)用于训练的地面实况数据。在至少一个实施例中,当计算设备1708发送用于AI辅助注释1510的极值点时,例如,深度学习模型可以接收该数据作为输入并返回分割器官或异常的推理结果。在至少一个实施例中,预实例化的注释工具(例如图17B中的AI辅助注释工具1736B)可以通过对服务器(诸如注释助手服务器1740)进行API调用(例如API调用1744)来增强,注释助手服务器1740可包括存储在例如注释模型注册表中的一组经预训练的模型1742。在至少一个实施例中,注释模型注册表可以存储经预训练的模型1742(例如,机器学习模型,诸如深度学习模型),其被预训练以对特定器官或异常执行AI辅助注释。可以通过使用训练管线1604来进一步更新这些模型。在至少一个实施例中,随着添加新的标记的临床数据1512,可以随时间改进预安装的注释工具。
这些组件可用于生成网络训练过程中模仿失败案例的合成数据,这可以帮助改进所述网络的性能并限制合成数据的量以避免过度拟合。
其他其他变型在本公开的精神内。因此,尽管公开的技术易于进行各种修改和替代构造,但是某些示出的其实施例在附图中示出并且已经在上面进行了详细描述。然而,应理解,无意将公开内容限制为所公开的一种或更多种特定形式,而是相反,其意图是涵盖落入如所附权利要求书所定义的本公开内容的精神和范围内的所有修改、替代构造和等同物。
除非另有说明或显然与上下文矛盾,否则在描述所公开的实施例的上下文中(特别是在所附权利要求的上下文中),术语“一”和“一个”和“该”以及类似指代的使用应被解释为涵盖单数和复数,而不是作为术语的定义。除非另有说明,否则术语“包括”、“具有”、“包含”和“含有”应被解释为开放式术语(意味着“包括但不限于”)。术语“连接”(在未经修改时指的是物理连接)应解释为部分或全部包含在内、附接到或连接在一起,即使有某些介入。除非本文另外指出,否则本文中对数值范围的引用仅旨在用作分别指代落入该范围内的每个单独值的简写方法,并且每个单独值都被并入说明书中,就如同其在本文中被单独叙述一样。除非另外指出或与上下文矛盾,否则术语“集”(例如“项目集”)或“子集”的使用应解释为包括一个或更多个成员的非空集合。此外,除非另外指出或与上下文矛盾,否则术语相应集的“子集”不一定表示对应集的适当子集,而是子集和对应集可以相等。
除非以其他方式明确指出或与上下文明显矛盾,否则诸如“A,B和C中的至少一个”或“A,B与C中的至少一个”形式的短语之类的连接语在上下文中理解为通常用来表示项目、条款等,其可以是A或B或C,也可以是A和B和C集的任何非空子集。例如,在具有三个成员的集的说明性示例中,连接短语“A,B和C中的至少一个”和“A,B与C中的至少一个”是指以下任意集:{A},{B},{C},{A,B},{A,C},{B,C},{A,B,C}。因此,这种连接语言通常不旨在暗示某些实施例要求存在A中的至少一个,B中的至少一个和C中的至少一个。另外,除非另有说明或与上下文矛盾,否则术语“多个”表示复数的状态(例如,“多个项目”表示多个项目)。多个项目至少为两个项目,但如果明确指示或通过上下文指示,则可以更多。此外,除非另有说明或从上下文中可以清楚得知,否则短语“基于”是指“至少部分基于”而不是“仅基于”。
除非本文另外指出或与上下文明显矛盾,否则本文描述的过程的操作可以任何合适的顺序执行。在至少一个实施例中,诸如本文所述的那些过程(或其变形和/或其组合)之类的过程在配置有可执行指令的一个或更多个计算机系统的控制下执行,并且被实现为代码(例如,可执行指令,一个或更多个计算机程序或一个或更多个应用程序),该代码通过硬件或其组合在一个或更多个处理器上共同执行。在至少一个实施例中,代码以例如计算机程序的形式存储在计算机可读存储介质上,该计算机程序包括可由一个或更多个处理器执行的多个指令。在至少一个实施例中,计算机可读存储介质是非暂时性计算机可读存储介质,其排除了暂时性信号(例如,传播的瞬态电或电磁传输),但包括非暂时性数据存储电路(例如,缓冲区、高速缓存和队列)。在至少一个实施例中,代码(例如,可执行代码或源代码)被存储在其上存储有可执行指令的一组一个或更多个非暂时性计算机可读存储介质(或用于存储可执行指令的其他存储器)上,该可执行指令在由计算机系统的一个或更多个处理器执行时(即,作为被执行的结果),使得计算机系统执行本文所述的操作。在至少一个实施例中,一组非暂时性计算机可读存储介质包括多个非暂时性计算机可读存储介质,并且多个非暂时性计算机可读存储介质中的个体非暂时性存储介质中的一个或更多个缺少全部代码,而是多个非暂时性计算机可读存储介质共同存储全部代码。在至少一个实施例中,可执行指令被执行,以使得不同的指令由不同的处理器执行,例如,非暂时性计算机可读存储介质存储指令,并且主中央处理单元(“CPU”)执行一些指令,而图形处理单元(“GPU”)执行其他指令。在至少一个实施例中,计算机系统的不同组件具有单独的处理器,并且不同的处理器执行指令的不同子集。
因此,在至少一个实施例中,计算机系统被配置为实现单独地或共同地执行本文所述的过程的操作的一个或更多个服务,并且这样的计算机系统被配置有使能实施操作的适用的硬件和/或软件。此外,实现本公开的至少一个实施例的计算机系统是单个设备,并且在另一实施例中是分布式计算机系统,其包括以不同方式操作的多个设备,使得分布式计算机系统执行本文所述的操作,并且使得单个设备不执行所有操作。
本文提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅旨在更好地阐明本公开的实施例,并且不对公开的范围构成限制,除非另有要求。说明书中的任何语言都不应被解释为表示任何未要求保护的要素对于实践公开内容是必不可少的。
本文引用的所有参考文献,包括出版物、专利申请和专利,均通过引用并入本文,其程度就如同每个参考文献被单独且具体地指示为以引用的方式并入本文并且其全部内容在本文中阐述一样。
在说明书和权利要求中,可以使用术语“耦合”和“连接”以及它们的派生词。应当理解,这些术语可能不旨在作为彼此的同义词。相反,在特定示例中,“连接”或“耦合”可用于指示两个或更多个元件彼此直接或间接物理或电接触。“耦合”也可能意味着两个或更多个元素彼此不直接接触,但仍彼此协作或交互。
除非另有明确说明,否则可以理解,在整个说明书中,诸如“处理”、“计算”、“计算”、“确定”等之类的术语,是指计算机或计算系统或类似的电子计算设备的动作和/或过程,其将计算系统的寄存器和/或存储器中表示为物理量(例如电子)的数据处理和/或转换为类似表示为计算系统的存储器、寄存器或其他此类信息存储、传输或显示设备中的物理量的其他数据。
以类似的方式,术语“处理器”可以指处理来自寄存器和/或存储器的电子数据并将该电子数据转换成可以存储在寄存器和/或存储器中的其他电子数据的任何设备或存储器的一部分。作为非限制性示例,“处理器”可以是CPU或GPU。“计算平台”可以包括一个或更多个处理器。如本文所使用的,“软件”进程可以包括例如随时间执行工作的软件和/或硬件实体,诸如任务、线程和智能代理。同样,每个过程可以指代多个过程,以连续地或间歇地顺序地或并行地执行指令。术语“系统”和“方法”在本文中可以互换使用,只要系统可以体现一种或更多种方法,并且方法可以被认为是系统。
在本文件中,可以参考获得、获取、接收或将模拟或数字数据输入子系统、计算机系统或计算机实现的机器中。可以通过多种方式来完成获得、获取、接收或输入模拟和数字数据的过程,例如通过接收作为函数调用或对应用程序编程接口的调用的参数的数据。在一些实现方式中,可以通过经由串行或并行接口传输数据来完成获得、获取、接收或输入模拟或数字数据的过程。在另一实现方式中,可以通过经由计算机网络将数据从提供实体传输到获取实体来完成获得、获取、接收或输入模拟或数字数据的过程。也可以参考提供、输出、传送、发送或渲染模拟或数字数据。在各种示例中,提供、输出、传送、发送或渲染模拟或数字数据的过程可以通过将数据作为函数调用的输入或输出参数、应用程序编程接口或进程间通信机制的参数进行传输来实现。
尽管上面的讨论阐述了所描述的技术的示例实现,但是其他架构可以用于实现所描述的功能,并且旨在落入本公开的范围内。此外,尽管出于讨论的目的在上面定义了具体的职责分配,但是根据情况,可以以不同的方式分配和划分各种功能和职责。
此外,尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求书所要求保护的主题不必限于所描述的特定特征或动作。而是,公开了特定的特征和动作作为实现权利要求的示例性形式。
Claims (22)
1.一种方法,包括:
由应用程序托管平台接收对用于在第一客户端设备处运行的应用程序的编译的着色器程序的初始请求;
由所述应用程序托管平台确定所请求的编译的着色器程序是否存储在与所述应用程序相关联的着色器高速缓存中,所述着色器高速缓存由所述应用程序托管平台托管;
响应于确定所请求的编译的着色器程序并未存储在所述着色器高速缓存中,从所述第一客户端设备接收用于所述应用程序的所述编译的着色器程序;
响应于从所述第一客户端设备接收到所述编译的着色器程序,将所接收的编译的着色器程序存储在与所述应用程序相关联的所述着色器高速缓存中;
接收对用于在第二客户端设备处运行的所述应用程序的所述编译的着色器程序的后续请求;以及
将包括所述编译的着色器程序的后续消息发送至所述第二客户端设备。
2.根据权利要求1所述的方法,进一步包括:
获得与所述第一客户端设备相关联的第一哈希值,其中所述第一哈希值是基于所述第一客户端设备的第一状态数据生成的;以及
利用所述着色器高速缓存的存储有所述编译的着色器程序的部分的地址的指示来更新着色器高速缓存数据结构的条目以包括所述第一哈希值。
3.根据权利要求2所述的方法,其中所述第一状态数据包括以下各项中的至少之一:所述第一客户端设备的软件状态的指示或者所述第一客户端设备的硬件状态的指示。
4.根据权利要求3所述的方法,其中所述第一客户端设备的所述软件状态包括以下各项中的至少之一:所述第一客户端设备的驱动程序状态或者用于所接收的编译的着色器程序的源代码。
5.根据权利要求2所述的方法,进一步包括:
响应于接收到对用于在所述第二客户端设备处运行的所述应用程序的所述编译的着色器程序的所述后续请求,获得与所述第二客户端设备相关联的第二哈希值,其中所述第二哈希值是基于所述第二客户端设备的第二状态数据生成的;
确定所述第二哈希值对应于在所述着色器高速缓存数据结构中的条目的所述第一哈希值;以及
从所述着色器高速缓存数据结构中的所述条目中指示的所述着色器高速缓存的所述部分的所述地址检索所述编译的着色器程序。
6.根据权利要求1所述的方法,其中将所接收的编译的着色器程序存储在所述着色器高速缓存中包括:
响应于确定所接收的编译的着色器程序对应于存储在用于所述着色器高速缓存的暂存缓冲区中的附加的编译的着色器程序,更新计数器,所述计数器鉴于所接收的编译的着色器程序与所述附加的编译的着色器程序相关联;
确定与所述附加的编译的着色器程序相关联的更新的计数器超过阈值;以及
将所接收的编译的着色器程序或者所述附加的编译的着色器程序中的至少一个添加到与所述应用程序相关联的所述着色器高速缓存中。
7.根据权利要求6所述的方法,进一步包括:
响应于确定所接收的编译的着色器程序不对应于存储在所述暂存缓冲区中的附加的编译的着色器程序,将所接收的编译的着色器程序添加到所述暂存缓冲区中;以及
初始化计数器,所述计数器与所述暂存缓冲区中的所接收的编译的着色器程序相关联。
8.根据权利要求1所述的方法,其中所述应用程序托管平台包括多个节点,所述多个节点被配置为包括与所述应用程序相关联的所述着色器高速缓存的多个部分,并且其中对所述编译的着色器程序的所述初始请求由所述多个节点中的第一节点接收。
9.根据权利要求8所述的方法,进一步包括:
确定所述初始请求的所述编译的着色器程序不包括在由所述多个节点中的所述第一节点托管的所述着色器高速缓存的第一部分中;
识别所述多个节点中的第二节点,所述第二节点托管包括所述初始请求的所述编译的着色器程序的所述着色器高速缓存的第二部分;以及
将所述初始请求转发至所识别的第二节点。
10.根据权利要求1所述的方法,进一步包括:
响应于确定所请求的编译的着色器程序存储在所述着色器高速缓存中,将所述编译的着色器程序发送至所述第一客户端设备。
11.根据权利要求1所述的方法,其中所述第一客户端设备或者所述第二客户端设备中的至少一个包括使用云计算环境实例化的虚拟机。
12.根据权利要求1所述的方法,进一步包括:
获得与所述应用程序相关联的附加着色器程序的源代码;
生成所述附加着色器程序的编译版本;以及
将所述附加着色器程序的所述编译版本存储在与所述应用程序相关联的所述着色器高速缓存中。
13.根据权利要求12所述的方法,其中用于所述附加着色器程序的所述源代码是响应于确定所述第一客户端设备或者所述第二客户端设备中的一个或更多个的硬件状态或软件状态中的至少一个已经从第一版本修改为第二版本而获得的,并且其中所述附加着色器程序的所述编译版本与所述硬件状态或所述软件状态中的至少一个的所述第二版本兼容。
14.一种系统,包括:
存储器设备;以及
一个或更多个处理设备,通信地耦合至所述存储器设备,用于:
在由应用程序托管平台托管的应用程序的运行时期间,检测到着色器程序被引用;
将对与所述应用程序相关联的着色器高速缓存中的所述着色器程序的编译版本的初始请求发送至所述应用程序托管平台,所述着色器高速缓存由所述应用程序托管平台托管;
响应于所述初始请求,从所述应用程序托管平台接收消息;
确定接收的消息是否包括所述着色器高速缓存中的所述着色器程序的编译版本;
响应于确定接收的消息不包括所述着色器高速缓存中的所述着色器程序的编译版本,编译所述着色器程序以生成所述着色器程序的所述编译版本;以及
将用于将所述着色器程序的所述编译版本存储在与所述应用程序相关联的所述着色器高速缓存中的后续请求发送至所述应用程序托管平台。
15.根据权利要求14所述的系统,其中所述一个或更多个处理设备进一步用于:
响应于确定接收的消息包括所述着色器高速缓存中的所述着色器程序的所述编译版本,将所述着色器程序的所述编译版本存储在所述存储器设备中;以及
执行所述着色器程序的所述编译版本。
16.根据权利要求14所述的系统,其中所述一个或更多个处理设备进一步用于:
响应于将对所述着色器高速缓存中的所述着色器程序的所述编译版本的所述初始请求发送至所述应用程序托管平台,启动编译操作来编译所述着色器程序以生成所述着色器程序的所述编译版本;
响应于所述初始请求确定在从所述应用程序托管平台接收到所述消息之前完成了所述编译操作;
将用于取消对所述着色器高速缓存中的所述着色器程序的所述编译版本的所述初始请求的附加请求发送至所述应用程序托管平台;以及
执行在所述编译操作执行期间生成的所述着色器程序的所述编译版本。
17.根据权利要求16所述的系统,其中所述一个或更多个处理设备进一步用于:
在所述编译操作完成之前,响应于所述初始请求而从所述应用程序托管平台接收所述消息;
生成指令以终止所述编译操作;以及
执行包括在从所述应用程序托管平台接收的消息中的所述着色器程序的所述编译版本。
18.根据权利要求14所述的系统,其中所述一个或更多个处理设备进一步用于:
在初始化所述应用程序期间,接收不会从所述应用程序托管平台请求的一组着色器程序的指示;
响应于检测到在所述应用程序的运行时期间所述着色器程序被引用,确定所述着色器程序包括在所述一组着色器程序中;以及
编译所述着色器程序以生成所述着色器程序的所述编译版本。
19.根据权利要求14所述的系统,其中发送至所述应用程序托管平台的所述初始请求包括一个或更多个哈希值,所述一个或更多个哈希值基于所述系统的状态数据或用于所述着色器程序的源代码中的至少一个来生成,所述状态数据包括所述系统的软件状态或所述系统的硬件状态中的至少一个。
20.根据权利要求14所述的系统,其中所述一个或更多个处理设备进一步用于:
将所述着色器程序的所述编译版本的副本存储在所述存储器设备中;
检测到由所述应用程序托管平台托管的所述应用程序被终止;以及
擦除所述存储器设备中的所述着色器程序的所述编译版本的所述副本。
21.根据权利要求14所述的系统,其中所述系统进一步包括使用云计算环境实例化的虚拟机。
22.一种非暂态计算机可读介质,其上存储有指令,其中所述指令,当由处理设备执行时,使得所述处理设备:
接收对用于在第一客户端设备处运行的应用程序的编译的着色器程序的初始请求;
确定所请求的编译的着色器程序是否存储在与所述应用程序相关联的着色器高速缓存中,所述着色器高速缓存由应用程序托管平台托管;
响应于确定所请求的编译的着色器程序没有存储在所述着色器高速缓存中,从所述第一客户端设备接收用于所述应用程序的所述编译的着色器程序;
响应于从所述第一客户端设备接收到所述编译的着色器程序,将所接收的编译的着色器程序存储在与所述应用程序相关联的所述着色器高速缓存中;
接收对用于在第二客户端设备处运行的所述应用程序的所述编译的着色器程序的后续请求;以及
将包括所述编译的着色器程序的后续消息发送至所述第二客户端设备。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/226,568 | 2021-04-09 | ||
US17/226,568 US11726755B2 (en) | 2021-04-09 | 2021-04-09 | Caching of compiled shader programs in a cloud computing environment |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115202664A true CN115202664A (zh) | 2022-10-18 |
Family
ID=83361806
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210313520.2A Pending CN115202664A (zh) | 2021-04-09 | 2022-03-28 | 云计算环境中的编译的着色器程序的高速缓存 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11726755B2 (zh) |
CN (1) | CN115202664A (zh) |
DE (1) | DE102022108108A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118247128A (zh) * | 2024-04-12 | 2024-06-25 | 摩尔线程智能科技(北京)有限责任公司 | 着色器运行数据采集方法、装置、系统、介质及处理器 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230077865A1 (en) * | 2021-09-13 | 2023-03-16 | Nvidia Corporation | Compiled shader program caches in a cloud computing environment |
US11726756B2 (en) * | 2021-12-17 | 2023-08-15 | Google Llc | Shared compilation cache verification system |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10554788B2 (en) * | 2014-09-19 | 2020-02-04 | Splunk Inc. | Remote management of application settings |
US10255651B2 (en) * | 2015-04-15 | 2019-04-09 | Channel One Holdings Inc. | Methods and systems for generating shaders to emulate a fixed-function graphics pipeline |
KR102407228B1 (ko) * | 2016-05-24 | 2022-06-08 | 삼성에스디에스 주식회사 | 서비스 제공 시스템 및 방법 |
US10423463B1 (en) * | 2016-06-09 | 2019-09-24 | Amazon Technologies, Inc. | Computational task offloading for virtualized graphics |
US10668378B2 (en) * | 2018-01-26 | 2020-06-02 | Valve Corporation | Distributing shaders between client machines for precaching |
EP3701489B1 (en) * | 2018-04-10 | 2022-10-26 | Google LLC | Memory management in gaming rendering |
US11004251B2 (en) * | 2018-11-27 | 2021-05-11 | Advanced Micro Devices, Inc. | Automatic configuration of knobs to optimize performance of a graphics pipeline |
US20210065441A1 (en) * | 2019-08-29 | 2021-03-04 | Advanced Micro Devices, Inc. | Machine learning-based technique for execution mode selection |
US11069119B1 (en) * | 2020-02-28 | 2021-07-20 | Verizon Patent And Licensing Inc. | Methods and systems for constructing a shader |
-
2021
- 2021-04-09 US US17/226,568 patent/US11726755B2/en active Active
-
2022
- 2022-03-28 CN CN202210313520.2A patent/CN115202664A/zh active Pending
- 2022-04-05 DE DE102022108108.7A patent/DE102022108108A1/de active Pending
-
2023
- 2023-08-01 US US18/363,654 patent/US20230376291A1/en active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118247128A (zh) * | 2024-04-12 | 2024-06-25 | 摩尔线程智能科技(北京)有限责任公司 | 着色器运行数据采集方法、装置、系统、介质及处理器 |
Also Published As
Publication number | Publication date |
---|---|
US11726755B2 (en) | 2023-08-15 |
US20220326920A1 (en) | 2022-10-13 |
DE102022108108A1 (de) | 2022-10-13 |
US20230376291A1 (en) | 2023-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112685069B (zh) | 用于机器学习模型的实时更新的方法和系统 | |
US11995883B2 (en) | Scene graph generation for unlabeled data | |
CN114365156A (zh) | 用于神经网络的迁移学习 | |
US20210406673A1 (en) | Interface translation using one or more neural networks | |
US20210397971A1 (en) | Recommendation generation using one or more neural networks | |
US11726755B2 (en) | Caching of compiled shader programs in a cloud computing environment | |
CN114266347A (zh) | 神经网络的无监督域适应 | |
CN113034698A (zh) | 使用一个或更多个神经网络生成全景图 | |
WO2020236596A1 (en) | Motion prediction using one or more neural networks | |
US20210346806A1 (en) | Reaction prediction using one or more neural networks | |
US20240312125A1 (en) | Adaptive temporal image filtering for rendering realistic illumination | |
WO2022010892A1 (en) | Image generation using one or more neural networks | |
US20240192946A1 (en) | Application management platform for hyper-converged cloud infrastructures | |
CN116070557A (zh) | 使用强化学习的数据路径电路设计 | |
CN117122929A (zh) | 识别用于后处理的应用程序缓冲器及在辅助应用程序中的重用 | |
KR20220083755A (ko) | 하나 이상의 신경망을 사용하는 이미지 생성 | |
CN116206042A (zh) | 空间哈希一致采样 | |
CN117725986A (zh) | 使用大型语言模型的自然语言处理应用 | |
US20230077865A1 (en) | Compiled shader program caches in a cloud computing environment | |
US20230281907A1 (en) | Offloading shader program compilation | |
US20230367620A1 (en) | Pre-loading software applications in a cloud computing environment | |
US20240272924A1 (en) | Accelerated emulation device backend software update with short downtime | |
US20240303203A1 (en) | Cache management using eviction priority based on memory reuse | |
US11972281B2 (en) | Just in time compilation using link time optimization | |
US11983928B1 (en) | Dynamically composable object tracker configuration for intelligent video analytics 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 |