用于多显卡在不同应用间的负载均衡方法及系统技术方案

技术编号:33294897 阅读:16 留言:0更新日期:2022-05-01 00:21
本公开提供了一种用于多显卡在不同应用间的负载均衡方法及系统,其用于安装有若干块显卡的服务器,在服务器内安装所有显卡的驱动程序,并为每张显卡连接独立的显示设备,所述方法包括:基于操作系统内置的API函数,获取当前可用的显卡;获取每张可用显卡所对应的显示设备信息及其负载情况;基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。用主显示设备对应的显卡进行渲染。用主显示设备对应的显卡进行渲染。

【技术实现步骤摘要】
用于多显卡在不同应用间的负载均衡方法及系统


[0001]本公开属于计算机
,尤其涉及一种用于多显卡在不同应用间的负载均衡方法及系统。

技术介绍

[0002]本部分的陈述仅仅是提供了与本公开相关的
技术介绍
信息,不必然构成在先技术。
[0003]在云流化类型的业务系统中,3D应用、游戏等,都是运行在GPU服务器上,为了节省成本,往往是一台机器使用专用主板,安装4张或8张甚至10几张显卡,共用一台主机的CPU和内存,这样可以节省硬件成本、机柜托管成本,并且可以节约能耗、减排低碳,并且如果只有少部分3D应用在运行时,由于CPU和内存是可以集中在少量的这些应用上的,则速度可以有更好的体验。
[0004]但在云流化系统中,有个突出的难点就是:如何充分利用多张显卡的渲染能力,将显卡的算力负载均衡到多个应用中去。
[0005]Windows操作系统对于一个用户会话只使用一张独立GPU显卡,即使操作系统可以识别到有多张GPU显卡,但如果不做其他额外工作,所有启动的应用,都会运行在一张独立显卡上,无法通过简单设置实现运行在多张显卡;目前在Windows下指定某个应用由哪个显卡来渲染,并无相关资料和成熟的简便方法。
[0006]专利技术人发现,现今主流的云流化(云渲染、云游戏等)技术中,充分利用多张显卡实现负载均衡的方式,主要以下几类,且均存在诸多问题无法解决:
[0007](1)需要应用开发者在开发时,就要支持多显卡的API处理,在启动时通过选择使用哪张显卡。这种方式受限于必须应用开发者配合,而且需要在编程研发阶段就要做多显卡兼容的工作。该方式很难满足云流化业务的需要,因为作为云流化厂商,是要兼容很多已经开发、生产出来的软件的,这些已经发布的、广为使用的应用,要求其开发者重新修改,是不现实的。
[0008](2)基于对DirectX众多API接口进行Hook的方式,该方式是通过对已有的3D应用,进行外挂式DLL注入,修改其内部启动逻辑,在其调用D3D11CreateDevice等函数时,动态修改其原有的执行流程,指定一个对应的GPU显卡进入这些应用。这种方式对应用的兼容性存在问题,因为是基于外挂式注入,很多应用是有反注入、反外挂机制,这种方式就不可行;并且DirectX等调用相关GPU显卡的API函数众多,挨个去尝试注入,也是需要耗费很多时间的事情,不够简洁和稳定。
[0009](3)采用一些虚拟化的方案,比如将每张GPU虚拟直通到一台单独的虚拟机中,这种方式就更为麻烦,而且虚拟化后,很多系统资源的使用,需要经过虚拟化中转一层,也造成了一定的资源损耗。
[0010](4)从硬件层借助多显卡交火、SLI等技术,通过硬件连接线,将多张显卡连接到一起,当一张显卡使用。但这种模式一方面要求所有显卡型号必须完全相同,有诸多限制;另
一方面,通过交火这种连接后,性能并不是两张显卡的叠加,比如显存等并不是叠加的效果,两张显卡连接后,可能只能起到1.5张显卡左右的性能效果,浪费了很多GPU算力。

技术实现思路

[0011]本公开为了解决上述问题,提供了一种用于多显卡在不同应用间的负载均衡方法及系统,所述方案基于操作系统中内置的API接口,通过进行主显示设备切换的方式,实现了不同应用间的负载均衡;所述方案不需要侵入原有应用,也不需要复杂的虚拟化,更容易兼容各种应用,不存在兼容性问题。
[0012]根据本公开实施例的第一个方面,提供了一种用于多显卡在不同应用间的负载均衡方法,其用于安装有若干块显卡的服务器,在服务器内安装所有显卡的驱动程序,并为每张显卡连接独立的显示设备,所述方法包括:
[0013]基于操作系统内置的API函数,获取当前可用的显卡;
[0014]获取每张可用显卡所对应的显示设备信息及其负载情况;
[0015]基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;
[0016]启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。
[0017]进一步的,所述将该显卡对应的显示设备设置为主显示设备,具体为:将主显示设备坐标设置为(0,0),基于主显示设备的坐标及其尺寸,获得其他显示设备的坐标。
[0018]进一步的,所述基于操作系统内置的API函数,获取当前可用的显卡,所述API函数具体为ChangeDisplaySettingsEx。
[0019]进一步的,所述均衡算法采用轮询方法或最低负载优先算法,其中,所述轮询方法为每次启动待运行的应用时,按照显卡编号顺序进行使用;显卡数量不足时,从初始编号的显卡进行循环;所述最低负载有限算法为从所有可用显卡中选择负载最低的显卡。
[0020]进一步的,所述属性信息包括显卡对应的显示设备信息及其负载情况。
[0021]进一步的,所述显示设备可采用实际主显示设备或虚拟主显示设备,所述虚拟主显示设备采用显卡欺骗器。
[0022]根据本公开实施例的第二个方面,提供了一种用于多显卡在不同应用间的负载均衡系统,包括:
[0023]可用显卡获取单元,其用于基于操作系统内置的API函数,获取当前可用的显卡;
[0024]显卡属性获取单元,其用于获取每张可用显卡的属性信息;
[0025]主显示设备设置单元,其用于基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;
[0026]渲染单元,其用于启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。
[0027]根据本公开实施例的第三方面,提供了一种服务器,包括主板和处理器,所述主板上安装有若干张显卡,其处理器执行的应用程序在选择显卡进行渲染时,采用上述的一种用于多显卡在不同应用间的负载均衡方法。
[0028]根据本公开实施例的第四个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上运行的计算机程序,所述处理器执行所述程序时实现所述的一种用于多显卡在不同应用间的负载均衡方法。
[0029]根据本公开实施例的第五个方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的一种基于动静检测结合的会议轮询中人体目标检测方法一种用于多显卡在不同应用间的负载均衡方法。
[0030]与现有技术相比,本公开的有益效果是:
[0031](1)本公开提供了一种用于多显卡在不同应用间的负载均衡方法及系统,其提供了一种极为简单便捷的切换不同独立显卡,执行不同应用的方法,该方法相比目前已有的其他方法,只需要简单的几个函数调用,在便捷性上极具优势;同时,本方法基于的是Windows的一些API使用,不需要侵入原有应用,也不需要复杂的虚拟本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于多显卡在不同应用间的负载均衡方法,其特征在于,其用于安装有若干块显卡的服务器,在服务器内安装所有显卡的驱动程序,并为每张显卡连接独立的显示设备,所述方法包括:基于操作系统内置的API函数,获取当前可用的显卡;获取每张可用显卡所对应的显示设备信息及其负载情况;基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。2.如权利要求1所述的一种用于多显卡在不同应用间的负载均衡方法,其特征在于,所述将该显卡对应的显示设备设置为主显示设备,具体为:将主显示设备坐标设置为(0,0),基于主显示设备的坐标及其尺寸,获得其他显示设备的坐标。3.如权利要求1所述的一种用于多显卡在不同应用间的负载均衡方法,其特征在于,所述基于操作系统内置的API函数,获取当前可用的显卡,所述API函数具体为ChangeDisplaySettingsEx。4.如权利要求1所述的一种用于多显卡在不同应用间的负载均衡方法,其特征在于,所述均衡算法采用轮询方法或最低负载优先算法,其中,所述轮询方法为每次启动待运行的应用时,按照显卡编号顺序进行使用;显卡数量不足时,从初始编号的显卡进行循环;所述最低负载有限算法为从所有可用显卡中选择负载最低的显卡。5.如权利要求1所述的一种用于多显卡在不同应用间的负载均衡方法,其特征在于,所述属性信息包括显卡对应的显示设备信息及其负...

【专利技术属性】
技术研发人员:张鹏高玉飞
申请(专利权)人:济南点量软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1