图形处理器中的任务处理方法及相关设备转让专利

申请号 : CN202011147570.5

文献号 : CN111966504B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张富春

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请涉及云计算技术领域,具体涉及一种图形处理器中的任务处理方法及相关设备,该方法包括:获取使用请求,所述使用请求用于请求使用图形处理器资源,所述使用请求指示了目标算力;获取所述使用请求对应的优先级;若所述使用请求对应的优先级不低于第一优先级,根据所述目标算力为所述使用请求创建N个计算任务,N为大于1的整数;在为所述N个计算任务所分别确定的虚拟图形处理器上并行执行所述N个计算任务。本申请实现了使用请求对应的优先级大于第一优先级时,缩短了使用请求的处理时间,实现了基于优先级对使用请求进行灵活处理。

权利要求 :

1.一种图形处理器中的任务处理方法,其特征在于,包括:获取使用请求,所述使用请求用于请求使用图形处理器资源,所述使用请求指示了目标算力;

获取各虚拟图形处理器的占用率;以及获取图形处理器内存与共享内存池之间的总线带宽信息;

若各虚拟图形处理器的占用率超过设定阈值,且所述总线带宽信息指示存在剩余带宽,则将所述使用请求对应的计算任务添加至计算任务队列中,并执行从传送队列中所提取的数据传送任务,通过执行所述数据传送任务将计算数据从所述共享内存池传送至图形处理器内存中,或者将所述图形处理器内存中的计算结果传送至所述共享内存池中。

2.根据权利要求1所述的方法,其特征在于,所述获取使用请求之后,所述方法还包括:获取所述使用请求对应的优先级;

若所述使用请求对应的优先级不低于第一优先级,根据所述目标算力为所述使用请求创建N个计算任务,N为大于1的整数;

在为所述N个计算任务所分别确定的虚拟图形处理器上并行执行所述N个计算任务。

3.根据权利要求1所述的方法,其特征在于,所述获取各虚拟图形处理器的占用率之后,所述方法还包括:若根据各虚拟图形处理器的占用率确定存在被部分占用的虚拟图形处理器,则在所述被部分占用的虚拟图形处理器上执行为所述使用请求所创建的计算任务。

4.根据权利要求1所述的方法,其特征在于,所述获取使用请求之后,所述方法还包括:获取各虚拟图形处理器的状态信息;

根据所述状态信息确定所述各虚拟图形处理器当前所能提供的最大算力;

若各虚拟图形处理器当前所能提供的最大算力均小于所述目标算力,则为所述使用请求分配至少两个虚拟图形处理器,以通过所分配的至少两个虚拟图形处理器并行执行所述使用请求对应的计算任务。

5.根据权利要求2所述的方法,其特征在于,所述获取所述使用请求对应的优先级之后,所述方法还包括:若所述使用请求对应的优先级低于第二优先级,则将所述使用请求对应的计算任务添加至计算任务队列中进行排队,所述第二优先级低于第一优先级。

6.根据权利要求1所述的方法,其特征在于,所述获取使用请求之后,所述方法还包括:获取所述使用请求对应的使用限制信息;

根据所述使用限制信息所限定的上限算力,为所述使用请求分批创建批次计算任务,所述批次计算任务对应的算力不超过所述上限算力;

在为所述批次计算任务所分配的虚拟图形处理器上执行所述批次计算任务。

7.根据权利要求2所述的方法,其特征在于,所述在为所述N个计算任务所分别确定的虚拟图形处理器上并行执行所述N个计算任务,包括:对于所述N个计算任务中的每一计算任务,根据所述使用请求对应的内存地址信息的指示,从共享内存池上获取对应的计算数据,所述使用请求所来源的用户进程在所述共享内存池中进行内存申请得到所述内存地址信息;

在所述计算任务所对应的虚拟图形处理器上,通过在标准库中调用的目标接口函数来根据所述计算数据进行计算,得到对应的计算结果;其中,所述使用请求所来源的用户进程根据所加载的代理库将调用信息发送至服务端,所述服务端根据所述调用信息中对应于所述目标接口函数的接口名称在所述标准库中进行重定向,实现所述目标接口函数的调用,所述代理库中的接口函数与所述标准库中的接口函数同名。

8.根据权利要求2或7所述的方法,其特征在于,所述方法还包括:将所述计算任务对应的计算结果从图形处理器内存拷贝到共享内存池中;

向所述使用请求所来源的用户进程返回计算结果通知,所述计算结果通知包括所述计算结果在所述共享内存池中的存放位置信息。

9.一种图形处理器中的任务处理装置,其特征在于,包括:使用请求获取模块,用于获取使用请求,所述使用请求用于请求使用图形处理器资源,所述使用请求指示了目标算力;

占用率获取模块,用于获取各虚拟图形处理器的占用率;以及总线带宽信息获取模块,用于获取图形处理器内存与共享内存池之间的总线带宽信息;

处理模块,用于若各虚拟图形处理器的占用率超过设定阈值,且所述总线带宽信息指示存在剩余带宽,则将所述使用请求对应的计算任务添加至计算任务队列中,并执行从传送队列中所提取的数据传送任务,通过执行所述数据传送任务将计算数据从所述共享内存池传送至图形处理器内存中,或者将所述图形处理器内存中的计算结果传送至所述共享内存池中。

10.一种电子设备,其特征在于,包括:

处理器;

存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如权利要求1至8中任一项所述的方法。

11.一种计算机可读存储介质,其上存储有计算机可读指令,其特征在于,当所述计算机可读指令被处理器执行时,实现如权利要求1至8中任一项所述的方法。

说明书 :

图形处理器中的任务处理方法及相关设备

技术领域

[0001] 本申请涉及云计算技术领域,具体而言,涉及一种图形处理器中的任务处理方法及相关设备。

背景技术

[0002] 在云环境中,为了提高图形处理器(Graphics Processing Unit, GPU)的利用率,通过虚拟化技术将图形处理器虚拟化为多个虚拟图形处理器,从而,可以让运行在数据中心服务器上的虚拟机实例共享使用一个或者多个虚拟图像处理器进行任务处理,例如进行图像渲染等。而现有基于虚拟图形处理器所进行的任务处理存在灵活性差的问题。

发明内容

[0003] 本申请的实施例提供了一种图形处理器中的任务处理方法及相关设备,以解决相关技术中虚拟图形处理器进行任务处理存在灵活性差的问题。
[0004] 本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
[0005] 根据本申请实施例的一个方面,提供了一种图形处理器中的任务处理方法,包括:
[0006] 获取使用请求,所述使用请求用于请求使用图形处理器资源,所述使用请求指示了目标算力;
[0007] 获取所述使用请求对应的优先级;
[0008] 若所述使用请求对应的优先级不低于第一优先级,根据所述目标算力为所述使用请求创建N个计算任务,N为大于1的整数;
[0009] 在为所述N个计算任务所分别确定的虚拟图形处理器上并行执行所述N个计算任务。
[0010] 根据本申请实施例的一个方面,提供了一种图形处理器中的任务处理装置,包括:
[0011] 使用请求获取模块,用于获取使用请求,所述使用请求用于请求使用图形处理器资源,所述使用请求指示了目标算力;
[0012] 优先级获取模块,用于获取所述使用请求对应的优先级;
[0013] 计算任务创建模块,用于若所述使用请求对应的优先级不低于第一优先级,根据所述目标算力为所述使用请求创建N个计算任务,N为大于1的整数;
[0014] 计算任务执行模块,用于在为所述N个计算任务所分别确定的虚拟图形处理器上并行执行所述N个计算任务。
[0015] 根据本申请实施例的一个方面,提供了一种电子设备,包括:处理器;存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如上所述的方法。
[0016] 根据本申请实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被处理器执行时,实现如上所述的方法。
[0017] 在本申请的方案中,在使用请求对应的优先级不低于第一优先级时,为使用请求所请求完成的处理任务创建N个计算任务,并为每一计算任务对应分配了虚拟图形处理器,由所分配的虚拟图形处理器并行执行所创建的N个计算任务,相当于对使用请求所请求完成的处理任务进行细分,相较于将使用请求所请求完成的处理任务分配至由一个虚拟图形处理器完成,本方案中将该处理任务分摊至N个虚拟图形处理器并由该N个虚拟图形处理器并行执行该N个计算任务,大幅缩短了使用请求所请求完成的处理任务的处理时间,实现了在图形处理器中根据使用请求对应的优先级对使用请求进行灵活处理。
[0018] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

[0019] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
[0020] 图1示出了可以应用本申请实施例的技术方案的示例性系统架构的示意图。
[0021] 图2是根据本申请的一个实施例示出的图形处理器中的任务处理方法的流程图。
[0022] 图3是图2对应实施例的步骤240在一实施例中的流程图。
[0023] 图4是根据一实施例示出的步骤210之后步骤在另一实施例中的流程图。
[0024] 图5是根据一实施例示出的步骤210之后步骤在另一实施例中的流程图。
[0025] 图6是根据一实施例示出的步骤210之后步骤在另一实施例中的流程图。
[0026] 图7是根据本申请一实施例示出的图形处理器中的任务处理方法的时序图。
[0027] 图8是根据一实施例示出的图形处理器中的任务处理装置的框图。
[0028] 图9示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。

具体实施方式

[0029] 现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
[0030] 此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
[0031] 附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
[0032] 附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
[0033] 在进行具体说明之前,先对本申请的方案中所涉及的术语进行解释。
[0034] GPU:图形处理器(Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像、图形等并行处理的微处理器。
[0035] vGPU:virtual GPU,虚拟GPU。通常指把一个物理GPU虚拟化为多个逻辑GPU,且虚拟GPU之间提供一定的资源隔离能力。
[0036] OpenCL:全称是Open Computing Language(开放运算语言),其是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的应用。
[0037] OpenGL(Open Graphics Library,开放图形库或开放式图形库):是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API,Application Programming Interface)。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
[0038] Vulkan: Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),可以认为是下一代的OpenGL。
[0039] CUDA:CUDA(Compute Unified Device Architecture,统一计算设备架构)是显卡厂商NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
[0040] DirectX: DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。DirectX已被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发。
[0041] 云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
[0042] 在云环境中,为了提高图形处理器的利用率,通过虚拟化技术将图形处理器虚拟化为多个虚拟图形处理器,从而,可以让运行在数据中心服务器上的虚拟机实例共享使用一个或者多个虚拟图像处理器进行图形运算。而现有基于虚拟图形处理器所进行的任务处理中,存在灵活性差的问题。基于此,提出了本申请的方案。
[0043] 图1示出了可以应用本申请实施例的技术方案的示例性系统架构的示意图。
[0044] 如图1所示,该系统架构包括应用层110、接口层120、代理层130、内存管道180、服务进程150、共享内存池140、以及图形图处理器内存160和标准库170。
[0045] 应用层110中部署了业务代码,该业务代码是为实现图形处理器计算的架构层次。该业务代码可以是实现机器学等通用计算框架下的业务代码,也可以是图形/游戏引擎下的业务代码,在此不进行具体限定。
[0046] 举例来说,若用户需要用python来做一个机器学习方面的应用,使用类似cupy一类的组件来实现大量数据的矩阵计算,该种矩阵计算的场景很适合放到图形处理器上进行并行计算。那么业务代码可以为:
[0047] a = cupy.array([[1,2,3],[3,4,5],[4,5,6]])
[0048] b= cupy.array([[11,22,33],[33,44,55],[44,55,66]])
[0049] c = cupy.dot(a, b)
[0050] 以上业务代码表示执行矩阵的乘法,具体执行的过程会转换为图形处理器上的并行计算。
[0051] 业务代码所实现的业务处理需要通过图形处理器结合该图形处理器对应的标准库中的接口函数来实现,标准库可以理解为用于图形处理器进行计算的计算库。
[0052] 其中,接口层120中提供了可供调用的接口函数(又可以称为应用程序接口),代理层中提供了与标准库中同名的函数。
[0053] 在需要进行调用标准库中的接口函数时,先基于代理层中同名的接口函数发起调用请求,该调用请求被转发到服务进程中,由服务进程将该调用请求重定向至标准库中,以调用标准库中对应接口名称的接口函数。
[0054] 标准库170例如图1中右侧所示的libcudart.so、libOpenCL.so、libvulkan.so、libopengl.so、DirectX.dll。
[0055] 虚拟图形处理器根据从标准库中所调用的接口函数和从共享内存池中获取的计算数据进行计算,以执行相应的任务。
[0056] 在需要利用图形处理器进行计算时,创建用户进程,基于用户进程与服务进程150进行通讯,实现调用标准库170中的接口函数。
[0057] 具体的,用户进程与服务进程150之间通过内存管道180进行通讯,内存管道180用于传递业务进程与服务进程150之间的命令和事件。
[0058] 在虚拟图形处理器进行并行计算的过程中,需要先将计算数据从主机内存拷贝到图形处理器内存中,然后虚拟图形处理器根据图形处理器内存中的计算数据进行计算,得到对应的计算结果;之后将虚拟图形处理器内存中的计算结果拷贝到主机内存中。其中,虚拟图形处理器内存与主机内存之间通过PCI-E总线进行数据交换。
[0059] 具体在本实施例中,服务进程150中设置了三种队列,一种为计算队列,一种为第一传送队列,另一种为第二传送队列,其中计算队列用于存放需要由虚拟图形处理器进行计算的任务;第一传送队列用于存放从主机内存拷贝数据到图形处理器内存160的数据传送任务;第二传送队列用于存放从图形处理器内存160拷贝数据到主机内存的数据传送任务。进一步的,由于第一传送队列和第二传送队列均是用于存储数据传送任务,第一传送队列和第二传送队列可以统称为传送队列。
[0060] 在图1所示的实施例中,为了提高进程间通讯的效率,部署了该共享内存池140,通过将计算数据以及计算结果等存入共享内存池140中,而不是主机内存中。
[0061] 进一步的,在图1中,服务进程150中还部署了状态机,该状态机可以是针对高阶的图形引擎,例如DirectX, OpenGL等图形引擎部署的。在进行图形渲染等任务中,状态机保存了图形渲染的上下文信息,比如纹理、材质、以及其他2D/3D图形领域的各种数据。因为3D渲染/游戏渲染是个非常复杂的过程,因此往往通过状态机的方式来使用图形渲染能力。使用者只需要修改状态机的对应角色的状态,图形引擎就会自动根据状态渲染出对应的图形,从而大大减小图形渲染应用的开发难度。例如:状态机里面会存储某个图形元素的坐标,只要修改状态机中这个元素为新的坐标,图形引擎就可以渲染出新位置的对应图形。
[0062] 随着云计算技术的成熟,云计算技术被应用到游戏领域中,云游戏应运而生。云游戏(Cloud gaming)又可以称为游戏点播(Gaming on demand),其是一种以云计算为基础的在线游戏技术。
[0063] 在云游戏场景下,游戏应用并不在玩家游戏终端,而是在云端服务器中运行,并由云端服务器将游戏场景渲染为视频音频流,通过网络传输给玩家游戏终端。从而,玩家所在终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取玩家输入指令并发送给云端服务器的能力即可。
[0064] 云端服务器通过其内部署的图形处理器来进行游戏场景的渲染。在云游戏场景下,由于需要图形处理器处理的任务较多,一般需要将图形处理器虚拟化多个虚拟图形处理器,以使同一物理的图形处理器可以同时处理多个任务,且多个任务之间不受干扰。
[0065] 在本申请的一些实施例中,云游戏的云端服务器可以按照图1所示的架构进行部署,使云端服务器中所虚拟出的虚拟图形处理器按照本申请的方法来灵活进行图像渲染任务的处理,来保证玩家所在的游戏终端可以及时地接收到视频音频流。
[0066] 当然,在其他需要通过图形处理器进行并行计算的应用场景中,例如矩阵计算,也可以按照图1所示的架构进行部署,以使其中所虚拟出的虚拟图形处理器按照本申请的方案灵活地进行任务的处理。
[0067] 当然,以上仅仅是示例性示出的可以应用于本申请的系统架构,并不能认为是对本申请使用范围的限制。
[0068] 以下对本申请实施例的技术方案的实现细节进行详细阐述:
[0069] 图2是根据本申请的一个实施例示出的图形处理器中的任务处理方法的流程图,该图形处理器中的任务处理方法可以由具有计算处理功能的设备来执行,比如可以由服务器来执行。参照图2所示,该图形处理器中的任务处理方法至少包括步骤210至步骤240,详细介绍如下。
[0070] 步骤210,获取使用请求,使用请求用于请求使用图形处理器资源,使用请求指示了目标算力。
[0071] 客户端在需要进行图形渲染或者图形处理、并行计算等时,发起使用请求,以请求使用服务端中的图形处理器(GPU)资源。也就是说,客户端在有需要图形处理器完成的任务时,向服务端发起使用请求。可以理解的是,该使用请求指示了需要由图形处理器进行的处理,例如图像渲染、矩阵计算等任务。
[0072] 目标算力是指客户端向服务端的图形处理器所请求的算力,算力用于表征数据处理的计算量。客户端在需要由图形处理器完成的计算任务时向服务端发起使用请求,该使用请求的目标算力用于指示向服务端所请求的计算量。
[0073] 在一实施例中,算力可以通过每秒浮点运算次数(floating-point operations per second,FLOPS)来表示,每秒浮点运算次数是指每秒执行浮点运算的次数。
[0074] 步骤220,获取使用请求对应的优先级。
[0075] 在本申请的一些实施例中,使用请求所对应的优先级可以是根据所来源的客户端设定的,也就是说,预先为客户端设定优先级,从而,来源于该客户端的使用请求即是为该客户端所设定的优先级。
[0076] 在本申请的一些实施例中,使用请求所对应的优先级可以是根据使用请求所请求由图形处理器完成的处理任务来设定的,也就是说,预先为各类型的处理任务设定优先级,则服务端在接收到使用请求后,对应根据该使用请求所对应处理任务所属的类型来确定该处理任务对应的优先级,所确定的优先级即是使用请求对应的优先级。
[0077] 步骤230,若使用请求对应的优先级不低于第一优先级,根据目标算力为使用请求创建N个计算任务,N为大于1的整数。
[0078] 步骤240,在为N个计算任务所分别确定的虚拟图形处理器上并行执行N个计算任务。
[0079] 在本申请的方案中,若使用请求对应的优先级不低于第一优先级,表明该使用请求对应的优先级较高,需要图形处理器优先处理。进一步的,由于该使用请求对应的优先级较高,服务端不仅对该使用请求进行优先处理,而且,进一步地减少完成该使用请求所对应处理任务所花费的时间。
[0080] 具体的,通过为使用请求创建N个计算任务,并将该N个计算任务分配至N个虚拟图形处理器,进而,由所分配的N个虚拟图形处理器并行对该N个计算任务进行处理。
[0081] 其中,虚拟图形处理器是由物理图形处理器进行虚拟化得到的,各个虚拟图形处理器之间彼此隔离。
[0082] 其中,N的值可以预先设定的固定值,其还还可以结合使用请求的所对应的优先级和/或使用请求所对应的目标算力来设定。
[0083] 举例来说,可以预先设定优先级与N之间的映射关系,则在步骤230中,直接根据使用请求对应的优先级和优先级与N之间的映射关系,来为该使用请求确定N的值。
[0084] 又例如,可以预先设定目标算力与N之间的映射关系,则在步骤230中,根据使用请求对应的目标算力、目标算力与N之间的映射关系,来为该使用请求确定N的值。
[0085] 又例如,可以预先设定N的每一取值所需要满足的条件,其中,该条件与使用请求对应的优先级和使用请求所对应的目标算力相关,因此,基于该设定,对应根据使用请求所对应的优先级和所对应的目标算力进行条件匹配,对应反向为该使用请求确定N的值。
[0086] 可以理解的是,在为使用请求创建N个计算任务的过程中,对应为每个计算任务分配了对应的算力。
[0087] 在本申请的一些实施例中,可以将目标算力平均分配至N个计算任务。当然,在其他实施例中,N个计算任务所分别被分配的算力也可以不相等。
[0088] 在本申请的一些实施例中,所创建的N个计算任务对应的算力之和不低于目标算力,则并行执行完成该N个计算任务时,该使用请求所请求完成的处理任务对应被完成。
[0089] 在本申请的方案中,为使用请求所请求完成的处理任务创建N个计算任务,并为每一计算任务对应分配了虚拟图形处理器,由所分配的虚拟图形处理器并行执行所创建的N个计算任务,相当于对使用请求所请求完成的处理任务进行细分,相较于将使用请求所请求完成的处理任务分配至由一个虚拟图形处理器完成,本方案中将该处理任务分摊至N个虚拟图形处理器并由该N个虚拟图形处理器并行执行该N个计算任务,大幅缩短了使用请求所请求完成的处理任务的处理时间。假设一虚拟图形处理器完成该使用请求所请求的处理任务的时间为T,则按照本申请的方案,完成该使使用请求所请求的处理任务的时间最短可以缩短至T/N。
[0090] 在本申请的一些实施例中,如图3所示,步骤240包括:步骤310,对于N个计算任务中的每一计算任务,根据使用请求对应的内存地址信息的指示,从共享内存池上获取对应的计算数据,使用请求所来源的用户进程在共享内存池中进行内存申请得到内存地址信息。
[0091] 在图形处理器中,计算任务送入到虚拟图形处理器中进行处理至得到计算结果包括如下的过程:1)把计算数据从主机内存拷贝到图形处理器内存;2)图形处理器从图形处理器内存获取计算数据进行计算,并将所得到的计算结果存放至另一区域的图形处理器内存中;3)将计算结果从图形处理器内存拷贝到主机内存中。
[0092] 在本实施例中,由于主机内存和图形处理器内存之间涉及到大量的数据拷贝过程,如果计算数据的量较大,则需要花费较多的时间进行数据拷贝,对应的,大量的系统资源将耗费在数据拷贝任务上。为了解决该问题,在服务端部署共享内存池,所有进程共享同一块内存,访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其他需要切入内核的过程来完成,而且避免了对数据的各种不必要的复制。
[0093] 共享内存的内存池是为了解决进程间通讯的大量数据传输的问题。如果没有共享内存池,两进程之间的数据传递需要涉及内核,即数据发送方,通过系统调用将数据从用户层拷贝到内核层,由内核层暂时保存该份数据;数据接收方,通过系统调用将数据从内核层提取到用户层,在该过程中,内核层扮演着“中转站”的角色,而且,在该过程中,操作系统还会将数据缓存到临时缓冲区内。
[0094] 若部署共享内存池,两个或者及其以上数量的进程共享内存区域,可以将该块内存区域映射到自己的虚拟地址空间,从此,内核不再参与双方通信,由此,通过部署共享内存池可以提高进程之间的通信效率。
[0095] 具体在本应用场景中,如果采用常规的进程间数据交换的方式进行计算数据的拷贝,则将计算数据从主机内存拷贝到图形处理器内存,需要涉及到多次数据的拷贝过程,其中涉及到将计算数据拷贝到内核层中进行中转;当计算数据的数据量较大时,则需要耗费大量的系统资源进行计算数据的拷贝,而且导致系统中大量的资源耗费在数据拷贝的过程中。
[0096] 部署共享内存池后,进行数据交换的两方,即用户进程和服务进程,由用户进程直接在共享内存池上进行内存申请,当该部分内存中存储的计算数据需要参与到图形处理器计算时,只需要把内存地址的起始位置告诉服务进程即可,该过程中并不涉及到在内核层中进行计算数据的中转,减少了通讯过程中的数据拷贝消耗,提高了通讯效率。
[0097] 在本实施例中,基于所部署的共享内存池,对于需要由虚拟图形处理器执行的每一计算任务,使用请求所来源的用户进程需要先在该共享内存池中进行内存申请,并对应获得用于指示计算数据在共享内存池上存放位置的内存地址信息,用户进程对应将该内存地址信息发送到服务端。
[0098] 在服务端接收到接收请求后,从共享内存池中内存地址信息所指示的位置处获取到对应的计算数据。
[0099] 步骤320,在计算任务所对应的虚拟图形处理器上,通过在标准库中调用的目标接口函数来根据计算数据进行计算,得到对应的计算结果;其中,使用请求所来源的用户进程根据所加载的代理库将调用信息发送至服务端,服务端根据调用信息中对应于目标接口函数的接口名称在标准库中进行重定向,实现目标接口函数的调用,代理库中的接口函数与标准库中的接口函数同名。
[0100] 在本实施例中,系统中部署了代理库,其中,代理库中各接口函数的接口名称(又称为函数名称)与标准库中各函数的函数名相同。基于所部署的代理库,客户端在需要图形处理器中的资源时,并不是直接调用标准库中的函数,而是先调用代理库中的函数,并把该调用请求发送至服务端中,由服务端根据该调用请求进行重定向,调用标准库中与该调用请求所请求调用接口函数同名的接口函数。
[0101] 其中,步骤320中所进行的重定向即根据调用信息中所指示的接口名称在标准库中定位对应接口名称的接口函数,然后对应调用所定位到的接口函数,由此实现了借助于代理库中的接口函数调用标准库中对应的同名函数。
[0102] 在本申请的一些实施例中,对于需要进行参数值输入的接口函数,客户端所发送的调用信息除了包括所要调用接口函数的接口名称外,还包括为所要调用接口函数中对应参数所输入的参数值。从而,在步骤320中,服务端基于所匹配到标准库中的接口函数,根据调用信息中各参数对应的参数值和所获取到的计算数据进行相应计算。
[0103] 在本实施例中,由于客户端并不是直接调用标准库中的接口函数,而是先调用代理库中的函数,由服务端基于该调用代理库中接口函数的调用请求进行函数重定向,调用标准库中的函数供虚拟图形处理器执行对应的计算任务,因此,便于服务端对客户端中针对图形处理器资源的使用请求进行管控,便于从总体上协调服务端中的图形处理器资源,例如便于按照使用请求对应的优先级来进行虚拟图形处理器的分配、以及下文中按照使用请求对应的使用限制所限定的上限算力来分配虚拟图形处理器资源。
[0104] 举例来说,若服务端中的图形处理器需要调用CUDA图形库中的接口函数来进行处理,假设CUDA图形库中包括libcudart.so这一动态库(其即为本申请中的标准库)。在本申请的方案中,为该动态库libcudart.so提供了对应的代理库lib_v_cudart.so,代理库lib_v_cudart.so中各接口函数与标准库libcudart.so中对应的函数同名,因此,代理库lib_v_cudart.so实现了标准库libcudart.so中所有暴露的函数。
[0105] 应用程序在运行前,通常需要编译为自身二进制文件+动态库的方式,对于程序中使用频率较高的部分,会独立为动态库的形式存在,例如windows系统中的dll文件,linux系统中的so文件。程序通过动态链接的方式来调用动态库中的接口函数,以此避免使每个程序都包含全部的功能导致自身体积会变得很大,也避免浪费内存。
[0106] 由于程序文件本身在启动的时候才会动态加载动态库,因此动态库的位置是可以通过设定环境变量来改变的。例如,linux系统中可以使用如下命令重新选择要加载的动态库的目录:export LD_LIBRARY_PATH=xxx,其中“LD_LIBRARY_PATH是Linux环境变量名”,通过该环境变量指定路径。
[0107] 具体应用到本申请的方案中,可先修改某个程序的动态加载目录,即将该程序的动态加载目录中,用代理库来替代标准库,在新的加载目录中加入代理库。由于修改了动态加载目录,因此,客户端并不需要加载标准库,也对应的并不需要对程序进行编译,实现了在不重新编译程序的情况下也可调用标准库中的接口函数。
[0108] 现有技术的GPU虚拟化技术是由NVIDIA提供的虚拟化图形处理器技术,程序如果要使用所虚拟出来的虚拟图形处理器,至少需要将代码中物理图形处理器的ID修改为虚拟图形处理器的ID,相对于本申请的方案仅修改动态加载目录的方法,本申请的方案降低了使用门槛,便于实现图形处理器的虚拟化。
[0109] 在一些未开放源码的使用场景,例如directX图形引擎、nvidia显卡驱动等,由于本申请的方案仅仅通过修改动态加载目录的方式,实现基于代理库中的接口函数调用标准库中的接口函数,该过程可以在用户态下实现,而不涉及到内核态的改动,因此,本申请的方案相当于提供了一种用户态的虚拟化方案,且该种方案能够绕开黑盒限制,而仅仅通过修改动态加载目录接口实现虚拟化图形处理器资源。
[0110] 现有技术中,对于图形处理器资源的使用,各个客户端所创建的业务进程之间互不通讯,要么完全隔离资源,要么抢占资源,无法统一进行服务器端图形处理器资源的管理和分配。而本申请的方案中,由服务端中的服务进程来统一管控针对标准库中接口函数的调用,实现了图形处理器资源的统一管理和分配。
[0111] 在本实施例中,还可以服务端部署多种图形处理应用的标准库,包括但不限于:OpenCL,OpenGL,Vulkan,CUDA,DirectX等对应的标准库。由于由服务端中的服务进程进行统一协调服务端中的图形处理器资源,服务端在接收到针对任一应用下的使用请求后,服务端可以对应根据接口名称在对应应用所对应的标准库中进行重定向,实现该接口函数的重定向和调用。
[0112] 在本申请的一些实施例中,该方法还包括:将计算任务对应的计算结果从图形处理器内存拷贝到共享内存池中;向使用请求所来源的用户进程返回计算结果通知,计算结果通知包括计算结果在共享内存池中的存放位置信息。
[0113] 如上所描述,在虚拟图形处理器执行完对应的计算任务后,所得到的结果是暂存于图形处理器内存中,在此之后,还需要将图形处理器内存中的计算结果拷贝至共享内存池中,便于客户端取用。在将计算结果拷贝至共享内存池后,即可对应获知在共享内存池中为该计算结果所分配的存储地址。由服务端向使用请求所来源的用户进行返回计算结果通知,便于客户端所在的用户进行按照计算结果通知中的存放位置信息从共享内存池中获取计算结果。
[0114] 在本申请的一些实施例中,获取使用请求对应的优先级之后,该方法还包括:
[0115] 若使用请求对应的优先级低于第二优先级,则将使用请求对应的计算任务添加至计算任务队列中进行排队,第二优先级低于第一优先级。
[0116] 若使用请求对应的优先级低于第二优先级,则表明该使用请求所对应的处理优先级较低,因此,将该使用请求所对应的计算任务添加至计算任务队列中排队,在排队过程中会优先处理其他优先级更高的使用请求对应的计算任务,由此,基于使用请求对应的优先级实现了对使用请求的差异化处理。
[0117] 在本申请的一些实施例中,步骤210之后,该方法还包括:获取各虚拟图形处理器的占用率;若根据各虚拟图形处理器的占用率确定存在被部分占用的虚拟图形处理器,则在被部分占用的虚拟图形处理器上执行为使用请求所创建的计算任务。
[0118] 虚拟图形处理器的占用率体现了所在虚拟图形处理器上图形处理器资源的占用情况,若一虚拟图形处理器的占用率达到100%,则表明该虚拟图形处理器上的计算资源被完全占用;反之,若一虚拟图形处理器的占用率低于100%,则表明该虚拟图形处理器上的计算资源被部分占用,相当于当前该虚拟图形处理器上所执行的计算任务并没有占用完该虚拟图形处理器上的计算资源。
[0119] 在存在被部分占用的虚拟图形处理器的情况下,为了保证各虚拟图形处理器上的计算资源的合理利用,在该被部分占用的虚拟图形处理器上执行为使用请求所创建的至少一个计算任务。
[0120] 值得一提的是,在本实施例中,为使用请求所创建的计算任务可以是一个也可以是多个,具体视使用请求对应的优先级、虚拟图形处理器上的计算资源等的不同而不同。
[0121] 在本申请的一些实施例中,如图4所示,步骤210之后,该方法还包括:
[0122] 步骤410,获取各虚拟图形处理器的状态信息。
[0123] 步骤420,根据状态信息确定各虚拟图形处理器当前所能提供的最大算力。
[0124] 可以理解的是,虚拟图形处理器上可能存在当前正在执行的计算任务,则该虚拟图形处理器当前所能提供的最大算力为该虚拟图形处理器的最大算力与该虚拟图形处理器提供给当前所执行计算任务的算力之差。
[0125] 步骤430,若各虚拟图形处理器当前所能提供的最大算力均小于目标算力,则为使用请求分配至少两个虚拟图形处理器,以通过所分配的至少两个虚拟图形处理器并行执行使用请求对应的计算任务。
[0126] 如果各虚拟图形处理器对应的最大算力均小于目标算力,表明在当前情况下,如果仅为使用请求创建一个计算任务,为该计算任务所分配的算力等于目标算力,大于各虚拟图形处理器当前能提供的最大算力,所创建的计算任务并不能被任一虚拟图形处理器承担。
[0127] 在此种情况下,为该使用请求分配至少两个虚拟图形处理器,相当于为该使用请求创建至少两个计算任务,每一计算任务由所分配的一虚拟图形处理器执行,通过该种方法实现了目标算力的分摊,将针对使用请求的两个及以上数量的计算任务对应分配至两个及以上数量的虚拟图形处理器执行,效果上等价于将多个虚拟图形处理器重构为一个虚拟图形处理器。
[0128] 在本申请的一些实施例中,如图5所示,步骤210之后,该方法还包括:
[0129] 步骤510,获取使用请求对应的使用限制信息。
[0130] 步骤520,根据使用限制信息所限定的上限算力,为使用请求分批创建批次计算任务,批次计算任务对应的算力不超过上限算力。
[0131] 步骤530,在为批次计算任务所分配的虚拟图形处理器上执行批次计算任务。
[0132] 使用请求对应的使用限制信息用于限定为该使用请求所分配的上限算力。
[0133] 在本实施例中,若使用请求被限定了上限算力,则通过为该使用请求分批创建批次计算任务,批次计算任务对应的算力不超过上限算力,在为该使用请求所限定的上限算力低于目标算力的情况下,则需要至少为该使用请求分批创建两个批次计算任务,该两个批次计算任务顺次执行,从而实现按比例为该使用请求开放虚拟图形处理器的算力。
[0134] 举例来说,若设定一使用请求所限定使用虚拟图形处理器算力的上限比例为21%,若该使用请求所来源的用户进程在单位时间内提交了1TFLOPS的算力任务量(相当于目标算力),则按照所设定的上限比例,则为该使用请求所限定的上限算力为0.21TFLOPS,则单位时间内至多为该使用请求放开0.21TFLOPS的算力。
[0135] 通过本实施例的方案可以通过限制上限算力来限制为使用请求所开放的算力,可以避免因使用请求所请求的目标算力较大导致占用虚拟图形处理器资源较多的情况。
[0136] 在本申请的一些实施例中,如图6所示,步骤210之后,该方法还包括:
[0137] 步骤610,获取各虚拟图形处理器的占用率;以及获取图形处理器内存与共享内存池之间的总线带宽信息。
[0138] 步骤620,若各虚拟图形处理器的占用率超过设定阈值,且总线带宽信息指示存在剩余带宽,则将使用请求对应的计算任务添加至计算任务队列中,并执行从传送队列中所提取的数据传送任务,通过执行数据传送任务将计算数据从共享内存池传送至图形处理器内存中,或者将图形处理器内存中的计算结果传送至共享内存池中。
[0139] 如上所描述,图形处理器内存与共享内存池之间需要进行数据拷贝,例如将计算数据从共享内存池拷贝至图形处理器内存中,将计算结果从图形处理器内存拷贝至共享内存池中,在进行数据拷贝的过程中,必然占用图形处理器内存与共享内存池之间的总线带宽。
[0140] 通过该图形处理器内存与共享内存池之间的总线带宽信息可以确定图形处理器内存与共享内存池之间的传输带宽是否被完全占用,若被完全占用,则不存在剩余带宽,若未被完全占用,则存在剩余带宽。
[0141] 若各虚拟图形处理器的占用率超过设定阈值,则表明各虚拟图形器被占用较多,可能当前该虚拟图形处理器所能提供的算力并不能执行其他计算任务,在此情况下,若总线带宽信息指示存在剩余带宽,则表明此时虽然不能执行其他的计算任务,而还可以进行数据拷贝。其中设定阈值可以根据实际需要进行设定,例如为100%、95%、98%、90%等。
[0142] 因此,若各虚拟图形处理器的占用率超过设定阈值,且总线带宽信息指示存在剩余带宽,则将使用请求对应的计算任务添加至计算任务队列中,并执行从传送队列中所提取的数据传送任务,通过执行数据传送任务将计算数据从共享内存池传送至图形处理器内存中,或者将图形处理器内存中的计算结果传送至共享内存池中。
[0143] 在本实施例的方案中,结合了虚拟图形处理器的占用率、图形处理器内存与共享内存池之间的总线带宽信息来进行任务分配,在虚拟图形处理器中资源被占用较满而不能执行其他计算任务时,若图形处理器内存与共享内存池之间存在剩余带宽,则执行数据传送任务,从而,可以避免出现虚拟图形处理器的占用率很高,但是图形处理器内存与共享内存池之间的总线处于闲置的状态,可以保证虚拟图形处理器的占用率、以及图形处理器内存与共享内存池之间的总线带宽的充分利用,整体上提高了资源的利用率。
[0144] 图7是根据本申请一实施例示出的图形处理器中的任务处理方法的时序图,如图7所示,通过如下的步骤701-716实现本申请的图形处理器中的任务处理方法。
[0145] 步骤701,初始化环境,建立内存管道。
[0146] 其中,内存管道用于业务进程和服务进程间的命令和事件的通讯,例如用户进程调用某个图形处理器的计算或者图形处理指令,例如:cudaMemcpy()将主机内存的数据拷贝到图形处理器内存中,可以通过内存管道将所要调用的接口名称、参数值等从用户进程发往服务进程;又例如在虚拟图形处理计算完成后,把计算结果告知用户进程等。
[0147] 步骤702,服务进程初始化环境。
[0148] 服务进程中可能设置状态机等来进行状态切换,例如DirectX/OpenGL等图形引擎是通过状态机的模式实现的。而状态机是与图形处理器的计算接口紧密结合的,状态机必须处于直接能够使用图形处理器资源的进程中,也就是服务进程中。因此,用户进程初始化后,服务进程中对应的资源也必须初始化。
[0149] 步骤703,返回初始化结果。
[0150] 步骤704,申请GPU计算所需要的内存。
[0151] 通过进行内存申请,共享内存池向用户进程返回所申请到内存的内存地址信息,所申请到的内存用于存放虚拟图形处理器计算所需的计算数据。
[0152] 步骤705,调用代理库中的接口函数,并通知到服务进程。
[0153] 其中,所调用的接口函数与标准库中的函数同名,针对该代理库中接口函数的调用信息被发送到服务进程。
[0154] 步骤706,判断是否存在图形处理器资源,若存在,则执行步骤707;若不存在,则排队。
[0155] 判断是否存在图形处理器资源可以基于图形处理器的占用率来判断。当然,在具体实施例中,还需要结合用户进程对应的优先级、使用限制信息等因素来综合确定是否执行计算任务,具体参照上述各实施例中的描述,在此不再赘述。
[0156] 步骤707,请求所需要的计算数据。该步骤中,按照用户进程所获取到的内存地址信息向共享内存池请求所需要的计算数据。
[0157] 步骤708,在共享内存池中的计算数据拷贝到图形处理器内存中。
[0158] 步骤709,发送计算指令。
[0159] 步骤710,访问图形处理器内存中的计算数据。
[0160] 步骤711,执行计算。
[0161] 步骤712,写入计算结果。
[0162] 步骤713,将计算结果拷贝到共享内存池中。
[0163] 步骤714,发送计算结果通知。
[0164] 步骤715,获取计算结果。
[0165] 步骤716,释放内存池资源。
[0166] 上述步骤701-716可以借助于图1所示的系统架构来实现。
[0167] 以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的方法。对于本申请装置实施例中未披露的细节,请参照本申请上述方法实施例。
[0168] 图8是根据一实施例示出的图形处理器中的任务处理装置的框图,该图形处理器中的任务处理装置可以配置于服务器中,如图8所示,该图形处理器中的任务处理装置包括:
[0169] 使用请求获取模块810,用于获取使用请求,使用请求用于请求使用图形处理器资源,使用请求指示了目标算力;
[0170] 优先级获取模块820,用于获取使用请求对应的优先级;
[0171] 计算任务创建模块830,用于若使用请求对应的优先级不低于第一优先级,根据目标算力为使用请求创建N个计算任务,N为大于1的整数;
[0172] 计算任务执行模块840,用于在为N个计算任务所分别确定的虚拟图形处理器上并行执行N个计算任务。
[0173] 在本申请的一些实施例中,图形处理器中的任务处理装置还包括:
[0174] 占用率获取模块,用于获取各虚拟图形处理器的占用率;
[0175] 第一执行模块,用于若根据各虚拟图形处理器的占用率确定存在被部分占用的虚拟图形处理器,则在被部分占用的虚拟图形处理器上执行为使用请求所创建的计算任务。
[0176] 在本申请的一些实施例中,图形处理器中的任务处理装置还包括:
[0177] 状态信息获取模块,用于获取各虚拟图形处理器的状态信息;
[0178] 最大算力确定模块,用于根据状态信息确定各虚拟图形处理器当前所能提供的最大算力;
[0179] 分配模块,用于若各虚拟图形处理器当前所能提供的最大算力均小于目标算力,则为使用请求分配至少两个虚拟图形处理器,以通过所分配的至少两个虚拟图形处理器并行执行使用请求对应的计算任务。
[0180] 在本申请的一些实施例中,图形处理器中的任务处理装置还包括:
[0181] 排队模块,用于若使用请求对应的优先级低于第二优先级,则将使用请求对应的计算任务添加至计算任务队列中进行排队,第二优先级低于第一优先级。
[0182] 在本申请的一些实施例中,图形处理器中的任务处理装置还包括:
[0183] 使用限制信息获取模块,用于获取使用请求对应的使用限制信息;
[0184] 批次计算任务创建模块,用于根据使用限制信息所限定的上限算力,为使用请求分批创建批次计算任务,批次计算任务对应的算力不超过上限算力;
[0185] 第二执行模块,用于在为批次计算任务所分配的虚拟图形处理器上执行批次计算任务。
[0186] 在本申请的一些实施例中,图形处理器中的任务处理装置还包括:
[0187] 占用率获取模块,用于获取各虚拟图形处理器的占用率;以及总线带宽信息获取模块,用于获取图形处理器内存与共享内存池之间的总线带宽信息;
[0188] 处理模块,用于若各虚拟图形处理器的占用率超过设定阈值,且总线带宽信息指示存在剩余带宽,则将使用请求对应的计算任务添加至计算任务队列中,并执行从传送队列中所提取的数据传送任务,通过执行数据传送任务将计算数据从共享内存池传送至图形处理器内存中,或者将图形处理器内存中的计算结果传送至共享内存池中。
[0189] 在本申请的一些实施例中,计算任务执行模块840包括:
[0190] 计算数据获取模块,用于对于N个计算任务中的每一计算任务,根据使用请求对应的内存地址信息的指示,从共享内存池上获取对应的计算数据,使用请求所来源的用户进程在共享内存池中进行内存申请得到内存地址信息。
[0191] 计算模块,用于在计算任务所对应的虚拟图形处理器上,通过在标准库中调用的目标接口函数来根据计算数据进行计算,得到对应的计算结果;其中,使用请求所来源的用户进程根据所加载的代理库将调用信息发送至服务端,服务端根据调用信息中对应于目标接口函数的接口名称在标准库中进行重定向,实现目标接口函数的调用,代理库中的接口函数与标准库中的接口函数同名。
[0192] 在本申请的一些实施例中,图形处理器中的任务处理装置还包括:拷贝模块,用于将计算任务对应的计算结果从图形处理器内存拷贝到共享内存池中;计算结果通知返回模块,用于向使用请求所来源的用户进程返回计算结果通知,计算结果通知包括计算结果在共享内存池中的存放位置信息。
[0193] 图9示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
[0194] 需要说明的是,图9示出的电子设备的计算机系统900仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
[0195] 如图9所示,计算机系统900包括中央处理单元(Central Processing Unit,CPU)901,其可以根据存储在只读存储器(Read-Only Memory,ROM)902中的程序或者从存储部分
908加载到随机访问存储器(Random Access Memory,RAM)903中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在RAM 903中,还存储有系统操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(Input /Output,I/O)接口905也连接至总线904。
[0196] 以下部件连接至I/O接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN(Local Area Network,局域网)卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
[0197] 特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(CPU)901执行时,执行本申请的系统中限定的各种功能。
[0198] 需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
[0199] 附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0200] 描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
[0201] 作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质承载计算机可读存储指令,当该计算机可读存储指令被处理器执行时,实现上述实施例中的方法。
[0202] 根据本申请的一个方面,还提供了一种电子设备,其包括:处理器;存储器,存储器上存储有计算机可读指令,计算机可读指令被处理器执行时,实现上述实施例中的方法。
[0203] 应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0204] 通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
[0205] 本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
[0206] 应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。