一种基于延迟发送机制的gpu虚拟化性能提升的方法
【技术领域】
[0001]本发明涉及计算机操作系统与虚拟化技术领域,具体是一种基于延迟发送机制的GHJ虚拟化性能提升的方法。
【背景技术】
[0002]桌面虚拟化作为典型的云计算应用,可以为用户提供远程计算机桌面服务。虚拟桌面有很多优势,具备提供随时随地访问桌面的能力,降低软硬件的管理和维护成本等特点,这使得虚拟桌面具有广阔的应用前景。虚拟化桌面技术在传统应用处理、远程办公等业务方面具有独特优势,但是涉及到3D图形处理时,仍然面临着很大的挑战。当前有许多的桌面虚拟化业务仅能提供基本的2D图形业务,不能支持3D图形处理任务;其次3D的处理能力有限,对于GPU显存要求较高的任务基本上不能很好地执行。即,问题的关键在于系统的虚拟GPU性能与物理GPU性能具有一定差距,对于3D的图形加速功能还不能提供良好的支持。
[0003]随着虚拟化技术的不断推进,桌面虚拟化中CPU的虚拟化已经发展到相对成熟的阶段,依靠CHJ模拟GPU基本可以支持普通视频播放,能较稳定地支持一定的2D图形业务,但是物理机中GPU的使用几乎为零。然而虚拟化技术中GPU的虚拟化技术,最近几年却没有更多的突破,再加上GPU厂商对于GPU硬件规范保密,使得GPU虚拟化的难度系数加大。因而GPU的虚拟化的发展已经远远低于其他虚拟化的发展速度,正是因为这一点往往成为了桌面虚拟化系统性能的瓶颈。据调查,用户已经不满足云桌面初始基本办公的需求,而对多媒体内容应用、图形设计软件应用的需求越来越强烈。可见,GPU虚拟化将大幅度提高虚拟机性能。
[0004]在QEMU-KVM环境中,可以知道多个台客户虚拟机都运行在一个宿主机之上,每台客户机的CPU、内存以及I/O都是由底层KVM虚拟化支持。像GPU、声卡、网卡等其他部件由QEMU来模拟。对于客户机而言,认为所有的物理硬件都是齐全的一台机器;对于宿主机而言,所有的客户机只是在它上面运行的一个进程,在虚拟机中跑的指令包括GHJ有关的所有指令的运行都是靠CPU来执行,图形业务都是靠CPU来仿真实现的,物理机中GPU使用率几乎没有,若将GHJ利用,对其采用虚拟化技术或者是一些虚拟化方法,让KVM环境中的虚拟机能够使用GPU资源,这样可以将图形业务交由GPU来执行,在一定程度上极大地减轻了CPU负担。由CPU与GPU共同协作支持虚拟机从而提高了虚拟机的性能,在整体上提高整个环境中的虚拟化的性能,虚拟机在运行时,将其图形渲染操作全部交由GPU来执行,不再使用CPU仿真,释放传统KVM环境中CPU在图形操作上的负担。因此,这将降低CPU负担。此外类似的还有将浮点运算,矩阵运算的作业交由GPU来执行,从而进一步降低CPU运算负担。
[0005]目前在KVM环境下的GPU虚拟化相对比较复杂,没有很完善的方法。GPU虚拟化除了CHJ仿真外,还有GPU设备独占和GPU的API重定向,前一种方法虽然能获得GPU资源但是其他虚拟机包括宿主机无法再利用GHJ资源了,后一种方法是在KVM环境下的虚拟机无法直接获得GPU资源,因此需要将虚拟机与宿主机的GPU人为修改,将虚拟机的跟图形有关的指令捕获,发送至GPU来执行。这种方式存在一个问题,图形业务指令在前端与后端不停地交互,在移动程度上开销特别大,甚至在一定程度的时候已经超过了 CPU仿真的开销,虽然这种方法实现了在KVM环境的GPU使用问题,但是对于GPU虚拟化的性能有很大的损失。
[0006]采用GPU虚拟化后,经过试验发现,图形指令数据传输次数会导致GPU虚拟化的性能严重下降,也就是说图形指令数据传输次数过多时,GPU虚拟化性能会大幅度下降。因而,急切需要一种能够在KVM环境下的桌面云环境中对GPU虚拟化性能提升的方法,通过利用良好GPU虚拟化方法,提高虚拟机使用性能,来保证有一定负载的情况下虚拟机的正常运行以及良好的体验。
【发明内容】
[0007]本发明的目的在于提供一种桌面云环境下基于延迟发送机制的GPU虚拟化性能提升的方法,在KVM环境下采用的GPU独占和GPU API重定向相结合的方法,在解决KVM环境中桌面虚拟化的图形显示不足问题的同时,利用延迟发送手段提高GPU虚拟化性能,以更好的提高虚拟机使用效果,提升3D图形显示,来提高用户体验。
[0008]为实现上述目的,本发明提供如下技术方案:
一种基于延迟发送机制的GPU虚拟化性能提升的方法,使用GPU独占和API重定向相结合的GPU虚拟化方法,通过减少指令传输的次数来提高GPU虚拟化性能;根据循环体中的参数变化和数据依赖的不同情况提供三种延迟提交方法,第一种延迟提交方法为:每次循环时,不需要将循环体中的有关函数名和参数信息缓存,只要将有关信息缓存一次即可;第二种延迟提交方法为:每次将循环时的信息都进行缓存,等到循环结束后再一次性将这些信息传给图形设备虚拟机执行;第三种延迟提交方法为:在缓存循环中CUDA API的函数名和参数信息时,将那些没有数据依赖的参数,直接缓存其参数值;对于那些有数据依赖的参数,采用不直接缓存参数,而是缓存参数表达式系数的方法,等待GPU根据已知计算得出数据,传回,然后等循环结束后再一次性将缓存的信息传给GPU独占设备虚拟机;所述方法具体包括以下步骤:
步骤一:首先找到CUDA程序中的循环体,然后判断该循环体中是否包含CUDA API;步骤二:如果循环体中不包含CUDA API,则继续寻找下一个循环体;如果循环体中包含有CUDA API,接着判断该循环体中是否有参数变化;
步骤三:如果该循环体没有参数变化且没有数据依赖,则使用第一种延迟提交方法;如果该循环体没有参数变化但有数据依赖,则采用第三种延迟提交方法;
步骤四:如果该循环体有参数变化但没有数据依赖,则采用第二种延迟提交方法;步骤五:如果该循环体有参数变化且有数据依赖,则采用与第三种延迟提交方法类似的方法,将循环次数也作为参数表达式中的一个变量,对其系数进行待定。
[0009]作为本发明进一步的方案:所述的采用GPU独占和GPUAPI重定向相结合的GPU虚拟化方法,利用其KVM下对GPU pass-though的支持,可实现GPU对某一虚拟机的绑定,构建独占GPU的虚拟机。通过调用该驱动可充分实现GPU的全部特性;含GPU的虚拟机与需要GPU资源的虚拟机利用虚拟机之间共享数据和指令存储空间来使用物理GPU资源,通过这种GPU虚拟化方法降低由于数据复制和传输带来的延时:首先,GPU虚拟化后的虚拟机对图形操作任务可交由GPU来处理,降低了 CPU负担,提高运算性能;其次,采用基于延迟发送的机制来降低与图形有关的调用的次数来提高GPU虚拟化性能。
[0010]作为本发明进一步的方案:所述的三种延迟提交方法均将交互次数降低到一次。
[0011]作为本发明进一步的方案:所述的步骤一中,判断循环体,找到CUDA程序中可以采用延迟提交的循环体,利用⑶DA API来对这些循环体进行标记,也就是在循环体开始之前和结束之后调用这些CUDA API,从而得出哪些循环体需要延迟提交。
[0012]作为本发明进一步的方案:所述的步骤二中,循环体中存在一些函数(如cudaMemcpy),判断其参数是否有变化,还是随着循环变化函数与函数之间参数构成数据依赖。
[0013]作为本发明进一步的方案:所述的步骤三中,通过判断循环体中⑶DAAPI的参数和数据依赖,在得到循环体中没有参数变化,也没有数据依赖的情况下,使用第一种延迟提交方法;如果不断循环体后有数据依赖,而没有参数变化的情况下,使用第三种延迟提交方法。
[0014]作为本发明进一步的方案:所述的步骤四中,通过判断循环体中⑶DAAPI的参数变化和数据依赖:得到循环体中存在参数变化,但是循环中不存在数据依赖,使用第二种延迟提交方法。
[0015]作为本发明进一步的方案:所述的步骤五中,在判断循环体有参数变化又有数据依赖的情况下,使用与第三种延迟提交方法类似的方法,将循环次数也作为参数表达式中的一个变量,对其系数进行待定,通过GPU利用相关系数结合变量当时的值来计算出参数值,同样类似于第三种延迟提交方法也将交互次数降低到一次。
[0016]与现有技术相比,本发明的有益效果是:
本发明针在KVM环境下的GPU虚拟化,采用的是一种设备独
占和API重定向结合的GPU虚拟化方法,这种方法有一定架构优势,同时该方法的优势是避开因为GPU厂商的硬件规范保密。采用该方法包括两部分:(l)GPU独占设备部分,即由Hypervisor创建一台虚拟机,将其作为独占GPU设备的虚拟机,使用GPU厂商发布的专用的设备驱动,安装好驱动后,通过调用该驱动可以充分实现GPU的全部特性。这样该虚拟机就通过独占GPU后使得该虚拟机获得了与物理机相似的图形处理能力。(2)在API重定向部分,通过利用Hypervisor创建新的一批虚拟机,由于这一些虚拟机不能直接与GPU交互,采用的是通过对虚拟机内存虚拟部分的一定修改,利用直接共享内存空间传输的方式与GPU独占部分的那台虚拟机交互,这样一来降低了由于数据复制和传输带来的延时。然后独占设备虚拟机通过使用cudaMemcpy API从内存中将数据传到GPU显存中,再调用这个API将数据从GPU传回内存。基于这种GPU虚拟化方法的优势是避免了传统的API重定向存在的GPU指令拦截,也避免了虚拟机指令由虚拟地址向真实地址的地址映射所带来的开销,同时也不需要对图形相关的指令的进行特殊处理。相对于单一的API重定向来说,在一定程度上,提高了效率。
[0017]本发明主要是通过减少与GPU相关的指令数据传输次数,来提升GPU虚拟化性能。采用GPU独占和API重定向结合的方式对数据量的传输是有一定的优化,在一定程度上改善了GPU虚拟化。但是对于图形相关数据传输的次数,即图形有关指令在与GPU交互频繁时,交互的开销会增大,从而GHJ性能会出现大幅度下降。由于频繁的指令传输,与GPU交互会加大系统的负担,因为每次交互都会产生一定开销,开销累积到一定程度会降低虚拟化性能,无论是GPU还是虚拟的整体性能。为此,基于数据传输次数,提出一种延迟提交方法。延迟提交方法主要是对CUDA程序中含有⑶DA API的循环进行处理,通过得知每次未含有GPU独占的虚拟机的⑶DA API调用都需要将其重写放入共享内存中,然后传送给含GPU的虚拟机的真实硬件设备执行后,再将其结果返回的过程。这样每次调用都会有一次交互,当发送的循环体中的CUDA API被循环调用N次时,意味需要交互N次,如此势必会制约虚拟机的性能,导致性能下降非常严重。延迟提交方法的思想是延迟CUDA API的递交,原来每次循环调用一次CUDA API就需要进行一次提交,总提交次数为循环体中CUDA API的个数乘以循环次数。而使用延迟递交方法后,采用的是将CUDA API的循环体整体递交的方法,也就只需要等待循环结束后进行一次性的提交,这样一来总的提交次数为1。为此只需要将每次循环时的CUDAAPI的函数名和参数信息缓存,在循环结束后再一次性传给GPU执行。采用这一种方法能很好地达到降低交互的效果,提高虚拟机性能。
[0018]在基于延迟发送机制下,有的循环中⑶DAAPI的参数会随着循环次数变化,有的循环中存在数据依赖。为了解决这个问题,提出了改进延迟提交的使用方法。对于仅有参数变化的采用每次循环时的信息都进行缓存,等到循环结束后再一次性将这些信息传给图形设备虚拟机执行,有数据变化而参数稳定的方法的核心思想是:力求将传输次数降低到一次。即在缓存循环中CUDA API的函数名和参数信息时,对于那些没有数据依赖的参数,直接缓存参数值;对于那些有数据依赖的参数,并不直接缓存参数值,而缓存参数表达式的系数,等循环结束后再一次性将缓存的信息传给GPU。含GPU虚拟机利用表达式系数,结合变量当时的值,重新计算出参数值。由于CUDA API的参数固定不变,并不需要将每次循环时的函数名和参数信息缓存,而只需将循环体中的信息缓存一次即可。延迟提交将交互次数降低到一次,数据传输量减少到一个循环体。采用这种延迟方式可以大大减少不必要的交互,提高GPU虚拟化性能。同时存在参数变化和数据依赖的采用的是将循环次数也作为参数表达式中的一个变量,对其系数进行待定来处理。
[0019]本发明根据具体情况来选择使用这三种延迟发送方法来降低发送的次数,通过延迟发送指令的方法来充分利用GPU物理资源,使虚拟机几乎达到跟实体机同样的效果。
【附图说明】
[0020]图1是混合结构的虚拟机独占GPU不意图;
图2是混合结构的虚拟机共享内存交互图;
图3是延迟发送的流程图。
【具体实施方式】
[0021]下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0022]请参阅图1和2,本发明所满足的虚拟化环境是在KVM环境下,使用的GPU虚拟化方法是基于GHJ独占和GPU API重定向的方法。本发明的虚拟化混合结构,包括两个部分:
独占设备部分是由Hypervi sor创建一台虚拟机,对其做GPU独占,如图1所示。这台包含有GPU的虚拟机,被认为是一个虚拟的图形设备,通过安装该型号GPU的专有设备驱动,便可以由虚拟机根据GPU的特性,对其进行调度管理,其中包括GPU通道、环境、内存等管理,这样该虚拟获得了全部的GPU物理资源。因此采用独占式的虚拟化实施方案会让该虚拟机获得与物理机相似的图形处理能力。该虚拟机还将与之交互的子虚拟机提供相应的捕捉、渲染和压缩功能。图形设备虚拟机接到请求,将任务交由GPU完成。
[0023]API重定向部分(如图2所示)是由Hypervisor创建的未直接获得GPU物理资源的虚拟机,这些虚拟机原本是通过CPU仿真的方式来实现GPU虚拟化,此方法中通过修改相关指令,将其与GPU交互的指令定向到独占GPU物理资源的虚拟机,由于都是由Hypervisor创建的虚拟机,它们可以通过共享内存的方式来递交与图形相关的指令,然后由包含有GPU的虚拟机向其GHJ发送指令,执行后按照原路将相关数据传送回发送指令的虚拟机,从而可以不断的刷新虚拟桌面图像。这种虚拟机之间的共享数据和指令存储空间,类比传统的API重定向,前端向后端发送数据指令,在一定程度上降低了数据复制和传输带来的延时。从而有利于GPU虚拟化性能提尚。
[0024]本发明方法基于延迟发送机制,采用的对已知CUDA函数循环体判断后,根据参数变化和数据依赖不同而设计的三种延迟提交方法如下:
第一种延迟提交方法,首先得出从已知的循环体中通过判断CUDA API的参数不会随着循环次数变化,并且在循环中不存在数据依赖。已经知道其参数和数据依赖关系不会随着循环次数变化而变化。即在循环过程中,采用的是不再每次循环时将相关函数名和参数信息缓存一次。而只需要在循环时,将循环体中的有关信息缓存一次即可。等循环结束后再一次性将缓存的信息传给GHJ设备执行。第一种延迟提交方法是将延迟提交将交互降低到一次,数据传输量也减少到一个循环体。
[0025]第二种延迟提交方法与第一种延迟提交方法有些类似,该方法不同于第一种延迟提交方法的地方为,根据从已知循环体中判断⑶DA API的参数会随着循环次数变化而变化,但是循环体中不存在数据的依赖。由于CUDA API的参数随着循环次数变化,不能类似第一种延迟提交方法,只缓存一次循环时的函数名和参数信息。采用第二种延迟提交方法需要将每次循环时的信息都进行缓存。由循环中缓存了相关的参数变化的数据,不会影响到参数变化。等到循环结束后再一次性将这些信息传给GHJ设备来执行。同理第二种延迟提交方法也是将交互次数降低到一次。
[0026]第三种延迟提交方法,与前面两种延迟提交方法不同的是该方法根据CUDAAPI的参数不会随着循环次数变化,但是循环中存在数据依赖,即数据处理上要进行处理。该方法的核心思想是在缓存循环中CUDA API的函数名和参数信息时,对于那些没有数据依赖的参数,直接缓存参数值;对于那些有数据依赖的参数,并不直接缓存参数值,而缓存参数表达式的系数。等循环结束后再一次性将缓存的信息传给图形设备虚拟机。在第三种延迟提交方法的实现过程中,需要缓存以下两类信息:
第一类信息,为了在第η次循环结束后可以联立方程组求出系数的值,需要缓存前η次循环中有数据依赖的参数表达式的值。即每次循环时,与参数有关的系数都要存下来,最后得到一个方程组,通过求解得出相关值。
[0027]第二类信息
,为了图形相关指令降低发送次数,需要在最后一次循环时将⑶DAΑΡI的函数名和参数信息缓存。
[0028]这里使用含GPU的虚拟机,它会利用表达式系数,结合变量当时的值,对于该方程组,可以采用高斯消去法对赋值后的方程式进行编程求解,重新计算出参数值。由于CUDAAPI的参数固定不变,并不需要将每次循环时的函数名和参数信息缓存。而只需将循环体中的信息缓存一次即可。最后再一次性的把相关的这些信息传给GPU设备来执行。第三种延迟提交方法将交互次数降低到一次,数据传输量减少到一个循环体。
[0029]在本发明所使用的基于延迟发送机制的方案实施之前,要解决的问题是如何判断一个CUDA程序中哪些部分可以采用延迟提交方法。首先采用的办法是通过借助已知的某种编译技术来实现判断一个CUDA循环体中是否有参数变化和是否有数据依赖,找出CUDA程序中可以采用的延迟递交的循环体,然后使用一些不常用的CUDA API(例如:cudaSetDevice和cudaSetDeviceFlags不常用的⑶DA API)对该循环体进行标记,即分别在循环体开始之前和结束后调用这些不常用的CUDA API,即在循环开始前选定一个不常用API(如:cudaSetDevice),在结束后选用另一个API(如:cudaSetDeviceFlags),通过这种方式,便可以很容易的知道在这两个函数之间的部分是需要采用延迟提交方法。
[0030]请参阅图3,一种基于延迟发送机制的GPU虚拟化性能提升的方法,采用延迟提交方法的步骤如下:
步骤一:首先根据开始描述的方法找到CUDA程序中的循环体,然后判断该循环体中是否包含CUDA API;
步骤二:如果在该循环体中不包括CUDA函数,则继续寻找下一个循环体;如果在该循环体中含有CUDA函数,那么接着就判断在已知的这个循环体中是否有参数变化;
步骤三:如果在已知的循环体中发现没有参数变化且没有数据依赖,则使用第一种延迟提交方法;如果在已知的循环体中没有参数变化但有数据依赖,则采用第三种延迟提交方法;
步骤四:如果在已知的循环体中有参数变化但没有数据依赖,则采用第二种延迟提交方法;
步骤五:如果在已知的循环体中有参数变化且有数据依赖,则可以采用与第三种延迟提交类似的方法,首先将循环次数也作为参数表达式中的一个变量,对其系数进行待定。
[0031]通过上面过程后,采用对应的延迟发送的方法,GPU执行后,再通过相关的接口统一将数据发送至含GHJ的虚拟机,根据内存共享,传送至对应的虚拟机。
[0032]本发明根据具体情况来选择使用这三种延迟发送方法来降低发送的次数,通过延迟发送指令的方法来充分利用GPU物理资源,使虚拟机几乎达到跟实体机同样的效果。
[0033]对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。
[0034]此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
【主权项】
1.一种基于延迟发送机制的GPU虚拟化性能提升的方法,使用GPU独占和API重定向相结合的GPU虚拟化方法,通过减少指令传输的次数来提高GPU虚拟化性能;其特征在于,所述方法具体包括以下步骤: 步骤一:首先找到CUDA程序中的循环体,然后判断该循环体中是否包含CUDA API; 步骤二:如果循环体中不包含CUDA API,则继续寻找下一个循环体;如果循环体中包含有CUDA API,接着判断该循环体中是否有参数变化; 步骤三:如果该循环体没有参数变化且没有数据依赖,则使用第一种延迟提交方法,该方法为,每次循环时,不需要将循环体中的有关函数名和参数信息缓存,只要将有关信息缓存一次即可;如果该循环体没有参数变化但有数据依赖,则采用第三种延迟提交方法,该方法为,在缓存循环中CUDA API的函数名和参数信息时,将那些没有数据依赖的参数,直接缓存其参数值,对于那些有数据依赖的参数,采用不直接缓存参数,而是缓存参数表达式系数的方法,等待GPU根据已知计算得出数据,传回,然后等循环结束后再一次性将缓存的信息传给GPU独占设备虚拟机; 步骤四:如果该循环体有参数变化但没有数据依赖,则采用第二种延迟提交方法,该方法为,每次将循环时的信息都进行缓存,等到循环结束后再一次性将这些信息传给图形设备虚拟机执行; 步骤五:如果该循环体有参数变化且有数据依赖,则采用与第三种延迟提交方法类似的方法,将循环次数也作为参数表达式中的一个变量,对其系数进行待定。2.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的采用GPU独占和GPU API重定向相结合的GPU虚拟化方法,利用其KVM下对GPUpass-though的支持,实现GPU对某一虚拟机的绑定,构建独占GPU的虚拟机,通过调用该驱动可充分实现GPU的全部特性;含GPU的虚拟机与需要GPU资源的虚拟机利用虚拟机之间共享数据和指令存储空间来使用物理GPU资源;GHJ虚拟化后的虚拟机对图形操作任务交由GPU来处理。3.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的三种延迟提交方法均将交互次数降低到一次。4.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的步骤一中,判断循环体,找到CUDA程序中可以采用延迟提交的循环体,利用CUDAAPI来对这些循环体进行标记,也就是在循环体开始之前和结束之后调用这些CUDA API,从而得出哪些循环体需要延迟提交。5.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的步骤二中,循环体中存在CUDA API函数,判断其参数是否有变化,还是随着循环变化函数与函数之间参数构成数据依赖。6.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的步骤三中,通过判断循环体中CUDA API的参数和数据依赖,在得到循环体中没有参数变化,也没有数据依赖的情况下,使用第一种延迟提交方法;如果不断循环体后有数据依赖,而没有参数变化的情况下,使用第三种延迟提交方法。7.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的步骤四中,通过判断循环体中CUDA API的参数变化和数据依赖,得到循环体中存在参数变化,但是循环中不存在数据依赖,使用第二种延迟提交方法。8.根据权利要求1所述的基于延迟发送机制的GHJ虚拟化性能提升的方法,其特征在于,所述的步骤五中,在判断循环体有参数变化又有数据依赖的情况下,使用与第三种延迟提交方法类似的方法,将循环次数也作为参数表达式中的一个变量,对其系数进行待定,通过GPU利用相关系数结合变量当时的值来计算出参数值,将交互次数降低到一次。
【专利摘要】本发明公开了一种基于延迟发送机制的GPU虚拟化性能提升的方法,采用GPU独占和API重定向相结合的GPU虚拟化方法,利用延迟发送的机制,并通过虚拟机之间共享内存的方法来减少GPU交互次数,从而提高GPU虚拟化性能。本发明根据循环体中的参数变化和数据依赖的不同情况给出了三种延迟发送指令提交的方法,分别是:第一种是在没有参数和数据变化下延迟发送;第二种是没有数据依赖和有参数的变化下延迟发送;第三种是没有参数变化,却有数据依赖的延迟发送。根据具体情况来选择使用这三种延迟发送方法来降低发送的次数,通过延迟发送指令的方法来充分利用GPU物理资源,使虚拟机几乎达到跟实体机同样的效果。
【IPC分类】G06F9/455, G06F9/50
【公开号】CN105487915
【申请号】CN201510818290
【发明人】沈国军
【申请人】上海君是信息科技有限公司
【公开日】2016年4月13日
【申请日】2015年11月24日