面向云手机的GPU计算性能的预测方法及装置转让专利

申请号 : CN202110143918.1

文献号 : CN112506622B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张李秋喻鑫刘铮周军

申请人 : 江苏北弓智能科技有限公司

摘要 :

本发明涉及一种面向云手机的GPU计算性能的预测方法及装置,在云手机上计算任务执行前,通过预测GPU的占用率及执行时间,在判断可能出现GPU过载或超载时,就开始对其上云手机进行调度和迁移,尽可能地缩短GPU处于过载状态的时间,避免使GPU处于超载的状态,让用户QoS能保持在一个比较平稳的状态。采用本发明所述方法,通过预测来调度GPU上的云手机,从一定程度上解决负载不均衡的问题,GPU过载时间减少78%,云手机上应用的平均执行时间缩短40%左右,由此可以看出,本发明不仅能提高GPU的利用率,而且能有效缩短云手机上应用的执行时间。

权利要求 :

1.一种面向云手机的GPU计算性能的预测方法,其特征在于,为GPU设置两个阀值f1和f2,GPU利用率在0%‑f1之间为欠载/低负载,GPU利用率在f1‑f2之间为满负载,GPU利用率在f2‑100%为超载,所述预测方法包括如下步骤:步骤1:在一个NUMA上启动一个检测线程,对该GPU上云手机的资源需求进行预测;

步骤2:建立OpenGL函数GPU占用率和执行时间记录表;

步骤3:等待执行的任务队列中,判断位于队首的计算任务所调用的函数,是否在记录表中,若在,跳转步骤4,若不在,跳转步骤5;

步骤4:读取记录表中的历史记录信息,计算该任务执行后GPU的占用率和执行时间,跳转步骤8;

步骤5:在该计算任务中调用函数的前后插入时间,获取该函数的GPU占用率和执行时间;

步骤6:将该函数的相关信息写入记录表,刷新记录表;所述的相关信息包括<参数><执行时间内>;

步骤7:获取执行完该函数后GPU的整体占用率;

步骤8:判断GPU状态,若欠载/低负载,跳转步骤9;若GPU状态满负载,跳转步骤3;若GPU状态超载,跳转步骤10;

步骤9:设置标志位,表示可调度云手机至该GPU之上,跳转步骤3;

步骤10:调度云手机至状态为欠载/低负载的GPU之上,跳转步骤3。

2.根据权利要求1所述的种面向云手机的GPU计算性能的预测方法,其特征在于,所述的f1和f2自定义设置。

3.根据权利要求1所述的种面向云手机的GPU计算性能的预测方法,其特征在于,所述建立OpenGL函数GPU占用率和执行时间记录表,包括<参数><执行时间内>。

4.一种面向云手机的GPU计算性能的预测装置,其特征在于,包括:GPU利用率设定单元,为GPU设置两个阀值f1和f2,GPU利用率在0%‑f1之间为低负载或欠载,GPU利用率在f1‑f2之间为满负载,GPU利用率在f2‑100%为超载;

检测线程启动单元,在个NUMA上启动一个检测线程;

记录表构建单元,用于建立OpenGL函数GPU占用率和执行时间记录表;

第一判断单元,等待执行的任务队列中,判断位于队首的计算任务所调用的函数,是否在记录表中,若在,跳转第一单元,若不在,跳转第二单元;

第一单元,读取记录表中的历史记录信息,计算该任务执行后GPU的占用率和执行时间,跳转第二判断单元;

第二单元,在该计算任务中调用函数的前后插入时间,获取该函数的GPU占用率和执行时间;将该函数的相关信息写入记录表,刷新记录表;获取执行完该函数后GPU的整体占用率;执行第二判断单元;所述函数的相关信息包括<参数><执行时间内>;

第二判断单元,判断GPU状态,若欠载/低负载,跳转第三单元;若GPU状态满负载,跳转第一判断单元;若GPU状态超载,跳转第四单元;

第三单元,设置标志位,表示可调度云手机至该GPU之上,跳转第一判断单元;

第四单元,调度云手机至状态为欠载/低负载的GPU之上,跳转第一判断单元。

5.根据权利要求4所述的面向云手机的GPU计算性能的预测装置,其特征在于,所述的f1和f2自定义设置。

6.根据权利要求4所述的面向云手机的GPU计算性能的预测装置,其特征在于,所述建立OpenGL函数GPU占用率和执行时间记录表,包括<参数><执行时间内>。

7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1‑3中任一所述的预测方法。

8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1‑3中任一所述的预测方法。

说明书 :

面向云手机的GPU计算性能的预测方法及装置

技术领域

[0001] 本发明涉及移动云计算领域,具体涉及一种面向云手机的GPU计算性能的预测方法及装置。

背景技术

[0002] 为了实现GPU资源的高效共享,GPU虚拟化技术被广泛应用在云计算中,在云手机应用中,通常采用“静态”调度算法将云手机指定到不同的GPU上运行,由于云手机操作具有
一定的随机性,往往是无法获得每个云手机对GPU的资源需求,并且无法预测未来一段时间
内GPU负载的变化情况,而GPU负载会随着用户操作时刻发生变化,当GPU上云手机用户操作
不频繁时,GPU就会处于欠载/低负载的状态,GPU资源没有得到充分的利用;当GPU上云手机
用户操作频繁,且运行的都是资源需求大的APP时,GPU可能处于过载/超载的状态,这时候
GPU上计算任务就会竞争资源,导致执行时间增加,执行时间增加到一定程度就会影响用户
的QoS体验。若是等到服务器监测到GPU过载时,再对其上云手机进行调度和迁移,仍然会使
GPU在一段时间内处于过载状态,甚至是超载状态,因此需要在判断GPU处于过载或超载可
能性比较大的情况下,就启动GPU的调度工作。
[0003] 为了解决前述问题,申请号为201510387995.6的专利公开了一种用于预测GPU性能的方法和相应的计算机系统,其包括:在有待评估的GPU芯片中运行一组测试应用程序;
捕获一组标量性能计数器和向量性能计数器;基于所捕获的标量性能计数器和向量性能计
数器针对不同芯片配置创建用于评估和预测GPU性能的模型;以及预测GPU芯片的性能分数
并且识别GPU流水线中的瓶颈。该发明使用所捕获的性能计数器和芯片配置作为输入来识
别GPU芯片中的瓶颈并且预测GPU性能,提供了一种用于在设计阶段评估和预测GPU性能的
方法;申请号为201711146155.6的专利公开了一种CPU‑GPU异构环境中对GPU应用的性能评
估方法及系统,该方法及系统基于机器学习中的决策树算法,对GPU架构上运行的各类应用
的执行情况学习,建立决策树模型;在决策树匹配过程中依次获得对应用执行时间影响最
大的监控特征,即对特征的重要度排序;依次将筛选出的特征集与四类应用常见的问题对
应,主要是指计算相关、内存相关、占用率相关、同步相关四大常见问题,由此初步得到待分
析应用的性能瓶颈所在的问题方向。该发明通过结合决策树模型和分析建模的方法,提供
了一种通用的、相对准确的、快速的、简单易用的对GPU上的资源和应用进行性能评估的方
法。
[0004] 如前所述,申请号为201811493303.6的专利用于在设计阶段评估和预测GPU性能,并非用于在GPU实际运行中指导任务调度;申请号为201711146155.6的专利采用基于机器
学习中的决策树算法,对GPU架构上运行的各类应用的执行情况学习,建立决策树模型,最
后给出了一种通用的GPU资源和应用性能评估方法,此方法可以用于性能评估,并非性能预
测方法,如用于指导调度,属于事后处理,并非事前预防。

发明内容

[0005] 本发明的目的在于提供一种面向云手机的GPU计算性能的预测方法及装置,为了耗费较少的计算资源预测出GPU的计算性能,通过预测结果指导GPU上云手机的调度,以解
决负载不均衡的状态。
[0006] 实现本发明目的的技术方案为:一种面向云手机的GPU计算性能的预测方法,为GPU设置两个阀值f1和f2,GPU利用率在0%‑f1之间为欠载/低负载,GPU利用率在f1‑f2之间
为满负载,GPU利用率在f2‑100%为超载,所述预测方法包括如下步骤:
[0007] 步骤1:在一个NUMA上启动一个检测线程,对该GPU上云手机的资源需求进行预测;
[0008] 步骤2:建立OpenGL函数GPU占用率和执行时间记录表;
[0009] 步骤3:等待执行的任务队列中,判断位于队首的计算任务所调用的函数,是否在记录表中,若在,跳转步骤4,若不在,跳转步骤5;
[0010] 步骤4:读取记录表中的历史记录信息,计算该任务执行后GPU的占用率和执行时间,跳转步骤8;
[0011] 步骤5:在该计算任务中调用函数的前后插入时间,获取该函数的GPU占用率和执行时间;
[0012] 步骤6:将该函数的相关信息写入记录表,刷新记录表;
[0013] 步骤7:获取执行完该函数后GPU的整体占用率;
[0014] 步骤8:判断GPU状态,若欠载/低负载,跳转步骤9;若GPU状态满负载,跳转步骤3;若GPU状态超载,跳转步骤10;
[0015] 步骤9:设置标志位,表示可调度云手机至该GPU之上,跳转步骤3;
[0016] 步骤10:调度云手机至状态为欠载/低负载的GPU之上,跳转步骤3。
[0017] 进一步的,所述的f1和f2自定义设置。
[0018] 进一步的,所述建立OpenGL函数GPU占用率和执行时间记录表,包括<参数><执行时间内>。
[0019] 进一步的,步骤6所述的相关信息包括<参数><执行时间内>。
[0020] 本发明还提供一种面向云手机的GPU计算性能的预测装置,包括:
[0021] GPU利用率设定单元,为GPU设置两个阀值f1和f2,GPU利用率在0%‑f1之间为低负载或欠载,GPU利用率在f1‑f2之间为满负载,GPU利用率在f2‑100%为超载;
[0022] 检测线程启动单元,在个NUMA上启动一个检测线程;
[0023] 记录表构建单元,用于建立OpenGL函数GPU占用率和执行时间记录表;
[0024] 第一判断单元,等待执行的任务队列中,判断位于队首的计算任务所调用的函数,是否在记录表中,若在,跳转第一单元,若不在,跳转第二单元;
[0025] 第一单元,读取记录表中的历史记录信息,计算该任务执行后GPU的占用率和执行时间,跳转第二判断单元;
[0026] 第二单元,在该计算任务中调用函数的前后插入时间,获取该函数的GPU占用率和执行时间;将该函数的相关信息写入记录表,刷新记录表;获取执行完该函数后GPU的整体
占用率;执行第二判断单元;
[0027] 第二判断单元,判断GPU状态,若欠载/低负载,跳转第三单元;若GPU状态满负载,跳转第一判断单元;若GPU状态超载,跳转第四单元;
[0028] 第三单元,设置标志位,表示可调度云手机至该GPU之上,跳转第一判断单元;
[0029] 第四单元,调度云手机至状态为欠载/低负载的GPU之上,跳转第一判断单元。
[0030] 进一步的,所述的f1和f2自定义设置。
[0031] 进一步的,所述建立OpenGL函数GPU占用率和执行时间记录表,包括<参数><执行时间内>。
[0032] 进一步的,所述的函数的相关信息包括<参数><执行时间内>。
[0033] 一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的预测方法。
[0034] 一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的预测方法。
[0035] 与现有技术相比,本发明的有益效果为:云手机的工作原理是通过Dockdroid将终端的OpenGL ES指令转换成可以在GPU上计算的OpenGL指令,OpenGL是图形领域的工业标
准,它以API的形式提供了一套图形处理库,包括核心库(gl)、实用库(glu)、辅助库(aux)、
实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等,其中,核心库包含有115个函
数,实用库包含43个函数,辅助库包含31个函数,实用工具库大约30多个函数,窗口库大约
20多个函数,本发明中只在每个OpenGL指令第一次执行时监测并记录它的GPU占用率和执
行时间,当指令位于等待执行队列,将再次以相同的资源参数配置被调用时,直接使用历史
记录信息来预测下一个时间点的GPU占用率和执行时间,我们的实验结果表明,在不进行调
度的情况下,一个NUMA节点存在至少一个GPU过载且有GPU欠载的情况占整个GPU运行时间
的50%左右,采用本发明所述方法,通过预测来调度GPU上的云手机,从一定程度上解决负载
不均衡的问题,GPU过载时间减少78%,云手机上应用的平均执行时间缩短40%左右,由此可
以看出,本发明不仅能提高GPU的利用率,而且能有效缩短云手机上应用的执行时间。

附图说明

[0036] 图1是设置有阀值f1和f2的GPU利用率示意图。
[0037] 图2是本发明面向虚拟GPU的云手机在线调度与迁移的方法流程图。

具体实施方式

[0038] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的 附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范
围。
[0039] 在GPU虚拟环境中,一个物理GPU上通常指定了多个云手机,同时来自不同用户的云手机通常有不同的资源需求,因此在GPU上运行云手机之前,很难获取云手机的确切资源
需求,同时,云手机上的应用动态地开始与结束,也使得GPU的负载一直不断地发生变化。当
服务器监测到GPU过载时,再对其上云手机进行调度和迁移,事后处理仍然会使GPU在一段
时间内处于过载状态,甚至是超载状态;本发明的目的在于事前预测,在云手机上计算任务
执行前,通过预测GPU的占用率及执行时间,在判断可能出现GPU过载或超载时,就开始对其
上云手机进行调度和迁移,尽可能地缩短GPU处于过载状态的时间,避免使GPU处于超载的
状态,让用户QoS能保持在一个比较平稳的状态。
[0040] 本发明提出一种面向云手机的GPU计算性能的预测方法,首先为GPU设置两个阀值f1和f2,具体数值可按需设置,如图1所示,GPU利用率在0%‑f1之间为低负载或欠载,GPU利
用率在f1‑f2之间为满负载,GPU利用率在f2‑100%为超载;上述区间均为左闭右开。
[0041] 可以看出f2‑100%这个区间是预留量,以免某个云手机突然有大资源需求任务到来时,产生资源竞争,导致QoS下降的情况出现。如图2所示,该预测方法步骤如下:
[0042] 步骤1:在一个NUMA上启动一个检测线程,对该GPU上云手机的资源需求进行预测;
[0043] 步骤2:建立OpenGL函数GPU占用率和执行时间记录表,包括<参数><执行时间内>;
[0044] 所述执行时间内是指函数结束执行时间‑函数开始执行时间。
[0045] 步骤3:等待执行的任务队列中,判断位于队首的计算任务所调用的函数,是否在记录表中,若在,跳转步骤4,若不在,跳转步骤5;
[0046] 步骤4:读取记录表中的历史记录信息,计算该任务执行后GPU的占用率和执行时间,跳转步骤8;
[0047] 步骤5:在该计算任务中调用函数的前后插入时间,获取该函数的GPU占用率和执行时间;
[0048] 步骤6:将该函数的相关信息写入记录表,刷新记录表;
[0049] 所述函数的相关信息包括<参数><执行时间内>。
[0050] 步骤7:获取执行完该函数后GPU的整体占用率;
[0051] 步骤8:判断GPU状态,若欠载/低负载,跳转步骤9;若GPU状态满负载,跳转步骤3;若GPU状态过载或超载,跳转步骤10;
[0052] 步骤9:设置标志位,表示可调度云手机至该GPU之上,跳转步骤3;
[0053] 步骤10:调度云手机至状态为欠载/低负载的GPU之上,跳转步骤3。
[0054] 本发明还提供一种面向云手机的GPU计算性能的预测装置,包括:
[0055] GPU利用率设定单元,为GPU设置两个阀值f1和f2,GPU利用率在0%‑f1之间为低负载或欠载,GPU利用率在f1‑f2之间为满负载,GPU利用率在f2‑100%为超载;
[0056] 检测线程启动单元,在个NUMA上启动一个检测线程;
[0057] 记录表构建单元,用于建立OpenGL函数GPU占用率和执行时间记录表;
[0058] 第一判断单元,等待执行的任务队列中,判断位于队首的计算任务所调用的函数,是否在记录表中,若在,跳转第一单元,若不在,跳转第二单元;
[0059] 第一单元,读取记录表中的历史记录信息,计算该任务执行后GPU的占用率和执行时间,跳转第二判断单元;
[0060] 第二单元,在该计算任务中调用函数的前后插入时间,获取该函数的GPU占用率和执行时间;将该函数的相关信息写入记录表,刷新记录表;获取执行完该函数后GPU的整体
占用率;执行第二判断单元;
[0061] 第二判断单元,判断GPU状态,若欠载/低负载,跳转第三单元;若GPU状态满负载,跳转第一判断单元;若GPU状态过载或超载,跳转第四单元;
[0062] 第三单元,设置标志位,表示可调度云手机至该GPU之上,跳转第一判断单元;
[0063] 第四单元,调度云手机至状态为欠载/低负载的GPU之上,跳转第一判断单元。
[0064] 进一步的,所述的f1和f2自定义设置。
[0065] 进一步的,所述建立OpenGL函数GPU占用率和执行时间记录表,包括<参数><执行时间内>。
[0066] 进一步的,所述的函数的相关信息包括<参数><执行时间内>。
[0067] 在一种实施方式中,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的预测方
法。
[0068] 以及一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的预测方法。
[0069] 下面结合实施例对本发明技术方案作进一步说明。
[0070] 以云手机上运行游戏为例,运行初始,需要调用OpenGL GLUT扩展中的函数实现初始化,首先创建一个平台无关窗口,以便为后续的基本几何图形的绘制和纹理贴图做准备。
部分代码如下:
[0071] int main(int argc, char **argv){
[0072] glutInit(&argc, argv);
[0073] glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE |GLUT_RGBA | GLUT_STENCIL);
[0074] glutInitWindowsPosition(0,0);
[0075] glutInitWindowsSize(parentWindowWidth, parentWindowHeight);
[0076] mainWindow = glutCreateWindow(“Game Test”);
[0077] glutReshapeFunc(changeParentWindow);
[0078] ...
[0079] return(0);
[0080] }
[0081] 在这段代码中以glut开头的函数都是OpenGL GLUT扩展中的函数,当这些函数第一次被调用执行时,记录下记录它的GPU占用率和执行时间。如前所述,这段代码的功能是
创建一个平台无关的窗口,在云手机中几乎所有的APP运行前都需要调用这些函数,因此可
以在运行前就通过历史记录值提前预测出运行后的情况。
[0082] 在本申请所提供的实施例中,应该理解到,所揭露的方法、装置、设备,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块的划分,仅
仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结
合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
[0083] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0084] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用
[0085] 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产
品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一
台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述
方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read ‑
Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以
存储程序代码的介质。
[0086] 以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前
述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。