CN111309649B - 一种数据传输和任务处理方法、装置及设备 - Google Patents
一种数据传输和任务处理方法、装置及设备 Download PDFInfo
- Publication number
- CN111309649B CN111309649B CN202010086948.9A CN202010086948A CN111309649B CN 111309649 B CN111309649 B CN 111309649B CN 202010086948 A CN202010086948 A CN 202010086948A CN 111309649 B CN111309649 B CN 111309649B
- Authority
- CN
- China
- Prior art keywords
- address
- virtual address
- physical memory
- request
- gpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0873—Mapping of cache memory to specific storage devices or parts thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例公开了数据传输和任务处理方法、装置及设备。方案包括:获取客户端发送的数据传输请求;获取所述数据传输请求中的第一虚拟地址;获取所述第一虚拟地址对应的物理内存地址;基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据传输和任务处理方法、装置及设备。
背景技术
现有技术中,深度学习(DeepLearning,DL)被广泛利用在人工智能(ArtificialIntelligence,AI)领域。AI特别是深度学习目前已经广泛用于支付(人脸识别)、定损(图片识别)、交互与客服(语音识别)等多种场景,并且取得了显著效果。典型DL任务需要强大的算力支撑,因此当前绝大多数任务运行在图形处理器(Graphics Processing Unit,GPU)等加速设备之上。以图形处理器等为代表的加速器芯片是推动AI发展和落地的重要保障。然而GPU在使用过程中普遍存在平均利用率不高的问题。
需要提供一个提高GPU的平均利用率的方案。
发明内容
有鉴于此,本申请实施例提供了一种数据传输和任务处理方法、装置及设备,用于提高GPU资源虚拟化的效率。
为解决上述技术问题,本说明书实施例是这样实现的:
本说明书实施例提供的一种数据传输方法,所述方法应用于GPU虚拟化系统中的服务端,包括:
获取客户端发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述数据传输请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理方法,所述方法应用于GPU虚拟化系统中的服务端,包括:
获取客户端发送的任务计算请求;
获取所述任务计算请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述任务计算请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令;
将所述任务计算请求发送至GPU;
当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
存储所述处理状态信息。
本说明书实施例提供的一种数据传输方法,所述方法应用于GPU虚拟化系统中的客户端,包括:
获取应用发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理方法,所述方法应用于GPU虚拟化系统中的客户端,包括:
获取应用发送的任务处理请求;
转发所述任务处理请求,以便服务端进行获取;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
将所述任务处理请求的计算结果发送至所述应用。
本说明书实施例提供的一种数据传输装置,包括:
数据传输请求获取模块,用于获取客户端发送的数据传输请求;
第一虚拟地址获取模块,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址获取模块,用于获取所述第一虚拟地址对应的物理内存地址;
第二虚拟地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
GPU地址获取模块,用于获取为所述数据传输请求分配的GPU地址;
数据拷贝指令生成模块,用于生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
接口调用模块,用于调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理装置,包括:
任务计算请求获取模块,用于获取客户端发送的任务计算请求;
第一虚拟地址获取模块,用于获取所述任务计算请求中的第一虚拟地址;
物理内存地址获取模块,用于获取所述第一虚拟地址对应的物理内存地址;
第二虚拟地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
GPU地址获取模块,用于获取为所述任务计算请求分配的GPU地址;
数据拷贝指令生成模块,用于生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
GPU驱动接口调用模块,用于调用GPU驱动的接口执行所述数据拷贝指令;
任务计算请求发送模块,用于将所述任务计算请求发送至GPU;
处理状态信息生成模块,用于当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
处理状态信息存储模块,用于存储所述处理状态信息。
本说明书实施例提供的一种数据传输装置,包括:
数据传输请求获取模块,用于获取应用发送的数据传输请求;
第一虚拟地址获取模块,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
数据传输请求和所述物理内存地址发送模块,用于将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理装置,包括:
任务处理请求获取模块,用于获取应用发送的任务处理请求;
任务处理请求转发模块,用于转发所述任务处理请求,以便服务端进行获取;
同步请求发送模块,用于当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
第一虚拟地址获取模块,用于当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
计算结果读取模块,用于从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
计算结果发送模块,用于将所述任务处理请求的计算结果发送至所述应用。
本说明书实施例提供一种数据传输装置,包括:
数据传输请求获取模块,用于获取应用发送的数据传输请求;
第一虚拟地址获取模块,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
数据传输请求和所述物理内存地址发送模块,用于将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理装置,包括:
任务处理请求获取模块,用于获取应用发送的任务处理请求;
任务处理请求转发模块,用于转发所述任务处理请求,以便服务端进行获取;
同步请求发送模块,用于当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
第一虚拟地址获取模块,用于当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
计算结果读取模块,用于从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
计算结果发送模块,用于将所述任务处理请求的计算结果发送至所述应用。
本说明书实施例提供的一种数据传输设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取客户端发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述数据传输请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取客户端发送的任务计算请求;
获取所述任务计算请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述任务计算请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令;
将所述任务计算请求发送至GPU;
当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
存储所述处理状态信息。
本说明书实施例提供的一种数据传输设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取应用发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例提供的一种任务处理设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取应用发送的任务处理请求;
转发所述任务处理请求,以便服务端进行获取;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
将所述任务处理请求的计算结果发送至所述应用。
本说明书实施例提供的一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现上述方法。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过将物理内存地址与客户端的第一虚拟地址、服务端的第二虚拟地址分别进行映射,即客户端与服务端共享相同的物理内存,生成数据拷贝指令直接将物理内存地址中的数据拷贝到GPU地址中。因为保留了客户端的第一虚拟地址和服务端的第二虚拟地址,即实现了不对原有的程序进行改动,实现了透明化。而且,只经历了一次从物理内存地址到GPU地址的数据拷贝,减少了数据内存拷贝的次数,因此无需为客户端和服务端分配临时内存来存储拷贝的数据,显著提高利用率,有效降低成本,提高了GPU资源虚拟化的效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为现有技术中基于请求-数据转发(多次内存拷贝)的GPU软件虚拟化的流程示意图;
图2为本说明书实施例提供的基于透明内存共享的GPU虚拟化总体模块的结果示意图;
图3为本说明书实施例提供的一种数据传输方法的流程示意图;
图4为本说明书实施例提供的一种任务处理方法的流程示意图;
图5为本说明书实施例提供的多队列管理的示意图;
图6为本说明书实施例提供的另一种数据传输方法的流程示意图;
图7为本说明书实施例提供的另一种任务处理方法的流程示意图;
图8为本说明书实施例提供的对应于图3的一种数据传输装置的结构示意图;
图9为本说明书实施例提供的对应于图3的一种数据传输设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
透明内存共享:数据平面上,为了对现有程序无改动,无数据移动,透明虚拟化的目的,而专门设计和优化的共享数据方法。
已知软件虚拟化通常需要客户端截获GPU请求,然后将请求(例如资源申请、任务提交等)转发到服务端,服务端接收到请求后,执行必要的控制,然后向GPU驱动发请求,最好将结果转发给客户端,如图1所示。该过程中,最大的性能制约在于,所有GPU请求(命令、参数)和数据都必须经历多次内存拷贝,即先将GPU请求和数据拷贝到客户端,再从客户端拷贝到服务端,最后再将GPU请求和数据从服务端拷贝到GPU地址中。这种方法,虽然实现了虚拟化,但是比不采用虚拟化的原生方法,即直接将GPU请求和数据拷贝到GPU地址中,多出了两次数据内存拷贝,如果内存拷贝是基于网络传输,就会影响数据处理效率,这从根本上限制了软件虚拟化的性能,并且由于多出了两次数据内存拷贝,CPU和内存的开销也很多。
为了提高虚拟化效率,本方案采用透明内存共享机制来实现GPU的控制请求和数据交换。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图2为本说明书实施例提供的基于透明内存共享的GPU虚拟化总体模块的结果示意图。如图2所示:
模型与应用:模型,如卷积神经网络(Convolutional Neural Networks,CNN)、循环神经网络(Recurrent Neural Networks,RNN)、长短期记忆网络(Long Short-TermMemory,LSTM)、生成式对抗网络(Generative Adversarial Networks,GAN,)等。应用包括模型训练或模型在线服务。
AL框架层:常见的DL框架,例如TensorFlow,PyTorch,Caffe2等。
服务端:负责GPU服务与虚拟化管理,运行在GPU驱动之上的long runningdaemon。通常一台GPU服务器有1个服务实例(可封装运行在docker里),并根据配置策略(例如环境变量或配置文件),划分并预分配虚拟GPU资源,保存虚拟与物理资源的影射关系,并上报到集群调度器(例如K8S,Kubemaker)。
客户端:和应用模型一起的客户端lib(例如可一起打包为dockerimage),负责虚拟GPU资源的发现、申请、访问和必要的内置优化,并记录虚拟-物理资源的对应关系。客户端对应用导出GPU访问API,例如Nvidia CUDA(只是内部的实现解耦的资源申请和底层实现)。一个服务器(或一个物理GPU)可运行多个客户端。
其中,为提高虚拟化效率,在服务端和客户端都需要布置透明共享内存模块和高效的GPU请求处理模块(发送-处理-返回结果)。这是本方案的核心所在。另外,本说明书实施例中的客户端和服务端应用于GPU虚拟化系统中客户端和服务端,与常规意义中的客户端和服务端不同。它们是仿照常规意义中的客户端和服务端的功能和作用,采用软件程序编程构造的,并非实体。
调度器:集群范围内GPU资源调度器,例如K8S,客户端的应用需要先向调度器申请GPU资源,然后调度器负责调度执行。
实施例一
图3为本说明书实施例提供的一种数据传输方法的流程示意图。从程序角度而言,流程的执行主体可以为应用于GPU虚拟化系统中的服务端。
如图3所示,该流程可以包括以下步骤:
步骤302:获取客户端发送的数据传输请求。
在本说明书实施例中,数据传输请求是由客户端的应用发起的,客户端收到由应用发起的数据传输请求,然后将数据传输请求转发到服务端。
数据传输请求可以是一个独立的数据请求,也是一个任务处理请求中的一个分任务。如,需要GPU完成一个计算任务,那么首先需要将要计算的数据传输给GPU地址,然后GPU再根据GPU地址中的数据进行计算。那么步骤302中的数据输出请求就可以是上述计算任务的一个数据传输的分任务。
步骤304:获取所述数据传输请求中的第一虚拟地址。
虚拟地址(VirtualAddress)标识一个非物理的实体地址。
在数据传输请求中,往往会包括数据传输的方向,即将数据从一个地址传输到另一个地址。但是,在客户端或客户端应用中,数据请求只能采用虚拟地址,不能包括实际的物理地址。这样做是为了避免客户端直接调用物理地址,进行一些数据篡改等不安全的行为。所以,数据传输请求中地址是虚拟地址,这里用第一虚拟地址与其他虚拟地址进行区分,但是,“第一”并没有其他含义。
步骤306:获取所述第一虚拟地址对应的物理内存地址。
为了确定数据的实际地址,需要根据虚拟地址与物理内存地址的关系来确定第一虚拟地址对应的物理内存地址。该物理内存地址是划分的专门用于存储共享数据的内存池的一个地址,具体位置可以用偏置来表示。
其中,虚拟地址与物理内存地址的关系可以保存在一个表格中,并存储在客户端。客户端在转发数据传输请求的时候,可以将第一虚拟地址对应的物理内存地址也发送给客户端。另一种方式是,服务端向客户端发送“获取第一虚拟地址对应的物理内存地址”的请求,客户端接到请求后,再将第一虚拟地址对应的物理内存地址转发给服务端。
步骤308:基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址。
为了做到对现有程序无改动,无数据移动,实现透明内存共享,服务端在获取了数据实际对应的物理内存地址之后,也需要转换到服务端的进程中所能使用和识别的虚拟地址,采用第二虚拟地址进行标识。第二虚拟地址只出现于服务端的进程中的程序中,与客户端无关。而且,在服务端的程序中,物理内存地址与第二虚拟地址的对应关系是唯一的,即一个物理内存地址对应唯一的第二虚拟地址,可以基于物理内存地址与虚拟地址的映射关系来确定述物理内存地址对应的第二虚拟地址。物理内存地址与虚拟地址的映射关系可以采用映射表的方式来表示。查询所述映射表中是否包括该物理内存地址,如果可以查找到,说明该物理内存地址已经在服务端进行了映射,无需在进行映射。如果没有查找到,说明该物理内存地址没有在服务端进行映射,因此需要进行映射,得到第二虚拟地址。
步骤310:获取为所述数据传输请求分配的GPU地址。
在数据传输请求中,是将物理内存地址中的数据拷贝到GPU地址中,实现GPU的数据计算。因此,还需要为传输的数据分配对应的GPU地址。
服务端可以根据所述数据传输请求发出GPU地址分配指令,由GPU驱动调用接口完成GPU地址。然后GPU驱动将分配好的GPU地址发送给服务端。当然,服务端还可以通过其他方法获取为所述数据传输请求分配的GPU地址,本说明书实施例并不做具体限定。
在数据传输请求中,还可以包括数据的长度,GPU地址的分配主体可以是服务端,也可以是其它执行主体。
步骤312:生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令。
确定了第二虚拟地址就确定了数据的原始地址,确定了GPU地址就确定了数据的传送地址,因此,根据数据的原始地址和传送地址就可以生成数据传送指令。
步骤314:调用GPU驱动的接口执行所述数据拷贝指令。
步骤312生成的数据拷贝指令,需要GPU驱动去完成与GPU的互动,因此,需要调用GPU驱动的接口执行所述数据拷贝指令,即完成从所述物理内存地址到所述GPU地址的数据拷贝。
图3中的方法,通过将物理内存地址与客户端的第一虚拟地址、服务端的第二虚拟地址分别进行映射,即客户端与服务端共享相同的物理内存,生成数据拷贝指令直接将物理内存地址中的数据拷贝到GPU地址中。因为保留了客户端的第一虚拟地址和服务端的第二虚拟地址,即实现了不对原有的程序进行改动,实现了透明化。而且,只经历了一次从物理内存地址到GPU地址的数据拷贝,减少了数据内存拷贝的次数,因此无需为客户端和服务端分配临时内存来存储拷贝的数据,显著提高了利用率,有效降低了成本,提高了GPU资源虚拟化的效率。
基于图3的方法,本说明书实施例还提供了该方法的一些具体实施方式,下面进行说明。
具体的,在所述确定所述物理内存地址对应的第二虚拟地址之前,还可以包括:
判断所述物理内存地址是否存储于映射表中;
若否,生成所述物理内存地址对应的第二虚拟地址,并将所述物理内存地址与所述第二虚拟地址的映射关系存储于所述映射表中;
所述确定所述物理内存地址对应的第二虚拟地址,具体包括:
若是,获取所述物理内存地址对应的第二虚拟地址。
在说明书的一个或者多个实施例中,服务端确定物理内存地址对应的第二虚拟地址,首先需要确定映射表中是否存在该物理内存地址,如果存在,说明已经完成了物理内存地址在服务端的虚拟地址的映射。也就是说,物理内存在服务端只进行一次映射。如果映射表中不存在物理内存地址,那么说明这个物理内存地址还没有被服务端映射过,可以进行映射操作,为该物理内存地址生成一个第二虚拟地址,然后在将物理内存地址与第二虚拟地址的映射关系存储起来。
实施例二
图4为本说明书实施例提供的一种任务处理方法的流程示意图。从程序角度而言,流程的执行主体可以为应用于GPU虚拟化系统中的服务端。如图4所示,该流程可以包括以下步骤:
步骤402:获取客户端发送的任务计算请求。
任务计算请求可以是各种计算任务,如矩阵相乘,卷积等。任务计算请求是应用发起的,客户端获取以后,转发给服务端。
步骤404:获取所述任务计算请求中的第一虚拟地址。
在任务计算请求中,可以包括一些与计算数据有关的信息,但是,在任务计算请求中不会直接包括这些数据,而是记录存储这些数据的地址。由于在客户端中不能体现实际的物理内存地址,因此以虚拟地址的形式表示。例如,如果是矩阵A和矩阵B相乘,那么,第一虚拟地址就是代表存储矩阵A和矩阵B的地址。其中,第一虚拟地址可以是一个,也可以是多个,个数与具体的任务计算请求有关。
步骤406:获取所述第一虚拟地址对应的物理内存地址。
在步骤404中,确定了第一虚拟地址之后,还需要确定与第一虚拟地址对应的物理内存地址,具体内容可以参照实施例一的步骤306。
步骤408:基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址。
步骤410:获取为所述任务计算请求分配的GPU地址。
在任务计算请求中,是将物理内存地址中的数据拷贝到GPU地址中,实现GPU的数据计算。因此,还需要为传输的数据分配对应的GPU地址。
服务端可以根据所述数据传输请求发出GPU地址分配指令,由GPU驱动调用接口完成GPU地址。然后GPU驱动将分配好的GPU地址发送给服务端。当然,服务端还可以通过其他方法获取为所述数据传输请求分配的GPU地址,本说明书实施例并不做具体限定。
在数据传输请求中,还可以包括数据的长度,GPU地址的分配主体可以是服务端,也可以是其它执行主体。
需要注意的是,为任务计算请求分配的GPU地址,可以包括计算数据的存储地址,还可以包括计算结果的存储地址。GPU地址的分配也可以根据数据的大小进行分配。
步骤412:生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令。
步骤414:调用GPU驱动的接口执行所述数据拷贝指令。
步骤416:将所述任务计算请求发送至GPU。
步骤418:当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息。
GPU获取GPU地址中的数据,然后将根据任务计算请求进行计算,然后将计算结果存储在为计算结果分配的GPU地址中。然后,GPU会将计算完成的状态通知服务端,然后服务端生成所述任务计算请求对应的处理状态信息。
步骤420:存储所述处理状态信息。
服务端可以主动将所述处理状态信息发送给客户端,也可以将信息进程存储,便于客户端进行查询。
图4中的方法,通过将物理内存地址与客户端的第一虚拟地址、服务端的第二虚拟地址分别进行映射,即客户端与服务端共享相同的物理内存,生成数据拷贝指令直接将物理内存地址中的数据拷贝到GPU地址中。因为保留了客户端的第一虚拟地址和服务端的第二虚拟地址,即实现了不对原有的程序进行改动,实现了透明化。而且,只经历了一次从物理内存地址到GPU地址的数据拷贝,减少了数据内存拷贝的次数,因此无需为客户端和服务端分配临时内存来存储拷贝的数据,显著提高利用率,有效降低成本,提高了GPU资源虚拟化的效率。
在说明书的一个或者多个实施例中,第一虚拟地址可以有不同的作用,比如,一类用来存储计算数据,一类用来存储计算结果。具体的,所述第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址,所述获取所述任务计算请求中的第一虚拟地址,具体可以包括:
获取所述任务计算请求中的计算数据获取虚拟地址;
所述获取所述第一虚拟地址对应的物理内存地址,具体可以包括:
获取所述计算数据获取虚拟地址对应的第一物理内存地址;
所述确定所述物理内存地址对应的第二虚拟地址,具体可以包括:
确定所述第一物理内存地址对应的第二虚拟地址。
由于第一虚拟地址包括两类,因此在获取第一虚拟地址的时候,要判断此虚拟地址是用来获取计算数据的,还是用来存储计算结果的。如果第一虚拟地址的种类分错了,那么就会导致任务技术请求失败。例如,矩阵A与矩阵B相乘,矩阵A存储在虚拟地址A中,矩阵B存储在虚拟地址B中,计算结果C存储在虚拟地址C中,如果,从虚拟地址A和虚拟地址C中获取数据,然后再进行乘法运算,显然计算结果是错误的。
由于第一虚拟地址包括多个种类,因此在为任务计算请求分配GPU地址时,也要进行分类。具体的,所述获取为所述任务计算请求分配的GPU地址,具体包括:
获取为所述任务计算请求分配的计算数据存储GPU地址和计算结果存储GPU地址;
所述生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令,具体包括:
生成从所述第二虚拟地址至所述计算数据存储GPU地址的数据拷贝指令。
计算数据存储GPU地址是用于存储从物理内存地址中拷贝过来的数据的,即用于存储进行计算的源数据。计算结果存储GPU地址是用于存储计算结果的。GPU完成计算任务之后,会将计算结果暂时存放在计算结果存储GPU地址,当客户端调用之后,再将数据拷贝到相应的物理内存地址中。
在本说明书的一个或者多个实施例中,在所述生成所述任务计算请求对应的处理状态信息之后,还可以包括:
当获取到所述客户端发送的计算结果同步请求时,获取所述计算结果存放虚拟地址对应的第二物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第二物理内存地址对应的第三虚拟地址;
生成将计算结果从所述计算结果存储GPU地址中拷贝至所述第三虚拟地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
虽然GPU完成了计算任务,但是客户端或者应用并不能获取计算结果。因此,客户端在获取到GPU完成了计算任务之后,会发出一个计算结果同步请求,即将GPU地址中的计算结果拷贝到物理内存地址中,以供客户端的应用读取。
将计算结果从将GPU地址中拷贝到物理内存地址中,与将计算数据从物理内存地址中拷贝到GPU地址中是一个相反的过程。由于是服务端发起数据拷贝请求,因此,需要确定计算结果存放的物理内存地址在服务端对应的虚拟地址是哪个,即第三虚拟地址。
在任务计算请求中,第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址,可以基于物理内存地址与虚拟地址的映射关系,确定计算结果存放虚拟地址对应的第二物理内存地址。然后,服务端再根据映射关系确定第二物理内存地址对应的第三虚拟地址。然后,再生成将计算结果从所述计算结果存储GPU地址中拷贝至所述第三虚拟地址的数据拷贝指令,并调用GPU驱动的接口执行所述数据拷贝指令。
为提高扩展性,例如单机多卡,提出多队列的请求管理方法,即每个GPU维护多个请求队列,包括提交队列(SubmitQ)和完成队列(CompleteQ),如图5所示。具体的,所述获取客户端发送的任务计算请求,具体可以包括:
从提交队列中获取所述客户端发送的任务计算请求;所述提交队列中包含多个所述客户端提交的未经过处理的任务计算请求;
在生成所述任务计算请求对应的处理状态信息之后,还包括:
将所述任务计算请求对应的处理状态信息发送至完成队列,所述完成队列中包含多个所述服务端提交的未被所述客户端读取的处理状态信息。
客户端提交GPU请求时,将请求放到提交队列即返回(例如对于异步请求),之后由工作线程,负责将请求发送至服务端;或者服务器端主动查询请求队列中新的请求。服务端收到请求之后,执行处理,并将处理结果放至完成队列。客户端可以异步查询完成队列中的处理状态信息。
提交队列里面存储了多个任务计算请求,并且按照进入提交队列的时间进行排序,先进入提交队列的任务计算请求优先被服务端获取,后进入提交队列的任务计算请求被服务端后获取。如,有任务1、任务2和任务3先后提交到提交队列中,那么服务端从提交队列中首先获取任务1,再获取任务2,最后获取任务3。同理,完成队列也是这样的原理。
本方案同时将队列机制与透明共享内存结合,即客户端和服务端的所有请求都是在共享内存上分配出来,避免请求转发时碰到的请求消息(request)的内存拷贝。
本方法提出通过高效的软件方法使得GPU硬件像CPU那样高效、无损共享,从而显著提高利用率,有效降低成本;并且在独占情况下,还可以优化性能;在大规模部署情况下,采用纯软件虚拟方法来简化运维、管理。
实施例三
图6为本说明书实施例提供的另一种数据传输方法的流程示意图。从程序角度而言,流程的执行主体可以为应用于GPU虚拟化系统中的客户端。如图6所示,该流程可以包括以下步骤:
步骤602:获取应用发送的数据传输请求。
在本实施例中,应用和客户端是一起的,应用发送的数据传输请求会通过客户端进行传送。
步骤604:获取所述数据传输请求中的第一虚拟地址。
数据传输请求中的数据地址是虚拟地址,客户端首先需要获取第一虚拟地址,然后再进行相关操作。
步骤606:基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址。
为了确定数据的实际地址,需要根据虚拟地址与物理内存地址的关系来确定第一虚拟地址对应的物理内存地址。其中,虚拟地址与物理内存地址的关系可以保存在一个表格中,并存储在客户端。客户端获取第一虚拟地址之后,可以对已存储的第一虚拟地址和物理内存地址的对应关系进行查询,然后确定第一虚拟地址对应的物理内存地址。
步骤608:将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
实施例三提供的数据传输方法与实施例一提供的数据传输方法是分别从客户端和服务端的角度进行描述的,其很多内容是相似的,实施例三未进行解释的内容可以参见实施例一的解释。
图6的方法,通过将物理内存地址与客户端的第一虚拟地址、服务端的第二虚拟地址分别进行映射,即客户端与服务端共享相同的物理内存,生成数据拷贝指令直接将物理内存地址中的数据拷贝到GPU地址中。因为保留了客户端的第一虚拟地址和服务端的第二虚拟地址,即实现了不对原有的程序进行改动,实现了透明化。而且,只经历了一次从物理内存地址到GPU地址的数据拷贝,减少了数据内存拷贝的次数,因此无需为客户端和服务端分配临时内存来存储拷贝的数据,显著提高了利用率,有效降低了成本,提高了GPU资源虚拟化的效率。
在本说明书的一个或多个实施例中,在所述获取应用发送的数据传输请求之前,还可以包括:
获取应用发送的内存分配请求;
获取所述内存分配请求中的数据;
将所述数据存储至第一物理内存地址;
将所述第一物理内存地址映射到所述应用的进程空间,生成所述第一物理内存地址对应的第一虚拟地址;
将所述第一虚拟地址发送给所述应用,并存储所述物理内存地址和所述第一虚拟地址的映射关系。
应用发起内存分配请求,例如调用malloc(len)。客户端获取应用发送的内存分配请求,并从内存池中分配满足长度要求的所需内存,例如内存池起始地址offset,长度为L的一段。并将内存映射到应用的进程空间,获得映射后的虚拟地址H。记录虚拟地址H和内存池中的位置信息(偏移offset)存储在映射表中,可以通过哈希表进行记录。然后,返回虚拟地址H给应用,以便于应用进行正常的数据读写。
在本说明书的一个或多个实施例中,所述确定所述第一虚拟地址对应的物理内存地址,具体可以包括:
根据所述映射关系确定所述第一虚拟地址对应的物理内存地址。
实施例四
图7为本说明书实施例提供的另一种任务处理方法的流程示意图。从程序角度而言,流程的执行主体可以为应用于GPU虚拟化系统中的客户端。如图7所示,该流程可以包括以下步骤:
步骤702:获取应用发送的任务处理请求;
步骤704:转发所述任务处理请求,以便服务端进行获取;
步骤706:当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
步骤708:当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
步骤710:基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
步骤712:从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
步骤714:将所述任务处理请求的计算结果发送至所述应用。
可选的,所述第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址;
所述获取所述任务处理请求的第一虚拟地址,具体可以包括:
获取所述任务处理请求的计算结果存放虚拟地址;
所述确定所述第一虚拟地址对应的物理内存地址,具体可以包括:
确定所述计算结果存放虚拟地址对应的物理内存地址。
可选的,所述转发所述任务处理请求,具体可以包括:
将所述任务处理请求发送至提交队列,以便所述服务端从所述提交队列中获取所述任务处理请求,所述提交队列中包含多个所述客户端提交的未经过处理的任务计算请求;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求,具体包括:
查询完成队列,当查询到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求,所述完成队列中包含多个所述服务端提交的未被所述客户端读取的处理状态信息;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址,具体包括:
查询所述完成队列,当查询到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址。
客户端提交GPU请求时,将请求放到提交队列即返回(例如对于异步请求),之后由工作线程,负责将请求发送至服务端;或者服务器端主动查询请求队列中新的请求。服务端收到请求之后,执行处理,并将处理结果放至完成队列。客户端可以异步可查询完成队列中的处理状态信息。
本方案同时将队列机制与透明共享内存结合,即客户端和服务端的所有请求都是在共享内存上分配出来,避免请求转发时碰到的请求消息(request)的内存拷贝。
本方法提出通过高效的软件方法使得GPU硬件像CPU那样高效、无损共享,从而显著提高利用率,有效降低成本;并且在独占情况下,还可以优化性能;在大规模部署情况下,采用纯软件虚拟方法来简化运维、管理。
实施例五
本说明书实施例提供的另一种任务处理方法,其执行主体为搭载了客户端和服务端的机器。该方法可以包括以下步骤:
客户端获取应用发送的任务计算请求;所述客户端具有虚拟内存共享功能;
所述客户端将所述任务计算请求发送至提交队列;
服务端从所述提交队列中获取所述任务计算请求;所述服务器具有虚拟内存共享功能;
所述服务端获取所述任务计算请求中的计算数据存储GPU地址和计算结果存储GPU地址;
所述服务端获取所述计算数据存储GPU地址对应的第一物理内存地址;
所述服务端确定所述第一物理内存地址对应的第二虚拟地址;
所述服务端获取为所述任务计算请求分配的GPU地址;
所述服务端生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令,以便调用接口执行从所述物理内存地址到所述GPU地址的数据拷贝;
所述服务端将所述任务计算请求发送至GPU;
所述服务端当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息,并将所述处理状态信息发送至完成队列;
所述客户端从所述完成队列中查询所述任务计算请求对应的处理状态信息,当查询到时,发出同步请求至所述提交队列;
当获取到所述提交队列中的同步请求时,所述服务端获取所述计算结果存放虚拟地址对应的第二物理内存地址;
所述服务端确定所述第二物理内存地址对应的第三虚拟地址;
所述服务端生成将计算结果从所述GPU地址中拷贝至所述第三虚拟地址的指令,以便调用接口执行从所述GPU地址到所述第二物理内存地址的数据拷贝;
当数据拷贝完成后,所述服务端将同步完成的通知发送至所述完成队列中;
当在所述完成队列中查询到所述同步完成的通知后,所述客户端从所述第二物理内存地址中获取计算结果,并发送至所述应用。
本说明书实施例提供的方法采取的程序为用户态,可以应用在用户空间。针对不同场景有多种实现方式,部署灵活。总结说明如下:
1、裸机环境(未采用虚拟技术):服务端和客户端都运行在host OS上(例如linux),服务端通过GPU驱动接管所有GPU的访问,包括可根据配置,独占使用某GPU0,或共享使用GPU1。客户端如果与服务端在同一机器,通信可以采用IPC方式(例如UNIX socket,Pipe或者shmem);如不在一台机器,采用socket/RDMA通信。
2、容器化环境:在容器环境中,服务端可以以容器化方式运行,接管物理GPU,导出虚拟GPU资源。客户端(例如K8S pod)运行在同一物理机上,链接服务端,客户端与服务端通信可以采用IPC或者网络方式。
3、虚拟机环境:在典型虚拟机环境中,GPU以pass through给特定的物理机,然后在VM guest OS里,启动服务端或客户端,之后等同于裸机环境。
上述方案能够达到的技术效果如下:
1、高性能:采用透明内存共享机制避免了额外的内存拷贝,基于polling(轮询)的多队列请求处理可以高效应对典型深度学习任务的高频请求调用。相比于已知方法,性能显著提高。采用本方法的软件虚拟化可以达到性能无损失,虚拟化效率明显优于已知工业界/学术界的硬件和软件虚拟化方案。
2、低开销:由于采用透明共享内存机制,不需要分配临时内存,大幅减少内存开销;而高效无锁polling也可减少CPU开销(开销常量)。
3、扩展性:由于以上的高效性和低开销,方案可以应对单机多卡的并发访问。
4、透明无侵入:无需修改或重新编译现有应用程序,保持API级别兼容,且核心框架可以方便扩展支持其他异构加速设备,例如NPU等。
5、基于上述透明内存共享,对每个设备提供多个请求队列,包括提交和完成队列,提高扩展性,应对多卡并发访问。
6、低开销:大幅减少运行时额外内存分配,且只需一个CPU core可支持多卡并发。
7、普适性与灵活可扩展:方法支持多种部署环境,可对接已知所有的AI框架和模型,且透明、无侵入;核心方法可独立与GPU设备,也可支持其他加速设备例如阿里的AI芯片等。
基于同样的思路,本说明书实施例还提供了上述方法对应的装置。图8为本说明书实施例提供的对应于图3的一种数据传输装置的结构示意图。如图8所示,该装置可以包括:
数据传输请求获取模块801,用于获取客户端发送的数据传输请求;
第一虚拟地址获取模块802,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址获取模块803,用于获取所述第一虚拟地址对应的物理内存地址;
第二虚拟地址确定模块804,用于基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
GPU地址获取模块805,用于获取为所述数据传输请求分配的GPU地址;
数据拷贝指令生成模块806,用于生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
接口调用模块807,用于调用GPU驱动的接口执行所述数据拷贝指令。
可选的,所述装置还可以包括:
判断模块,用于判断所述物理内存地址是否存储于映射表中;
第二虚拟地址生成模块,用于若否,生成所述物理内存地址对应的第二虚拟地址,并将所述物理内存地址与所述第二虚拟地址的映射关系存储于所述映射表中;
所述第二虚拟地址确定模块804,具体可以用于:若是,获取所述物理内存地址对应的第二虚拟地址。
本说明书实施例还提供了对应于图4的一种任务处理装置,所述装置包括:
任务计算请求获取模块,用于获取客户端发送的任务计算请求;
第一虚拟地址获取模块,用于获取所述任务计算请求中的第一虚拟地址;
物理内存地址获取模块,用于获取所述第一虚拟地址对应的物理内存地址;
第二虚拟地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
第一GPU地址获取模块,用于获取为所述任务计算请求分配的GPU地址;
数据拷贝指令生成模块,用于生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
第一GPU驱动接口调用模块,用于调用GPU驱动的接口执行所述数据拷贝指令;
任务计算请求发送模块,用于将所述任务计算请求发送至GPU;
处理状态信息生成模块,用于当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
处理状态信息存储模块,用于存储所述处理状态信息。
可选的,所述第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址,所述第一虚拟地址获取模块,具体可以用于:获取所述任务计算请求中的计算数据获取虚拟地址;
所述物理内存地址获取模块,具体可以用于:获取所述计算数据获取虚拟地址对应的第一物理内存地址;
所述第二虚拟地址确定模块,具体可以用于:确定所述第一物理内存地址对应的第二虚拟地址。
可选的,所述GPU地址获取模块,具体可以用于:
获取为所述任务计算请求分配的计算数据存储GPU地址和计算结果存储GPU地址;
所述生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令,具体包括:
生成从所述第二虚拟地址至所述计算数据存储GPU地址的数据拷贝指令。
可选的,所述装置还可以包括:
第二物理内存地址获取模块,用于当获取到所述客户端发送的计算结果同步请求时,获取所述计算结果存放虚拟地址对应的第二物理内存地址;
第三虚拟地址获取模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第二物理内存地址对应的第三虚拟地址;
第二数据拷贝指令生成模块,用于生成将计算结果从所述计算结果存储GPU地址中拷贝至所述第三虚拟地址的数据拷贝指令;
第二GPU驱动接口调用模块,用于调用GPU驱动的接口执行所述数据拷贝指令。
可选的,所述任务计算请求获取模块,具体可以用于:从提交队列中获取所述客户端发送的任务计算请求;所述提交队列中包含多个所述客户端提交的未经过处理的任务计算请求;
在生成所述任务计算请求对应的处理状态信息之后,所述装置还可以包括:
处理状态信息发送模块,用于将所述任务计算请求对应的处理状态信息发送至完成队列,所述完成队列中包含多个所述服务端提交的未被所述客户端读取的处理状态信息。
本说明书实施例还提供了对应于图6的一种数据传输装置,包括:
数据传输请求获取模块,用于获取应用发送的数据传输请求;
第一虚拟地址获取模块,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
数据传输请求和所述物理内存地址发送模块,用于将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
可选的,在所述获取应用发送的数据传输请求之前,所述装置还可以包括:
内存分配请求获取模块,用于获取应用发送的内存分配请求;
数据获取模块,用于获取所述内存分配请求中的数据;
数据存储模块,用于将所述数据存储至第一物理内存地址;
第一虚拟地址生成模块,用于将所述第一物理内存地址映射到所述应用的进程空间,生成所述第一物理内存地址对应的第一虚拟地址;
存储模块,用于将所述第一虚拟地址发送给所述应用,并存储所述物理内存地址和所述第一虚拟地址的映射关系。
可选的,所述物理内存地址确定模块,具体可以用于:根据所述映射关系确定所述第一虚拟地址对应的物理内存地址。
本说明书实施例还提供了对应于图7的一种任务处理装置,包括:
任务处理请求获取模块,用于获取应用发送的任务处理请求;
任务处理请求转发模块,用于转发所述任务处理请求,以便服务端进行获取;
同步请求发送模块,用于当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
第一虚拟地址获取模块,用于当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
计算结果读取模块,用于从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
计算结果发送模块,用于将所述任务处理请求的计算结果发送至所述应用。
可选的,所述第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址;
所述第一虚拟地址获取模块,具体可以用于:获取所述任务处理请求的计算结果存放虚拟地址;
所述物理内存地址确定模块,具体可以用于:确定所述计算结果存放虚拟地址对应的物理内存地址。
可选的,所述任务处理请求转发模块,具体可以用于:将所述任务处理请求发送至提交队列,以便所述服务端从所述提交队列中获取所述任务处理请求,所述提交队列中包含多个所述客户端提交的未经过处理的任务计算请求;
所述同步请求发送模块,具体可以用于:查询完成队列,当查询到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求,所述完成队列中包含多个所述服务端提交的未被所述客户端读取的处理状态信息;
所述第一虚拟地址获取模块,具体可以用于:查询所述完成队列,当查询到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址。
基于同样的思路,本说明书实施例还提供了上述方法对应的设备。
图9为本说明书实施例提供的对应于图3的一种数据传输设备的结构示意图。如图9所示,设备900可以包括:
至少一个处理器910;以及,
与所述至少一个处理器通信连接的存储器930;其中,
所述存储器930存储有可被所述至少一个处理器910执行的指令920,所述指令被所述至少一个处理器910执行,以使所述至少一个处理器910能够:
获取客户端发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述数据传输请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例还提供了对应于图4的一种任务处理设备。所述设备可以包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取客户端发送的任务计算请求;
获取所述任务计算请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述任务计算请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令;
将所述任务计算请求发送至GPU;
当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
存储所述处理状态信息。
本说明书实施例还提供了对应于图6的一种数据传输设备。所述设备可以包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取应用发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务器基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
本说明书实施例还提供的对应于图7的一种任务处理设备。所述设备可以包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取应用发送的任务处理请求;
转发所述任务处理请求,以便服务端进行获取;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
将所述任务处理请求的计算结果发送至所述应用。
本说明书实施例提供的一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现任一所述的方法。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field ProgrammableGateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced BooleanExpression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、AtmelAT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (22)
1.一种数据传输方法,所述方法应用于GPU虚拟化系统中的服务端,包括:
获取客户端发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述数据传输请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
2.如权利要求1所述的方法,在所述确定所述物理内存地址对应的第二虚拟地址之前,还包括:
判断所述物理内存地址是否存储于映射表中;
若否,生成所述物理内存地址对应的第二虚拟地址,并将所述物理内存地址与所述第二虚拟地址的映射关系存储于所述映射表中;
所述确定所述物理内存地址对应的第二虚拟地址,具体包括:
若是,获取所述物理内存地址对应的第二虚拟地址。
3.一种任务处理方法,所述方法应用于GPU虚拟化系统中的服务端,包括:
获取客户端发送的任务计算请求;
获取所述任务计算请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述任务计算请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令;
将所述任务计算请求发送至GPU;
当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
存储所述处理状态信息。
4.如权利要求3所述的方法,所述第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址,所述获取所述任务计算请求中的第一虚拟地址,具体包括:
获取所述任务计算请求中的计算数据获取虚拟地址;
所述获取所述第一虚拟地址对应的物理内存地址,具体包括:
获取所述计算数据获取虚拟地址对应的第一物理内存地址;
所述确定所述物理内存地址对应的第二虚拟地址,具体包括:
确定所述第一物理内存地址对应的第二虚拟地址。
5.如权利要求4所述的方法,所述获取为所述任务计算请求分配的GPU地址,具体包括:
获取为所述任务计算请求分配的计算数据存储GPU地址和计算结果存储GPU地址;
所述生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令,具体包括:
生成从所述第二虚拟地址至所述计算数据存储GPU地址的数据拷贝指令。
6.如权利要求5所述的方法,在所述生成所述任务计算请求对应的处理状态信息之后,还包括:
当获取到所述客户端发送的计算结果同步请求时,获取所述计算结果存放虚拟地址对应的第二物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第二物理内存地址对应的第三虚拟地址;
生成将计算结果从所述计算结果存储GPU地址中拷贝至所述第三虚拟地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
7.如权利要求3所述的方法,所述获取客户端发送的任务计算请求,具体包括:
从提交队列中获取所述客户端发送的任务计算请求;所述提交队列中包含多个所述客户端提交的未经过处理的任务计算请求;
在生成所述任务计算请求对应的处理状态信息之后,还包括:
将所述任务计算请求对应的处理状态信息发送至完成队列,所述完成队列中包含多个所述服务端提交的未被所述客户端读取的处理状态信息。
8.一种数据传输方法,所述方法应用于GPU虚拟化系统中的客户端,包括:
获取应用发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务端基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
9.如权利要求8所述的方法,在所述获取应用发送的数据传输请求之前,还包括:
获取应用发送的内存分配请求;
获取所述内存分配请求中的数据;
将所述数据存储至第一物理内存地址;
将所述第一物理内存地址映射到所述应用的进程空间,生成所述第一物理内存地址对应的第一虚拟地址;
将所述第一虚拟地址发送给所述应用,并存储所述物理内存地址和所述第一虚拟地址的映射关系。
10.如权利要求9所述的方法,所述确定所述第一虚拟地址对应的物理内存地址,具体包括:
根据所述映射关系确定所述第一虚拟地址对应的物理内存地址。
11.一种任务处理方法,所述方法应用于GPU虚拟化系统中的客户端,包括:
获取应用发送的任务处理请求;
转发所述任务处理请求,以便服务端进行获取;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
将所述任务处理请求的计算结果发送至所述应用。
12.如权利要求11所述的方法,所述第一虚拟地址包括计算数据获取虚拟地址和计算结果存放虚拟地址;
所述获取所述任务处理请求的第一虚拟地址,具体包括:
获取所述任务处理请求的计算结果存放虚拟地址;
所述确定所述第一虚拟地址对应的物理内存地址,具体包括:
确定所述计算结果存放虚拟地址对应的物理内存地址。
13.如权利要求11所述的方法,所述转发所述任务处理请求,具体包括:
将所述任务处理请求发送至提交队列,以便所述服务端从所述提交队列中获取所述任务处理请求,所述提交队列中包含多个所述客户端提交的未经过处理的任务计算请求;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求,具体包括:
查询完成队列,当查询到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求,所述完成队列中包含多个所述服务端提交的未被所述客户端读取的处理状态信息;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址,具体包括:
查询所述完成队列,当查询到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址。
14.一种数据传输装置,包括:
数据传输请求获取模块,用于获取客户端发送的数据传输请求;
第一虚拟地址获取模块,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址获取模块,用于获取所述第一虚拟地址对应的物理内存地址;
第二虚拟地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
GPU地址获取模块,用于获取为所述数据传输请求分配的GPU地址;
数据拷贝指令生成模块,用于生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
接口调用模块,用于调用GPU驱动的接口执行所述数据拷贝指令。
15.一种任务处理装置,包括:
任务计算请求获取模块,用于获取客户端发送的任务计算请求;
第一虚拟地址获取模块,用于获取所述任务计算请求中的第一虚拟地址;
物理内存地址获取模块,用于获取所述第一虚拟地址对应的物理内存地址;
第二虚拟地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
GPU地址获取模块,用于获取为所述任务计算请求分配的GPU地址;
数据拷贝指令生成模块,用于生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
GPU驱动接口调用模块,用于调用GPU驱动的接口执行所述数据拷贝指令;
任务计算请求发送模块,用于将所述任务计算请求发送至GPU;
处理状态信息生成模块,用于当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
处理状态信息存储模块,用于存储所述处理状态信息。
16.一种数据传输装置,包括:
数据传输请求获取模块,用于获取应用发送的数据传输请求;
第一虚拟地址获取模块,用于获取所述数据传输请求中的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
数据传输请求和所述物理内存地址发送模块,用于将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务端基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
17.一种任务处理装置,包括:
任务处理请求获取模块,用于获取应用发送的任务处理请求;
任务处理请求转发模块,用于转发所述任务处理请求,以便服务端进行获取;
同步请求发送模块,用于当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
第一虚拟地址获取模块,用于当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
物理内存地址确定模块,用于基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
计算结果读取模块,用于从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
计算结果发送模块,用于将所述任务处理请求的计算结果发送至所述应用。
18.一种数据传输设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取客户端发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述数据传输请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令。
19.一种任务处理设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取客户端发送的任务计算请求;
获取所述任务计算请求中的第一虚拟地址;
获取所述第一虚拟地址对应的物理内存地址;
基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;
获取为所述任务计算请求分配的GPU地址;
生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;
调用GPU驱动的接口执行所述数据拷贝指令;
将所述任务计算请求发送至GPU;
当所述GPU完成所述任务计算请求对应的计算任务后,生成所述任务计算请求对应的处理状态信息;
存储所述处理状态信息。
20.一种数据传输设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取应用发送的数据传输请求;
获取所述数据传输请求中的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
将所述数据传输请求和所述物理内存地址发送至服务端,以便所述服务端根据所述数据传输请求和所述物理内存地址执行数据传输,其中,所述服务端基于物理内存地址与虚拟地址的映射关系,确定所述物理内存地址对应的第二虚拟地址;获取为所述数据传输请求分配的GPU地址;生成从所述第二虚拟地址至所述GPU地址的数据拷贝指令;调用GPU驱动的接口执行所述数据拷贝指令。
21.一种任务处理设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取应用发送的任务处理请求;
转发所述任务处理请求,以便服务端进行获取;
当获取到所述服务端发送的所述任务处理请求的处理状态信息时,发出同步请求;
当获取到所述服务端发送的所述同步请求的成功通知后,获取所述任务处理请求的第一虚拟地址;
基于物理内存地址与虚拟地址的映射关系,确定所述第一虚拟地址对应的物理内存地址;
从所述第一虚拟地址对应的物理内存地址中读取所述任务处理请求的计算结果;
将所述任务处理请求的计算结果发送至所述应用。
22.一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现权利要求1至13中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010086948.9A CN111309649B (zh) | 2020-02-11 | 2020-02-11 | 一种数据传输和任务处理方法、装置及设备 |
PCT/CN2020/132846 WO2021159820A1 (zh) | 2020-02-11 | 2020-11-30 | 一种数据传输和任务处理方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010086948.9A CN111309649B (zh) | 2020-02-11 | 2020-02-11 | 一种数据传输和任务处理方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309649A CN111309649A (zh) | 2020-06-19 |
CN111309649B true CN111309649B (zh) | 2021-05-25 |
Family
ID=71145245
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010086948.9A Active CN111309649B (zh) | 2020-02-11 | 2020-02-11 | 一种数据传输和任务处理方法、装置及设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111309649B (zh) |
WO (1) | WO2021159820A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309649B (zh) * | 2020-02-11 | 2021-05-25 | 支付宝(杭州)信息技术有限公司 | 一种数据传输和任务处理方法、装置及设备 |
CN114528032A (zh) * | 2020-10-30 | 2022-05-24 | 华为云计算技术有限公司 | 一种服务器系统以及数据处理的方法 |
CN112925737B (zh) * | 2021-03-30 | 2022-08-05 | 上海西井信息科技有限公司 | Pci异构系统数据融合方法、系统、设备及存储介质 |
CN114359015B (zh) * | 2021-12-08 | 2023-08-04 | 北京百度网讯科技有限公司 | 数据传输方法、装置和图形处理服务器 |
CN114741214B (zh) * | 2022-04-01 | 2024-02-27 | 新华三技术有限公司 | 一种数据传输方法、装置及设备 |
CN114884881B (zh) * | 2022-05-12 | 2023-07-07 | 福建天晴在线互动科技有限公司 | 一种数据压缩传输方法及终端 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007508623A (ja) * | 2003-10-08 | 2007-04-05 | ユニシス コーポレーション | 複数のノードにわたってシステムリソースを割り当てて管理する仮想データセンタ |
CN102521015B (zh) * | 2011-12-08 | 2014-03-26 | 华中科技大学 | 嵌入式平台下的设备虚拟化方法 |
US9378572B2 (en) * | 2012-08-17 | 2016-06-28 | Intel Corporation | Shared virtual memory |
CN103559078B (zh) * | 2013-11-08 | 2017-04-26 | 华为技术有限公司 | Gpu虚拟化实现方法以及顶点数据缓存方法和相关装置 |
CN107077375B (zh) * | 2016-12-27 | 2020-08-04 | 深圳前海达闼云端智能科技有限公司 | 用于多操作系统的显示方法、装置和电子设备 |
CN107193759A (zh) * | 2017-04-18 | 2017-09-22 | 上海交通大学 | 设备内存管理单元的虚拟化方法 |
CN108804199B (zh) * | 2017-05-05 | 2021-03-05 | 龙芯中科技术股份有限公司 | 图形处理器虚拟化方法及装置 |
CN111309649B (zh) * | 2020-02-11 | 2021-05-25 | 支付宝(杭州)信息技术有限公司 | 一种数据传输和任务处理方法、装置及设备 |
-
2020
- 2020-02-11 CN CN202010086948.9A patent/CN111309649B/zh active Active
- 2020-11-30 WO PCT/CN2020/132846 patent/WO2021159820A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN111309649A (zh) | 2020-06-19 |
WO2021159820A1 (zh) | 2021-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111309649B (zh) | 一种数据传输和任务处理方法、装置及设备 | |
US11681564B2 (en) | Heterogeneous computing-based task processing method and software and hardware framework system | |
WO2021051914A1 (zh) | 基于gpu资源的数据处理方法、电子设备及系统 | |
US10824466B2 (en) | Container migration | |
US11048447B2 (en) | Providing direct data access between accelerators and storage in a computing environment, wherein the direct data access is independent of host CPU and the host CPU transfers object map identifying object of the data | |
CN112445713A (zh) | 用于对内存有效分区的技术 | |
US9063918B2 (en) | Determining a virtual interrupt source number from a physical interrupt source number | |
US20130007762A1 (en) | Processing workloads using a processor hierarchy system | |
CN110851285B (zh) | 一种基于gpu虚拟化的资源复用方法、装置及设备 | |
US11989588B2 (en) | Shared memory management method and device | |
KR102540754B1 (ko) | 가상화를 위한 gpu 작업 컨테이너로서의 vmid | |
WO2021238702A1 (zh) | 一种任务的调度方法、计算设备及存储介质 | |
WO2018103022A1 (zh) | 帧缓存实现方法、装置、电子设备和计算机程序产品 | |
EP4184324A1 (en) | Efficient accelerator offload in multi-accelerator framework | |
CN113312182B (zh) | 一种云计算节点、文件处理方法及装置 | |
US10802874B1 (en) | Cloud agnostic task scheduler | |
KR102326280B1 (ko) | 데이터 처리 방법, 장치, 기기 및 매체 | |
US10409762B2 (en) | Remote direct memory access-based on static analysis of asynchronous blocks | |
US11249760B2 (en) | Parameter management between programs | |
US11467835B1 (en) | Framework integration for instance-attachable accelerator | |
CN110447019B (zh) | 存储器分配管理器及由其执行的用于管理存储器分配的方法 | |
US11481255B2 (en) | Management of memory pages for a set of non-consecutive work elements in work queue designated by a sliding window for execution on a coherent accelerator | |
US20130141446A1 (en) | Method and Apparatus for Servicing Page Fault Exceptions | |
US9176910B2 (en) | Sending a next request to a resource before a completion interrupt for a previous request | |
EP3343370A1 (en) | Method of processing opencl kernel and computing device therefor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |