本发明专利技术公开了一种基于推迟提交的GPU虚拟化优化方法。本方法为:1)客户机上的GPU虚拟化框架前端读入一待执行CUDA应用程序的二进制文件,查找并标记可推迟提交的循环;2)前端执行到可推迟提交的循环部分时,直到该循环结束之前,缓存所有的CUDA函数调用信息及其依赖关系,跳过该函数调用的执行,然后在该循环结束之后将该缓存信息一次发送到宿主机上的GPU虚拟化框架后端;3)后端根据该缓存信息重新构建函数调用并执行,然后将所有任务执行结果打包一次发送回前端;可推迟提交的循环指不去执行循环中的CUDA函数调用,循环依然可以正确执行。本发明专利技术减少了前后端通信的次数,从而对GPU虚拟化的性能进行优化。
【技术实现步骤摘要】
一种基于推迟提交的GPU虚拟化优化方法
本专利技术属于虚拟化技术,涉及一种GPU虚拟化优化方法,尤其涉及一种基于推迟提交的GPU虚拟化优化方法。
技术介绍
GPU具有处理能力强、高存储器带宽、低成本等特点,不仅能很好地进行图形处理,在高性能计算方面也具有很强优势。GPU因为其强大的并行计算能力,近年来被广泛应用到科学计算、生物信息、气候预报、工程模拟等领域,发挥了巨大的作用。虚拟化技术具有资源共享、在线迁移、进程隔离等优点,在集群、云计算方面起到了很大作用。它不仅节约了计算资源,也提高了系统的稳定性和可靠性。由于虚拟化技术具有很多优势,近年来被广泛应用到各个领域,如资源整合、改善软件生命周期、数据中心、云计算等。由于虚拟化技术和GPU各自的优势,越来越多的研究者在虚拟化环境中利用GPU来进行高性能计算。虚拟化技术使得程序和软件运行在一个虚拟出来的计算环境中,而非真实的计算环境。在这种环境中GPU不便被虚拟机直接访问。再加上GPU厂商对于GPU硬件规范保密,因此虚拟化环境中GPU的使用和管理面临很大挑战。目前有研究者通过远程API的方法开发出一些GPU虚拟化框架(如图1),使得在虚拟机中可以访问GPU,这里选择CUDA应用程序作为应用的例子。远程API方法的GPU虚拟化框架分为前端和后端两个部分。前端以动态库的形式被客户机中的CUDA程序加载,这样在前端可以截获客户机中的所有对于CUDAAPI的调用。后端则是运行在宿主机中的一个桩模块,负责接收前端截获的调用信息。在这种机制下,首先由前端将虚拟机中的CUDA函数重写,将调用时的函数名称和相应参数传递给后端。后端为前端每个CUDA应用程序创建一个进程,在该进程中转换来自前端重写后的CUDA函数,获得函数的名称和参数。最后通过设备驱动,使用宿主机上真实的GPU硬件设备执行相应的函数调用。最后将函数的执行结果返回给前端,这样前端的CUDA程序就可以获得正确的执行结果。很明显可以看到,这种方法需要进行大量虚拟机与宿主机之间的数据传输,所有计算所需要的数据信息都需要传输到后端才能进行计算,导致GPU虚拟化的性能严重下降。在CUDA程序规模较小时,这些GPU虚拟化框架的性能下降并不太明显。但在进行实际应用中的高性能计算时性能下降非常明显。某些CUDA程序在虚拟机中的运行时间几乎是在宿主机中运行时间的17倍左右,无法达到实际应用的性能要求。
技术实现思路
本专利技术主要针对基于远程API的GPU虚拟化框架中数据传输量大而且频繁的问题,目的是要在现有的GPU虚拟化框架环境的基础上,提出一种基于推迟提交策略的优化方法,尽可能多的减少重复或冗余的数据传输。该方法检测客户机中的CUDA应用程序,从中找到可以推迟提交的部分,从而使得程序在执行时避免频繁,重复的传输大量数据,以减少数据传输带来的开销,从而提高GPU虚拟化的性能。此项专利技术可以保证映射之后程序可以准确无误的执行,保持和未修改之前一样的行为。同时还能保证效率高于原有框架。本专利技术的技术方案为:一种基于推迟提交的GPU虚拟化优化方法,其步骤为:1)客户机上的GPU虚拟化框架前端调用二进制分析模块读入一待执行CUDA应用程序的二进制文件,在该二进制文件中查找并标记可推迟提交的循环;2)GPU虚拟化框架前端执行该CUDA应用程序,当执行到可推迟提交的循环部分时,直到该循环结束之前,缓存所有的CUDA函数调用信息及其依赖关系,跳过该函数调用的执行,然后在该循环结束之后将该缓存信息一次发送到宿主机上的GPU虚拟化框架后端;3)宿主机上的GPU虚拟化框架后端根据该缓存信息重新构建函数调用并执行,然后将所有任务执行结果打包一次发送回客户机上的GPU虚拟化框架前端;其中,所述可推迟提交的循环是指循环中包含若干CUDA函数调用,但在该循环中不去执行这些CUDA函数调用,该循环依然可以正确执行的循环。进一步的,查找所述可推迟提交的循环的方法为:1)二进制分析模块对该二进制文件进行反汇编,然后为其中的每一用户级函数建立一控制流图;2)在每一控制流图中找到所有的循环;3)在每一自然循环中找到所有的函数调用点,识别出所有包含CUDA函数调用的循环;4)对每一CUDA函数调用的循环做寄存器级别的变量活性分析和数据相关性分析,根据每一CUDA函数调用信息及其依赖关系确定出所述可推迟提交的循环。进一步的,所述可推迟提交的循环包括三类;其中,第一类循环为:CUDA函数调用的参数不依赖于循环变量,且该参数不依赖循环中的其他变量,调用的结果不影响循环中其他语句的正常执行;第二类循环为:CUDA函数调用的参数依赖于循环变量,但该参数不依赖循环中的其他变量,调用的结果不影响循环中其他语句的正常执行;第三类循环为:CUDA函数调用的参数仅依赖于之前的CUDA函数调用产生的结果。进一步的,所述二进制分析模块静态或动态的在CUDA程序的二进制文件中插入变量来标记所述可推迟提交的循环的类别。进一步的,对于第一类循环,所述缓存的信息包括循环初值,步长和次数,CUDA函数调用的参数、函数名,参数信息及数据依赖关系;对于第二类循环,所述缓存的信息包括循环初值,步长和次数,CUDA函数调用的参数、函数名、循环变量以及依赖于循环变量的参数;对于所述第三类循环,所述缓存的信息包括循环初值,步长和次数,相互依赖的函数、依赖其他变量或参数的参数之间的依赖关系。进一步的,对于第一类循环,GPU虚拟化框架后端根据该缓存信息重新构建函数调用的方法为:首先根据GPU虚拟化框架前端发送来的循环初值,步长和次数,建立一个循环;然后根据发送过来的函数名在CUDA库中找到对应函数;然后根据发送过来的参数和数据重新构建函数调用。进一步的,对于第二类循环,GPU虚拟化框架后端根据该缓存信息重新构建函数调用的方法为:首先根据GPU虚拟化框架前端发送来的循环初值,步长和次数,建立一个循环;然后根据发送过来的函数名在CUDA库中找到对应函数,将循环变量替换为GPU虚拟化框架后端的循环变量;然后根据发送过来的参数和数据重新构建函数调用。进一步的,对于第三类循环,GPU虚拟化框架后端根据该缓存信息重新构建函数调用的方法为:首先根据GPU虚拟化框架前端发送来的循环初值,步长和次数,建立一个循环;然后根据发送过来的函数名在CUDA库中找到对应函数,根据参数的依赖关系重新计算参数的表达式,还原函数调用;然后根据发送过来的参数和数据重新构建函数调用。进一步的,利用dyninst工具读取该二进制文件,然后反汇编,最后静态或动态的为每一个函数建立一控制流图。进一步的,所述GPU虚拟化框架后端设立一缓冲队列,将每一次发送的缓存信息作为一组任务缓存到所述缓冲队列。本专利技术整体方案分为以下几个部分:(1)二进制文件分析模块,主要用来分析客户机中的二进制文件,找到可推迟提交的代码部分,并进行位置信息记录等处理。(2)修改基于远程API调用的GPU虚拟化框架的前端,利用二进制文件分析的结果,对数据的传输重新调度,减少重复的数据传输。(3)修改基于远程API调用的GPU虚拟化框架的后端,通过前端发送来的一组调用信息进行处理,并将结果返回前端推迟提交策略原理该策略主要应用于CUDA应用程序中含有CUDA函数调用的循环部分。在远程API调用的本文档来自技高网...
【技术保护点】
一种基于推迟提交的GPU虚拟化优化方法,其步骤为:1)客户机上的GPU虚拟化框架前端调用二进制分析模块读入一待执行CUDA应用程序的二进制文件,在该二进制文件中查找并标记可推迟提交的循环;2)GPU虚拟化框架前端执行该CUDA应用程序,当执行到可推迟提交的循环部分时,直到该循环结束之前,缓存所有的CUDA函数调用信息及其依赖关系,跳过该函数调用的执行,然后在该循环结束之后将该缓存信息一次发送到宿主机上的GPU虚拟化框架后端;3)宿主机上的GPU虚拟化框架后端根据该缓存信息重新构建函数调用并执行,然后将所有任务执行结果打包一次发送回客户机上的GPU虚拟化框架前端;其中,所述可推迟提交的循环是指循环中包含若干CUDA函数调用,但在该循环中不去执行这些CUDA函数调用,该循环依然可以正确执行的循环。
【技术特征摘要】
1.一种基于推迟提交的GPU虚拟化优化方法,其步骤为:1)客户机上的GPU虚拟化框架前端调用二进制分析模块读入一待执行CUDA应用程序的二进制文件,在该二进制文件中查找并标记可推迟提交的循环;2)GPU虚拟化框架前端执行该CUDA应用程序,当执行到可推迟提交的循环部分时,直到该循环结束之前,缓存所有的CUDA函数调用信息及其依赖关系,跳过该函数调用的执行,然后在该循环结束之后将缓存的信息一次发送到宿主机上的GPU虚拟化框架后端;3)宿主机上的GPU虚拟化框架后端根据该缓存的信息重新构建函数调用并执行,然后将所有任务执行结果打包一次发送回客户机上的GPU虚拟化框架前端;其中,所述可推迟提交的循环是指循环中包含若干CUDA函数调用,但在该循环中不去执行这些CUDA函数调用,该循环依然可以正确执行的循环。2.如权利要求1所述的方法,其特征在于查找所述可推迟提交的循环的方法为:21)二进制分析模块对该二进制文件进行反汇编,然后为其中的每一用户级函数建立一控制流图;22)在每一控制流图中找到所有的循环;23)在每一自然循环中找到所有的函数调用点,识别出所有包含CUDA函数调用的循环;24)对每一CUDA函数调用的循环做寄存器级别的变量活性分析和数据相关性分析,根据每一CUDA函数调用信息及其依赖关系确定出所述可推迟提交的循环。3.如权利要求1或2所述的方法,其特征在于所述可推迟提交的循环包括三类;其中,第一类循环为:CUDA函数调用的参数不依赖于循环变量,且该参数不依赖循环中的其他变量,调用的结果不影响循环中其他语句的正常执行;第二类循环为:CUDA函数调用的参数依赖于循环变量,但该参数不依赖循环中的其他变量,调用的结果不影响循环中其他语句的正常执行;第三类循环为:CUDA函数调用的参数仅依赖于之前的CUDA函数调用产生的结果。4.如权利要求3所述的方法,其特征在于所述二进制分析模块静态或动态的在CUDA程序的二进制文件中插入变量来标记所...
【专利技术属性】
技术研发人员:汪小林,王寒冰,刘宇玺,桑燕,罗英伟,
申请(专利权)人:北京大学,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。