本公开涉及计算机,尤其涉及一种gpu的命令处理方法、gpu的命令处理装置、电子设备、存储介质和程序产品。
背景技术:
1、gpu(graphic processing unit,图形处理器),又称显示核心、视觉处理器、显示芯片,是一种能够在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机)等上做图像和图形相关运算工作的处理器。
2、gpu最初是作为专门用于加速特定3d(3dimensions,三维)渲染任务的asic(application specific integrated circuit,专用集成电路)开发而成的。随着时间的推移,这些功能固定的引擎变得更加可编程化、更加灵活。尽管图形处理和当下视觉效果越来越真实的顶级游戏仍是gpu的主要功能,但同时,它也已经演化为用途更普遍的并行处理器,能够处理越来越多的应用程序。
3、目前,通常通过提高gpu的硬件性能来提高gpu的命令处理效率。如何在有限的gpu资源下,提高gpu的命令处理效率,是亟待解决的技术问题。
技术实现思路
1、本公开提供了一种gpu的命令处理技术方案。
2、根据本公开的一方面,提供了一种gpu的命令处理方法,包括:
3、获取gpu的负载信息;
4、响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu;其中,所述cpu用于响应于接收到所述gpu对应的命令请求队列中的任一命令,通过所述cpu中的gpu模拟程序处理所述命令。
5、通过获取gpu的负载信息,响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu,其中,所述cpu用于响应于接收到所述gpu对应的命令请求队列中的任一命令,通过所述cpu中的gpu模拟程序处理所述命令,由此在gpu处于高负载状态时,能够将gpu的一部分负载卸载到cpu侧,利用cpu中的gpu模拟程序处理gpu对应的命令请求队列中的至少部分命令,从而在gpu处于高负载状态时,能够通过cpu分担gpu的负载,利用cpu提高gpu对应的命令请求队列的处理效率,进而不仅能够在有限的gpu资源下提高电子设备的综合性能,还能够提高cpu的利用率。
6、在一种可能的实现方式中,所述预设的高负载状态包括第一预设高负载状态;
7、所述响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu,包括:
8、响应于根据所述gpu的负载信息,确定所述gpu处于所述第一预设高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu。
9、在该实现方式中,通过响应于根据所述gpu的负载信息,确定所述gpu处于所述第一预设高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu,由此可以在gpu的负载过高情况下,利用cpu处理gpu对应的命令请求队列中的至少部分命令,从而能够在有限的gpu资源下提高整机性能。
10、在一种可能的实现方式中,所述gpu的负载信息包括所述gpu的负载率;
11、所述方法还包括:
12、响应于所述gpu的负载率大于或等于第一预设负载率,确定所述gpu处于所述第一预设高负载状态。
13、在该实现方式中,通过响应于所述gpu的负载率大于或等于第一预设负载率,确定所述gpu处于所述第一预设高负载状态,由此能够基于第一预设负载率准确地判断gpu是否处于第一预设高负载状态。
14、在一种可能的实现方式中,所述预设的高负载状态包括第二预设高负载状态;
15、所述响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu,包括:
16、获取所述gpu对应的命令请求队列中的命令的数量;
17、响应于根据所述gpu的负载信息和所述数量,确定所述gpu处于所述第二预设高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu。
18、在该实现方式中,通过获取所述gpu对应的命令请求队列中的命令的数量,并响应于根据所述gpu的负载信息和所述数量,确定所述gpu处于所述第一预设高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu,由此可以在gpu的负载较高且gpu对应的命令请求队列中的命令的数量较大的情况下,利用cpu处理gpu对应的命令请求队列中的至少部分命令,从而能够在有限的gpu资源下提高整机性能。
19、在一种可能的实现方式中,所述gpu的负载信息包括所述gpu的负载率;
20、所述方法还包括:
21、响应于所述gpu的负载率大于或等于第二预设负载率,且所述数量大于或等于预设数量,确定所述gpu处于所述第二预设高负载状态。
22、在该实现方式中,通过响应于所述gpu的负载率大于或等于第二预设负载率,且所述数量大于或等于预设数量,确定所述gpu处于所述第二预设高负载状态,由此能够基于第二预设负载率和预设数量准确地判断gpu是否处于第二预设高负载状态。
23、在一种可能的实现方式中,所述响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu,包括:
24、获取所述cpu的负载信息;
25、响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,且根据所述cpu的负载信息确定所述cpu处于预设的低负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu。
26、在该实现方式中,通过获取所述cpu的负载信息,并响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,且根据所述cpu的负载信息确定所述cpu处于预设的低负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu,由此在gpu处于高负载状态且cpu处于预设的低负载状态时,能够将gpu的一部分负载卸载到cpu侧,通过cpu分担gpu的负载,这样能够在gpu高负载的情况下提高硬件的使用效率,从而能够在有限的gpu资源下提高电子设备的综合性能。
27、在一种可能的实现方式中,所述cpu的负载信息包括所述cpu的负载率;
28、所述方法还包括:
29、响应于所述cpu的负载率小于或等于第三预设负载率,确定所述cpu处于所述预设的低负载状态,其中,所述第三预设负载率小于第一预设负载率,且所述第三预设负载率小于第二预设负载率。
30、在该实现方式中,通过响应于所述cpu的负载率小于或等于第三预设负载率,确定所述cpu处于所述预设的低负载状态,其中,所述第三预设负载率小于第一预设负载率,且所述第三预设负载率小于第二预设负载率,由此能够基于第三预设负载率准确地判断cpu是否处于预设的低负载状态。
31、在一种可能的实现方式中,所述将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu,包括:
32、通过中断将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu。
33、在该实现方式中,通过中断将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu,由此cpu能够及时获取到gpu对应的命令请求队列中的命令,从而有助于cpu更及时地处理gpu对应的命令请求队列中的命令。
34、在一种可能的实现方式中,所述方法还包括:
35、响应于来自于所述cpu的命令处理结果,将所述命令处理结果发送给所述gpu。
36、在该实现方式中,响应于来自于所述cpu的命令处理结果,将所述命令处理结果发送给所述gpu,由此能够与gpu进行命令处理进度的同步。
37、在一种可能的实现方式中,所述方法还包括:
38、将来自于所述cpu的命令处理结果写入所述gpu对应的命令响应队列中;
39、向所述cpu发送命令完成消息。
40、在该实现方式中,命令处理器在将来自于所述cpu的任一命令对应的命令处理结果写入所述gpu对应的命令响应队列中之后,可以向cpu发送命令完成消息,以通知cpu该命令已完成。
41、在一种可能的实现方式中,所述cpu还用于响应于任一命令对应的命令完成消息,通知图形驱动所述命令已完成。
42、在该实现方式中,通过cpu响应于任一命令对应的命令完成消息,通知图形驱动所述命令已完成,由此图形驱动可以执行下一步的操作。
43、在一种可能的实现方式中,所述gpu对应的命令请求队列中的命令包括图像渲染命令;
44、所述方法还包括:
45、将所述gpu处理所述图像渲染命令得到的画面帧和所述gpu模拟程序处理所述图像渲染命令得到的画面帧按顺序推入帧队列中。
46、在该实现方式中,通过将所述gpu处理所述图像渲染命令得到的画面帧和所述gpu模拟程序处理所述图像渲染命令得到的画面帧按顺序推入帧队列中,由此能够使gpu和cpu中的gpu模拟程序渲染得到的画面帧按顺序显示。
47、根据本公开的一方面,提供了一种gpu的命令处理装置,包括:
48、获取模块,用于获取gpu的负载信息;
49、分发模块,用于响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu;其中,所述cpu用于响应于接收到所述gpu对应的命令请求队列中的任一命令,通过所述cpu中的gpu模拟程序处理所述命令。
50、在一种可能的实现方式中,所述预设的高负载状态包括第一预设高负载状态;
51、所述分发模块用于:
52、响应于根据所述gpu的负载信息,确定所述gpu处于所述第一预设高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu。
53、在一种可能的实现方式中,所述gpu的负载信息包括所述gpu的负载率;
54、所述装置还包括:
55、第一确定模块,用于响应于所述gpu的负载率大于或等于第一预设负载率,确定所述gpu处于所述第一预设高负载状态。
56、在一种可能的实现方式中,所述预设的高负载状态包括第二预设高负载状态;
57、所述分发模块用于:
58、获取所述gpu对应的命令请求队列中的命令的数量;
59、响应于根据所述gpu的负载信息和所述数量,确定所述gpu处于所述第二预设高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu。
60、在一种可能的实现方式中,所述gpu的负载信息包括所述gpu的负载率;
61、所述装置还包括:
62、第二确定模块,用于响应于所述gpu的负载率大于或等于第二预设负载率,且所述数量大于或等于预设数量,确定所述gpu处于所述第二预设高负载状态。
63、在一种可能的实现方式中,所述分发模块用于:
64、获取所述cpu的负载信息;
65、响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,且根据所述cpu的负载信息确定所述cpu处于预设的低负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu。
66、在一种可能的实现方式中,所述cpu的负载信息包括所述cpu的负载率;
67、所述装置还包括:
68、第三确定模块,用于响应于所述cpu的负载率小于或等于第三预设负载率,确定所述cpu处于所述预设的低负载状态,其中,所述第三预设负载率小于第一预设负载率,且所述第三预设负载率小于第二预设负载率。
69、在一种可能的实现方式中,所述分发模块用于:
70、通过中断将所述gpu对应的命令请求队列中的至少部分命令分发给所述cpu。
71、在一种可能的实现方式中,所述装置还包括:
72、第一发送模块,用于响应于来自于所述cpu的命令处理结果,将所述命令处理结果发送给所述gpu。
73、在一种可能的实现方式中,所述装置还包括:
74、写入模块,用于将来自于所述cpu的命令处理结果写入所述gpu对应的命令响应队列中;
75、第二发送模块,用于向所述cpu发送命令完成消息。
76、在一种可能的实现方式中,所述cpu还用于响应于任一命令对应的命令完成消息,通知图形驱动所述命令已完成。
77、在一种可能的实现方式中,所述gpu对应的命令请求队列中的命令包括图像渲染命令;
78、所述装置还包括:
79、推入模块,用于将所述gpu处理所述图像渲染命令得到的画面帧和所述gpu模拟程序处理所述图像渲染命令得到的画面帧按顺序推入帧队列中。
80、根据本公开的一方面,提供了一种电子设备,包括cpu、gpu和命令处理器;
81、所述命令处理器用于获取所述gpu的负载信息,并响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu;
82、所述cpu用于响应于接收到所述gpu对应的命令请求队列中的任一命令,通过所述cpu中的gpu模拟程序处理所述命令。
83、根据本公开的一方面,提供了一种电子设备,包括:一个或多个处理器;用于存储可执行指令的存储器;其中,所述一个或多个处理器被配置为调用所述存储器存储的可执行指令,以执行上述方法。
84、根据本公开的一方面,提供了一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。
85、根据本公开的一方面,提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备中运行时,所述电子设备中的处理器执行上述方法。
86、在本公开实施例中,通过获取gpu的负载信息,响应于根据所述gpu的负载信息确定所述gpu处于预设的高负载状态,将所述gpu对应的命令请求队列中的至少部分命令分发给cpu,其中,所述cpu用于响应于接收到所述gpu对应的命令请求队列中的任一命令,通过所述cpu中的gpu模拟程序处理所述命令,由此在gpu处于高负载状态时,能够将gpu的一部分负载卸载到cpu侧,利用cpu中的gpu模拟程序处理gpu对应的命令请求队列中的至少部分命令,从而在gpu处于高负载状态时,能够通过cpu分担gpu的负载,利用cpu提高gpu对应的命令请求队列的处理效率,进而不仅能够在有限的gpu资源下提高电子设备的综合性能,还能够提高cpu的利用率。
87、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
88、根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。