平码五不中公式规律
  • / 21

虚拟化环境中的智能GPU调度.pdf

关 键 ?#21097;?/dt>
虚拟 环境 中的 智能 GPU 调度
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201480079240.3

申请日:

2014.06.26

公开号:

CN106663021A

公开日:

2017.05.10

当前法律状态:

实审

有效性:

审中

法?#19978;?#24773;: 实质审查的生效IPC(主分类):G06F 9/455申请日:20140626|||公开
IPC分类号: G06F9/455 主分类号: G06F9/455
申请人: 英特尔公司
发明人: 田坤; Z·吕; Y·Z·东
地址: 美国加利福尼亚
优?#28909;ǎ?/td>
专利代理机构: 永新专利商标代理有限公司 72002 代理人: 王英;刘瑜
PDF完整版?#30053;兀?/td> PDF?#30053;?/a>
法律状态
申请(专利)号:

CN201480079240.3

授权公告号:

|||

法律状态公告日:

2017.06.06|||2017.05.10

法律状态类型:

实质审查的生效|||公开

摘要

用于在虚拟化环境中调度针对图形处理单元(GPU)的工作负荷提交的技术包括在计算设备中实施的GPU调度器。虚拟化环境包括被配置有本地图形驱动器的多个不同的虚拟机。GPU调度器从不同的虚拟机接收GPU命令、动态地选择调度策略、并且调度GPU命令以用于由GPU处理。

权利要求书

1.一种用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的计算设备,所述
计算设备包括:
用于建立包括多个虚拟机的虚拟化环境的虚拟化服务,其中,所述虚拟机中的每个虚
拟机包括用于与所述GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器;
以及
GPU调度器模块,其用于:
评?#28010;?#26377;虚拟机的所有命令缓冲器中的GPU命令;
响应于对所述GPU命令的评估的输出,从多个不同的调度策略中动态地选择调度策略;
以及
根据动态地选择的调度策略来调度所述GPU命令中的至少一个GPU命令,以用于由所述
GPU进行处理。
2.根据权利要求1所述的计算设备,包括命令扫描器模块,所述命令扫描器模块用于:
扫描虚拟机的所述所有命令缓冲器中的GPU命令、产生指示在同一虚拟机的不同命令缓冲
器中的GPU命令之间的跨缓冲器?#35272;?#24615;的数据、并且基于指示跨缓冲器?#35272;?#24615;的所述数据
而动态地选择所述调度策略。
3.根据权利要求1或权利要求2所述的计算设备,包括命令扫描器模块,所述命令扫描
器模块用于?#33655;?#25551;虚拟机的所述所有命令缓冲器中的GPU命令、确定针对所述GPU命令中的
每个GPU命令的命令类型、并且基于GPU命令的命令类型而动态地选择针对GPU命令的所述
调度策略。
4.根据权利要求1或权利要求2所述的计算设备,其中,所述GPU调度器模块用于:根据
动态地选择的调度策略来调度所述虚拟机中一个虚拟机的GPU命令,并且根据不同的调度
策略来调度所述虚拟机中的另一个虚拟机的GPU命令。
5.根据权利要求1或权利要求2所述的计算设备,其中,所述GPU调度器模块用于:响应
于检测到同一虚拟机的不同的命令缓冲器中的两个GPU命令之间的跨缓冲器?#35272;?#24615;,而将
所述调度策略?#29992;?#29615;形的调度策略切换至群调度策略。
6.根据权利要求5所述的计算设备,其中,所述GPU调度器模块用于:评估不同的虚拟机
的GPU命令,并且根据不是群调度策略的调度策略来调度所述不同的虚拟机的GPU命令。
7.根据权利要求1、2或6中任?#25105;?#39033;所述的计算设备,其中,所述命令缓冲器中的每个
命令缓冲器被实施为环形缓冲器,并且所述GPU调度器模块用于:针对跨环形同?#20132;?#20803;来对
虚拟机的GPU命令进行扫描,并且基于存在或不存在跨环形的同?#20132;?#20803;来选择针对所述虚
拟机的GPU命令的所述调度策略。
8.根据权利要求1、2或6中任?#25105;?#39033;所述的计算设备,其中,所述GPU调度器模块用于:
基于对所述GPU命令的所述评估的所述输出,而动态地选择针对不同的虚拟机的不同的调
度策略。
9.根据权利要求1、2或6中任?#25105;?#39033;所述的计算设备,包括针对所述虚拟机中的每个虚
拟机的命令扫描器模块,每个命令扫描器模块用于创建包括指示所述虚拟机的所述命令缓
冲器之间的?#35272;?#24615;的数据的命令数据库。
10.根据权利要求1、2或6中任?#25105;?#39033;所述的计算设备,包括仲裁器,所述仲裁器用于:
评?#28010;?#36848;所有虚拟机的所述命令数据库,并且基于对所述所有命令数据库的评估,而选择
针对所述虚拟机中的至少一个虚拟机的所述调度策略。
11.根据权利要求1、2或6中任?#25105;?#39033;所述的计算设备,其中,所述GPU调度器模块用于:
扫描虚拟机的所述所有命令缓冲器中的GPU命令、检测同一虚拟机的不同的命令缓冲器中
的GPU命令之间的跨缓冲器?#35272;?#24615;、确定在一段时间内跨缓冲器?#35272;?#24615;出现的频率、并且基
于所述跨缓冲器?#35272;?#24615;出现的所述频率来改变所述调度策略。
12.根据权利要求1、2或6中任?#25105;?#39033;所述的计算设备,其中,所述GPU调度器模块用于:
监测所有虚拟机的所有命令缓冲器之间的跨缓冲器?#35272;?#24615;的出现,并且如果在经选择的数
量的命令缓冲器中没有检测到跨缓冲器?#35272;?#24615;,则将所述调度策略?#29992;?#29615;形的策略改变至
群策略。
13.一种用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的方法,所述方法
包括:
建立包括多个虚拟机的虚拟化环境,其中所述虚拟机中的每个虚拟机包括用于与所述
GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器;
评?#28010;?#26377;虚拟机的所有命令缓冲器中的GPU命令;
响应于对所述GPU命令的评估的输出,从多个不同的调度策略中动态地选择调度策略;
以及
根据动态地选择的调度策略来调度所述GPU命令中的至少一个GPU命令,以用于由所述
GPU进行处理。
14.根据权利要求13所述的方法,包括?#33655;?#25551;虚拟机的所有命令缓冲器中的GPU命令、生
成指示同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器?#35272;?#24615;的数据、并且
基于指示跨缓冲器?#35272;?#24615;的所述数据而动态地选择所述调度策略。
15.根据权利要求13所述的方法,包括?#33655;?#25551;虚拟机的所有命令缓冲器中的GPU命令,确
定针对所述GPU命令中的每个GPU命令的命令类型、并且基于GPU命令的命令类型而动态地
选择针对GPU命令的所述调度策略。
16.根据权利要求13所述的方法,包括:根据动态地选择的调度策略来调度所述虚拟机
中一个虚拟机的GPU命令,并且根据不同的调度策略来调度所述虚拟机中的另一个虚拟机
的GPU命令。
17.根据权利要求13所述的方法,包括响应于检测到同一虚拟机的不同的命令缓冲器
中的两个GPU命令之间的跨缓冲器?#35272;?#24615;,而将所述调度策略?#29992;?#29615;形的调度策略切换至
群调度策略。
18.根据权利要求17所述的方法,包括:评估不同的虚拟机的GPU命令,并且根据不是群
调度策略的不同的调度策略来调度所述不同的虚拟机的GPU命令。
19.根据权利要求13所述的方法,其中,所述命令缓冲器中的每个命令缓冲器被实施为
环形缓冲器,并且所述方法包括:针对跨环形同?#20132;?#20803;来对虚拟机的GPU命令进行扫描,并
且基于存在或不存在跨环形的同?#20132;?#20803;来选择针对所述虚拟机的GPU命令的所述调度策
略。
20.根据权利要求13所述的方法,包括基于对所述GPU命令的所述评估的所述输出,而
动态地选择针对不同的虚拟机的不同的调度策略。
21.根据权利要求13所述的方法,包括针对所述虚拟机中的每个虚拟机,创建包括指示
所述虚拟机的所述命令缓冲器之间的?#35272;?#24615;的数据的命令数据库。
22.根据权利要求21所述的方法,包括:评?#28010;?#36848;所有虚拟机的所述命令数据库,以及
基于对所述所有命令数据库的评?#35272;?#36873;择针对所述虚拟机中的至少一个虚拟机的所述调
度策略。
23.根据权利要求13所述的方法,包括?#33655;?#25551;虚拟机的所述所有命令缓冲器中的GPU命
令、检测同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器?#35272;?#24615;、确定在一段
时间内跨缓冲器?#35272;?#24615;出现的频率、并且基于所述跨缓冲器?#35272;?#24615;出现的所述频率来改变
所述调度策略。
24.根据权利要求13所述的方法,包括:监测所述所有虚拟机的所述所有命令缓冲器之
间的跨缓冲器?#35272;?#24615;的出现,并且如果在经选择的数量的命令缓冲器中没有检测到跨缓冲
器?#35272;?#24615;,则将所述调度策略?#29992;?#29615;形的策略改变至群策略。
25.一个或多个机器可读存储介?#21097;?#20854;包括存储在其上的多个指令,其中响应于被执
行,所述指令使得计算设备执行根据权利要求13-24中的任?#25105;?#39033;的所述方法。

说明书

虚拟化环境中的智能GPU调度

背景技术

在计算设备中,图形处理单元(GPU)可以通过提供可以快速地执行数学运算的电
子电路来对中央处理单元(CPU)进行补充。为此,GPU利用了大量的并行性和许多并发线程。
GPU的能力使得其有助于加速对视觉媒体和并行计算任务的处理。例如,GPU可以用于视频
编码/解码、二维和三维游戏中的图形渲染、以及其他通用计算应用。如果可以克服在虚拟
化GPU时涉及的复?#26377;裕?#21017;可以将虚拟化技术应用于许多不同类型的计算平台上的图形处
理单元。

附图说明

在本文中所描述的概念是作为示例而不是限制在附图中?#22659;?#30340;。为了图示的简单
和清楚,在附图中所描绘的元素不一定是按比例绘制的。在认为合适的地方,已经在附图之
间重复了附图标?#19988;?#25351;示相对应的或相似的元素。

图1是计算系统的至少一个实施例的简化的框图,该计算系统包括配置有如在本
文中所公开的智能GPU调度的至少一个计算设备;

图2是图1的服务器计算设备的环境的至少一个实施例的简化的框图;

图3是图2的GPU调度器的环境的至少一个实施例的简化的框图;

图4是针对智能GPU调度的方法的至少一个实施例的简化的流程图,该方法可以由
图1的计算设备中的一个或多个计算设备来执行;并且

图5是?#22659;?#20102;针对图1的计算设备的至少一个实施例的用例的简化的时序图。

具体实施方式

尽管本公开的概念可以受到各?#20013;?#25913;和可替代的形式的影响,但是其具体的实施
例已经在附图中作为示例?#22659;觶?#24182;且将在本文中详细地描述。然而,应当理解的是,意图不
在于将本公开的概念限于所公开的特定的形式,而相反地,目的是覆盖与本公开和所附权
利要求一致的全部修改、等价物、和替代物。

在说明书中对“一个实施例”、“实施例”、“示例性实施例”等的引用指示所描述的
实施例可以包括特定的特征、结构、或特性,但每个实施例可以或不一定包括该特定的特
征、结构、或特性。此外,这样的短语非必须指的是相同的实施例。此外,当结合实施例来描
述特定的特征、结构、或特性时,所主张的是结合其他实施例(无论其是否进行了明确地描
述)实现这样的特征、结构、或特性也在本领域技术人员的知识?#27573;?#20869;。额外地,应当理解的
是,以“至少一个A、B和C”的形式包括在列表中的项目可以意味着(A);(B);(C);(A和B);(B
和C);(A和C);或者(A、B和C)。类似地,以“A、B或C中的至少一个”的形式列出的项目可以意
味着(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。

在一些情况下,可以以硬件、固件、软件或其任何组合来实现所公开的实施例。此
外,还可以将所公开的实施例实现为由一个或多个瞬时性或者非瞬时性机器可读(例如,计
算机可读)存储介质所实行或存储在其上的指令,所述指令可以由一个或多个处理器来读
取或执行。机器可读存储介质可以被实施为用于以能够由机器读取的形式存储或发送信息
的任?#26410;?#20648;设备、机制、或其他物理结构(例如,?#36164;?#24615;或?#19988;资源?#20648;器、媒体盘、或其他
介质设备)。

在附图中,可以以具体的布置和/或顺序?#35789;境?#19968;些结构或方法特征。然而,应当
理解的是,这样的具体的布置和/或顺序不是必需的。相反,在一些实施例中,可以以与在说
明性附图中所?#22659;?#30340;不同的方式和/或顺序来布置这些特征。额外地,将结构或方法特征包
含在特定的附图中不意味着暗示在所有实施例中都需要这样的特征,相反,在一些实施例
中,这样的特征可以不被包括,或者可以与其他特征进行组合。

现在参考图1,计算系统100的实施例包括客户端计算设备110和服务器计算设备
142。客户端计算设备110和服务器计算设备142通信地耦合至一个或多个网络140。客户端
计算设备110和服务器计算设备142中的一个或两者可以被配置为利用在本文中所公开的
技术。由此,客户端计算设备110和服务器计算设备142中的一个或两者可以装备有图形处
理单元126、152和虚拟化服务132、162,该虚拟化服务132、162可以提供包括GPU调度器模块
138、176的GPU虚拟化。为了?#33268;?#30340;方便,可以在本文中使用“图形处理单元?#34987;頡癎PU”来指图
形处理单元、图形加速器、或其他类型的专用电子电路或设备,例如通用GPU(GPGPU)、视觉
处理单元、加速处理单元(APU)、现场可编程门阵列(FPGA)、或者可以由计算设备110、142使
用以加速图形任务和/或将受益于经加速的处理的其他计算操作的任何其他设备或电路。
说明性的虚拟化服务132、162被配置成针对GPU126、152建立虚拟化环境,其包括多个不同
的虚拟机(VM),使得本地图形驱动器在每一VM中运行。

说明性的GPU调度器模块138、176处理对由不同的VM发出以用于在GPU硬件(GPU
126、GPU 152)上执行的某些类型的GPU命令的调度。例如,GPU调度器模块138、176可以处理
对特权命令的调度,而VM中的本机图形驱动器可以直接访问GPU 126、152的性能关键资源,
例如帧缓冲器和命令缓冲器。如下文更加详细地描述的,GPU调度器模块138、176基于GPU命
令的一个或多个属性、GPU命令缓冲器的?#35272;?#24615;、和/或其他决策标准来从多个可能的调度
策略中动态地选择调度策略,并根据该动态地选择的调度策略来调度GPU命令。以该方式,
GPU调度器模块138、176可以智能地改变适用于VM和/或GPU命令中的一个或多个的调度策
略,以达到更高的效率或出于其他原因。作为示例,当不同的VM在运行不同类型的GPU工作
负荷时(例如,一个VM上是3D任务,而另一VM上是视频编码任务),GPU调度器模块138、176可
以实现按缓冲器的调度策略(例如,针对环形缓冲器的“每环形”的策略)而不是群调度策
略,以提高性能或出于其他原因。如本文中所使用的,“工作负荷”可以指的是可以包括一个
或多个GPU命令的一组GPU命令等。此外,GPU调度器模块138、176可以根据需要而切换至群
调度策略以便提供跨缓冲器的同步,从而避免锁死的情况,或出于其他原因。

现在更加详细地参考客户端计算设备110,说明性的客户端计算设备110包括中央
处理单元(CPU)112和图形处理单元126。CPU通常通过CPU存储器116与GPU存储器128之间的
直接存储器访问来向GPU 126提交包括GPU命令的工作负荷。客户端计算设备110可以被实
施为用于执行在本文中所描述的功能的任何类型的设备。例如,客户端计算设备110可以被
实施为以下设备而不限于以下设备:智能电话、平板计算机、可穿戴计算设备、膝上?#22270;?#31639;
机、笔记本计算机、移动计算设备、蜂窝电话、手持设备、消息传送设备、车载远程信息处理
设备、服务器计算机、工作?#23613;?#20998;布式计算系统、多处理器系统、消费型电子设备、和/或被配
置为执行在本文中所描述的功能的任何其他计算设备。如在图1中所?#22659;?#30340;,客户端计算设
备110还包括输入/输出子系统114、数据存储设备118、显示器120、通信子系统122、用户接
口子系统124、操作系统130、虚拟化服务132、图形驱动器134、以及GPU调度器模块138。客户
端计算设备110还包括GPU 126和GPU存储器128。在其他实施例中,客户端计算设备110可以
包括其他的或额外的组件,例如通常在移动的和/或静止的计算机中可以?#19994;?#30340;?#20999;?#32452;件
(例如,各种传感器和输入/输出设备)。额外地,在一些实施例中,说明性组件中的一个或多
个可以并入另一个组件中或者以其他方式形成另一个组件的一部分。例如,在一些实施中,
CPU存储器116或其部分可以并入CPU 112中和/或GPU存储器128可以并入GPU 126中。客户
端计算设备110的组件可以被实施为软件、固件、硬件、或软件和硬件的组合。

CPU 112可以被实施为能够执行在本文中所描述的功能的任何类型的处理器。例
如,CPU 112可以被实施为单核或多核处理器、数?#20013;?#21495;处理器、微控制器、或其他的处理器
或处理/控制电路。GPU 126可以被实施为能够执行在本文中所描述的功能的任何类型的图
形处理单元。例如,GPU126可以被实施为单核或多核处理器、数?#20013;?#21495;处理器、微控制器、浮
点加速器、协处理器、或者被设计为快速地操纵?#36879;?#21464;存储器中的数据的其他处理器或处
理/控制电路。为了简化附图和描述,参考下文中所描述的服务器计算设备142更加详细地
?#22659;?#24182;描述了客户端计算设备110的一些方面。例如,参考服务器计算设备142的对应的组
件更加详细地描述了GPU 126、GPU存储器128、以及GPU调度器模块138的方面。通常而言,对
计算设备110、142中的一个计算设备的组件的描述等同地适用于其他计算设备110、142的
类似的组件。

客户端计算设备110的CPU存储器116和GPU存储器128可以各自被实施为能够执行
在本文中所描述的功能的任何类型的?#36164;?#24615;或?#19988;资源?#20648;器或数据存储。在操作中,存
储器116可以存储在计算设备110的操作期间所使用的各种数据和软件,例如操作系统、应
用、程序、库、和驱动器。例如,CPU存储器116的部分至少暂时地存储命令缓冲器和由CPU112
所创建的GPU命令,而GPU存储器128的部分至少暂时地存储通过例如直接存储器访问而从
CPU存储器116接收的GPU命令。

CPU存储器116例如经由I/O子系统114通信地耦合至CPU 112,而GPU存储器128类
似地通信地耦合至GPU 126。I/O子系统114可以被实施为电路和/或组件以促进与CPU 112、
CPU存储器116、GPU 126、GPU存储器128、以及客户端计算设备110的其他组件的输入/输出
操作。例如,I/O子系统114可以被实施为或者以其他方式包括存储器控制器集线器、输入/
输出控制集线器、固件设备、通信链路(即,点对点链路、总线链路、线、线缆、光导、印刷电路
板迹线等)和/或其他组件和子系统,以促进输入/输出操作。在一些实施例中,I/O子系统
114可以形成片上系统(SoC)的一部分,并且与CPU 112、CPU存储器116、GPU 126、GPU存储器
128、和/或计算设备110的其他组件一起并入到单个集成电路芯片上。

数据存储设备118可以被实施为针对短期或长期数据存储而配置的任何类型的设
备,例如存储器设?#36127;?#30005;路、存储器卡、硬盘驱动器、固态驱动器、或其他数据存储设备。数
据存储设备118可以包括存储针对计算设备110的数据和固件代码的系统?#26234;?#25968;据存储设
备118还可以包括存储针对计算设备110的操作系统130的数据文件和可执?#24418;?#20214;的操作系
统?#26234;?br />

显示器120可以被实施为能够显示数?#20013;?#24687;的任何类型的显示器,例如液晶显示
器(LCD)、发光二极管(LED)、等离子显示器、阴极射线管(CRT)、或其他类型的显示设备。在
一些实施例中,显示器120可?#25321;?#21512;至触摸屏或其他用户输入设备以允许与计算设备110的
用户交互。显示器120可以是用户接口子系统124的一部分。用户接口子系统124可以包括用
于促进与计算设备110的用户交互的多个额外的设备,包括物理或虚拟控制按钮或按键、麦
克风、扬声器、单向或双向静止的和/或视频相机等。用户接口子系统124还可以包括诸如运
动传感器、接近度传感器、以及眼睛追踪设备之类的设备,所述设备可以被配置为检测、捕
获、和处理涉及计算设备110的各种其他形式的人类交互。

计算设备110还包括通信子系统122,其可以被实施为能够使能计算设备110与其
他电子设备之间的通信的任何通信电路、设备、或其集合。通信子系统122可以被配置为使
用通信技术(例如,无线通信或有线通信)和相关联的协议(例如,以太网、
WiMAX、3G/LTE等)中的一个或多个来实现这样的通信。通信子系统122可以被实施为网络适
配器,包括无线网络适配器。

说明性的计算设备110还包括多个计算机程序组件,例如虚拟化服务132、图形驱
动器134、操作系统130、以及GPU调度器模块138。操作系统130促进诸如GPU调度器模块138
和虚拟化服务132之类的计算机应用与计算设备110的硬件组件之间的通信等。操作系统
130可以被实施为能够执行在本文中所描述的功能的任何操作系统,例如微软公司的
WINDOWS、谷歌有限公司的ANDROID等的一个版本。如在本文中所使用的,“计算机应用”可以
指终端用户通过其可以与计算设备110进行交互的“用户空间”软件和/或硬件应用,和/或
在其中编程代码可以与计算设备110的硬件组件直接进行交互的“系统空间”等。计算设备
110的系统空间组件可以具有比计算设备110的用户空间组件更大的特权。

在说明性的实施例中,图形驱动器134处理计算机应用与硬件组件之间的通信,例
如显示器120。在一些实施例中,图形驱动器134可以包括“通用”驱动器,其例如可以将与设
备无关的图形渲染任务传送至多种不同的硬件组件(例如,不同类型的显示器);以及“设备
专用的”驱动器,其将与设备无关的任务转换成特定的硬件组件可以执行以完成所请求的
任务的命令。在其他实施例中,通用驱动器和设备专用的驱动器的部分可以被组合到单个
驱动器组件(例如,图形驱动器134)中。在一些实施例中,图形驱动器134的部分可以被包括
在操作系统130中。说明性地,图形驱动器134是显示驱动器;然而,可以在其他应用(例如,
可以被?#23545;?#21040;GPU 126上的任何类型的任务)中使用所公开的GPU调度器模块138的方面(例
如,在GPU 126被配置为GPGPU的情况下)。

说明性的虚拟化服务132被实施为一种类型的管理程序,其可以由引导装载程序
直接从固件启动或者由操作系统130启动。虚拟化服务132可以被实施为“瘦的”管理程序或
者更传统的管理程序、虚拟机管理器(VMM)、或类似的虚拟化平台。例如,虚拟化服务132可
以被实施为基于XEN(类型I)的VMM、基于内核的虚拟机(KVM)(类型II)的VMM、或者基于
WINDOWS的VMM。在一些实施例中,虚拟化服务132可以被实施为“裸金属”管理程序,其可以
直接从系统硬件中执行。虚拟化服务132被实施为在特定的GPU 126中促进和管理对计算设
备110的共享资源的虚拟化的特权软件或固件组件。由此,虚拟化服务132以计算设备110的
?#32454;?#29305;权的系统模式来执行,其中虚拟化服务132可以大体上完全控制GPU 126和/或计算
设备110的其他硬件资源。如上所述,虚拟化服务132可以建立针对GPU 126的虚拟化环境,
其包括多个虚拟机,其中每个虚拟机都运行图形驱动器134的其自身的实例。GPU虚拟化服
务的说明性的示例包括Intel公司的XenGT和nVidia公司的GRID VGZ。GPU调度器模块138可
以被实施为虚拟化服务132的组件。在操作中,GPU调度器模块138与VM中的图形驱动器134
的虚拟实例进行通信,以如在下文中所描述的那样控制GPU命令向GPU 126的提交。

现在更加详细地参考服务器计算设备142,服务器计算设备142可以被实施为用于
执行在本文中所描述的功能的任何类型的设备。例如,服务器计算设备142可以被实施为以
下设备而不限于以下设备:智能电话、平板计算机、可穿戴计算设备、膝上?#22270;?#31639;机、笔记本
计算机、移动计算设备、蜂窝电话、手持设备、消息传送设备、车载远程信息处理设备、服务
器计算机、工作?#23613;?#20998;布式计算系统、多处理器系统、消费型电子设备、和/或被配置为执行
在本文中所描述的功能的任何其他计算设备。可以类似地实施具有与在上文中所描述的客
户端计算设备110的组件相同或类似的服务器计算设备142的组件,并且从而,不在这里对
描述进行重复。此外,应该理解的是,客户端计算设备110可以包括服务器计算设备142的组
件中的任?#25105;?#20010;组件,并且以下对这样的组件的描述等同地适用于客户端计算设备110的
类似的组件。

说明性的服务器计算设备142包括CPU 144、输入/输出子系统146、直接存储器访
问(DMA)子系统148、CPU存储器150、操作系统160、虚拟化服务162、图形驱动器模块164、数
据存储设备166、显示器168、通信子系统170、用户接口子系统172、以及GPU调度器模块176。
服务器计算设备142还包括GPU 152、渲染引擎154、GPU存储器156、以及命令缓冲器158。在
其他实施例中,服务器计算设备142可以包括其他的或额外的组件,例如通常在移动的和/
或固定的计算机中发现的?#20999;?#32452;件(例如,各种传感器和输入/输出设备)。额外地,在一些
实施例中,说明性的组件中的一个或多个组件可以并入到另一个组件中或者以其他方式形
成另一个组件的一部分。服务器计算设备142的组件可以被实施为软件、固件、硬件、或软件
和硬件的组合。

GPU 152包括多个渲染引擎154,其可以被实施为GPU 152的硬件执行单元,例如,
处理器内核阵列或其中的每个都可以执行多个并行的线程的并行处理器。GPU 152可以被
实施为外围设备(例如,在分立的图形卡上),或者可以位于CPU母板上或在CPU管芯上。渲染
引擎154可以各自被配置为处理具体的类型的GPU任务。例如,在一些实施中,多个不同的渲
染引擎154可以被配置为独立地处理3D渲染任务、位块传送器(blitter)(例如,2D图形)、视
频、和视频编码/解码任务。

CPU存储器150的部分可以至少暂时地存储命令缓冲器和由CPU 144所创建的GPU
命令,并且GPU存储器156的部分至少暂时地将GPU命令存储在命令缓冲器158中。GPU命令由
CPU 144通过直接存储器访?#39318;?#31995;统148传输至命令缓冲器158。直接存储器访问(DMA)子系
统148促进CPU存储器150与GPU存储器156之间的数据传输。在一些实施例中,DMA子系统148
允许GPU 152直接地访问CPU存储器150并且允许CPU144直接地访问GPU存储器156。DMA子系
统148可以被实施为DMA控制器或DMA“引擎?#20445;?#20363;如外围组件互联连(PCI)设备、外围组件互
连-快速(PCI-快速)设备、以及I/O加速技术(I/OAT)设备等。

说明性的命令缓冲器158被实施为环形缓冲器,并且环形缓冲器中的每一个可以
将许多批缓冲器链接在一起。在一些实施例中,计算设备142针对渲染引擎154中的每个渲
染引擎实现不同的命令缓冲器(例如,针对3D、位块传送器、视频、以及视频编码/解码引擎
154中的每个引擎的单独的环形缓冲器)。环形缓冲器是可以对于例如异步输入-输出操作
有用的一类先进/先出(FIFO)的数据结构。可以在其他实施例中使用其他类型的FIFO的数
据结构、或其他合适的类型的数据结构。

通过虚拟化服务162,命令缓冲器158被虚拟化以使得由虚拟化服务162所建立的
每个VM包括一组命令缓冲器158(例如,每个VM中的3D、位块传送器、视频、以及视频编码/解
码命令缓冲器),其中每个缓冲器由不同的命令解析器并行地解析(例如,3D、位块传送器、
视频、以及视频编码/解码命令解析器)。当新的VM被调度用于访问GPU 152时,GPU调度器模
块176可以进行上下文切换。响应于该上下文切换,GPU 152可以提供不同的一组命令缓冲
器(例如,与新的VM相关联的命令缓冲器)。

说明性的GPU调度器模块176包括命令扫描器模块178、命令数据库180、仲裁器模
块182、以及多个调度策略184。GPU调度器模块176、命令扫描器模块178、命令数据库180、以
及仲裁器模块182可以被实现为任何类型的处理器可执行的代码、模块和/或数据结构、或
其结合。在下文中参考图3更加详细地描述了命令扫描器模块178、命令数据库180、以及仲
裁器模块182的方面。

说明性地,调度策略184包括每环形的调度策略186以及群调度策略188。每环形的
调度策略186可以允许环形缓冲器相互独立地进行上下文切换,由此如果来自不同的VM的
GPU命令将使用不同的渲染引擎154,则允许同时地调度来自不同的VM的GPU命令。然而,如
果针对不同的缓冲器的两个GPU命令各自取决于由其他命令用信号发送的条件,或者如果
针对不同的缓冲器的两个命令取决于所满足的相同的条件,则使用每环形的调度策略则可
能导?#28388;?#27515;问题。针对VM的一个环形缓冲器的一个命令对针对由相同VM的另一个环形缓冲
器的另一命令用信号发送的结果的?#35272;?#24615;可以通过在命令缓冲器中的同?#20132;頡?#31561;待”命令
的出现以及所述等待命令所?#35272;?#30340;条件来证实。该类型的命令?#35272;?#24615;可以被称为“跨环形
同步?#34987;?#32773;更加概括地被称为(针对相同的VM的不同的缓冲器的GPU命令的)跨缓冲器?#35272;?br />或跨缓冲器同步。

作为示例,假定每环形的调度策略186从第一虚拟机VM1的3D环形缓冲器接收并调
度GPU工作负荷以用于由3D引擎154执行。每环形的调度策略186还从另一个虚拟机VM2的位
块传送器(blitter)环形缓冲器接收GPU工作负荷。按照每环形的调度策略,可以将VM2位块
传送器任务调度在位块传送器引擎154上,这?#19988;?#20026;位块传送器引擎154没有由VM1使用。
VM1 3D工作负荷包括与3D渲染任务有关的多个GPU命令,但是3D渲染任务必须与需要调度
在位块传送器引擎154上的VM1的另一个任务进行同步。这可以通过VM1 3D工作负荷中的等
待命令来证实,其中,等待命令取决于条件值COND1。值COND1由VM1位块传送器任务用信号
发送。然而,VM1位块传送器工作负荷还包括取决于条件值COND2的等待命令,但是COND2由
VM1 3D任务用信号发送。VM1位块传送器任务必须等直到VM2位块传送器任务完成为止才能
被调度。VM1 3D任务不能够完成直到VM1位块传送器任务用信号发送COND1为止,并且VM1位
块传送器任务不能够完成直到VM1 3D任务用信号发送COND2为止。因为,根据每环形的调度
策略186,两个VM1任务是在不同的时刻被调度的(例如,由于每环形的策略已经允许VM2位
块传送器命令因为位块传送器引擎154可用而被调度的事实),所以导致了锁死的情况,其
中GPU 152的处理将只得中止。即使GPU 152被配置有命令抢先(preemption)支持(其中,等
待命令可以在一些暂停时段之后抢先),如果两个不同的命令恰好使用相同的COND,则VM1
中的等待命令可能由于从VM2用信号发送的COND值而被错误地完成。

群调度策略188可以需要VM中的所有环形缓冲器一起上下文切换,而不是如每环
形的调度策略186那样独立地进行。群调度策略188可以用于克服跨环形同步问题。继续上
文中的示例,假定使用群调度策略188而不是每环形的调度策略186。在该情况下,群调度策
略188一起调度VM1 3D命令和VM1位块传送器命令(分别在3D和位块传送器引擎154上)。当
VM1位块传送器命令用信号发送COND1时,VM1 3D命令可以继续。当VM1 3D命令用信号发送
COND2时,VM1位块传送器命令可以继续。来自VM2的命令在其能被调度之前,必须等待来自
所有VM1环形缓冲器的所有VM1命令完成。

然而,在GPU虚拟化中群调度策略188可能是低效的。例如,假定GPU调度器模块176
调度VM1工作负荷在3D引擎154上运行,并且在其他VM1缓冲器中的任何缓冲器上没有其他
工作负荷。即使视频引擎154(例如)没有在由VM1使用(因为在VM1视频缓冲器中没有GPU命
令),根据群调度策略188,直到VM1 3D任务完成为止才能使用视频引擎154来运行VM2视频
任务。

现在参考图2,在一些实施例中,服务器计算设备142在操作期间建立了环境200。
环境200包括特权虚拟环境210、GPU调度器模块214、图形驱动器模块216、命令缓冲器220、
命令解析器222、图形驱动器模块218、虚拟化服务226、以及GPU硬件152。环境200的各种模
块可以被实施为硬件、固件、软件、或其组合。说明性的环境200包括虚拟化服务162的执行
实例(虚拟化服务226),其建立了特权虚拟环境210和“N?#22791;?#34394;拟机212(其中,N是正整数)。
特权虚拟环境(在一些实现中,其可以被称为“域0”)包括GPU调度器模块176的执行实例
(GPU调度器模块214)和图形驱动器模块164的执行实例(图形驱动器模块216)。VM 212中的
每个VM包括图形驱动器模块164的执行实例(图形驱动器模块218)、每命令缓冲器158的实
例(命令缓冲器220)、以及命令解析器222。每个VM的命令缓冲器220包括例如3D、位块传送
器、视频、和视频编码/解码环形缓冲器。图形驱动器模块216、218可以各自向GPU硬件152直
接地提?#29615;?#29305;权命令230、232。特权GPU命令224由GPU调度器模块214处理(例如,利用陷阱
(trap)和仿真技术),并且使用如在本文中所描述的动态混合调度方法提交至GPU 152。

GPU调度器模块214评?#28010;?#26377;VM的所有命令缓冲器中的GPU命令,并且响应于对GPU
命令的评估的输出,从多个不同的调度策略中动态地选择调度策略。根据动态地选择的调
度策略,GPU调度器模块214调度GPU命令中的至少一个GPU命令以由GPU处理。以下是由GPU
调度器模块214所执行的一些“动态的”和/或“混合的”调度示例。GPU调度器模块214可以根
据两个不同的调度策略来调度两个不同的VM的GPU命令。GPU调度器模块214可以将适用于
一个或多个VM的调度策略?#29992;?#29615;形的调度策略切换至群调度策略,例如,响应于检测到同
一虚拟机的不同的命令缓冲器中的两个GPU命令之间的跨缓冲器?#35272;?#24615;。在针对一个VM从
每环形的调度策略切换至群调度策略之后,GPU调度器模块214可以评估不同的VM的GPU命
令,并且根据不同的调度策略来调度不同VM的GPU命令(例如,GPU调度模块214可以针对不
同的VM切换回每环形的调度策略,因此在一个VM中运行群调度策略而同时在另一VM中运行
每环形的调度策略)。在一些实施例中,GPU调度器可以记录所有虚拟机的所有命令缓冲器
间的跨缓冲器?#35272;?#24615;的出现,并且如果在特定数量的命令缓冲器中或者在特定的时间?#25991;?br />未检测到跨缓冲器?#35272;?#24615;,或者更加具体地,基于跨缓冲器?#35272;?#24615;出现的频?#21097;?#26469;改变调度
策略(例如,?#29992;?#29615;形的策略改变成群调度策略,或反之亦然)。环境200的各种模块和组件
(例如,GPU调度器模块214)可以被实施为硬件、固件、软件、或其结合。额外地,在一些实施
例中,环境200的模块中的一些或全部模块可以与其他模块或软件/固件结构集成在一起或
者形成其部分。

在一些实施例中,为了触发GPU调度器模块214的操作,图形驱动器模块216、218将
GPU命令224排队到命令缓冲器220中,并且接着将存储器?#25104;?#30340;输入-输出(MMIO)寄存器
(踪迹)写入以发起由命令解析器222对排列的命令的解析。在虚拟的环境(例如,环境200)
中,捕获(trap)到最后的MMIO写入,使得GPU调度器模块214可以执行对VM的GPU命令的调
度。

现在参考图3,在一些实施例中,服务器计算设备142在操作期间建立环境300。环
境300包括GPU调度器模块214、命令扫描器模块314、316、命令数据库318、320、每环形的调
度策略322、群调度策略324、以及仲裁器模块326。环境300的各种模块可以被实施为硬件、
固件、软件、或其组合。说明性的环境300包括命令扫描器模块178的执行实例(命令扫描器
模块314、316)(例如,每个VM一个实例)、命令数据库318、320的实例(例如,每个VM一个数据
库)、仲裁器模块182的执行实例(仲裁器模块326)、每环形的调度策略186的实例(每环形的
调度策略322)、以及群调度策略188的实例(群调度策略324)。命令扫描器模块314、316中的
每个命令扫描器模块扫描其相应的VM的所有命令缓冲器中的经排队的GPU命令。例如,VM1
命令扫描器模块314扫描包含在VM1命令缓冲器220中的GPU命令(例如,其包括针对VM1的多
个环形缓冲器,例如3D、位块传送器、视频、以及视频编码/解码缓冲器)。类似的,VM N命令
扫描器模块316扫描包含在VM N命令缓冲器312中的GPU命令(例如,其包括针对VM N的多个
环形缓冲器,例如3D、位块传送器、视频、以及视频编码/解码缓冲器)。

每个命令扫描器模块314、316产生指示在同一虚拟机的不同命令缓冲器中的GPU
命令之间的跨缓冲器?#35272;?#24615;的数据、创建命令数据库318、320、并且将指示命令类型的数据
存储在命令数据库318、320中。即,每个命令扫描器模块314、316识别其相应的VM的GPU命令
中的跨缓冲器?#35272;?#24615;,并且将指示针对其相应的VM的?#35272;?#24615;的数据存储在命令数据库318、
320中。命令扫描器模块314、316可以确定针对VM的GPU命令中的每个GPU命令来确定命令类
型,并且也将指示命令类型的数据存储在命令数据库318、320中。命令类型可以对应于待由
GPU 152执行的任务的类型或者对应于待执行任务(例如3D、位块传送器、视频、视频编码/
解码)的特定的渲染引擎154。

如果命令扫描器模块314、316确定工作负荷提交包括跨缓冲器?#35272;?#24615;,则命令扫
描器模块314、316可以将标记与具体的工作负荷提交相关联。为此,命令扫描器可以对该组
GPU命令执行在位手段(in-place instrumentation)。在命令缓冲器220、312被实施为环形
缓冲器的该情况下,命令扫描器模块314、316可以识别跨环形同?#20132;?#20803;(primitive)并将与
存在或不存在跨环形同?#20132;?#20803;相关的数据存储在命令数据库318、320中。例如,命令扫描器
模块314、316可以确定是否存在任何跨环形的同?#20132;?#20803;,并且如果存在任何跨环形的同步
基元,则针对相关联的命令缓冲器220、312设置标记(例如,REQ_GANG)。接着,仲裁器模块
326可以检查该标记,并且如果该标记被有效地设置(例如,设置成REQ_GANG=YES),则仲裁
器模块326发起?#29992;?#29615;形的调度策略322到群调度策略324的切换。为了从群调度策略324切
换回每环形的调度策略322,仲裁器模块326可以使用经验策略,例如:如果在所有VM中的接
下来的N个命令缓冲器中都未检测到跨环形同?#20132;?#20803;,则切换回每环形的调度策略322。如
在本文中所使用的,“基元”可以指由计算平台所提供的简单的软件机制(例如,操作系统)
等,并且可以包括?#31995;?#31561;级的机制(例如,原子操作、存储器屏障、自旋锁、上下文切换等)。
作为示例,可以由计算平台来提供发信号命令(例如,发“等待”命令信号),以便针对由多个
环形缓冲器所分享的对象来将跨环形执行序列化。

在一些实施例中,命令扫描器模块314、316可以在其相应的VM的不同的命令缓冲
器之间建立直接?#35272;?#24615;。为此,命令扫描器模块314、316可以用?#35272;?#24615;和命令类型信息来填
充VM的命令数据库318、320中的图形数据结构。以下的代码示例1和2?#22659;?#20102;针对图形数据
结构的伪代码的示例,所述伪代码可以由VM1和VM2的命令扫描器模块314、316创建并且存
储在VM1和VM2的命令数据库318、320中。



代码示例1.针对VM1的命令数据库。

在代码示例1中,Buf11、Buf12、Buf13、Buf14是VM1的四个环形缓冲器。代码示例1
指定了由随后的?#35272;?#24615;信息(如果有的话)管理的缓冲器类型或命令类型(例如,3D、位块传
送器)。例如,Buf11中的3D命令对Buf12中的位块传送器命令具有?#35272;?#24615;,其在于Buf11需要
等待Buf12中的位块传送器命令来用信号发送COND1。在代码示例1中,Buf13和Buf14可以被
识别为没有?#35272;?#24615;。


代码示例2.针对VM1的命令数据库。

在代码示例2中,Buf21和Buf22是VM2的两个缓冲器。代码示例2?#22659;?#20102;?#35272;?#20449;息可
以由命令扫描器模块314、316以高粒度等级构建。例如,一些缓冲器可以被协同调度,而其
他的缓冲器是每环形调度的。以该方式,命令扫描器模块314、316可以使得能够实现模式灵
活的调度策略。作为示例,如果VM1提交仅具有3D/位块传送器?#35272;?#24615;的命令缓冲器,但VM2
提交具有视频工作负荷的命令缓冲器,则GPU调度器模块214可以使用群调度策略来将3D/
位块传送器缓冲器协同调度至VM1,而使用每环形的调度策略来调度VM2的视频工作负荷。

在一些实施例中,命令扫描器模块314、316可以将阈值测试或值引入命令数据库
318、320中,以基于当前的缓冲器活动来进一步控制策略切换。例如,如果频繁地观察到跨
环形的同?#20132;?#20803;(例如,在许多命令缓冲器中或者在一段时间内的许多观察中),则这可以
指示是本机图形驱动器134被设计来以正常过程使用?#20999;?#22522;元。因此,命令扫描器模块314、
316可以使用阈值来防止实现群调度策略188,直到已经达?#20132;?#32773;超过阈值(例如,所检测的
同?#20132;?#20803;的数目)之后为止。

仲裁器模块326评?#28010;?#26377;虚拟机的命令数据库并且基于对命令数据库318、320中
的所有命令数据库的评?#35272;?#36873;择针对虚拟机中的至少一个虚拟机的调度策略。仲裁器模块
326利用命令数据库318、320和调度策略322、324来动态地选择针对一个或多个GPU命令和/
或VM的调度策略。为此,考虑到调度策略322、324,仲裁器模块326分析命令数据库318、320
中的信息。作为该分析的结果,仲裁器模块326可以发起?#29992;?#29615;形的调度策略322到群调度
策略324的切换或者从群调度策略324到每环形的调度策略322的切换。在?#29992;?#29615;形的调度
策略322切换至群调度策略324时,仲裁器模块326可以根据需要发起会合(rendezvous)过
程以等待所有环形缓冲器变得空闲。

现在参考图4,?#22659;?#20102;用于动态地选择针对GPU提交的调度策略的方法400的示例。
方法400的部分可以由计算设备110或计算设备142的硬件、固件和/或软件来执行;例如,由
CPU 112、144和GPU 126、152来执行。在框410处,计算设备110、142从VM接收GPU提交,其中
VM是由计算设备110、142的GPU虚拟化服务所建立的多个VM中的一个VM,并且VM具有多个不
同的命令缓冲器和一个本机图形驱动器。所述提交包括来自VM的不同的命令缓冲器的GPU
命令。在框412处,计算设备110、142扫描关于所述提交的GPU命令。这样做时,计算设备110、
142检查GPU命令的语义以确定命令类型(例如,哪一个引擎154应该处理命令:3D、位块传送
器、视频或视频编码/解码)和/或以确定是否存在任何跨缓冲器?#35272;?#24615;(例如,是否存在任
何跨环形的同?#20132;?#20803;)。

在框414处,计算设备110、142识别跨缓冲器?#35272;?#24615;(如果存在的话)。在框416处,
如果识别出跨缓冲器?#35272;?#24615;,则计算设备110、142将标记(例如,REQ_GANG=YES)与VM的提
交相关联。如果没有识别出跨缓冲器?#35272;?#24615;,则在框418处计算设备110、142继续扫描在来
自VM的提交中的另一个GPU命令(如果该提交包含待扫描的另一个命令)。如果存在待扫描
的另一个GPU命令,则计算设备110、142返回至框412。如果在该提交中不存在需要扫描的其
他GPU命令,则在框420处计算设备110、142继续建立针对VM的命令数据库。在框424处,计算
设备110、142将配备有任何跨缓冲器?#35272;?#24615;信息和/或任何命令类型信息(例如,在框412-
416处所执行的扫描过程的输出)的GPU命令存储在命令数据库中。

在框426处,计算设备110、142基于包含在命令数据库和可用的调度策略(其包括
例如每环形的调度策略和群调度策略)中的信息来选择调度策略。为此,计算设备110、142
可以执行编程逻辑(例如,布尔逻辑)来确定是否已经发生条件(例如,跨缓冲器?#35272;敵源?#22312;
或不存在、特定数目或频率的跨缓冲器?#35272;敵源?#22312;或不存在),并且基于指定的条件的存在
或不存在来选择策略。在框428处,计算设备110、142确定是否需要改变当前的调度策略。为
此,计算设备110、142可以将在框426处所选择的策略与当前生效的策略进行比较,并且如
果需要改变策略,则在框430处发起必要的动作来实?#20013;?#30340;策略(例如,根据需要的会合过
程)。在框432处,计算设备110、142可以更新当前的调度策略。例如,如上所述,如果计算设
备110、142注意到在一段时间内出?#33267;?#35768;多跨缓冲器?#35272;?#24615;,则计算设备110、142可以更新
群调度策略,以使得该群调度策略仅仅在已经检测到某阈值数量的跨缓冲器?#35272;?#20043;后被实
现。计算设备110、142可以将经更新的策略存储在例如数据存储设备118、166中。

现在参考图5,?#22659;?#20102;在本文中所公开的动态地选择的、混合GPU调度方法的实现
的示例500。在示例500中,计算设备110、142已经识别出VM Buf11(3D)缓冲器和VM1Buf12
(位块传送器)缓冲器之间的跨缓冲器?#35272;?#24615;。跨缓冲器?#35272;?#24615;由“等待COND1”和“用信号发
送COND1”同?#20132;?#20803;来指示。作为结果,计算设备110、142实?#33267;?#38024;对VM1的群调度策略。然
而,因为相互?#35272;?#24615;仅仅在针对VM1的3D和位块传送器缓冲器之间,并且不存在针对视频引
擎154的引擎间?#35272;?#24615;,所以计算设备110、142针对视频引擎154而实?#32622;?#29615;形的调度。作为
结果,分别地,VM2Buf21和VM2Buf22视频负荷由GPU 152的视频引擎154处理,而3D和位块传
送器引擎154处理VM1Buf11和Buf12工作负荷。此外,一旦移除了?#35272;?#24615;条件,计算设备110、
142就返回至3D和位块传送器引擎154上的每环形的调度。作为结果,VM1Buf13和VM1Buf14
工作负荷可以分别在3D和位块传送器引擎154上同时进行。

示例

在下文中提供了在本文中所公开的技术的说明性示例。所述技术的实施例可以包
括在下文中所描述的示例中的任?#25105;?#20010;或多个、及其任何组合。

示例1包括用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的计算设
备。所述计算设备包括用于建立包括多个虚拟机的虚拟化环境的虚拟化服务,其中,所述虚
拟机中的每个虚拟机包括用于与所述GPU进行通信的图形驱动器以及用于存储GPU命令的
多个命令缓冲器。所述计算设备还包括GPU调度器模块,其用于:评?#28010;?#26377;虚拟机的所有命
令缓冲器中的所述GPU命令;响应于对所述GPU命令的评估,从多个不同的调度策略中动态
地选择调度策略;以及根据动态地选择的调度策略来调度所述GPU命令中的至少一个GPU命
令,以用于由所述GPU进行处理。

示例2包括示例1的主题,并且包括命令扫描器模块,所述命令扫描器模块用于?#33655;?br />描虚拟机的所述所有命令缓冲器中的所述GPU命令、生成指示同一虚拟机的不同的命令缓
冲器中的GPU命令之间的跨缓冲器?#35272;?#24615;的数据、并且基于指示跨缓冲器?#35272;?#24615;的所述数
据而动态地选择所述调度策略。

示例3包括示例1或示例2的主题,并且包括命令扫描器模块,所述命令扫描器模块
用于?#33655;?#25551;虚拟机的所有命令缓冲器中的GPU命令、确定针对所述GPU命令中的每个GPU命令
的命令类型、并且基于GPU命令的命令类型而动态地选择针对GPU命令的所述调度策略。

示例4包括前述示例中的任?#25105;?#20010;示例的主题,其中GPU调度器用于:根据动态地
选择的调度策略来调度所述虚拟机中一个虚拟机的GPU命令,并且根据不同的调度策略来
调度所述虚拟机中的另一个虚拟机的GPU命令。

示例5包括前述示例中的任?#25105;?#20010;示例的主题,其中所述GPU调度器模块用于响应
于检测到同一虚拟机的不同的命令缓冲器中的两个GPU命令之间的跨缓冲器?#35272;?#24615;,而将
所述调度策略?#29992;?#29615;形的调度策略切换至群调度策略。

示例6包括示例5的主题,其中,所述GPU调度器模块用于:评估不同的虚拟机的GPU
命令,并且根据不是群调度策略的调度策略来调度所述不同的虚拟机的GPU命令。

示例7包括示例6的主题,其中,所述GPU调度器模块用于根据每环形的调度策略来
调度所述不同的虚拟机的GPU命令。

示例8包括示例1、5或6中的任?#25105;?#20010;示例的主题,其中,所述命令缓冲器中的每个
命令缓冲器被实施为环形缓冲器,并且所述GPU调度器模块用于:针对跨环形同?#20132;?#20803;来对
虚拟机的GPU命令进行扫描,并且基于存在或不存在跨环形的同?#20132;?#20803;来选择针对所述虚
拟机的GPU命令的所述调度策略。

示例9包括示例1、5或6中的任?#25105;?#20010;示例的主题,其中,所述GPU调度器模块用于
基于对所述GPU命令的所述评估的输出,而动态地选择针对不同的虚拟机的不同的调度策
略。

示例10包括示例1、5或6中的任?#25105;?#20010;示例的主题,并且包括针对所述虚拟机中的
每个虚拟机的命令扫描器模块,每个命令扫描器模块用于创建包括指示所述虚拟机的所述
命令缓冲器之间的?#35272;?#24615;的数据的命令数据库。

示例11包括示例1、5或6中的任?#25105;?#20010;示例的主题,并且包括仲裁器模块,所述仲
裁器模块用于:评?#28010;?#26377;虚拟机的所述命令数据库,并且基于对所述所有命令数据库的评
估,而选择针对所述虚拟机中的至少一个虚拟机的所述调度策略。

示例12包括示例1、5或6中的任?#25105;?#20010;示例的主题,其中,所述GPU调度器模块用
于?#33655;?#25551;虚拟机的所有命令缓冲器中的所述GPU命令、检测同一虚拟机的不同的命令缓冲器
中的GPU命令之间的跨缓冲器?#35272;?#24615;、确定在一段时间内跨缓冲器?#35272;?#24615;出现的频率、并且
基于所述跨缓冲器?#35272;?#24615;出现的所述频率来改变所述调度策略。

示例13包括示例1、5或6中的任?#25105;?#20010;示例的主题,其中,所述GPU调度器模块用
于:监测所有虚拟机的所有命令缓冲器之间的跨缓冲器?#35272;?#24615;的出现,并且如果在经选择
的数量的命令缓冲器中没有检测到跨缓冲器?#35272;?#24615;,则将所述调度策略?#29992;?#29615;形的策略改
变至群策略。

示例14包括用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的方法,
所述方法包括:建立包括多个虚拟机的虚拟化的环境,其中所述虚拟机中的每个虚拟机包
括用于与GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器;评?#28010;?#26377;虚
拟机的所有命令缓冲器中的GPU命令;响应于对所述GPU命令的评估的输出,从多个不同的
调度策略中动态地选择调度策略;以及根据动态地选择的调度策略来调度所述GPU命令中
的至少一个GPU命令,以用于由所述GPU进行处理。

示例15包括示例14的主题,并且包括?#33655;?#25551;虚拟机的所有命令缓冲器中的GPU命
令、生成指示同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器?#35272;?#24615;的数据、
并且基于指示跨缓冲器?#35272;?#24615;的所述数据而动态地选择所述调度策略。

示例16包括示例14的主题,并且包括?#33655;?#25551;虚拟机的所有命令缓冲器中的GPU命
令,确定针对所述GPU命令中的每个GPU命令的命令类型、并且基于GPU命令的命令类型而动
态地选择针对GPU命令的所述调度策略。

示例17包括示例14的主题,并且包括:根据动态地选择的调度策略来调度所述虚
拟机中一个虚拟机的GPU命令,并且根据不同的调度策略来调度所述虚拟机中的另一个虚
拟机的GPU命令。

示例18包括示例14的主题,并且包括响应于检测到同一虚拟机的不同的命令缓冲
器中的两个GPU命令之间的跨缓冲器?#35272;?#24615;,而将所述调度策略?#29992;?#29615;形的调度策略切换
至群调度策略。

示例19包括示例18的主题,并且包括:评估不同的虚拟机的GPU命令,并且根据不
是群调度策略的不同的调度策略来调度所述不同的虚拟机的所述GPU命令。

示例20包括示例19的主题,并且包括根据每环形的调度策略来调度所述不同的虚
拟机的所述GPU命令。

示例21包括示例14的主题,其中,命令缓冲器中的每个命令缓冲器被实施为环形
缓冲器,并且所述方法包括:针对跨环形同?#20132;?#20803;来对虚拟机的GPU命令进行扫描,并且基
于存在或不存在跨环形的同?#20132;?#20803;来选择针对所述虚拟机的GPU命令的所述调度策略。

示例22包括示例14的主题,并且包括基于对所述GPU命令的所述评估的所述输出,
而动态地选择针对不同的虚拟机的不同的调度策略。

示例23包括示例14的主题,并且包括针对所述虚拟机中的每个虚拟机,创建包括
指示所述虚拟机的所述命令缓冲器之间的?#35272;?#24615;的数据的命令数据库。

示例24包括示例23的主题,并且包括:评?#28010;?#26377;虚拟机的所述命令数据库,以及基
于对所有命令数据库的评?#35272;?#36873;择针对所述虚拟机中的至少一个虚拟机的所述调度策略。

示例25包括示例14的主题,并且包括?#33655;?#25551;虚拟机的所有命令缓冲器中的所述GPU
命令、检测同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器?#35272;?#24615;、确定在一
段时间内跨缓冲器?#35272;?#24615;出现的频率、并且基于所述跨缓冲器?#35272;?#24615;出现的所述频率来改
变所述调度策略。

示例26包括示例14的主题,并且包括:监测所有虚拟机的所有命令缓冲器之间的
跨缓冲器?#35272;?#24615;的出现,并且如果在经选择的数量的命令缓冲器中没有检测到跨缓冲器依
赖性,则将所述调度策略?#29992;?#29615;形的策略改变至群策略。

示例27包括计算设备,所述计算设备包括处理器以及其中存储有多个指令的存储
器,其中当由所述处理器执行时,所述指令使得所述计算设备执行根据示例14-26中的任何
示例的所述方法。

示例28包括一个或多个机器可读存储介?#21097;?#20854;包括存储在其上的多个指令,其中
响应于被执行,所述指令使得计算设备执行根据示例14-26中的任何示例的所述方法。

示例29包括计算设备,其包括用于执行根据示例14-26中的任何示例的所述方法
的单元。

示例30包括用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的系统。
所述系统包括:用于建立包括多个虚拟机的虚拟化环境的单元,其中所述虚拟机中的每个
虚拟机包括用于与GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器;用
于评?#28010;?#26377;虚拟机的所有命令缓冲器中的GPU命令的单元;用于响应于对所述GPU命令的评
估的输出,从多个不同的调度策略中动态地选择策略的单元;以及用于根据动态地选择的
调度策略来调度所述GPU命令中的至少一个GPU命令,以用于由所述GPU进行处理的单元。

示例31包括示例30的主题,并且包括,用于针对所述虚拟机中的每个虚拟机而创
建命令数据库的单元,所述命令数据库包括指示所述虚拟机的所述命令缓冲器之间的?#35272;?br />性的数据。

示例32包括主题31的主题,并且包括用于评?#28010;?#26377;虚拟机的所述命令数据库并且
基于对所有命令数据库的评?#35272;?#36873;择针对所述虚拟机中的所述至少一个虚拟机的所述调
度策略的单元。

示例33包括示例30的主题,并且包括单元,所述单元用于?#33655;?#25551;虚拟机的所有命令
缓冲器中的所述GPU命令、检测同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲
器?#35272;?#24615;、确定在一段时间内跨缓冲器?#35272;?#24615;出现的频率、并且基于所述跨缓冲器?#35272;?#24615;
出现的所述频率来改变所述调度策略。

示例34包括示例30的主题,其包括单元,所述单元用于:监测所有虚拟机的所有命
令缓冲器之间的跨缓冲器?#35272;?#24615;的出现,并且如果在经选择的数量的命令缓冲器中没有检
测到跨缓冲器?#35272;?#24615;,则将所述调度策略?#29992;?#29615;形的策略改变至群策略。

关于本文
本文标题:虚拟化环境中的智能GPU调度.pdf
链接地址:http://www.pqiex.tw/p-6091765.html

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


平码五不中公式规律 百人炸金花游戏开发 模拟人生4赚钱最快的职业 时时彩走势图技巧 7070彩票官网 能赚钱的老公加守财奴老婆 买彩票怎么才能中奖 江苏时时开奖规则 重庆时时开奖直播现场 马化腾在游戏里赚钱吗 山西快乐10分钟开奖前三