在异类系统中使用虚拟化编译和执行应用的方法和装置与流程

文档序号:12008409阅读:176来源:国知局
在异类系统中使用虚拟化编译和执行应用的方法和装置与流程
本发明一般涉及用于在集成了中央处理单元(CPU)和图形处理单元(GPU)的异类系统(heterogeneoussystem)中以虚拟化编译和执行应用的方法和装置,更具体地,涉及用于通过在源代码编译过程中将应用的GPU源代码编译为GPU虚拟指令以及在文件执行过程中将编译的GPU虚拟指令翻译为GPU机器代码、来编译和执行应用的方法和装置。

背景技术:
GPU技术的进步正给计算环境带来众多的改变。更具体地说,传统地,GPU是设计用于进行图形处理的设备,并且已经在很少使用图形内容时被用作减轻作为计算机的主要部分的CPU的过载的辅助部分。然而,随着高清晰度(HD)视频和游戏、以及现在的三维(3D)内容的广泛普及,GPU的角色得到提高。也就是说,GPU近来已经被关注,作为负责替代CPU处理大量操作以及进行图形处理的单元。

技术实现要素:
技术问题因此,随着GPU角色的扩展,存在着改善GPU利用效率的增长的需求。问题的解决方案因此,本发明被提供用来解决上述问题和/或缺点,并提供至少下述优点。本发明的一个方面提供用于在集成了CPU和GPU的异类系统中使用虚拟化编译和执行应用的方法和装置。本发明的另一个方面提供了方法和装置,在编译包括在应用中的源代码时,将GPU源代码编译为GPU虚拟指令,将编译的虚拟GPU命令直接翻译为GPU机器代码,导致增强的CPU和GPU利用效率。根据本发明的一个方面,提供了用于在包括中央处理单元(CPU)和图形处理单元(GPU)的系统中编译和执行应用的方法。该方法包括:接收对编译应用的请求,该应用包括CPU源代码和GPU源代码;响应于对编译的请求,通过将GPU源代码编译为GPU虚拟指令来生成执行文件;接收对执行所述执行文件的请求;以及响应于对执行所述执行文件的请求,通过将GPU虚拟指令翻译为GPU机器代码来执行所述执行文件。根据本发明的另一个方面,提供了用于编译和执行包括中央处理单元(CPU)源代码和图形处理单元(GPU)源代码的应用的装置。该装置包括:硬件设备,包括CPU和GPU;编译器,用于将GPU源代码编译为GPU虚拟指令;以及混合虚拟化块,用于通过将GPU虚拟指令翻译为GPU机器代码来执行执行文件。根据本发明的另一个方面,提供了用于编译和执行包括中央处理单元(CPU)源代码和图形处理单元(GPU)源代码的应用的装置。该装置包括:硬件设备,包括CPU和GPU;编译器,用于将GPU源代码编译为GPU虚拟指令;以及操作系统(OS),用于通过将GPU虚拟指令翻译为GPU机器代码来执行执行文件。发明的有益效果根据本发明的实施例的应用执行方法和装置能够同时有效地利用CPU和GPU,并且通过以GPU解决传统的实时编译方法的问题改善了GPU执行效率。附图说明当结合附图时,从以下详细描述中,本发明的某些实施例的上述和其他方面、优点、以及显著的特征将变得对于本领域技术人员更加清晰,其中:图1是示出使用具有由操作系统(OS)提供的程序库(library)的GPU的系统的框图;图2是示出使用GPU的系统的框图,其中GPU代码包含在应用程序中以便在程序运行时执行;图3是示出开放计算语言()的应用程序执行程序的流程图;图4示出了方法的示范性代码;图5示出了能在程序中执行的执行文件(二进制图像);图6是示出在和根据本发明实施例的应用执行方法之间的差别的流程图;图7是示出根据本发明实施例的集成了CPU和GPU的异类计算系统的框图;图8示出了根据本发明实施例的混合执行文件(二进制图像);图9是示出根据本发明实施例的编译应用的程序的流程图;图10是示出根据本发明实施例的由虚拟化层上的混合虚拟化块执行混合执行文件的程序的流程图;图11示出了根据本发明实施例的具有GPU机器代码的混合执行文件;图12是示出根据本发明实施例的由系统OS执行混合执行文件的程序的流程图;图13是示出根据本发明实施例的系统的示图;图14是示出根据本发明的另一个实施例的系统的示图;以及图15是示出根据本发明的另一个实施例的系统的框图。具体实施方式以下,参考附图详细描述本发明的各种实施例。在下面的描述中,在描述中定义的事物被提供用来帮助对本发明的理解,本领域普通技术人员很清楚,可以对这里所描述的事物进行预定的修改或改变而不脱离本发明的范围。贯穿附图相同的参考标号被用来指代相同或相似的部分。而且,对于这里结合的熟知功能和结构的详细说明将被省略,以避免模糊本发明的主题。在以下描述中,术语“应用”意味着原始代码或源代码在被编译之前的应用程序。例如,源代码可以是用于执行CPU操作的CPU源代码或用于执行GPU操作的GPU源代码。另外,术语“执行文件(executionfile)”意味着在编译应用时由编译器生成的文件。基本上,GPU可以以两种方式被应用(或应用程序)使用。第一种方式是用于诸如OS的系统程序,以提供应用要使用的程序库。第二种方式是将要由GPU使用的代码包括在应用中,以便GPU在程序运行时直接执行代码。图1是示出使用具有由OS提供的程序库的GPU的常规系统的框图。如图1中所示,该系统包括:具有应用程序的应用层;包括诸如CPU和GPU的物理处理单元的硬件层;中间件层,其插入在应用层和硬件层之间;以及OS。在图1的系统中,OS提供GPU程序库,从而应用直接调用(calls)GPU程序库来执行相应的功能。开放图形程序库()是用于在如图1中所示的系统配置中使用的代表性的图形标准。应用程序可以调用应用编程接口(API)以便以GPU处理3D图形。API是一种标准API,利用其来开发应用。例如,代表性的基于的应用是游戏程序。然而,这类方法具有一个缺点,即只能使用提供的功能。例如,为了使用GPU实现面部识别操作,标准的面部识别API应该以程序库的形式指定和实现在相应的系统中。然而,如果不提供用于面部识别操作的程序库,则程序开发者无法实现该操作。图2是示出使用GPU的系统的框图,其中GPU代码包含在应用程序中以便在程序运行时执行。类似于图1,在图2中示出的系统包括:具有应用程序的应用层;包括诸如CPU和GPU的物理处理单元的硬件层;中间件层,其插入在应用层和硬件层之间;以及OS。然而,图2中示出的系统不同于图1中示出的系统之处在于,用于驱动GPU的GPU代码是直接插入应用中的。例如,是用于在如图2中所示的系统配置中使用的代表性的图形标准。图3是示出的应用程序执行程序的流程图。参考图3,在步骤S305,应用程序被执行。这里,“应用被执行”的表达意味着通过编译应用而生成的执行文件被运行。在步骤S310中,执行文件的CPU机器代码被执行。如果GPU在运行执行文件时将被使用,则在源代码级编译用于GPU的代码。在步骤S320中,作为编译结果创建的GPU机器代码被执行。在GPU机器代码执行完成之后,CPU机器代码再次在步骤S325被执行。步骤S315中的GPU源代码编译过程更详细地示出在图3右侧的步骤S330-S365中。具体地说,当GPU源代码编译在步骤S330中启动时,GPU机器代码通过以下步骤来生成:步骤S335中的词法-语法分析、步骤340中的预处理、步骤S345中的语法分析、步骤350中的其他分析、步骤355中的最优化、步骤360中的代码生成、以及步骤365中的GPU机器代码创建。本方法的优点在于,相应的GPU源代码可以由GPU执行而不管GPU类型(制造商)。在这种情况下,公共GPU源代码被分配,以便在运行时被编译,并以一定GPU机器代码的格式操作。图4示出了传统的方法的示范性代码。参考图4,应用包括可以由CPU和GPU同时执行的代码。在这种情况下,被称为“主要”的代码是由CPU执行的代码,而被称为“内核源(KernelSource)”的代码是由GPU执行的代码。图4中示出的代码被编译,从而CPU代码部分被转换为机器代码。然而,GPU代码部分被以字符串的形式插入到执行文件中,或者存储在外部源文件中而不被编译。如上所述,当相应的应用程序被执行时,GPU源代码被编译和执行。图5示出了能在传统的程序中执行的执行文件(二进制图像)。参考图5,在如图2中所示的系统中使用的执行文件包括诸如首标(未示出)、CPU机器代码、以及GPU源代码的元数据,在执行文件中,包括在应用程序中的GPU代码由GPU在程序运行时来执行。如上所述,随着GPU的角色变得越来越重要,需要一种方法用来更自由地扩展GPU的使用,以克服上述只能使用标准化API的限制。因此,本发明的一个方面提供用于有效的GPU应用使用的改进的方法。更具体地,由于GPU源代码在程序运行时被编译,诸如的传统技术具有执行速度显著降低的缺点。编译操作包括多个中间步骤并且很复杂,因此在缺乏计算能力的嵌入式系统中导致了严重的问题。而且,在编译GPU机器代码的过程的简化使得很难生成最优化的GPU机器代码、与GPU机器代码的最优化增加了编译操作复杂度之间存在一个平衡。而且,在诸如的传统方法中,GPU源代码510被插入执行文件的数据区域中,或者以外部脚本文件的形式存在,例如GPU源代码520,如图5中所示。GPU源代码暴露给外部导致了潜在的安全性问题。因此,本发明的一个方面提供用于有效地利用CPU和GPU的方法和装置,并解决现有技术的前述问题。也就是说,本发明的一个方面是为了最小化由复杂的GPU编译所导致的时间延迟、防止暴露GPU源代码、以及提供能够编译的GPU机器代码而不管GPU的类型。为了这个目的,本发明使用用于GPU操作的代码,该代码在指令级(或机器代码级)被编译,而不是在源代码级被编译。在以下描述中,在指令级被编译的GPU源代码被称为GPU虚拟指令。GPU虚拟指令是虚拟指令,而不是在实际GPU硬件上执行的机器代码。GPU虚拟指令在运行时被二进制翻译为将要执行的GPU机器代码。GPU虚拟指令还可以在所有类型的GPU硬件上执行。因为被编译为虚拟指令,根据本发明实施例的GPU虚拟指令改进了运行时的执行速度,并且在安全性方面具有鲁棒性。图6示出了在和根据本发明实施例的应用执行方法之间的差别。如上所述,在中,在编译应用时排除了GPU源代码。在二进制图像的运行时期间,源代码经由词法分析、预处理、语法分析、以及最优化来编译;然后作为编译结果的GPU机器代码被执行。然而,根据本发明的实施例,GPU源代码在指令级被编译为GPU虚拟指令。然后在执行文件的运行时期间,GPU虚拟指令被翻译为将要执行的GPU机器代码。不同于在GPU源代码被执行时从GPU源代码执行编译过程的传统方法,根据本发明实施例的方法通过翻译已经编译和翻译为GPU机器代码的GPU虚拟命令来简化程序。图7是示出根据本发明实施例的集成了CPU和GPU的异类计算系统的框图。参考图7,该异类计算系统包括应用710、编译器720、以及混合虚拟化块730。应用710在应用层上操作,并且包括全部CPU源代码和GPU源代码两者。例如,这样的应用程序已经如上参考图4进行了描述。编译器720将包括在应用710中的CPU源代码和GPU源代码编译为机器代码。这里,编译器720将CPU源代码编译为CPU机器代码,并将GPU源代码编译为GPU虚拟指令。因此,编译器720生成包括CPU机器指令和GPU虚拟指令的执行文件。在以下描述中,如上生成的执行文件被称为“混合二进制图像”。以下参考图8更详细地描述混合执行文件。混合虚拟化块730被插入在应用层和硬件层之间以便在运行时期间检测GPU虚拟命令,并且在检测到GPU虚拟命令时将GPU虚拟指令翻译为GPU机器代码。而且,混合虚拟化块730协调应用执行过程。在图7中示出的系统包括两个不同的OS740用于控制系统的总体操作。然而,应当注意到OS的数目不限于两个。图8示出了根据本发明实施例的混合执行文件(二进制图像)。参考图8,混合执行文件包括CPU机器代码和包括GPU虚拟指令的虚拟段810。这里,GPU虚拟段包括虚拟段首标820、CPU机器代码段830、以及GPU虚拟指令840。虚拟段首标820包括用于识别虚拟段的水印以及诸如CPU和GPU执行时间的执行信息。当CPU将要执行时,例如,因为系统没有GPU或者GPU忙于处理另一个任务,CPU机器代码段830包括将要执行的CPU机器代码。GPU虚拟指令区域840包括将要由GPU执行的指令。GPU虚拟指令区域840包括虚拟指令首标850和虚拟指令代码860。虚拟指令首标850包括关于用于输入和输出以执行(inputandoutputofthetoexecute)GPU操作的存储器和推荐处理元件(PE)的数目的信息。GPU虚拟指令代码包括将要由GPU执行的虚拟化的信息。也就是说,GPU虚拟指令代码是将要在运行时翻译为GPU机器代码的代码。图9是示出根据本发明实施例的用于编译应用的程序的流程图。参考图9,在步骤S910中,生成包括CPU和GPU源代码的应用。当检测到对编译应用的请求时,编译器720分别在步骤S920和S940分开编译CPU源代码和GPU源代码。更具体地,当检测到CPU源代码时,编译器720在步骤S920中编译CPU源代码,并在步骤S930中生成可由CPU执行的CPU机器代码。而且,当检测到GPU代码时,编译器720在步骤S940中编译GPU代码,并在步骤S950中生成可由虚拟GPU执行的GPU虚拟指令。例如,GPU虚拟指令的结构如图8中所示。编译器720在步骤S960中将创建的CPU机器代码链接到GPU虚拟指令,并在步骤S970中生成混合执行文件(二进制图像)。如上所述,混合执行文件包括CPU机器代码和虚拟段。当执行混合执行文件时,CPU段和GPU段根据虚拟化层的协调而分开执行,如以下将参考图10所描述的。图10是示出根据本发明实施例的在虚拟化层上由混合虚拟化块执行混合执行文件的程序的流程图。当系统被层级地组织时,图10假设正常的OS被放在由本发明的实施例所建议的虚拟化层上。而且,混合执行文件可以被执行而无需在本发明中建议的虚拟化层,如稍后将参考图12所描述的。参考图10,OS利用系统就好像只有OS本身在运行一样。首先,因为混合执行文件通过OS被正常地执行,OS首先在步骤S1010中执行。在步骤S1015中,OS执行其中插入GPU虚拟指令的混合执行文件。如果虚拟段在混合执行文件的执行期间被执行,则在步骤S1020中,在CPU中发生异常(exception)。在步骤S1025中,对系统的控制被从OS移交给虚拟化层上的混合虚拟化块730。混合虚拟化块730在步骤S1030中检查虚拟段的水印来识别虚拟段。如果没有识别到虚拟段,混合虚拟化块730在步骤S1050中执行传统的异常处理,并在步骤S1055中将系统控制移交给OS。然而,如果在步骤S1030中识别到虚拟段,则混合虚拟化块730在步骤S1035中将GPU虚拟指令翻译为GPU机器代码。在步骤S1040中,混合虚拟化块730将翻译的GPU机器代码插入到存储器(或文件)执行区域中,如图11中所示。在步骤S1045中,混合虚拟化块730将控制移交给OS。在步骤S1070中,OS使用GPU执行相应的GPU机器代码。如果在步骤S1020中没有发生异常,OS在步骤S1060中确定是否检测到GPU分支(branch)。如果检测到GPU分支,则OS在步骤S1070中执行GPU机器代码,否则OS在步骤S1065中执行CPU机器代码。这里,通过步骤S1060和S1070执行的GPU机器代码是在步骤S1035中翻译的GPU机器代码,并且存在于能够被执行而无需另外的翻译步骤的存储器(或文件)中。图12是示出根据本发明实施例的由系统OS执行混合执行文件的程序的流程图。上文中已经提供了其中虚拟化层的混合虚拟化块703运行混合执行文件的描述。下文中将参考图12描述OS运行混合执行文件而没有引入另外的虚拟化层。因为用于生成GPU虚拟指令的编译过程相同而不管是否引入虚拟化层,所以这里省略对其详细的描述。当在步骤S1205中执行混合执行文件时,OS在步骤S1210中确定在CPU中是否发生异常。如果发生异常,OS在步骤S1215中检查虚拟段中的水印来识别虚拟段。如果没有识别到虚拟段,则OS在步骤S1235中执行传统的异常处理,并且在步骤S1240中执行CPU机器代码。如果在步骤S1215中识别到虚拟段,OS在步骤S1220中将GPU虚拟指令翻译为GPU机器代码,并在步骤S1225中将翻译的GPU机器代码插入到存储器(或文件)执行区域中,如图11中所示。在步骤S1230中,OS使用GPU执行相应的机器代码。如果在步骤S1210中没有发生异常,则OS在步骤S1245中确定是否检测到GPU分支。如果检测到GPU分支,则OS在步骤S1230中执行GPU机器代码,否则OS在步骤S1240中执行CPU机器代码。这里,通过步骤S1245和S1230执行的GPU机器代码是在步骤S1220中翻译的GPU机器代码,并且存在于能够被执行而无需另外的翻译步骤的存储器(或文件)中。如上所述,根据本发明的实施例,GPU使用位于虚拟化层上的混合虚拟化块将GPU虚拟指令翻译为GPU机器代码。图13示出了根据本发明的这个实施例的系统。参考图13,混合虚拟化块被包括在安排在应用层和硬件层之间的OS以下的虚拟化层1310上。使用混合虚拟化块,OS将当前执行的混合执行文件认作(recognizeas)传统执行文件。也就是说,根据本发明的实施例,GPU虚拟指令可以被执行而无需修改更高的OS。如上所述,根据本发明的另一个实施例,OS在运行时期间将GPU虚拟指令翻译为GPU机器代码。图14和图15示出了根据本发明的这个实施例的系统。参考图14和图15,用于执行混合执行文件的混合虚拟化块被结合到OS中。例如,如图14中所示,第一OS可以是的而如图15中所示,第二OS可以是的根据本发明的这个实施例,当发生异常时,OS将GPU虚拟指令翻译为GPU机器代码。如上所述,根据本发明的实施例的应用执行方法和装置能够通过以GPU解决传统实时编译方法的问题,有效地同时利用CPU和GPU并改进GPU执行效率。本发明的应用执行方法和装置在GPU虚拟指令中编译包括在应用的源代码中的GPU源代码,并将编译的GPU虚拟指令翻译为GPU机器代码,由此能够通过补偿用于GPU使用的实时编译方法的问题,同时改进CPU和GPU的利用效率,以及GPU运行效率。而且,本发明的应用执行方法和装置能够防止GPU源代码暴露给外部,从而改进了安全性。进一步,本发明的应用执行方法和装置引入对于硬件透明的GPU虚拟指令,即,将被独立地实现而无需考虑GPU硬件制造商。虽然在上文中已经详细描述了本发明的一定实施例,但是应当理解,由本领域技术人员看来,在这里教导的基础发明构思的许多变化和/或修改仍将落在本发明的精神和范围之内,本发明的精神和范围定义在所附权利要求及其任意等效物中。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1