CN107003892B - Gpu虚拟化方法、装置、***及电子设备、计算机程序产品 - Google Patents
Gpu虚拟化方法、装置、***及电子设备、计算机程序产品 Download PDFInfo
- Publication number
- CN107003892B CN107003892B CN201680002845.1A CN201680002845A CN107003892B CN 107003892 B CN107003892 B CN 107003892B CN 201680002845 A CN201680002845 A CN 201680002845A CN 107003892 B CN107003892 B CN 107003892B
- Authority
- CN
- China
- Prior art keywords
- operating system
- shared memory
- graphics processing
- memory
- processing instruction
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45554—Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Digital Computer Display Output (AREA)
Abstract
本申请实施例中提供了一种GPU虚拟化方法、装置、***及电子设备、计算机程序产品,该方法包括:接收在第一操作***处的图形处理操作,并根据该图形处理操作确定对应的图形处理指令;将该图形处理指令通过共享内存传递至第二操作***;其中,该共享内存对该第一操作***和该第二操作***均处于可读和可写状态。采用本申请实施例的应用发送方案,能够实现GPU的虚拟化。
Description
技术领域
本申请涉及计算机技术,具体地,涉及一种图形处理器GPU的虚拟化方法、装置、***及电子设备、计算机程序产品。
背景技术
图1中示出了基于Qemu/KVM(Kernel-based Virtual Machine,基于内核的虚拟机)技术的虚拟化架构。
如图1所示,基于Qemu/KVM技术的虚拟化架构由一个主Host操作***,若干个虚拟出来的客Guest操作***组成。Host操作***包括多个Host用户空间程序、Host Linux内核。每个客Guest操作***分别包括用户空间、Guest Linux内核、和Qemu。这些操作***运行在同一套硬件处理器芯片上,共享处理器及外设资源。支持虚拟化架构的ARM处理器至少包含EL2,EL1,EL0三种模式,EL2模式下运行虚拟机管理器Hypervisor程序;EL1模式下运行Linux内核程序,即,Linux kernel程序;EL0模式下运行用户空间程序。Hypervisor层管理CPU、内存、定时器、中断等硬件资源,并通过CPU、内存、定时器、中断的虚拟化资源,可以把不同的操作***分时加载到物理处理器上运行,从而实现***虚拟化的功能。
KVM/Hypervisor跨越Host Linux kernel和Hypervisor两层,一方面为模拟处理器Qemu提供驱动节点,即,允许Qemu通过KVM节点创建虚拟CPU,并管理虚拟化资源;另一方面KVM/Hypervisor还可以把Host Linux***从物理CPU上切换出去,然后把Guest Linux***加载到物理处理器上运行,并处理Guest Linux***异常退出的后续事务。
Qemu作为Host Linux的一个应用运行,为Guest Linux的运行提供虚拟的硬件设备资源,通过KVM/Hypervisor模块的设备KVM节点,创建虚拟CPU,分配物理硬件资源,实现把一个未经修改的Guest Linux加载到物理硬件处理上去运行。
在手机或平板等终端设备上实现上述虚拟化架构,需要解决所有硬件设备的虚拟化,允许虚拟出来的操作***也能使用真实的硬件设备。目前还没有图形处理器GPU(Graphics Processing Unit,图形处理器)的虚拟化方法。
发明内容
本申请实施例中提供了一种GPU虚拟化方法、装置、***及电子设备、计算机程序产品,用于实现GPU的虚拟化。
根据本申请实施例的第一个方面,提供了一种图形处理器GPU的虚拟化方法,包括:接收在第一操作***处的图形处理操作,并根据该图形处理操作确定对应的图形处理指令;将该图形处理指令通过共享内存传递至第二操作***;其中,该共享内存对该第一操作***和该第二操作***均处于可读和可写状态。
根据本申请实施例的第二个方面,提供了一种GPU的虚拟化方法,包括:通过共享内存获取来自第一操作***的图形处理指令;在第二操作***处执行该图形处理指令,得到处理结果,并将处理结果作为图形处理操作的响应进行显示,其中,该图形处理操作是在第一操作***处接收到的;其中,该共享内存对该第一操作***和该第二操作***均处于可读和可写状态。
根据本申请实施例的第三个方面,提供了一种GPU的虚拟化装置,包括:第一接收模块,用于接收在第一操作***处的图形处理操作,并根据该图形处理操作确定对应的图形操作指令;第一传递模块,用于将该图形处理指令通过共享内存传递至该第二操作***;其中,该共享内存对该第一操作***和第二操作***均处于可读和可写状态。
根据本申请实施例的第四个方面,提供了一种GPU的虚拟化装置,包括:获取模块,用于通过共享内存获取来自第一操作***的图形处理指令;执行模块,用于在该第二操作***处执行该图形处理指令,得到处理结果,并将处理结果作为图形处理操作的响应进行显示,其中,该图形处理操作是在第一操作***处接收到的;其中,该共享内存对该第一操作***和第二操作***均处于可读和可写状态。
根据本申请实施例的第五个方面,提供了一种GPU的虚拟化***,包括:第一操作***,包括如本申请实施例第三个方面的GPU的虚拟化装置;共享内存,用于存储来自该第一操作***的图形操作指令和来自第二操作***的处理结果;其中,该共享内存对该第一操作***和第二操作***均处于可读和可写状态;第二操作***,包括如本申请实施例第四个方面的GPU的虚拟化装置。
根据本申请实施例的第六个方面,提供了一种电子设备,该电子设备包括:显示器,存储器,一个或多个处理器;以及一个或多个模块,该一个或多个模块被存储在该存储器中,并被配置成由该一个或多个处理器执行,该一个或多个模块包括用于执行本申请实施例第一个方面的GPU的虚拟化方法中各个步骤的指令。
根据本申请实施例的第七个方面,提供了一种电子设备,该电子设备包括:显示器,存储器,一个或多个处理器;以及一个或多个模块,该一个或多个模块被存储在该存储器中,并被配置成由该一个或多个处理器执行,该一个或多个模块包括用于执行本申请实施例第二个方面的GPU的虚拟化方法中各个步骤的指令。
根据本申请实施例的第八个方面,提供了一种与包括显示器的电子设备结合使用的计算机程序产品,该计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,该计算机程序机制包括用于执行本申请实施例第一个方面的GPU的虚拟化方法中各个步骤的指令。
根据本申请实施例的第九个方面,提供了一种与包括显示器的电子设备结合使用的计算机程序产品,该计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,该计算机程序机制包括用于执行本申请实施例第二个方面的GPU的虚拟化方法各个步骤的指令。
采用根据本申请实施例的GPU虚拟化方法、装置、***及电子设备、计算机程序产品,通过第一操作***和第二操作***之间的共享内存实现图形处理指令和执行结果的传递,实现了GPU的虚拟化。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1中示出了基于Qemu/KVM技术的虚拟化架构示意图;
图2示出了用于实施本申请实施例中GPU的虚拟化方法的一种***架构示意图;
图3示出了根据本申请实施例一的GPU的虚拟化方法的流程图;
图4示出了根据本申请实施例二的GPU的虚拟化方法的流程图;
图5示出了根据本申请实施例三的GPU的虚拟化方法的流程图;
图6示出了根据本申请实施例四的GPU的虚拟化装置的结构示意图;
图7示出了根据本申请实施例五的GPU的虚拟化装置的结构示意图;
图8示出了根据本申请实施例六的GPU的虚拟化***的结构示意图;
图9示出了根据本申请实施例七的电子设备的结构示意图;
图10示出了根据本申请实施例八的电子设备的结构示意图。
具体实施方式
在实现本申请的过程中,发明人发现,在手机或平板等终端设备上实现上述虚拟化架构,需要解决所有硬件设备的虚拟化,允许虚拟出来的操作***也能使用真实的硬件设备。因此,需要提供一种GPU的虚拟化方法。
针对上述问题,本申请实施例中提供了一种GPU虚拟化方法、装置、***及电子设备、计算机程序产品,通过第一操作***和第二操作***之间的共享内存实现图形处理指令和执行结果的传递,实现了GPU的虚拟化。
本申请实施例中的方案可以应用于各种场景中,例如,采用基于Qemu/KVM技术的虚拟化架构的智能终端、安卓模拟器等。
本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java等。
为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
实施例一
图2示出了用于实施本申请实施例中GPU的虚拟化方法的一种***架构。如图2所示,根据本申请实施例的GPU虚拟化***包括第一操作***201、第二操作***202和共享内存203。具体地,该第一操作***可以是Guest操作***;该第二操作***可以是Host操作***。应当理解,在具体实施时,该第一操作***也可以是Host操作***,该第二操作也可以是Guest操作***,本申请对此不作限制。
接下来,将对第一操作***为Guest操作***,第二操作***为Host操作***为例,对本申请的具体实施方式进行详细介绍。
具体地,Guest操作***中可以包括用户空间2011、Guest Linux Kernel2012、和Qemu 2013;在Guest操作***的用户空间中有虚拟的图形程序接口,具体地,该图形程序接口可以是OpenGL(Open Graphics Library,开放图形实验室)API(Application ProgramInterface)接口,也可以是例如,Direct 3D、Quick Draw 3D等的其他图形程序接口,本申请对此不作限制。
具体地,Host操作***中可以包括用户空间2021和Host Linux Kernel2022;在Host操作***的用户空间中可以安装对应于Guest操作***中的图形程序接口的图形程序后端服务器Backend Server,具体地,可以是OpenGL Backend Server;后端服务器可以通过Host Linux Kernel中的GPU驱动程序去操作GPU设备204。
具体地,共享内存203是Guest操作***和Host操作***互相可见的一块内存;并且该内存对于Guest操作***和Host操作***均处于可读和可写状态,即,Guest操作***和Host操作***均可以在共享内存上执行读和写操作。
在具体实施时,该共享内存203可以仅包括第一存储区2031;也可以划分为第一存储区2031和第二存储区2032。具体地,该第一存储区也可以称为私有内存;该第二存储区也可以称为公共内存。在具体实施时,第一存储区和第二存储区的划分没有特定规则,可以是根据第一存储区和第二存储区各自通常存储的数据大小、依据设计人员的经验划分;也可以根据其他预先设置的策略来划分,本申请对此不作限制。
具体地,第一存储区可以用于Guest操作***的各个线程与Backend Server线程之间的函数和参数、和/或同步信息的传输;具体地,该私有内存还可以进一步被划分为多个块,一个块定义为一个通道,一个通道对应于Guest操作***的一个线程;在具体划分时,该多个块可以是平均划分的、尺寸大小相等的块,也可以是根据***中常用线程调用GPU的函数和参数、和/或同步信息的大小来智能划分,本申请对此不作限制。在具体实施时,Guest操作***的用户程序可以对私有内存中的通道进行动态管理,即,用户程序可以随时对私有内存中的通道进行分配、重新分配及释放操作。
具体地,第二存储区可以用于Guest操作***的所有线程与Backend Server线程之间的大数据块,例如,图形内容数据的传输。在具体实施时,可以将公共内存划分为若干个尺寸大小不相等的大块。具体地,Guest操作***中的用户程序可以对公共内存中的块进行管理,即,用户程序可以随时对公共内存中的通道进行分配、及释放操作,且每次分配和释放都是按整个块处理的。
在具体实施时,公共内存中块的大小的划分可以适配于常用的GPU图形处理数据。例如,研发人员在实现本申请的过程中发现,在GPU虚拟化过程中,通常第一操作***将2M至16M左右的图形内容数据传输至第二操作***就能够满足GPU图形虚拟化处理的需求;而在因此,在分配公共内存中块的大小时,可以将公共内存分隔为2M,4M,8M,16M等多个内存块。
举例来说,如果总公共内存大小为32M,分隔为2M,2M,4M,8M,16M5个内存块,用户程序申请3M空间时,可以直接把4M的内存块区分配给相应的线程,并在该线程释放时置一个空闲标志给4M块区。
应当理解,为了示例的目的,图2中仅示出了一个Guest操作***、一个Host操作***及一个共享内存的情况;但在具体实施时,可以是一个或多个Guest操作***,也可以是一个或多个Host操作***,还可以是一个或多个共享内存;即,对于Guest操作***、Host操作***及共享内存可以为任意的数量,本申请对此均不作限制。
应当理解,为了示例的目的,图2中示出的共享内存包括私有内存和公共内存两个存储区;并且将私有内存划分为3个大小相等的通道;公共内存被划分为4个大小不等的通道。在具体实施时,共享内存可以是仅包括私有内存一个存储区;并且私有内存可以不进行划分、或者划分为多个大小不等的通道;公共内存可以不存在,也可以被划分为多个大小相等的通道等,本申请对此均不作限制。
接下来,将结合图2所示***架构对根据本申请实施例的GPU的虚拟化方法进行描述。
图3示出了根据本申请实施例一的GPU的虚拟化方法的流程图。在本申请实施例一中,描述了以Guest操作***作为执行主体的GPU虚拟化方法的步骤。如图3所示,根据本申请实施例的GPU的虚拟化方法包括以下步骤:
S301,接收在Guest操作***处的图形处理操作,并根据该图形处理操作确定对应的图形处理指令。
在具体实施时,在S301之前,可以在Guest***对应的Qemu启动时,创建GPU设备对应的共享内存。具体地,Qemu可以通过***调用来创建对应的共享内存。具体地,可以从内存中划分一块特定的地址空间作为GPU设备的共享内存。该共享内存的大小可以可以由开发人员设置,并适配于GPU。例如,GPU设备对应的共享内存可以设置为128M等,本申请对此均不作限制。
应当理解,当有多个Guest***时,可以由每个Guest***的Qemu为GPU重新创建一块共享内存,也可以是该多个Guest***共享GPU对应的一块共享内存;本申请对此均不作限制。
Qemu进一步将该共享内存映射为Guest***的PCI(Peripheral ComponentInterconnect,外设部件互连标准)设备内存空间;并为Guest***提供虚拟的PCI寄存器作为PCI配置空间。
然后,Guest Linux Kernel将该共享内存划分为私有内存和公共内存。
具体地,Guest Linux Kernel可以在对GPU设备初始化时对共享内存进行划分;以使共享内存支持多个进程或线程的访问。具体地,可以将私有内存,即,第一存储区划分为第一预设数量的多个通道;可以将公共内存,即,第二存储区划分为第二预设数量的多个块。具体的,该第一预设数量和第二预设数量可以由开发人员设置。具体地,该私有内存的多个通道的大小可以相等;该公共内存的多个块的大小可以适配于该共享内存对应的物理设备的处理数据。
进一步的,在S301之前,还可以包括在前端线程启动时,为该前端线程、以及对应的后端线程分配相应的共享内存地址空间的步骤。
在具体实施时,当接收到API调用指令时,可以创建与该API调用指令对应的前端线程。并将API调用指令对应的线程创建指令发送到Host操作***,以触发Host操作***创建相应的后端线程。在前端线程和后端线程的创建过程中,还可以从Guest Linux Kernel处获取该前端线程对应的私有内存通道的地址空间、以及分配给该前端线程的公共内存地址空间;并将该前端线程对应的私有内存通道的地址空间、以及分配给该前端线程的公共内存地址空间映射为该前端线程的地址空间;从而与Qemu建立同步控制通道。具体地,通常将私有内存中的某一通道分配给该前端线程,并将公共内存整个分配给该前端线程。
接下来,可以将该前端线程对应的私有内存通道的地址空间、以及公共内存的地址空间通过PCI配置空间传递给Qemu;然后Qemu通过进程间通信机制把前端线程对应的私有内存通道的地址空间、以及公共内存的地址空间发送给后端服务器;并将其映射为该后端线程的地址空间。
至此,就完成了前端线程与后端线程之间共享内存的初始化。
在具体实施时,用户通常针对Guest操作***中的某一线程执行图形处理操作,该图形处理操作可以是例如,打开一个新窗口,打开一个新页面等。可以理解,在本步骤之前,还可以包括用户在Guest操作***的用户空间创建一个新的线程的步骤。在具体实施时,该新的线程可以是一个应用程序,例如,QQ、微信等。用户创建新线程的行为可以是例如,用户打开微信等。
具体地,可以进一步将第一存储区划分为一个或多个通道,如果该第一存储区包括多个通道;则在该图形处理指令写入至该共享内存之前,还包括:根据图形处理指令对应的线程,确定该图形处理指令对应的通道。
在用户在Guest操作***的用户空间创建一个新的线程时,即可以根据预先设置的规则为该线程分配一个对应的第一存储区的通道。具体地,该规则可以是按照线程创建的先后顺序。例如,在一个新的线程创建时,Guest Linux kernel为该线程分配一个唯一的通道号,并把该通道号对应的私有内存及整个公共内存同时映射给用户程序;Guest用户程序通过Qemu通知OpenGL Backend Server创建一个线程,并且将相应的私有内存通道号及整个公共内存空间映射给该线程。应当理解,在具体实施时,如果私有内存仅有一个通道,则可以不执行分配通道号这一步骤;也可以不执行根据图形处理指令对应的线程,确定该图形处理指令对应的通道这一步骤。
S302,将该图形处理指令通过共享内存传递至第二操作***,以使该第二操作***执行该图形处理指令,得到处理结果。
在具体实施时,将该图形处理指令通过共享内存传递至第二操作***可以通过以下方式实施:将该图形处理指令写入至该共享内存;将该图形处理指令在该共享内存的偏移地址发送至该第二操作***。具体地,Guest用户程序可以对每一块分配的内存执行偏移记录,即,记录当前写入图形处理指令的内存在当前线程对应的内存块内的偏移地址;然后把当前内存块的偏移地址发送到Host操作***中对应的线程。然后,Host操作***可以通过对应的通道号和偏移地址,到共享内存的相应位置读取图形处理指令,并立即执行函数,得到处理结果。
在第一种具体实施方式中,该图形处理指令可以仅包括图形处理函数和参数;则可以将该图形处理函数和参数存储至该共享内存的第一存储区,即,私有内存。Host操作***在获取到相应的图形处理函数和参数之后,可以立即执行函数,得到处理结果。具体地,为节省数据传输量,可以先确定该图形处理函数对应的编号;然后将该图形处理函数编号和参数写入至该第一存储区。Host操作***在获取到相应的图形处理函数编号后,根据编号确定对应的图形处理函数,再根据图形处理函数和参数,执行函数,得到处理结果。具体地,该图形处理函数可以是OpenGL函数。
在第二种具体实施方式中,该图形处理指令除图形处理函数和参数之外,还包括同步信息,该同步信息用于指示该第二操作***执行该图形处理指令的时刻;则可以将该图形处理函数和参数、以及同步信息均存储至该共享内存的第一存储区,即,私有内存。Host操作***在获取到相应的图形处理函数和参数之后,可以在同步信息指示的时刻执行函数,得到处理结果。
在第三种具体实施方式中,该图形处理指令除图形处理函数和参数之外,还包括图形内容数据;则可以将该图形处理函数和参数存储至该共享内存的私有内存,将该图形内容数据写入至第二存储区,即公共内存。Guest用户程序把私有内存块的偏移地址和公共内存块的偏移地址均发送到Host操作***中对应的线程。然后,Host操作***可以通过对应的通道号和私有内存偏移地址;到私有内存的相应位置读取图形处理函数和参数;通过公共内存偏移地址到公共内存的相应位置读取图形内容数据,并在读取后立即执行函数,得到处理结果。具体地,该图形内容数据可以是指需要进行图像处理的图像帧。
具体地,可以进一步将公共内存划分为多个、具有适配于GPU图形内容数据的大小的块;如果该第二存储区包括多个块;则在将图形内容数据写入至所述第二存储区之前,还可以包括:根据图形内容数据的大小,确定图形内容数据对应的块。
举例来说,如果总公共内存大小为32M,分隔为2M,2M,4M,8M,16M5个内存块,用户程序申请传递3M的数据内容数据时,可以直接把4M的公共内存块分配给相应的线程。
在第四种具体实施方式中,该图形处理指令除图形处理函数、参数和同步信息之外,还包括图形内容数据;则可以将该图形处理函数、参数和同步信息存储至该共享内存的私有内存,将该图形内容数据写入至第二存储区,即公共内存。Guest用户程序把私有内存块的偏移地址和公共内存块的偏移地址均发送到Host操作***中对应的线程。然后,Host操作***可以通过对应的通道号和私有内存偏移地址;到私有内存的相应位置读取图形处理函数、参数和同步信息;通过公共内存偏移地址到公共内存的相应位置读取图形内容数据,并在同步信息指示的时刻执行函数,得到处理结果。
应当理解,在具体实施时,第一操作***和第二操作之间可以一次或多次利用共享内存来传递下述数据中的任意一种或多种:图形处理函数或图形处理函数编号、参数、同步信息、图形内容数据。具体地,第一操作***可以一次就将待传递的图形处理指令通过共享内存传递至第二操作***;也可以将图形处理指令拆分成适当的大小,多次利用共享内存传递至第二操作***;在具体实施时,对图形处理指令的拆分策略可以采用本领域技术人员的常用技术手段,本申请对此不作限制。
S303,第二操作***将该处理结果作为该图形处理操作的响应进行显示。
在具体实施时,第二操作***在得到处理结果后,可以通过GPU设备将处理结果显示至屏幕。
S304,第一操作***接收来自第二操作***的执行结果。
在具体实施时,第二操作***可以根据函数的执行结果,生成执行结果。具体地,该执行结果可以包括图形处理函数执行成功或失败的消息、和/或软件版本信息等;并返回给第一操作***;以使得第一操作***中的的相应线程能够获取该函数的执行。
具体地,Host操作***可以将执行结果写入共享内存;并记录当前写入执行结果的位置,在当前线程对应的内存块内的偏移地址;然后把该偏移地址发送到Guest操作***中对应的线程。然后,Guest操作***可以通过对应的偏移地址,到共享内存的相应位置读取数据。
至此,实现了Guest操作***中用户程序对GPU设备的远程调用;即,实现了GPU的虚拟化。
采用本申请实施例中的GPU的虚拟化方法,在共享内存的基础上实现了OpenGLAPI的远程调用,从而实现GPU的虚拟化。
实施例二
图4示出了根据本申请实施例二的GPU的虚拟化方法的流程图。在本申请实施例二中,描述了以Host操作***作为执行主体的GPU虚拟化方法的步骤。本申请实施例中的***架构的实施可以参见实施例一中图2所示的***架构,重复之处不再赘述。
如图4所示,根据本申请实施例的GPU的虚拟化方法包括以下步骤:
S401,Host操作***通过共享内存获取来自Guest操作***的图形处理指令。
在具体实施时,共享内存可以划分为私有内存和公共内存;并且私有内存可以进一步划分为对应于不同线程的多个通道;如果私有内存包括多个通道,则在S401之前,还包括:所述图形处理指令对应的线程,确定该图形处理指令对应的通道。
具体地,可以在用户在Guest操作***的用户空间创建一个新的线程时,即可以根据预先设置的规则为该线程分配一个对应的第一存储区的通道。具体地,该规则可以是按照线程创建的先后顺序。例如,在一个新的线程创建时,Guest Linux kernel为该线程分配一个唯一的通道号,并把该通道号对应的私有内存及整个公共内存同时映射给用户程序;Guest用户程序通过Qemu通知OpenGL Backend Server创建一个线程,并且将相应的私有内存通道号及整个公共内存空间映射给该线程。应当理解,在具体实施时,如果私有内存仅有一个通道,则可以不执行分配通道号这一步骤;也可以不执行根据图形处理指令对应的线程,确定该图形处理指令对应的通道这一步骤。
在具体实施时,Guest操作***可以将图形处理指令在共享内存的偏移地址发送至Host操作***;Host操作***根据该图形处理指令在共享内存的偏移地址,从共享内存读取该图形处理指令。
在第一种具体实施方式中,该图形处理指令仅包括图形处理函数和参数时;Host操作***可以在私有内存中获取到相应的图形处理函数和参数。如果在私有内存中获取到的是图形处理函数的编号,则可以根据编号确定对应的图形处理函数,再根据图形处理函数和参数。
在第二种具体实施方式中,该图形处理指令除图形处理函数和参数之外,还包括同步信息,该同步信息用于指示该第二操作***执行该图形处理指令的时刻;Host操作***可以在私有内存中获取到相应的图形处理函数、参数和同步信息。
在第三种具体实施方式中,该图形处理指令除图形处理函数和参数之外,还包括图形内容数据;则Host操作***可以通过对应的通道号和私有内存偏移地址;到私有内存的相应位置读取图形处理函数和参数;通过公共内存偏移地址到公共内存的相应位置读取图形内容数据。
在第四种具体实施方式中,该图形处理指令除图形处理函数、参数和同步信息之外,还包括图形内容数据;则Host操作***可以通过对应的通道号和私有内存偏移地址;到私有内存的相应位置读取图形处理函数、参数和同步信息;通过公共内存偏移地址到公共内存的相应位置读取图形内容数据。
S402,Host操作***执行该图形处理指令,得到处理结果。
在具体实施时,如果图形处理指令中包括同步信息,则Host操作***在获取到图形处理指令后,可以在同步信息指示的时刻基于参数执行图形处理函数,并得到处理结果。
在具体实施时,图形处理指令中不包括同步信息,则Host操作***在获取到图形处理指令后,可以立即基于参数执行图形处理函数,并得到处理结果。
S403,将处理结果作为在第一操作***处接收到的图形处理操作的响应进行显示。
在具体实施时,Host操作***显示函数处理结果的过程可以采用本领域技术人员的常规技术手段,本申请对此不作赘述。
S404,将执行结果通过共享内存传递至第一操作***。
在具体实施时,在Host操作***得到处理结果后,可以再将函数的执行结果,例如,用于标识函数执行成功或者执行失败的消息,写入该共享内存;并将该消息在该共享内存的偏移地址发送至该第一操作***,以使第一操作***根据该偏移地址,获取该函数执行结果。
至此,实现了在Host操作***中,配合Guest操作***中的用户程序对GPU设备的远程调用;即,实现了GPU的虚拟化。
采用本申请实施例中的GPU的虚拟化方法,在共享内存的基础上实现了OpenGLAPI的远程调用,从而实现GPU的虚拟化。
实施例三
图5示出了根据本申请实施例三的GPU的虚拟化方法的流程图。在本申请实施例三中,描述了以OpenGL图形处理接口为例,Guest操作***与Host操作***配合实现GPU虚拟化方法的步骤。本申请实施例中的***架构的实施可以参见实施例一中图2所示的***架构,重复之处不再赘述。
在本申请实施例中,OpenGL API函数远程调用的发起方为Guest操作***,函数执行方为Host操作***,从Guest操作***到Host操作***的下行同步过程经历Guest Linuxkernel、Qemu到达OpenGL Backend Server;从Host操作***到Guest操作***的上行同步过程从OpenGL Backend Server发起,经过Qemu、Guest Linux kernel到达OpenGLemulator API。
在本申请实施例中,Guest操作***每次创建一个新的显示窗口,就会相应地创建一个线程去初始化并调用OpenGL函数,在初始化过程中,OpenGL Backend Server同样会创建一个与Guest端一一对应的线程。
接下来,将对基于上述应用场景的GPU虚拟方法的实施过程进行详细描述。
如图5所示,根据本申请实施例三的GPU的虚拟化方法包括以下步骤:
S501,共享内存初始化。
在具体实施时,可以在Guest Linux kernel把共享内存划分为两大块,分别定义为私有内存及公共内存。
具体地,可以把私有内存平均划分成若干个尺寸大小相等的块,一个块即为一个通道,每一个通道用于Guest操作***的一个线程到OpenGL Backend Server线程的数据及同步信息的传输。具体地,该数据可以包括图形处理函数编号和参数。
具体地,可以把公共内存划分成若干个尺寸大小不相等的大块,用于Guest操作***的所有线程到OpenGL Backend Server线程的大数据块传输。
S502,建立共享内存与线程的映射。
在具体实施时,可以由Guest Linux kernel控制私有通道的编号,当Guest用户程序每次创建一个新的线程时,kernel负责分配一个唯一的通道号,并把该通道对应的私有内存及整个公共内存同时映射给用户程序。
然后由Guest用户程序通过Qemu通知OpenGL Backend Server创建一个线程并使用对应的私有通道内存及整个公共内存空间。
Guest用户程序对私有通道内存进行动态管理,程序可以随时在私有内存进行分配,重新分配及释放操作。
Guest用户程序对公共内存进行固定尺寸大小管理,每次分配和释放都是按整个块处理的,举例来说,如果总公共内存大小为32M,分隔为2M,2M,4M,8M,16M 5个内存块,用户申请3M空间时,直接把4M的内存块区分配出去,释放时置一个空闲标志给4M块区。
Guest用户程序对每一块分配的内存执行偏移记录,即,记录当前分配的内存在整个跨***内存块的偏移地址。
S503,Guest用户程序响应于用户的图形处理操作,确定相应的图形处理指令。
步骤S503的实施可以参考实施例一中S301的实施,重复之处不再赘述。
S504,Guest用户程序把函数编号及其参数写到分配的内存块后,把函数编号和参数在当前内存块的偏移地址传到Host操作***对应的线程。
步骤S504的实施可以参考实施例一S302中函数编号和参数的传递过程的实施,重复之处不再赘述。
S505,Host操作***从共享内存中获取传递过来的函数编号及其参数,并开始执行函数。
步骤S505的实施可以参考实施例二S401中函数编号和参数的获取过程,以及实施例二S402中函数执行过程的实施,重复之处不再赘述。
S506,Host操作***执行完函数后,显示处理结果,并用同样的方法把标识函数执行成功或失败的消息写在共享内存里,再把相应的偏移地址返回给Guest操作***,完成一次函数的执行。
步骤S506的实施可以参考实施例二S403和S404的实施,重复之处不再赘述。
至此,实现了在Guest操作***和Host操作***之间的OpenGL API的远程调用,从而实现GPU的虚拟化。
采用本申请实施例中的GPU的虚拟化方法,使用了跨操作***共享内存的方法,也就是说两个操作***互相可见在一块内存上进行的读写操作,在共享内存的基础上实现了OpenGL API的远程调用,从而实现GPU的虚拟化。
基于同一发明构思,本申请实施例中还提供了一种GPU的虚拟化装置,由于该装置解决问题的原理与本申请实施例一所提供的GPU的虚拟化方法的相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
实施例四
图6示出了根据本申请实施例四的GPU的虚拟化装置的结构示意图。
如图6所示,根据本申请实施例四的GPU的虚拟化装置600包括:第一接收模块601,用于接收在第一操作***处的图形处理操作,并根据该图形处理操作确定对应的图形操作指令;第一传递模块602,用于将该图形处理指令通过共享内存传递至该第二操作***,以使该第二操作***执行该图形处理指令,得到处理结果,并将处理结果作为图形处理操作的响应进行显示;其中,该共享内存对该第一操作***和第二操作***均处于可读和可写状态。
具体地,该第一操作***可以为客Guest操作***,该第二操作***可以为主Host操作***。
具体地,第一传递模块,具体可以包括:第一写入子模块,将该图形处理指令写入至该共享内存;第一发送子模块,用于将该图形处理指令在该共享内存的偏移地址发送至该第二操作***。
具体地,该图形处理指令可以包括图形处理函数和参数;第一写入子模块,具体可以用于:将图形处理指令存储至该共享内存的第一存储区。
具体地,该图形处理指令还可以包括同步信息,该同步信息可以用于指示该第二操作***执行该图形处理指令的时刻。
具体地,该图形处理指令还可以包括图形内容数据;该共享内存还可以包括第二存储区;第一写入子模块,还可以用于:将该图形内容数据写入至该第二存储区。
具体地,第二存储区包括多个块,其中,各块具有预先设置的大小,预先设置的大小适配于GPU图形内容数据;该装置还可以包括:第一确定模块,用于根据图形内容数据的大小,确定图形内容数据对应的块。
具体地,该第一存储区包括多个通道,其中,各通道对应于不同的线程;该装置还可以包括:第二确定模块,用于根据图形处理指令对应的线程,确定该图形处理指令对应的通道。
具体地,该图形处理指令可以包括图形处理函数对应的编号和参数;第一写入子模块,具体可以用于:确定该图形处理函数对应的编号;将该图形处理函数编号和参数写入至该第一存储区。
具体地,根据本申请实施例的GPU虚拟化装置还包括:第二接收模块603,用于接收来自第二操作***的执行结果。
具体地,第二接收模块,具体可以包括:第一地址接收子模块,用于接收来自第二操作***的执行结果在共享内存的偏移地址;第一读取子模块,用于根据执行结果在共享内存的偏移地址,从共享内存读取执行结果。
采用本申请实施例中的GPU的虚拟化装置,在共享内存的基础上实现了OpenGLAPI的远程调用,从而实现GPU的虚拟化。
基于同一发明构思,本申请实施例中还提供了一种GPU的虚拟化装置,由于该装置解决问题的原理与本申请实施例二所提供的GPU的虚拟化方法的相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
实施例五
图7示出了根据本申请实施例五的GPU的虚拟化装置的结构示意图。
如图7所示,根据本申请实施例五的GPU的虚拟化装置700包括:获取模块701,用于通过共享内存获取来自第一操作***的图形处理指令;执行模块702,用于在该第二操作***处执行该图形处理指令,得到处理结果;显示模块703,用于将处理结果作为图形处理操作的响应进行显示;其中,图形处理操作是第一操作***处接收到的;其中,该共享内存对该第一操作***和第二操作***均处于可读和可写状态。
具体地,该第一操作***可以为客Guest操作***,该第二操作***可以为主Host操作***。
具体地,获取模块,具体可以包括:第二地址接收子模块,用于接收来自第一操作***的图形处理指令在共享内存的偏移地址;第二读取子模块,用于根据该图形处理指令在共享内存的偏移地址,从共享内存读取该图形处理指令。
具体地,该图形处理指令可以包括图形处理函数和参数;第二读取子模块,具体可以用于:从共享内存的第一存储区读取该图形处理指令。
具体地,该图形处理指令还可以包括同步信息,该同步信息可以用于指示该第二操作***执行该图形处理指令的时刻;执行模块,具体可以用于:在该同步信息指示的时刻,执行该图形处理指令。
具体地,该图形处理指令还可以包括图形内容数据;该共享内存还可以包括第二存储区;第二读取子模块,还可以用于:从共享内存的第二存储区读取该图形内容数据。
具体地,该第一存储区包括多个通道,其中,各通道对应于不同的线程;该装置还可以包括:第二确定模块,用于根据图形处理指令对应的线程,确定该图形处理指令对应的通道。
具体地,该图形处理指令可以包括图形处理函数对应的编号和参数;第二读取子模块,具体可以用于:从该第一存储区读取该该图形处理函数编号和参数;根据该图形处理函数编号确定对应的图形处理函数。
具体地,根据本申请实施例的GPU虚拟化装置还可以包括:第二传递模块,用于将执行结果,通过共享内存传递至第一操作***。
具体地,第二传递模块,具体可以包括:第二写入子模块,用于将执行结果写入所述共享内存;第二发送子模块,用于将执行结果在共享内存的偏移地址发送至第一操作***,以使第一操作***根据处理结果在共享内存的偏移地址,获取执行结果。
采用本申请实施例中的GPU的虚拟化装置,在共享内存的基础上实现了OpenGLAPI的远程调用,从而实现GPU的虚拟化。
基于同一发明构思,本申请实施例中还提供了一种GPU的虚拟化***,由于该***解决问题的原理与本申请实施例一和二所提供的GPU的虚拟化方法相似,因此该***的实施可以参见方法的实施,重复之处不再赘述。
实施例六
图8示出了根据本申请实施例六的GPU的虚拟化***的结构示意图。
如图8所示,根据本申请实施例六的GPU的虚拟化***800包括:第一操作***801,包括GPU的虚拟化装置600;共享内存802,用于存储来自该第一操作***的图形操作指令和来自第二操作***的处理结果;其中,该共享内存对该第一操作***和第二操作***均处于可读和可写状态;第二操作***803,包括GPU的虚拟化装置700。
在具体实施时,第一操作***801的实施可以参见本申请实施例一中第一操作***201的实施,重复之处不再赘述。
在具体实施时,共享内存802的实施可以参见本申请实施例一中共享内存203的实施,重复之处不再赘述。
在具体实施时,第二操作***803的实施可以参见本申请实施例一中第二操作***202的实施,重复之处不再赘述。
具体地,该第一操作***可以为客Guest操作***,该第二操作***可以为主Host操作***。
采用本申请实施例中的GPU的虚拟化***,在共享内存的基础上实现了OpenGLAPI的远程调用,从而实现GPU的虚拟化。
实施例七
基于同一发明构思,本申请实施例中还提供了如图9所示的一种电子设备900。
如图9所示,根据本申请实施例七的电子设备900包括:显示器901,存储器902,一个或多个处理器903;总线904;以及一个或多个模块,该一个或多个模块被存储在该存储器中,并被配置成由该一个或多个处理器执行,该一个或多个模块包括用于执行根据本申请实施例一中任一方法中各个步骤的指令。
基于同一发明构思,本申请实施例中还提供了一种与包括显示器的电子设备900结合使用的计算机程序产品,该计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,该计算机程序机制包括用于执行本申请实施例一中任一该方法中各个步骤的指令。
实施例八
基于同一发明构思,本申请实施例中还提供了如图10所示的一种电子设备1000。
如图10所示,根据本申请实施例八的电子设备1000包括:显示器1001,存储器1002,一个或多个处理器1003;总线1004以及一个或多个模块,该一个或多个模块被存储在该存储器中,并被配置成由该一个或多个处理器执行,该一个或多个模块包括用于执行根据本申请实施例二中任一方法中各个步骤的指令。
基于同一发明构思,本申请实施例中还提供了一种与包括显示器的电子设备1000结合使用的计算机程序产品,该计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,该计算机程序机制包括用于执行本申请实施例二中任一该方法中各个步骤的指令。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (35)
1.一种图形处理器 GPU 的虚拟化方法,其特征在于,包括:
接收在第一操作***处的图形处理操作,并根据所述图形处理操作确定对应的图形处理指令;
将所述图形处理指令写入至共享内存,其中,所述共享内存为所述 GPU 对应的共享内存;
将所述图形处理指令通过共享内存传递至第二操作***;其中,所述共享内存对所述第一操作***和所述第二操作***均处于可读和可写状态;
所述共享内存包括第一存储区,所述第一存储区被划分为多个块,一个块定义为一个通道,一个通道对应于第一操作***的一个线程,所述图形处理指令包括图形处理函数和参数;所述将所述图形处理指令写入至所述共享内存,具体包括:将所述图形处理函数和参数存储至所述共享内存的第一存储区;
所述共享内存还包括第二存储区,所述第二存储区被划分为多个块,各块具有预先设置的大小,预先设置的大小适配于GPU图形内容数据,所述图形处理指令还包括图形内容数据;所述将所述图形处理指令写入至所述共享内存,还包括:将所述图形内容数据写入至所述第二存储区。
2.根据权利要求 1 所述的方法,其特征在于,将所述图形处理指令通过共享内存传递至所述第二操作***,具体包括:
将所述图形处理指令在所述共享内存的偏移地址发送至所述第二操作***。
3.根据权利要求 1 所述的方法,其特征在于,所述图形处理指令还包括同步信息,所述同步信息用于指示所述第二操作***执行所述图形处理指令的时刻。
4.根据权利要求 1 所述的方法,其特征在于,在将所述图形内容数据写入至所述第二存储区之前,还包括:
根据所述图形内容数据的大小,确定所述图形内容数据对应的块。
5.根据权利要求 1 所述的方法,其特征在于,在所述将所述图形处理函数和参数存储至所述共享内存的第一存储区之前,还包括:
根据所述图形处理函数和参数对应的线程,确定所述图形处理函数和参数对应的通道。
6.根据权利要求 1 所述的方法,其特征在于,所述图形处理指令包括图形处理函数对应的编号和参数;将所述图形处理指令写入至所述共享内存,具体包括:
确定所述图形处理函数对应的编号;
将所述图形处理函数对应的编号和参数写入至所述第一存储区。
7.根据权利要求 1 所述的方法,其特征在于,还包括:接收来自所述第二操作***的执行结果。
8.根据权利要求 7 所述的方法,其特征在于,接收来自所述第二操作***的执行结果,具体包括:
接收来自所述第二操作***的执行结果在所述共享内存的偏移地址;
根据执行结果在所述共享内存的偏移地址,从所述共享内存读取所述执行结果。
9. 一种 GPU 的虚拟化方法,其特征在于,包括:
通过共享内存获取来自第一操作***的图形处理指令;
从共享内存读取所述图形处理指令,其中,所述共享内存为所述 GPU 对应的共享内存;
在第二操作***处执行所述图形处理指令,得到处理结果;
将所述处理结果作为图形处理操作的响应进行显示;其中,所述图形处理操作是在所述第一操作***处接收到的;
其中,所述共享内存对所述第一操作***和所述第二操作***均处于可读和可写状态;
所述共享内存包括第一存储区,所述第一存储区被划分为多个块,一个块定义为一个通道,一个通道对应于第一操作***的一个线程,所述图形处理指令包括图形处理函数和参数;所述从共享内存读取所述图形处理指令,具体包括:从共享内存的第一存储区读取所述图形处理函数和参数;
所述共享内存还包括第二存储区,所述第二存储区被划分为多个块,各块具有预先设置的大小,预先设置的大小适配于GPU图形内容数据,所述图形处理指令还包括图形内容数据;所述从共享内存读取所述图形处理指令,还包括:从共享内存的第二存储区读取所述图形内容数据。
10.根据权利要求 9 所述的方法,其特征在于,通过共享内存获取来自第一操作***的图形处理指令,具体包括:
接收来自第一操作***的图形处理指令在共享内存的偏移地址;
根据所述图形处理指令在共享内存的偏移地址,从共享内存读取所述图形处理指令。
11.根据权利要求 9 所述的方法,其特征在于,所述图形处理指令还包括同步信息,所述同步信息用于指示所述第二操作***执行所述图形处理指令的时刻;在所述第二操作***处执行所述图形处理指令,具体包括:
在所述同步信息指示的时刻,执行所述图形处理指令。
12.根据权利要求 9 所述的方法,其特征在于,在所述从共享内存的第一存储区读取所述图形处理函数和参数之前,还包括:
根据所述图形处理函数和参数对应的线程,确定所述图形处理函数和参数对应的通道。
13.根据权利要求 9 所述的方法,其特征在于,所述图形处理指令包括图形处理函数对应的编号和参数;从共享内存的第一存储区读取所述图形处理指令,具体包括:
从所述第一存储区读取所述图形处理函数对应的编号和参数;
根据所述图形处理函数对应的编号确定对应的图形处理函数。
14.根据权利要求 9 所述的方法,其特征在于,还包括:
将执行结果通过共享内存传递至所述第一操作***。
15.根据权利要求 14 所述的方法,其特征在于,将执行结果通过共享内存传递至所述第一操作***,具体包括:
将执行结果写入所述共享内存;
将所述执行结果在所述共享内存的偏移地址发送至所述第一操作***,以使第一操作***根据所述处理结果在所述共享内存的偏移地址,获取所述执行结果。
16.一种 GPU 的虚拟化装置,其特征在于,包括:
第一接收模块,用于接收在第一操作***处的图形处理操作,并根据所述图形处理操作确定对应的图形处理指令;
第一写入子模块,具体用于:将所述图形处理指令存储至共享内存,所述共享内存为所述 GPU 对应的共享内存;
第一传递模块,用于将所述图形处理指令通过共享内存传递至第二操作***;其中,所述共享内存对所述第一操作***和第二操作***均处于可读和可写状态;
所述共享内存包括第一存储区,所述第一存储区被划分为多个块,一个块定义为一个通道,一个通道对应于第一操作***的一个线程,所述图形处理指令包括图形处理函数和参数;所述第一写入子模块,具体用于:将所述图形处理函数和参数存储至所述共享内存的第一存储区;
所述共享内存还包括第二存储区,所述第二存储区被划分为多个块,各块具有预先设置的大小,预先设置的大小适配于GPU图形内容数据,所述图形处理指令还包括图形内容数据;所述第一写入子模块,还用于:将所述图形内容数据写入至所述第二存储区。
17.根据权利要求 16 所述的装置,其特征在于,第一传递模块,具体包括:
第一发送子模块,用于将所述图形处理指令在所述共享内存的偏移地址发送至所述第二操作***。
18.根据权利要求 16 所述的装置,其特征在于,所述图形处理指令还包括同步信息,所述同步信息用于指示所述第二操作***执行所述图形处理指令的时刻。
19.根据权利要求 16 所述的装置,其特征在于,所述装置还包括:
第一确定模块,用于根据所述图形内容数据的大小,确定所述图形内容数据对应的块。
20.根据权利要求 16 所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于根据所述图形处理函数和参数对应的线程,确定所述图形处理函数和参数对应的通道。
21.根据权利要求 16 所述的装置,其特征在于,所述图形处理指令包括图形处理函数对应的编号和参数;第一写入子模块,具体用于:
确定所述图形处理函数对应的编号;
将所述图形处理函数对应的编号和参数写入至所述第一存储区。
22.根据权利要求 16 所述的装置,其特征在于,还包括:第二接收模块,用于接收来自所述第二操作***的执行结果。
23.根据权利要求 22 所述的装置,其特征在于,所述第二接收模块,具体包括:
第一地址接收子模块,用于接收来自所述第二操作***的执行结果在所述共享内存的偏移地址;
第一读取子模块,用于根据执行结果在所述共享内存的偏移地址,从所述共享内存读取所述执行结果。
24.一种 GPU 的虚拟化装置,其特征在于,包括:
获取模块,用于通过共享内存获取来自第一操作***的图形处理指令;
第二读取子模块,用于从共享内存读取所述图形处理指令,其中,所述共享内存为所述GPU 对应的共享内存;
执行模块,用于在第二操作***处执行所述图形处理指令,得到处理结果;
显示模块,用于将所述处理结果作为图形处理操作的响应进行显示;其中,所述图形处理操作是所述第一操作***处接收到的;其中,所述共享内存对所述第一操作***和第二操作***均处于可读和可写状态;
所述共享内存包括第一存储区,所述第一存储区被划分为多个块,一个块定义为一个通道,一个通道对应于第一操作***的一个线程,所述图形处理指令包括图形处理函数和参数;所述第二读取子模块,具体用于:从共享内存的第一存储区读取所述图形处理函数和参数;
所述共享内存还包括第二存储区,所述第二存储区被划分为多个块,各块具有预先设置的大小,预先设置的大小适配于GPU图形内容数据,所述图形处理指令还包括图形内容数据;所述第二读取子模块,还用于:从共享内存的第二存储区读取所述图形内容数据。
25.根据权利要求 24 所述的装置,其特征在于,获取模块,具体包括:
第二地址接收子模块,用于接收来自第一操作***的图形处理指令在共享内存的偏移地址;
第二读取子模块,用于根据所述图形处理指令在共享内存的偏移地址,从共享内存读取所述图形处理指令。
26. 根据权利要求 24 所述的装置,其特征在于,所述图形处理指令还包括同步信息,所述同步信息用于指示所述第二操作***执行所述图形处理指令的时刻;执行模块,具体用于:
在所述同步信息指示的时刻,执行所述图形处理指令。
27.根据权利要求 24 所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于根据所述图形处理函数和参数对应的线程,确定所述图形处理函数和参数对应的通道。
28.根据权利要求 24 所述的装置,其特征在于,所述图形处理指令包括图形处理函数对应的编号和参数;第二读取子模块,具体用于:
从所述第一存储区读取所述图形处理函数对应的编号和参数;
根据所述图形处理函数对应的编号确定对应的图形处理函数。
29.根据权利要求 24 所述的装置,其特征在于,还包括:
第二传递模块,用于将执行结果,通过共享内存传递至所述第一操作***。
30.根据权利要求 29 所述的装置,其特征在于,第二传递模块,具体包括:
第二写入子模块,用于将执行结果写入所述共享内存;
第二发送子模块,用于将所述执行结果在所述共享内存的偏移地址发送至所述第一操作***,以使第一操作***根据所述处理结果在所述共享内存的偏移地址,获取所述执行结果。
31. 一种 GPU 的虚拟化***,其特征在于,包括:
第一操作***,包括如权利要求 16 至 23 中任一项所述的 GPU 的虚拟化装置;
共享内存,用于存储来自所述第一操作***的图形处理指令和来自第二操作***的处理结果;其中,所述共享内存对所述第一操作***和第二操作***均处于可读和可写状态;
第二操作***,包括如权利要求 24 至 30 中任一项所述的 GPU 的虚拟化装置。
32. 一种电子设备,其特征在于,所述电子设备包括:显示器,存储器,一个或多个处理器;以及一个或多个模块,所述一个或多个模块被存储在所述存储器中,并被配置成由所述一个或多个处理器执行,所述一个或多个模块包括用于执行权利要求 1-8 中任一所述方法中各个步骤的指令。
33. 一种电子设备,其特征在于,所述电子设备包括:显示器,存储器,一个或多个处理器;以及一个或多个模块,所述一个或多个模块被存储在所述存储器中,并被配置成由所述一个或多个处理器执行,所述一个或多个模块包括用于执行权利要求 9-15 中任一所述方法中各个步骤的指令。
34.一种与包括显示器的电子设备结合使用的计算机程序产品,所述计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,所述计算机程序机制包括用于执行权利要求 1-8 中任一所述方法中各个步骤的指令。
35.一种与包括显示器的电子设备结合使用的计算机程序产品,所述计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,所述计算机程序机制包括用于执行权利要求 9-15 中任一所述方法中各个步骤的指令。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/113260 WO2018119951A1 (zh) | 2016-12-29 | 2016-12-29 | Gpu虚拟化方法、装置、***及电子设备、计算机程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003892A CN107003892A (zh) | 2017-08-01 |
CN107003892B true CN107003892B (zh) | 2021-10-08 |
Family
ID=59431118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680002845.1A Active CN107003892B (zh) | 2016-12-29 | 2016-12-29 | Gpu虚拟化方法、装置、***及电子设备、计算机程序产品 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107003892B (zh) |
WO (1) | WO2018119951A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107436797A (zh) * | 2017-08-14 | 2017-12-05 | 深信服科技股份有限公司 | 一种基于虚拟化环境的指令数据处理方法及装置 |
WO2019127476A1 (zh) * | 2017-12-29 | 2019-07-04 | 深圳前海达闼云端智能科技有限公司 | 虚拟***蓝牙通信方法及装置、虚拟***、存储介质及电子设备 |
CN109542829B (zh) * | 2018-11-29 | 2023-04-25 | 北京元心科技有限公司 | 多***中gpu设备的控制方法、装置及电子设备 |
CN110442389B (zh) * | 2019-08-07 | 2024-01-09 | 北京技德***技术有限公司 | 一种多桌面环境共享使用gpu的方法 |
CN111114320B (zh) * | 2019-12-27 | 2022-11-18 | 深圳市众鸿科技股份有限公司 | 一种车载智能座舱共享显示方法及*** |
CN111522670A (zh) * | 2020-05-09 | 2020-08-11 | 中瓴智行(成都)科技有限公司 | 一种用于Android***的GPU虚拟化方法、***及介质 |
CN112581650A (zh) * | 2020-11-12 | 2021-03-30 | 江苏北斗星通汽车电子有限公司 | 基于智能座舱的视频数据处理方法、装置以及电子终端 |
CN112925737B (zh) * | 2021-03-30 | 2022-08-05 | 上海西井信息科技有限公司 | Pci异构***数据融合方法、***、设备及存储介质 |
CN113793246B (zh) * | 2021-11-16 | 2022-02-18 | 北京壁仞科技开发有限公司 | 图形处理器资源的使用方法及装置、电子设备 |
CN114579072A (zh) * | 2022-03-02 | 2022-06-03 | 南京芯驰半导体科技有限公司 | 一种跨多操作***的显示投屏方法及装置 |
CN115344226B (zh) * | 2022-10-20 | 2023-03-24 | 亿咖通(北京)科技有限公司 | 一种虚拟化管理下的投屏方法、装置、设备及介质 |
CN115686748B (zh) * | 2022-10-26 | 2023-11-17 | 亿咖通(湖北)技术有限公司 | 虚拟化管理下的服务请求响应方法、装置、设备及介质 |
CN115775199B (zh) * | 2022-11-23 | 2024-04-16 | 海光信息技术股份有限公司 | 数据处理方法和装置、电子设备和计算机可读存储介质 |
CN116597025B (zh) * | 2023-04-24 | 2023-09-26 | 北京麟卓信息科技有限公司 | 一种基于异构指令穿透的压缩纹理解码优化方法 |
CN116243872B (zh) * | 2023-05-12 | 2023-07-21 | 南京砺算科技有限公司 | 一种私有内存分配寻址方法、装置、图形处理器及介质 |
CN116485628B (zh) * | 2023-06-15 | 2023-12-29 | 摩尔线程智能科技(北京)有限责任公司 | 图像显示方法、装置及*** |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100417077C (zh) * | 2002-10-11 | 2008-09-03 | 中兴通讯股份有限公司 | 一种静态动态结合的存储区管理的方法 |
KR100592105B1 (ko) * | 2005-03-25 | 2006-06-21 | 엠텍비젼 주식회사 | 공유 메모리의 분할 영역의 다중 억세스 제어 방법 및 공유메모리를 가지는 휴대형 단말기 |
US8463980B2 (en) * | 2010-09-30 | 2013-06-11 | Microsoft Corporation | Shared memory between child and parent partitions |
CN102541618B (zh) * | 2010-12-29 | 2015-05-27 | ***通信集团公司 | 一种通用图形处理器虚拟化的实现方法、***及装置 |
US9047686B2 (en) * | 2011-02-10 | 2015-06-02 | Qualcomm Incorporated | Data storage address assignment for graphics processing |
US9158569B2 (en) * | 2013-02-11 | 2015-10-13 | Nvidia Corporation | Virtual interrupt delivery from a graphics processing unit (GPU) of a computing system without hardware support therefor |
CN104754464A (zh) * | 2013-12-31 | 2015-07-01 | 华为技术有限公司 | 一种音频播放方法、终端及*** |
CN104503731A (zh) * | 2014-12-15 | 2015-04-08 | 柳州职业技术学院 | 二值图像连通域标记快速识别方法 |
CN105487915B (zh) * | 2015-11-24 | 2018-11-27 | 上海君是信息科技有限公司 | 一种基于延迟发送机制的gpu虚拟化性能提升的方法 |
-
2016
- 2016-12-29 CN CN201680002845.1A patent/CN107003892B/zh active Active
- 2016-12-29 WO PCT/CN2016/113260 patent/WO2018119951A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN107003892A (zh) | 2017-08-01 |
WO2018119951A1 (zh) | 2018-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107003892B (zh) | Gpu虚拟化方法、装置、***及电子设备、计算机程序产品 | |
CN107077377B (zh) | 一种设备虚拟化方法、装置、***及电子设备、计算机程序产品 | |
US8966477B2 (en) | Combined virtual graphics device | |
CN103034524B (zh) | 半虚拟化的虚拟gpu | |
US9176765B2 (en) | Virtual machine system and a method for sharing a graphics card amongst virtual machines | |
EP2622470B1 (en) | Techniques for load balancing gpu enabled virtual machines | |
CN102177509B (zh) | 虚拟化存储分配方法 | |
US9798565B2 (en) | Data processing system and method having an operating system that communicates with an accelerator independently of a hypervisor | |
CN106796530B (zh) | 一种虚拟化方法、装置、及电子设备、计算机程序产品 | |
EP3992790B1 (en) | Information processing method, physical machine and pcie device | |
US10296454B2 (en) | Granular unmapping with variable addressing in a data store | |
CN107491354B (zh) | 一种基于共享内存的虚拟机间通信方法及装置 | |
US11204790B2 (en) | Display method for use in multi-operating systems and electronic device | |
CN107077376B (zh) | 帧缓存实现方法、装置、电子设备和计算机程序产品 | |
US9910690B2 (en) | PCI slot hot-addition deferral for multi-function devices | |
US20170024231A1 (en) | Configuration of a computer system for real-time response from a virtual machine | |
CN114138423B (zh) | 基于国产gpu显卡的虚拟化构建***及方法 | |
US20220050795A1 (en) | Data processing method, apparatus, and device | |
CN115904617A (zh) | 一种基于sr-iov技术的gpu虚拟化实现方法 | |
CN106598696B (zh) | 一种虚拟机之间数据交互的方法及装置 | |
CN113485791B (zh) | 配置方法和访问方法、装置、虚拟化***和存储介质 | |
US20160246629A1 (en) | Gpu based virtual system device identification | |
CN110941408B (zh) | 一种kvm虚拟机图形界面输出方法及装置 | |
EP3198406B1 (en) | Facilitation of guest application display from host operating system | |
US9459910B1 (en) | Controlling a layered driver |
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 |