CN105009082A - 减少过多的编译时间 - Google Patents
减少过多的编译时间 Download PDFInfo
- Publication number
- CN105009082A CN105009082A CN201480011933.9A CN201480011933A CN105009082A CN 105009082 A CN105009082 A CN 105009082A CN 201480011933 A CN201480011933 A CN 201480011933A CN 105009082 A CN105009082 A CN 105009082A
- Authority
- CN
- China
- Prior art keywords
- optimization pass
- optimization
- pass
- time
- code
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Abstract
在一个实例中,一种装置包含一或多个处理器,所述一或多个处理器经配置以:确定用于执行用于优化软件程序的代码的优化遍数的分配时间,对所述代码执行所述优化遍数的至少一些指令,以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
Description
技术领域
本发明涉及一种编译器。
背景技术
提供用于视觉呈现的内容的装置一般包含GPU。GPU渲染表示显示器上的内容的像素。GPU生成显示器上每个像素的一或多个像素值,并且对显示器上每个像素的像素值执行图形处理来呈现用于展示的每个像素。呈现过程可包含执行一或多个着色器程序,着色器程序的执行可修改像素值。
程序员通常利用个人用户可以理解的高级编码语言来开发软件,即用于计算机的指令集合。这样的指令通常被编译,即从高级编码语言转换为低级目标代码(有时称为机器代码),这种转换可以由处理器执行,例如,通用处理器或图形处理单元(GPU)。编译可以在执行之前或者在执行时执行,后者有时候称为“即时”编译。例如,用于GPU的着色器程序通常为即时编译。
编译器可经配置以执行各种优化任务。这样的优化可包含试图减少在编译代码执行期间耗用的存储器,试图加速可以执行编译代码的速度等。已经证明一些代码优化问题是因不能用多项式算法而使问题无法解决的甚至是不可确定的。相应地,编码优化过程可能需要相对长的时间来执行,并且可以同时是处理器密集型和存储器密集型的。
发明内容
总的来说,本发明描述与改进编译器优化有关的各种技术。这样的技术可以在即时编译期间(例如,在用于编译着色器程序的即时编译期间)或其他编译时间期间(例如,在软件开发和/或测试期间)使用。本发明描述可减少编译器在编译期间在优化代码上花费的时间量的技术。本发明还描述用于确定最适于待编译的指令特定集合的优化过程组合以及这些过程的参数的技术。本发明的多种技术可以单独使用或以任意组合一起使用。
在一实例中,一种方法包含:确定用于执行用于优化软件程序的代码的优化遍数的分配时间,在所述代码上执行所述优化遍数的至少一些指令,以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
在另一实例中,一种装置包含一或多个处理器,所述一或多个处理器经配置以:确定用于执行用于优化软件程序的代码的优化遍数的分配时间,在所述代码上执行所述优化遍数的至少一些指令,以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
在另一实例中,一种装置包含:用于确定用于执行用于优化软件程序的代码的优化遍数的分配时间的装置,用于在所述代码上执行所述优化遍数的至少一些指令的装置,以及用于响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行的装置。
在另一实例中,一种计算机可读存储媒体在其上存储有在执行时致使所述处理器执行以下操作的指令:确定用于执行用于优化软件程序的代码的优化遍数的分配时间,在所述代码上执行所述优化遍数的至少一些指令;以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
在另一实例中,一种方法包含:确定用于待编译的软件程序的代码的优化遍数配置数据集合,其中所述优化遍数配置数据界定在编译期间用于所述软件程序的优化遍数序列;并且基于所述优化遍数配置数据集合在所述软件程序的代码上执行所述优化遍数序列。
在另一实例中,一种装置包含一个或者多个处理器,所述一个或者多个处理器经配置以:确定用于待编译的软件程序的代码的优化遍数配置数据集合,其中所述优化遍数配置数据界定在编译期间用于所述软件程序的优化遍数序列;并且基于所述优化遍数配置数据集合在所述软件程序的代码上执行所述优化遍数序列。
在另一实例中,一种装置包含:用于确定用于待编译的软件程序的代码的优化遍数配置数据集合的装置,其中所述优化遍数配置数据界定在编译期间用于所述软件程序的优化遍数序列;以及用于基于所述优化遍数配置数据集合在所述软件程序的代码上执行所述优化遍数序列的装置。
在另一实例中,一种计算机可读存储媒体在其上存储有在执行时致使所述处理器执行以下操作的指令:确定用于待编译的软件程序的代码的优化遍数配置数据集合,其中所述优化遍数配置数据界定在编译期间用于所述软件程序的优化遍数序列;并且基于所述优化遍数配置数据集合在所述软件程序的代码上执行所述优化遍数序列。
在附图和以下描述中阐述一或多个实例的细节。根据描述和附图并且根据权利要求书,其他特征、目的和优点将显而易见。
附图说明
图1是示出示例性计算装置的方框图。
图2是示出编译器的部件的示例性集合的方框图。
图3是示出根据本发明的技术的用于使用用于编译的优化阶段的时间预算的示例性方法的流程图。
图4是示出了根据本发明的技术的用于动态配置编译器的示例性方法的流程图。
具体实施方式
总的来说,本发明描述了与在编译期间用于计算机程序的代码优化相关的技术。编译过程通常包含三个阶段:(1)剖析,其中源代码被转换成中间表示;(2)优化,其中中间表示被转换为更佳的表示(例如,在存储器耗用、处理效率、更快速的代码、改进的并行性等方面);以及(3)代码生成,其中优化中间表示被转换成目标代码。
通常,通过遍数系列(称为优化遍数)来执行优化阶段。例如,优化遍数可以包含循环优化遍数、数据流优化遍数、代码生成器优化遍数、功能语言优化遍数等。一些优化遍数相对复杂并对优化中间表示具有较大影响,而其他遍相对简单并对优化表示具有相对小的影响。
编译器(其可以实现为软件并由一或多个基于硬件的处理器实现)通常通过每个优化遍数顺序地迭代。一些遍数(例如,较复杂的遍数)可能需要相对大量的时间以完成执行。虽然在一些情况下这是可接受的,例如,在大的软件产品的最终构建被编译用于分销给消费者的情况下,但是在其他情况下,编译延时可能导致降低用户体验。
例如,在即时(JIT)编译期间执行优化(其通常用于计算机游戏、计算机动画、基于网络的程序等)可能导致在用户请求开始程序的时间和程序能够执行的时间之间的不可接受的延迟。作为另一实例,在代码开发周期过程中执行优化可能延长在编译代码和程序员可以测试和调试代码之间的时间。作为又一实例,在诸如智能电话和平板计算装置的移动装置上,电池电量可能是有限的,并且因而花费过多的时间优化代码可能对电池寿命产生负面影响。
本发明描述与在编译的优化阶段过程中降低所消耗的时间量(其可以提高用户体验)相关的一些技术。例如,根据本发明的一些技术,编译器的遍数管理器可以配置有界定最大优化时间(例如,优化时间预算)的数据,其中最大优化时间可以在各个优化遍数之间分配。遍数管理器可以给较复杂的遍分配较大量的时间而给较简单的遍分配较少的时间,给每个遍分配相等量的时间,或应用各种其他分配方案。本发明用“遍数管理器”指代执行其所描述的功能的任何单元、模块或部件,无论其以硬件、软件还是其任意组合形式实现。编译器可以经配置以自身执行这些功能,而无需包括独立的遍数管理器元件。同样地,编译器的特定元件(例如,代码生成器)可以经配置以执行本发明的遍管理技术。
在一些情况下,遍数管理器可允许较复杂的遍超过所分配的时间量,然后依据在复杂遍数的过程中所花费的超出时间,减少分配给其他遍数的时间量。在一些情况下,遍数管理器可以完全去除特定的遍,例如,通过将遍数的分配时间量设定为零。
当遍数管理器给不同遍分配不同的时间量时,分配给特定遍数的时间量可取决于各种数据。例如,遍数管理器可基于遍数(与其他遍数相比)的优先级来确定分配给特定遍数的时间量、总体优化预算中剩余的时间量、电源状态、指示被编译程序的优化的重要性的重要性值、用户偏好等。配置数据可以给各个遍分配优先级值。例如,配置数据可以包含表示遍数的优先级的数值,可以比较这样的数值以在多个遍中确定相对优先级。电源状态可以包括移动装置电池的电池电量的不同等级,例如,“完全电量”、“一半电量”、“四分之一电量”、“10%电量”等。
本发明还描述涉及通过编译器的动态配置来改进编译的优化阶段的其他技术。例如,并不是在特定且固定的顺序中执行优化遍数,本发明描述用于有选择地修改优化遍数顺序的技术,例如,通过基于待编译何程序,例如,基于程序的标识和/或基于待被编译程序的标识特征,重新排序优化遍数,使用不同参数多次执行相同的优化遍数,和/或完全去除一些优化遍数。标识可以包括文件名称、程序文件的散列或其他标识信息,而标识特征可以包括,例如,文件扩展名、程序编写语言或其他标识特征。优化遍数的顺序和优化遍数的参数可以被提前确定并提供给编译器。例如,编译器可以经配置以参考网络资源,以请求用于界定优化遍数的顺序和优化遍数的参数的数据。
图1是示例性计算装置10的方框图。在此实例中,计算装置10包含控制单元20和显示输出接口40。归属于控制单元20的功能可以使用硬件、软件、固件或者其任意组合来实现。在实现为软件或固件时,假定需要硬件,例如,还提供了用于存储软件或固件指令的计算机可读媒体和一或多个用于执行指令的处理器。例如,控制单元20可包含一或多个处理器。同样地,控制单元20可包含一或多个用于存储指令的计算机可读存储媒体,一或多个处理器可执行这些指令。
在此实例中,控制单元20包含图形程序22和图形处理单元GPU驱动器30。图形程序22可包括,例如,动画程序、视频游戏、图形开发程序或其他基于计算机的图形生成程序。在此实例中,图形程序22包含界定图形对象24的数据和界定着色器程序26的数据。图形对象24通常对应于可以由GPU所呈现的图形对象,例如显示输出接口40的GPU 42。例如,图形对象24可以包含图形基元的界定,例如点、线、三角形、长方形和其他多边形,以及由多个基元所组成的结构,诸如,例如二维或三维网格。图形对象24可对应于二维或三维图形对象。
显示输出接口40包含GPU 24,其可以呈现界定图形对象24的数据。执行渲染过程以从图形对象生成像素数据(例如,图像的每个像素的红-绿-蓝三重值的值)。以这种方式,本发明所称的呈现过程与例如对图像的编码表示进行解码(例如对联合图片专家组(JPEG)编码图像进行解码)的过程不同。也就是说,虽然对编码图像进行解码通常包含对一般性表示图像的像素的编码像素数据或其他数据进行解码,但是呈现过程通常包含从数据的高级表示中生成像素数据,其中数据的高级表示(例如,二维或三维图形对象(例如,图形基元))在一些实例中可进一步考虑摄像机视角、灯光效果以及其他这样的因素。虽然在渲染过程之后实际显示的图像的部分可能来自对编码图像的解码,但是所显示图像的至少一些部分是从图形处理数据中生成的,例如通过在渲染过程中应用图形处理数据来生成。
作为渲染过程的一部分,GPU 42可以执行一或多个着色器程序26。着色器程序是软件应用程序,其在GPU的可编程着色器处理器内核上执行从而以灵活的方式执行各种图形处理功能。在执行时,着色器程序26可以用于各种任务,例如基于光源和图形对象24相对于彼此的位置为从图形对象24生成的像素添加光亮或阴影。可以使用各种类型的着色器程序,例如,顶点着色器、几何着色器和像素着色器。在图1的实例中,图形程序22包含界定着色器程序26的源代码数据。在其他实例中,界定一或多个着色器程序的源代码数据可以存储在其他地方,例如作为图形程序22可访问的一或多个动态链接库。这样的动态链接库可以存储在控制单元20(在图1中未示出)的计算机可读媒体中。
GPU驱动器30表示控制单元20与GPU 42之间的接口。GPU驱动器30可以安装在计算装置10的操作系统内。以这种方式,图形程序22可以经由GPU驱动器30向GPU 42发出命令以使计算装置10在耦接到显示输出接口40的显示器上显示图像。例如,图形程序22可以将一或多个图形对象24的数据和/或界定一或多个着色器程序26的数据经由GPU驱动器30发送给GPU 42。根据本发明的技术,GPU驱动器30可以确定每次在编译器50被调用以编译程序(例如,一个着色器程序26)时编译器50的特定配置。附加地或可替代地,编译器50可以经配置以基于待编译程序的标识信息来确定配置。
编译器50的可能配置可以通过GPU驱动器30本身、通过编译器50或GPU驱动器30可访问的其他存储器存储在与GPU驱动器30分离的数据库内。作为一个实例,配置数据可以存储在可经由网络访问的数据库中。在图1的实例中,GPU驱动器30包含配置数据库32,配置数据库32基于各种编译目标来存储编译器50的各种可能配置。虽然在GPU驱动器30内示出配置数据库32,但是应当理解,配置数据库32可以存储在其他地方,例如在控制单元20内或计算装置10的外部。在这样的实例中,GPU驱动器30可以经由经配置以检索或接收数据的接口来检索或接收配置数据。因此,GPU驱动器30或编译器50可以经配置以在编译的特定时间基于一或多个各种编译目标来确定编译器50的特定配置。例如,如果目标是为了节省电量,那么GPU驱动器30可以选择减少优化遍数(例如,遍数的运行时间(即,分配给用于执行遍数的时间量)和/或所执行的优化遍数的数目)的配置。作为一个实例,GPU驱动器30可以选择节省电量的配置,其去除循环优化并且使用简单的线性扫描寄存分配器。可替代地,可以为带有循环的着色器保留循环优化,并且GPU驱动器30可以将编译器50配置为使用图形着色寄存器分配遍数。
可替代地,如果目标是接近优化的代码,则GPU驱动器30可以选择允许执行许多优化遍数的配置,并且数据库可以存储用于每一个着色器程序26的最佳已知的编译器配置。作为又一个实例,如果目标是节省存储器,则GPU驱动器30可以确保执行针对改进存储器利用率的优化遍数,并有选择地使用或略过其他优化遍数。作为又一个实例,系统负载可以是一个考虑因素。因此,GPU驱动器30可以选择响应于检测当前系统负载的用于编译器50的配置。例如,GPU驱动器30可以检查系统负载是相对高还是相对低,并选择执行哪些优化遍数或优化遍数的什么版本。
因此,基于不同时间的一或多个编译目标,编译器50在这些相应时间为着色器程序26的相同编译器产生不同的目标代码。以这种方式,GPU驱动器30可以取决于各种编译目标来动态地和自动地将编译器50重新配置为不同的。也就是说,在执行编译器50之前,GPU驱动器30可以例如,基于一或多个当前的编译目标和/或基于要编译的程序(例如,一个着色器程序26),使用来自配置数据库32的数据对编译器50进行配置。
在图1的实例中,计算装置10还包含网络接口44。在此实例中,GPU驱动器30可以配置成基于要编译的一个着色器程序26,使用网络接口44来检索用于编译器50的编译器配置数据。也就是说,当编译一个着色器程序26时,GPU驱动器30可以访问网络位置来检索要使用的编译器配置。因而,GPU驱动器30可以使用经由网络接口44检索的配置数据来更新配置数据库32。在一些实例中,GPU驱动器30可以定期地(例如,每星期或每月一次)检索这样的配置,使得在编译着色器程序26之前,最新的编译配置是可用的。
在图1的实例中,界定着色器程序26的数据以源代码(也就是,未编译代码)的形式存储。因此,为了由GPU 42可执行,图形程序22将用于着色器程序26的源代码发送至GPU驱动器30用于编译。因此,GPU驱动器30包含编译器50。编译器50通常对应于可以被控制器20的处理器执行的程序,其用于将着色器程序26的源代码转换成可以由GPU 42执行的目标代码。因而,着色器程序26可以在执行图片程序22的过程中被编译。换句话说,用于着色器程序26的源代码可以被即时编译。
GPU驱动器30和/或编译器50可以经配置以执行与由编译器50生成的目标代码的优化相关的本发明的不同技术。如上所述,编译器50可包含多个不同优化遍数的界定。每一个优化遍数可以经配置以优化代码的特定方面,例如,存储器管理、代码速度等。一定的优化遍数可以比其他的优化遍数相对更复杂。也就是说,可以已知,一定的优化遍数通常比其他优化遍数需要更多的执行时间和/或更多计算资源。根据本发明的技术,编译器50可以经配置以限制允许执行一或多个优化遍数的执行时间量。
作为一个实例,编译器50可以确定总体优化时间预算和/或一或多个单独的优化遍数时间预算。“时间预算”通常对应于在其间允许执行的时间量,使得一旦达到或超过时间量,编译器50就停止(例如,当前优化遍数和/或后续优化遍数的)进一步的执行。因而,总体优化预算可以对应于在其间允许执行的优化阶段的持续时间,例如,按毫秒、秒、计算周期等界定的。同样,单独的优化遍数可以对应于在其间允许执行相应优化遍数的持续时间。在优化遍数的执行过程中,当达到或超过预算时间量时,编译器50可以监测所花费的时间量并终止优化遍数的执行。可替代地,编译器50可以允许一些优化遍数超过预算时间量,但是通过减少一或多个随后的优化遍数的预算来抵消所述超出量。
此外,或可替代地,基于哪个着色器程序26正被编译,编译器50可以确定优化遍数的不同集合(例如,将被省略的一或多个可能的优化遍数),以及优化遍数的次序。例如,一些着色器程序可使用可用的优化遍数的子集来得到更好地优化,并且此外,以一定顺序和/或使用一定参数来执行这些优化遍数的执行。同样,其他着色器程序可使用可用的优化遍数的不同子集来得到更好地优化,同样也以一定顺序和/或使用一定参数来优化。
编译器50可以配置为单独地或一同执行这些各种技术。例如,基于待编译的一个着色器程序26,编译器50可以配置为确定待执行的可用的优化遍数的子集,以及用于执行优化遍数的时间预算。如果在完成优化遍数的子集之后时间预算还有剩余,则编译器50可以执行附加的优化遍数直到时间预算被用完。可替代地或附加地,编译器50可以为可用优化遍数的所选择的子集中的每一优化遍数确定单独的时间预算。
以这种方式,编译器50可以配置为执行与改进编译的优化阶段有关的本发明的一或多种技术。也就是说,在剖析之后,编译器50可以例如为一个着色器程序26优化剖析后的源代码的中间表示。在优化中间表示之后,根据本发明的技术,编译器50可以使用优化中间表示来生成目标代码。
编译器50可以生成与程序(例如,一个着色器程序26)的源代码相对应的大致优化目标代码。在生成目标代码之后,例如通过将代码传递给GPU 42,或将可由GPU 42访问的存储器中的代码的地址发送给GPU 42,GPU驱动器30可以致使GPU 42执行目标代码。相应地,GPU 42可以执行用于着色器程序的编译后的目标代码。例如,在呈现界定一或多个图形对象24的数据的同时,GPU 42可以执行用于一或多个着色器程序的目标代码。在完全呈现图像之后,显示输出接口40可以在图像缓冲器中存储所述图像的数据,显示装置(未示出)可检索所述数据用于显示。
虽然图1的实例将编译器50示出为GPU驱动器的一部分,但应该理解,本发明的技术也可以用在其他情况下。一般来说,本发明的技术可以由任何编译器,并且不一定是GPU驱动器的编译器使用。例如,本发明的技术可在代码开发和/或调试过程中由编译器使用。同样,这些技术可以由其他即时编译器使用,例如用于Java的编译器。
图2是示出编译器50的部件的示例性集合的方框图。在图2的实例中,编译器50包含剖析器52、权标解析器54、权标数据56、语法器58、优化器60、代码生成器80以及目标代码数据82。如相对于图1的说明,编译器50可以接收程序(例如,着色器程序)的源代码。图2示出了被剖析器52接收到的源代码。一般来说,剖析器52剖析源代码的文本(也就是说,所有的输入字符)。在图2的实例中,剖析器52在剖析过程中使用权标解析器54。权标解析器54权标解析输入源代码。权标解析通常涉及从输入源代码提取单独的权标。权标通常对应于源代码的单独的语义单元(例如,变量、功能、数值、命令、运算符、符号等)。
剖析器52可以从权标解析器54请求下一个权标,并且作为响应,权标解析器54可以将来自输入源代码表示下一个权标的数据返回到剖析器52。例如,表示下一个权标的数据可以包括“权标文本”值和“权标类型”值,其中权标文本是从源代码提取的文字文本,而权标类型是表示权标文本的类型的值,例如,纯文本、字母数字文本(包括字母和数字的组合的文本)、数字文本、符号或空白(例如,空格、回车、制表符等)。权标数据56界定文本的类型。以这种方式,权标解析器54可以检索在空白的集合之间的所有的非空白文本,并根据权标数据56确定检索到的文本的类型。权标解析器54类似地检索非空白区权标之间的空白,并使用权标数据56来对空白进行分类,例如分类为空白权标。
在从权标分析器54接收权标数据54之后,剖析器52可以确定权标的语义。例如,剖析器52可以使用确定界定语法器58的数据来确定用于权标的语义。语法器58可以包括与上下文无关的语法。剖析器52可以包括递归下降剖析器。因而,剖析器52可以通过使用语法器58在基于当前状态和接收到的权标的各种状态之间转变。所述各种状态可以影响剖析器52如何将语义分配给每个权标。然后剖析器52可以使用为源代码的各个权标所确定的语义来产生源代码的中间表示。
然后剖析器52可以向优化器60提供源代码的中间表示。优化器60可以通过单独或以任何组合形式使用本发明的一或多个技术来优化中间表示。一般来说,优化器60可以执行应用到中间表示的一或多个优化遍数74。如下文所述,优化器60可以配置成确保优化遍数的执行不超过预定执行时间预算和/或可以选择优化遍数74的子集来执行以优化中间表示,例如,基于正在被编译的程序的标识和/或程序的标识特征。
在图2的实例中,优化器60包含遍数管理器62和优化引擎72。优化引擎72在遍数管理器62的引导下执行各种优化遍数74。遍数管理器62进而包含预算监控器64和遍调度器68,并保持预算数据66和遍数据库(DB)70。预算数据66可以一般性地界定可以执行优化过程的总时间预算和/或用于优化遍数74中单独的优化遍数的时间预算,以及与正在被编译的当前程序的优化有关的跟踪数据。例如,预算监控器64可以保持与用于先前执行的优化遍数74的执行次数相关的统计、用于优化遍数74的优先级的排序、用于优化遍数74的初始时间分配、用于优化遍数74的修改后的时间分配等。
优化引擎72可以与遍数管理器62进行通信,以例如在优化遍数的执行过程中或在开始执行优化遍数之前,确定是否继续执行优化遍数74中的当前的一个优化遍数。例如,在每个指令之后,优化引擎72可以向遍数管理器62发送消息来确定是否继续进行当前优化遍数或完成当前优化遍数。在一些情况下,如果已经经过用于执行优化遍数74中的一个优化遍数的时间,而所述优化遍数还没有完成执行,则优化引擎72可以恰当地终止所述优化遍数的执行,然后继续执行随后的优化遍数或完成优化过程。
以这种方式,优化器60可以通过优化的自动限制和应用到指令流的其他转换来防止过多的编译时间。编辑器50可以设置有运行时间预算。遍数管理器62可以在所有优化遍数74和代码生成器80上分割此预算。换句话说,遍数管理器62可以将优化阶段(或执行编译器50本身)的运行时间限制为合理的执行时间,例如,五秒钟。虽然代码生成可能没有完成所有优化遍数的情况那么好,但是代码生成过程将仍然会得到正确的代码并可以通过避免在编译时间开始和完成之间不合理的延迟来提供更好的用户体验。
遍数管理器62可以通过使用各种参数来确定运行时间预算。如果编译器50是多线程、系统负载等,则这样的参数可包含CPU执行编译器的一或多种速度、CPU中的内核的数目。如下文更详细说明地,通过使用各种分配技术,总时间预算可以在优化遍数74之间进行分配。作为一个实例,遍数管理器62可以限制每遍运行时间,限制待执行的优化遍数的数目,和/或可以利用用于确定待执行哪些优化遍数74及需要执行多长时间的动态算法。附加地或在替代例中,花费昂贵的遍可以被替换成更简单的遍。例如,用更简单的调度器算法替换复杂的调度器遍,其可以产生较低效率的代码。作为一个实例,使用图着色的复杂的寄存器分配算法可以被替换成使用线性扫描的简单的算法。
在一些实例中,当编译器50以不同的顺序中的不同选择来运行不同的优化遍数时,各个优化遍数74之间的执行时间预算的分布可以是不同的。同样,在不同时间和由于例如系统负载等其他外部因素,对于相同的编译器和程序,总预算和分布可以是不同的。
在一个实例中,当执行优化遍数74时,遍数管理器62可以经配置以采用回退算法。也就是说,如果总预算为五秒,遍数管理器62可以确保在优化引擎72终止执行之前,优化遍数74中的每个优化遍数运行不超过200毫秒。如果发生这样的终止,可以采用伸缩性模式以在剩余遍列表中剔除一半剩余的遍。此模式可被重复用于更多的遍超时,确保永远不会达到5秒限制。超时结果是较低程度优化代码的生成。代码仍将正确地运行,但被较低程度地优化。
对于上述回退算法可替代地或附加地,遍数管理器62可经配置以具有用于遍数的时间限制的分层系统。也就是说,预算数据66可为不同类别的优化遍数74界定不同的执行时间(或总执行时间的百分比)。例如,优化引擎72可以经配置以执行可伸缩的剔除算法,其中只有复杂遍数(例如,回路分析优化遍数)每个可以耗费200毫秒,而简单的遍数(例如,失效代码删除优化遍数)可仅耗费50毫秒。预算数据66还可将每个优化遍数74分类为“复杂的”或“简单的”并相应地分配执行时间。可伸缩的剔除算法可以在更短的优化遍数之前先删去复杂的优化遍数,将剩余复杂的预算转移给更简单的遍。这有利于更简单的遍优先于复杂的遍执行。换句话说,在一个优化遍数74提前终止之后,优化引擎72可以取决于执行时间预算中所剩下的时间来运行一半的复杂遍数。当所有复杂遍数被略过以后,优化引擎72可开始略过“容易的”(简单的)遍数。对于讨论中的由编译器处理的特定程序领域,这种技术可被稍作调整。
预算数据66可以基于各种输入标准来界定不同的执行时间预算。例如,预算数据66可基于待编辑的源代码所编写的语言来界定不同的执行时间预算。例如,这样的语言可包含开放图形语言(OpenGL)、开放运算语言(OpenCL)、微软公司的对硬件编程的接口(DirectX)、开放图形语言渲染语言(GLslang)、着色人渲染语言(RenderMan Shadinglanguage)等。
这些技术可提供多种优势。例如,此技术是自动的,无需用户干预以确保优化阶段不会过多消耗执行时间。因此,编译器50可以花更多时间使用复杂的优化遍数。因此,编译器50的开发者无需担心对大型(即使很少)程序的优化遍数的最坏情况运行时间。这使得编辑器50可用于优化普通情况(或许最佳情况),而不是最差情况。同样地,这些技术可考虑精细控制,例如,用于图形程序程序优化的20毫秒预算(例如,用OpenGL编写的程序)和5秒用于计算程序(例如,用OpenCL编写的程序)程序优化。
此外,在代码生成期间,在无需处理罕见边界条件的情况下(例如,带有深度嵌套的函数调用流程的源程序),更加复杂和费时的遍可以被放入编译器管道。基于较简单的优化遍数的运行时间,遍数管理器62可估计对于更加积极的优化遍数有多少可用时间并将它们添加到管道中。可能的修改可包含更多积极的回路分析和/或更多积极的寄存器分配和指令调度。
时间预算算法也可根据一或多个不同的系统目标而被调整。也就是说,不同的优化遍数参数曲线可以被开发用于实现不同的系统目标,也可被存储于预算数据66中。例如,一个目标为节能,例如,在电池供电的装置中。通过使用节能曲线作为编译时间限制器,遍数管理器62可以试图确保编辑器50具有高效用电的最大能力。例如,出于节能目的的有效率的编译时间可对应于5秒的CPU时间。
在本发明的技术的开发过程中的探索性测试发现,在未应用本发明的技术的情况下,由于源代码模式的性质和应用于源代码模式的优化遍数的复杂性而花费相对较长的时间来编译各种程序。也就是说,在没有本发明的技术的情况下,在编译开始时间和完成时间之间可能长延迟。例如,一些着色器程序包含导致opt(即,编译优化阶段)和codegen(即,优化之后目标代码的生成)而消耗大量CPU时间的复杂模式,而这可能导致编译器50执行“锁死”,即,未能在合理时间内完成。在GPU着色器和内核的情况下,这也可能延迟程序(例如,使用着色器的游戏或使用内核的操作系统)的开始。因此,编译延迟(例如,由优化导致的延迟)可以导致较差的用户体验。在一些极端情况下,没用本发明的技术的编译器可导致进程的用户接口“锁死”。
作为一个实例,用OpenCL(开放计算语言)编写的示例性比特币程序的编译测试在8064GPU编译器上编译花费超过一小时。在所述实例中,比特币矿工为phatk2.cl,并且编译器为OpenCL编译器。这种延迟不仅导致较差的用户体验,而且恶意用户可以以这种方式编写源代码以利用这种延迟并因而引起拒绝服务攻击。因此,编译延迟可能带来潜在的安全风险。因此,利用本发明的技术可以避免这种延迟并导致提高的用户体验,并且还提供增强的安全性。也就是说,本发明的执行时间限制技术可防止编译器50消耗太多CPU时间。
附加地或可替代地,遍数管理器62可选择优化遍数74的子集使得所述子集包含对于大多数程序将不会消耗过多时间的优化遍数。也就是说,遍数管理器62可以记录优化遍数74中的各个优化遍数的统计资料以确定在执行过程中消耗的平均时间,以及通过执行优化遍数而获得的相对量的优化(例如,优化遍数在多大程度上实现存储器利用率、改善循环、提高执行速度等)。然后遍数管理器62可去除那些消耗过多执行时间而没有充分优化源代码的的优化遍数。
附加地或可替代地,在优化阶段过程中,执行编译器50的CPU可产生用于各种优化阶段的一或多个新线程。(例如,执行GPU驱动器30的)CPU可检测编译线程是否超过时间限制,并且然后在确定所述线程超过时间限制时终止所述线程。
本发明的技术的实施方案可以在编译时间过长时避免用户可察觉的延迟,同时在大多数情况下保留正常编译行为。在编译时间可能已经过多的情况下,用户可看到通过编译源代码得到的程序无法在GPU(或者在一些情况下为CPU)上快速地运行,而不是明显的无响应。
对于上述编译时间限制器技术附加地或可替代地,编译器50还可以经配置以基于待编译的特定程序来选择优化遍数74的子集用于执行。因此,对于用户可用的修改优化行为(例如,可以传递到编译器作为参数的-O2、-O3、-Os和-no-inline切换)的常规编译器选项附加地(或可替代地),遍数管理器62还可(例如,在没有用户输入的情况下)自动选择一或多个选项用于修改优化行为。换句话说,优化器60可以(例如,基于待编译的程序)动态执行优化遍数,而不是对于每个输入源代码程序执行固定顺序的优化遍数。此外,优化器60可以基于例如待编译程序、利用各种参数或其他修改、以特定次序、多次地执行优化遍数74或其子集。
遍数据库70包含界定优化遍数74的一或多个次序,是否应该用不同的参数(以及用于这样的遍数的参数)多次执行一或多个优化遍数74,是否应该略过一或多个优化遍数74的数据。遍数据库70可存储用于各种配置的这种数据的一或多个组合。在一些实例中,驱动器(例如,图1的GPU驱动器30)可选择存储在遍数据库70中的配置之一,或向编译器50发送关于从遍数据库70中检索哪些配置的指令。此外,通数据库70还可包含到预算数据66的映射,以界定用于执行任何或所有优化遍数的执行时间预算和/或优化阶段的总时间预算。
优化引擎72可以与遍数管理器62通信以确定在优化遍数序列中下一个执行哪个优化遍数74。此外,例如,当用不同的参数多次执行一或多个优化遍数74时,遍调度器68可向优化引擎72提供参数用于一或多个优化遍数74。也就是说,可以以灵活的方式构造编译器50(其可以对应于用于例如图1的GPU 42的GPU的编译器),使得可以省略一或多个优化遍数74,优化遍数74可对于每个遍以各种不同的次序、不同的次数和/或用不同的参数运行。
可以对于程序或程序的特征,执行所述程序的装置的特征,和/或一或多个当前的编辑目标,具体地界定优选优化遍数配置数据。例如,基于配置成为程序编译源代码的装置是个人计算机、智能手机、平板计算机还是笔记本计算机等,可以界定不同集合的优选优化遍数配置数据。以这种方式,优选优化遍数配置数据可为将执行编译的装置单独定制,使得优选优化遍数配置数据为所述程序和所述装置产生期望的编译优化特征。如关于图1所讨论的,可与编译器50分离地存储优选优化遍数配置数据,例如,存储在配置数据库32内(图1)。
执行一或多个优化遍数74后,优化器60向代码生成器80提供优化中间表示。应该理解的是,“优化中间表示”不一定意味着中间表示已得到完全优化。相反,“优化中间表示”应该被理解为是指由优化器60所处理的、由剖析器52产生的中间表示。也就是说,优化器60可能没有执行所有优化遍数74,可能已经过早地终止一或多个优化遍数74的执行,和/或可能没有选择用于产生最优化中间表示的一或多个优化遍数74的参数。然而,优化器60可能已经执行此类动作以确保优化阶段不会消耗过多时间和/或以符合其他编译目标,例如,省电、符合当前的系统负载等。
代码生成器80从优化器60接收优化中间表示,并使用目标代码数据82将优化中间表示翻译成目标代码。目标代码数据82可界定用于例如GPU 42(图1)的特定处理器的目标代码结构、形式、内容等。也就是说,目标代码数据82可为可通过相应的处理器执行的很好地形成的目标代码界定语法和语义。因此,代码生成器80可使用目标代码数据82生成可通过相应的处理器执行的形式的目标代码。虽然优化器60被描述为执行优化遍数,但代码生成器80(即,附加地或可替代地)也可配置成执行一或多个优化遍数。
例如,优化中间表示可包含界定“do-while”循环的数据。使用目标代码数据82,代码生成器80可以把界定“do-while”循环的数据转换为循环中的一系列指令、是否为真的比较操作及跳转指令,如果是否为真的比较操作返回“真”值(例如,非零值),则跳转指令致使处理器返回一系列指令的开始地址。作为另一实例,优化中间表示可以包含界定“if-else”语句的数据。使用目标代码数据82,代码生成器80可以将界定“if-else”语句的数据转化为是否为真的比较操作、如果是否为真的比较操作产生“真”值则致使处理器跳转到第一系列指令的地址的第一跳转操作、如果是否为真的比较操作产生“假”值则致使处理器跳转到第二系列指令的地址的第二跳转操作、用于第一系列指令的数据、其后跟随致使处理器跳转到跟随在第二系列指令后的地址的跳转指令、以及用于第二系列指令的数据。
以这种方式,计算装置10(图1)代表包括一或多个处理器的装置的实例,处理器配置成确定用于执行为软件程序优化代码的优化遍数的分配时间,在所述代码上执行优化遍数的至少一些指令,以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间,阻止所述优化遍数的后续指令的执行。
同样地,计算装置10(图1)代表包括一或多个处理器的装置的实例,处理器配置成为要被编译的软件程序的代码确定优化遍数配置数据集合,其中优化遍数配置数据界定在编译期间用于所述软件程序的优化遍数序列,并且基于所述组优化遍数配置数据来对所述软件程序的代码执行所述优化遍数序列。
图2的编译器50的实例在图1的计算装置10的上下文中讨论,其中编译器50代表为GPU 42产生目标代码的编译器。然而,应该理解,本发明的技术也可应用于通用CPU的编译器。因而,在各种实例中,实现本发明技术的编译器可包括用于GPU编程语言的编译器(诸如OpenGL,OpenCL或DirectX)、用于着色器语言的编译器(诸如GL着色语言GLslang或RenderMan着色语言),或通用编程语言(诸如C/C++、C#、Ruby、Fortran、Haskell、Cython,Objective-C等)。
图3是示出了根据本发明技术的用于使用用于编译的优化阶段的时间预算的示例性方法的流程图。为了举例说明起见,参照图1和图2的元件(例如,控制单元20(可以包含处理器),GPU驱动器30以及编译器50)说明图3的方法。然而,应该理解,类似方法可以由其他装置和部件执行,例如,用于为通用处理器,而不是GPU编译代码的部件。
最初,GPU驱动器30可以接收待编译的源代码(100)。在图1的实例中,源代码可以对应于用于着色器程序26的源代码。源代码可以符合图形编程语言,例如着色器语言。取决于各种因素,GPU驱动器30可以计算优化时间预算(102),也就是,其间编译器50能够执行编译的优化阶段的分配时间量。所述时间可以例如是五秒、十秒等,并可以被表达成秒、毫秒、时钟节拍等。
GPU驱动器30可以基于一或多种因素计算优化时间预算,诸如,例如用户偏好、系统负载、功率考虑、待编译的程序的标识或其他因素。然后GPU驱动器30可以向编译器50提供指示优化时间预算的数据。然后编译器50可以将时间预算分配给一或多个优化遍数74(104)。在一些实例中,编译器50在优化遍数当中均等地分配时间。如果优化遍数在分配时间之前完成,则编译器50可以将剩余时间分配给一或多个后续的优化遍数。
然后,编译器50可对源代码进行剖析以形成中间表示(106)。特别地,当形成中间表示时,剖析器52可以利用权标解析器54从源代码检索权标;利用语法器58以确定权标的语义。中间表示可以包括存储在编译器50的存储器中的、代表源代码的一或多个数据结构。然后,剖析器52可以向优化器60提供中间表示用于优化。
优化器60可以根据优化时间预算的分配致使遍数管理器62来管理优化引擎72。遍数管理器62最初可以致使优化引擎72开始第一优化遍数(108),并且启动对应于用于第一优化遍数的优化时间预算的分配部分的记时器。优化引擎72然后可以执行所述优化遍数的一或多个指令(110)。优化引擎72可以然后确定指令是否是所述优化遍数的最后指令(112)。如果执行的指令不是最后的指令(112的“否”分支),则优化引擎72可以询问遍数管理器62当前优化遍数的执行时间是否已经超过用于执行当前优化遍数的分配时间(114)。
如果当前遍数的执行时间没有超过当前优化遍数的分配时间(114的“否”分支),则优化引擎72可以前进至执行当前优化遍数的一或多个后续指令(110)。另一方面,如果先前执行的指令是所述优化遍数的最后的指令(112的“是”分支)或如果当前遍数的执行时间已经超过当前优化遍数的分配时间(114的“是”分支),则优化引擎72可以终止所述优化遍数,并且遍数管理器62可确定先前的优化遍数是否是待执行的最后优化遍数(116)。以这种方式,如果用于执行优化遍数的实际时间超过用于执行优化遍数的分配时间(依据114的“是”分支),则编译器50可以阻止优化遍数的后续指令的执行。
在图3的实例中,在优化遍数的执行时间超过优化遍数的分配时间之后,遍数管理器62终止所述优化遍数的执行。然而,应当理解的是,在其他实例中,遍数管理器62可以允许一或多个优化遍数超过分配时间,并且调整一或多个后续优化遍数的分配时间来弥补所述差异。因此,遍数管理器62可以经配置以基于用于执行当前(和/或一或多个先前的)优化遍数的实际时间来调整一或多个后续优化遍数的分配时间。
如果先前的优化遍数不是最后的优化遍数(116的“否”分支),则遍数管理器62可以致使优化引擎72开始下一个优化遍数(108),并且重新启动用于分配给此下一个优化遍数的时间量的计时器。另一方面,在执行最后的优化遍数之后(116的“是”分支),优化器60可以将优化中间表示提供给代码生成器80,代码生成器80可以从优化中间表示生成目标代码(118)。编译器50然后可以输出生成的代码(120),例如,通过将生成的代码提供给GPU 42(图1)来输出。
以这种方式,图3的方法代表一种方法的一个实例,所述方法包括:确定用于执行优化软件程序的代码(例如,待编译的代码的中间表示)的优化遍数的分配时间;在所述代码上执行所述优化遍数的至少一些指令;以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间,阻止所述优化遍数的后续指令的执行。所述方法还可包含从优化代码生成用于所述软件程序的编译后的代码(也就是目标代码)。
图4是示出根据本发明的技术动态配置编译器的示例性方法的流程图。为了举例说明起见,参照图1和图2的元件(例如,控制单元20,其可包含处理器,GPU驱动器30以及编译器50)说明图4的方法。然而,应该理解的是,类似方法可以由其他装置和部件执行,例如,用于通用处理器而不是GPU的用于编译代码的部件。
GPU驱动器30可以经配置以定期确定配置数据库32是否应当被更新。例如,GPU驱动器30可以经配置以每月、每周、每日或以其他间隔检查配置数据库32的更新。因而,GPU驱动器30可以确定,例如,来自在网络位置可以访问的配置数据库的更新后的配置数据是否可用(150)。如果更新后的配置数据是可用的(150的“是”分支),则GPU驱动器30可以从例如网络位置检索更新后的配置数据(152)。例如,GPU驱动器30可以在配置数据库32中维护先前被编译或在未来将被编译的不同程序(例如着色器程序26中的一些或全部)的记录。GPU驱动器30也可以用检索到的更新后的优化信息更新配置数据库32。
如果更新后的配置数据不可用(150的“否”分支),或在更新配置数据库32之后,GPU驱动器30可以检索待编译的程序的源代码(154)。如图1和图2中所示的实例,源代码可以与一个着色器程序26相对应。GPU驱动器30还可以确定待编译的程序的标识(156)。例如,GPU驱动器30可以确定程序的名称、程序的散列或用于程序的其他标识信息。然后GPU驱动器30可以基于程序识别来确定优化配置信息(158)。附加地或可替代地,GPU驱动器30可以基于程序的标识特征,诸如,例如编写程序所用的语言、程序的文件的文件名的扩展名等来确定优化配置信息。
也就是说,GPU驱动器30可以通过使用待编译的程序的确定的标识来查询配置数据库32并用配置数据库32对所述程序的标识所关联的配置信息来配置编译器50。所述信息可以指示,例如,为所述程序执行哪些优化遍数74、是否应多次执行优化遍数74中的任何优化遍数、用于要执行的优化遍数的参数、优化遍数将要被执行的次序等。此外,配置信息可以指示,或GPU驱动器30可以确定用于执行编译的优化阶段的时间预算,可以如上文参照图3所述的方式使用。
在如上所述在配置编译器50之后,GPU驱动器30可以将用于程序的源代码提供给编译器50用于编译。因而,剖析器52可以检索源代码并剖析源代码以形成中间表示(160)。特别地,当形成中间表示时,剖析器52可以利用权标解析器54从源代码检索权标,并且利用语法器58以确定权标的语义。中间表示可以包括存储在编译器50的存储器中的、代表源代码的一或多个数据结构。然后剖析器52可以向优化器60提供中间表示用于优化。
优化器60可以确定存储在例如遍数据库70中的用于优化的配置信息。如上所述,所述信息可以指示哪些优化遍数74要被执行。因而,遍数管理器62可以从遍数据库70确定哪些优化遍数74要被执行、优化遍数将要被执行的次序、用于执行优化遍数的参数、一定的优化遍数是否应当被执行多次等。以这种方式,遍数管理器62可以使用优化配置信息确定要执行的优化遍数集(162)。在一些实例中,一或多个优化遍数74可以接受改变相应遍数的行为的参数。例如,这样的参数可以为优化遍数指定展开因素或调度策略。在这样的情况下,遍数管理器62可以以大致类似于遍数管理器62选择要执行的遍数的方式来选择适当的参数。也就是说,遍数据库70可包含界定用于待传递给优化遍数74的不同参数的值的数据。
然后遍调度器68可以开始下一个优化遍数(164),其中,调度器68可以调度已确定的优化遍数的第一个用于执行,且优化引擎72可以执行优化遍数。也就是说,优化引擎72通过使用由优化配置信息确定的用于优化遍数的参数,通过执行优化遍数可以修改程序的已接收的中间表示。在完成优化遍数的执行后,遍数管理器62可以确定最近完成的优化遍数是否是最后的遍数(166)。
如果最近完成的优化遍数不是最后的遍数(166的“否”分支),则遍数管理器62可以致使优化引擎72执行后续的优化遍数。另一方面,如果最近完成的优化遍数是最后的遍数(166的“是”分支),则遍数管理器62可以致使优化器60将优化中间表示提供给代码生成器80。此外,如同参照图3的讨论,即使不是所有确定的优化遍数均已完成,遍数管理器62也可以为优化阶段维持时间预算,并且在时间预算用完之后将优化中间表示提供给代码生成器80。尽管优化器60通常被描述为执行优化遍数,应当理解,代码生成器80也可(也就是说,附加地或可替代地)配置成执行优化遍数。以这种方式,代码生成器80可以配置为实现本发明的一或多种技术。
在代码生成器80获得优化中间表示之后(或在代码生成器80优化中间表示之后),代码生成器80可以根据优化中间表示生成目标代码(168)。生成目标代码可以大致对应于图3的步骤118的讨论。代码生成器80还可以输出生成的代码(170),例如,输出给GPU 42。
以这种方式,图4的方法代表一种方法的实例,所述方法包括为待编译的程序确定优化遍数配置数据集合,其中优化遍数配置数据界定在编译期间用于所述程序的优化遍数序列,并且基于所述组优化遍数配置数据来对所述程序的代码执行所述优化遍数序列。
作为实例而非限制地,这样的计算机可读存储媒体可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储器,磁盘存储器或其他磁性存储装置、闪速存储器或可用于以指令或数据结构的形式并可由计算机访问地存储期望的程序代码的任何其他媒体。此外,任何连接都可以适当地称为计算机可读媒体。例如,如果使用同轴电缆、光缆、双绞线、数字用户线(DSL)或无线技术从网站、服务器或其他远程源发射指令,那么同轴电缆、光缆、双绞线、DSL或诸如红外、无线电以及微波等无线技术包含在媒体的定义中。然而,应当理解,计算机可读存储媒体和数据存储媒体不包含连接、载波、信号或其他暂时性媒体,而是相反,涉及非暂时性、有形存储媒体。本文使用的磁盘和光盘包含压缩盘(CD)、激光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光盘,其中磁盘通常磁性地复现数据,而光盘采用激光光学地复现数据。上面的组合也应当包含在计算机可读媒体的范围内。
指令可以由一或多个处理器执行,例如一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA),或其他等效的集成或分立逻辑电路。相应地,本文使用的术语“处理器”可以涉及任何前述结构或任何其他适于本文所述的技术的实施方案的结构。此外,在一些方面中,本文所述的功能性可以设置在配置用于编程和解码、或并入组合的编解码器中的专用硬件和/或软件模块中。此外,所述技术可完全实现在一或多个电路或逻辑元件中。
本发明的技术可实现在多种装置或设备中,包括无线手持机、集成电路(IC)或IC集合(例如,芯片组)。在本发明中描述的各种部件、模块或单元强调配置为执行所公开技术的装置的功能方面,但是不一定需要通过不同的硬件单元来实现。相反,如上所述,各种单元可以组合在编解码器硬件单元中,或由共同操作的硬件单元的共同提供,包括与适当的软件和/或固件结合的如上所述的一或多个处理器。
已经描述各种实例。这些实例和其他实例在所附权利要求书的范围内。
Claims (30)
1.一种方法,其包括:
确定用于执行用于优化软件程序的代码的优化遍数的分配时间;
对所述代码执行所述优化遍数的至少一些指令;以及
响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
2.根据权利要求1所述的方法,其中所述优化遍数包括多个优化遍数中的第二优化遍数,且其中用于执行所述第二优化遍数的所述实际时间包括用于执行的第二实际时间,所述方法进一步包括:
确定用于执行所述多个优化遍数中的第一优化遍数的第一实际时间,
其中确定用于执行的所述分配时间包括:至少部分地基于用于执行所述第一优化遍数的所述第一实际时间来确定用于执行所述第二优化遍数的所述分配时间。
3.根据权利要求2所述的方法,其中确定用于执行的所述分配时间进一步包括:确定用于执行的所述第一实际时间是否超过用于执行所述第一优化遍数的预算时间。
4.根据权利要求1所述的方法,其中确定所述分配时间包括:基于所述优化遍数的优先级、总体优化时间预算中剩余的时间量、执行所述优化遍数的装置的电源状态、指派给所述程序的优化的重要性值以及用户偏好中的至少一者来确定所述分配时间。
5.根据权利要求1所述的方法,其进一步包括:基于用于执行的所述实际时间来调整用于一或多个后续优化遍数的分配时间。
6.根据权利要求1所述的方法,其中所述优化遍数包括当前优化遍数,所述方法进一步包括:
确定用于执行包含所述当前优化遍数的多个优化遍数的时间预算;以及
将所述时间预算的各个部分分配给所述多个优化遍数。
7.根据权利要求1所述的方法,其中所述优化遍数包括当前优化遍数,所述方法进一步包括:
在执行所述当前优化遍数之前:
确定用于所述软件程序的所述代码的优化遍数配置数据集合,其中所述优化遍数配置数据界定在编译期间用于所述程序的优化遍数序列,其中所述优化遍数序列包含所述当前优化遍数;以及
确定用于执行所述优化遍数序列的时间预算;以及
当所述当前优化遍数不是所述序列中的最后一个优化遍数时且在完成所述当前优化遍数的执行之后,基于所述优化遍数配置数据集合来执行所述优化遍数序列中的下一个优化遍数。
8.根据权利要求1所述的方法,其中对所述代码执行所述优化遍数的至少一些指令产生优化代码,所述方法进一步包括:从所述优化代码生成所述软件程序的目标代码。
9.一种装置,其包括一或多个处理器,所述一或多个处理器经配置以:确定用于执行用于优化软件程序的代码的优化遍数的分配时间,对所述代码执行所述优化遍数的至少一些指令,以及响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
10.根据权利要求9所述的装置,其中所述优化遍数包括多个优化遍数中的第二优化遍数,且其中用于执行所述第二优化遍数的所述实际时间包括用于执行的第二实际时间,且其中所述一或多个处理器经进一步配置以:确定用于执行所述多个优化遍数中的第一优化遍数的第一实际时间,以及至少部分地基于用于执行所述第一优化遍数的所述第一实际时间来确定用于执行所述第二优化遍数的所述分配时间。
11.根据权利要求10所述的装置,其中为了确定用于执行的所述分配时间,所述一或多个处理器经进一步配置以:确定用于执行的所述第一实际时间是否超过用于执行所述第一优化遍数的预算时间。
12.根据权利要求9所述的装置,其中所述一或多个处理器经配置以:基于所述优化遍数的优先级、总体优化时间预算中剩余的时间量、所述装置的电源状态、指派给所述程序的优化的重要性值以及用户偏好中的至少一者来确定所述分配时间。
13.根据权利要求9所述的装置,其中所述一或多个处理器经进一步配置以:基于用于执行的所述实际时间来调整用于一或多个后续优化遍数的分配时间。
14.根据权利要求9所述的装置,其中所述优化遍数包括当前优化遍数,且其中所述一或多个处理器经进一步配置以:确定用于执行包含所述当前优化遍数的多个优化遍数的时间预算,以及将所述时间预算的各个部分分配给所述多个优化遍数。
15.根据权利要求9所述的装置,其中所述优化遍数包括当前优化遍数,且其中所述一或多个处理器经进一步配置以在执行所述当前优化遍数之前:确定用于所述软件程序的所述代码的优化遍数配置数据集合,其中所述优化遍数配置数据界定在编译期间用于所述程序的优化遍数序列,其中所述优化遍数序列包含所述当前优化遍数;以及确定用于执行所述优化遍数序列的时间预算,其中当所述当前优化遍数不是所述序列中的最后一个优化遍数时且在完成所述当前优化遍数的执行之后,所述一或多个处理器经配置以:基于所述优化遍数配置数据集合来执行所述优化遍数序列中的下一个优化遍数。
16.根据权利要求9所述的装置,其进一步包括图形处理单元GPU,其中所述软件程序包括用于所述GPU的着色器程序,且其中所述一或多个处理器经配置以将所述着色器程序的编译代码提供给所述GPU。
17.一种装置,其包括:
用于确定用于执行用于优化软件程序的代码的优化遍数的分配时间的装置;
用于对所述代码执行所述优化遍数的至少一些指令的装置;以及
用于响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行的装置。
18.根据权利要求17所述的装置,其中所述优化遍数包括多个优化遍数中的第二优化遍数,且其中用于执行所述第二优化遍数的所述实际时间包括用于执行的第二实际时间,所述装置进一步包括:
用于确定用于执行所述多个优化遍数中的第一优化遍数的第一实际时间的装置,
其中所述用于确定用于执行的所述分配时间的装置包括:用于至少部分地基于用于执行所述第一优化遍数的所述第一实际时间来确定用于执行所述第二优化遍数的所述分配时间的装置。
19.根据权利要求18所述的装置,其中所述用于确定用于执行的所述分配时间的装置进一步包括:用于确定用于执行的所述第一实际时间是否超过用于执行所述第一优化遍数的预算时间的装置。
20.根据权利要求17所述的装置,其中所述用于确定所述分配时间的装置包括:用于基于所述优化遍数的优先级、总体优化时间预算中剩余的时间量、执行所述优化遍数的装置的电源状态、指派给所述程序的优化的重要性值以及用户偏好中的至少一者来确定所述分配时间的装置。
21.根据权利要求17所述的装置,其进一步包括:用于基于用于执行的所述实际时间来调整用于一或多个后续优化遍数的分配时间的装置。
22.根据权利要求17所述的装置,其中所述优化遍数包括当前优化遍数,所述装置进一步包括:
用于确定用于执行包含所述当前优化遍数的多个优化遍数的时间预算的装置;以及
用于将所述时间预算的各个部分分配给所述多个优化遍数的装置。
23.根据权利要求17所述的装置,其中所述优化遍数包括当前优化遍数,所述装置进一步包括:
用于在执行所述当前优化遍数之前确定用于所述软件程序的所述代码的优化遍数配置数据集合的装置,其中所述优化遍数配置数据界定在编译期间用于所述程序的优化遍数序列,其中所述优化遍数序列包含所述当前优化遍数;
用于确定用于执行所述优化遍数序列的时间预算的装置;以及
用于当所述当前优化遍数不是所述序列中的最后一个优化遍数时且在完成所述当前优化遍数的执行之后基于所述优化遍数配置数据集合来执行所述优化遍数序列中的下一个优化遍数的装置。
24.一种计算机可读存储媒体,其上存储有在执行时致使处理器执行以下操作的指令:
确定用于执行用于优化软件程序的代码的优化遍数的分配时间;
对所述代码执行所述优化遍数的至少一些指令;以及
响应于确定用于执行所述优化遍数的实际时间已经超过用于执行的所述分配时间而阻止所述优化遍数的后续指令的执行。
25.根据权利要求24所述的计算机可读存储媒体,其中所述优化遍数包括多个优化遍数中的第二优化遍数,且其中用于执行所述第二优化遍数的所述实际时间包括用于执行的第二实际时间,所述计算机可读存储媒体进一步包括致使所述处理器执行以下操作的指令:
确定用于执行所述多个优化遍数中的第一优化遍数的第一实际时间,
其中所述致使所述处理器确定用于执行的所述分配时间的指令包括:致使所述处理器至少部分地基于用于执行所述第一优化遍数的所述第一实际时间来确定用于执行所述第二优化遍数的所述分配时间的指令。
26.根据权利要求25所述的计算机可读存储媒体,其中所述致使所述处理器确定用于执行的所述分配时间的指令进一步包括:致使所述处理器确定用于执行的所述第一实际时间是否超过用于执行所述第一优化遍数的预期时间的指令。
27.根据权利要求24所述的计算机可读存储媒体,其中所述致使所述处理器确定所述分配时间的指令包括:致使所述处理器基于所述优化遍数的优先级、总体优化时间预算中剩余的时间量、执行所述优化遍数的装置的电源状态、指派给所述程序的优化的重要性值以及用户偏好中的至少一者来确定所述分配时间的指令。
28.根据权利要求24所述的计算机可读存储媒体,其进一步包括:致使所述处理器基于用于执行的所述实际时间来调整用于一或多个后续优化遍数的分配时间的指令。
29.根据权利要求24所述的计算机可读存储媒体,其中所述优化遍数包括当前优化遍数,所述计算机可读存储媒体进一步包括致使所述处理器执行以下操作的指令:
确定用于执行包含所述当前优化遍数的多个优化遍数的时间预算;以及
将所述时间预算的各个部分分配给所述多个优化遍数。
30.根据权利要求24所述的计算机可读存储媒体,其中所述优化遍数包括当前优化遍数,所述计算机可读存储媒体进一步包括致使所述处理器执行以下操作的指令:
在执行所述当前优化遍数之前:
确定用于所述软件程序的所述代码的优化遍数配置数据集合,其中所述优化遍数配置数据界定在编译期间用于所述程序的优化遍数序列,其中所述优化遍数序列包含所述当前优化遍数;以及
确定用于执行所述优化遍数序列的时间预算;以及
当所述当前优化遍数不是所述序列中的最后一个优化遍数时且在完成所述当前优化遍数的执行之后,基于所述优化遍数配置数据集合来执行所述优化遍数序列中的下一个优化遍数。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/787,485 US9027007B2 (en) | 2013-03-06 | 2013-03-06 | Reducing excessive compilation times |
US13/787,485 | 2013-03-06 | ||
PCT/US2014/014597 WO2014137521A1 (en) | 2013-03-06 | 2014-02-04 | Reducing excessive compilation times |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105009082A true CN105009082A (zh) | 2015-10-28 |
CN105009082B CN105009082B (zh) | 2017-03-29 |
Family
ID=50156916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480011933.9A Expired - Fee Related CN105009082B (zh) | 2013-03-06 | 2014-02-04 | 减少过多的编译时间 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9027007B2 (zh) |
EP (1) | EP2965198B1 (zh) |
JP (1) | JP5985766B2 (zh) |
CN (1) | CN105009082B (zh) |
WO (1) | WO2014137521A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598579A (zh) * | 2016-12-06 | 2017-04-26 | 北京果仁宝科技有限公司 | 区块链上集成动态类型编程语言方法和装置 |
CN106933665A (zh) * | 2017-03-09 | 2017-07-07 | 中国科学技术大学 | 预测mpi程序运行时间的方法 |
CN111488155A (zh) * | 2020-06-15 | 2020-08-04 | 完美世界(北京)软件科技发展有限公司 | 着色语言翻译方法 |
CN114428653A (zh) * | 2020-10-29 | 2022-05-03 | 慧与发展有限责任合伙企业 | 使用不同编译设置的代码的即时jit编译实例 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9727339B2 (en) * | 2013-07-18 | 2017-08-08 | Nvidia Corporation | Method and system for distributed shader optimization |
GB201405755D0 (en) * | 2014-03-31 | 2014-05-14 | Irdeto Bv | Optimizing and protecting software |
US9223551B1 (en) * | 2014-07-22 | 2015-12-29 | Here Global B.V. | Rendergraph compilation method and use thereof for low-latency execution |
US9747084B2 (en) * | 2014-09-09 | 2017-08-29 | Google Inc. | Offline shader compilation |
US10419483B1 (en) * | 2014-09-17 | 2019-09-17 | Amazon Technologies, Inc. | Time-bounded execution for privileged code |
US9690928B2 (en) * | 2014-10-25 | 2017-06-27 | Mcafee, Inc. | Computing platform security methods and apparatus |
US10163179B2 (en) * | 2015-03-27 | 2018-12-25 | Intel Corporation | Method and apparatus for intelligent cloud-based graphics updates |
US10133559B2 (en) * | 2016-06-03 | 2018-11-20 | International Business Machines Corporation | Generating executable files through compiler optimization |
AU2016228166A1 (en) * | 2016-09-13 | 2018-03-29 | Canon Kabushiki Kaisha | Visualisation for guided algorithm design to create hardware friendly algorithms |
AU2018230763A1 (en) | 2017-03-08 | 2019-10-31 | Ip Oversight Corporation | System and method for creating commodity asset-secured tokens from reserves |
CN111324353B (zh) * | 2018-12-14 | 2022-09-13 | 中移(杭州)信息技术有限公司 | 一种持续集成任务的优化方法及装置 |
JP7339537B2 (ja) | 2020-01-10 | 2023-09-06 | 富士通株式会社 | 情報処理装置、情報処理プログラム、及び情報処理方法 |
US11934255B2 (en) | 2022-01-04 | 2024-03-19 | Bank Of America Corporation | System and method for improving memory resource allocations in database blocks for executing tasks |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2834171B2 (ja) * | 1989-02-06 | 1998-12-09 | 株式会社日立製作所 | コンパイル方法 |
JP3190773B2 (ja) * | 1993-09-30 | 2001-07-23 | 日本電気株式会社 | 言語処理プログラムのコンパイル処理方法 |
CA2102089C (en) * | 1993-10-29 | 1999-05-25 | David M. Gillies | Recompilation of computer programs for enhanced optimization |
US5970249A (en) | 1997-10-06 | 1999-10-19 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
JP2000047879A (ja) * | 1998-07-06 | 2000-02-18 | Internatl Business Mach Corp <Ibm> | コンパイル方法及び装置、実行方法、及びプログラム実行装置 |
US6438741B1 (en) * | 1998-09-28 | 2002-08-20 | Compaq Computer Corporation | System and method for eliminating compile time explosion in a top down rule based system using selective sampling |
JP2001318742A (ja) * | 2000-05-08 | 2001-11-16 | Mitsubishi Electric Corp | コンピュータシステムおよびコンピュータ読み取り可能な記録媒体 |
US20030237080A1 (en) | 2002-06-19 | 2003-12-25 | Carol Thompson | System and method for improved register allocation in an optimizing compiler |
JP3847672B2 (ja) | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
US7340448B2 (en) * | 2003-11-13 | 2008-03-04 | International Business Machines Corporation | Method, apparatus, and computer program product for implementing enhanced query governor functions |
US7428731B2 (en) | 2004-03-31 | 2008-09-23 | Intel Corporation | Continuous trip count profiling for loop optimizations in two-phase dynamic binary translators |
US7290240B1 (en) | 2004-07-30 | 2007-10-30 | Altera Corporation | Leveraging combinations of synthesis, placement and incremental optimizations |
JP2006127302A (ja) | 2004-10-29 | 2006-05-18 | Internatl Business Mach Corp <Ibm> | 情報処理装置、コンパイラ、及びコンパイラプログラム |
JP2006139413A (ja) * | 2004-11-10 | 2006-06-01 | Hitachi Ltd | プログラム、プログラムコードの合理化方法、プログラムコードの生成方法、プログラムコード、及び情報処理装置 |
US20060236310A1 (en) | 2005-04-19 | 2006-10-19 | Domeika Max J | Methods and apparatus to iteratively compile software to meet user-defined criteria |
US7844960B2 (en) * | 2005-09-14 | 2010-11-30 | International Business Machines Corporation | Optimizing software program execution during class loading phase |
US7784041B2 (en) * | 2006-03-30 | 2010-08-24 | Oracle America, Inc. | Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation |
US8539467B2 (en) * | 2006-07-27 | 2013-09-17 | International Business Machines Corporation | Method and data processing system for solving resource conflicts in assembler programs |
US9117071B2 (en) * | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US8635606B2 (en) * | 2009-10-13 | 2014-01-21 | Empire Technology Development Llc | Dynamic optimization using a resource cost registry |
US8321851B2 (en) * | 2009-12-22 | 2012-11-27 | International Business Machines Corporation | Determining compiler efficiency |
US9996325B2 (en) * | 2013-03-06 | 2018-06-12 | Qualcomm Incorporated | Dynamic reconfigurable compiler |
US9274931B2 (en) * | 2013-05-06 | 2016-03-01 | International Business Machines Corporation | Inserting implicit sequence points into computer program code to support debug operations |
-
2013
- 2013-03-06 US US13/787,485 patent/US9027007B2/en active Active
-
2014
- 2014-02-04 CN CN201480011933.9A patent/CN105009082B/zh not_active Expired - Fee Related
- 2014-02-04 JP JP2015561348A patent/JP5985766B2/ja not_active Expired - Fee Related
- 2014-02-04 WO PCT/US2014/014597 patent/WO2014137521A1/en active Application Filing
- 2014-02-04 EP EP14706176.6A patent/EP2965198B1/en active Active
Non-Patent Citations (2)
Title |
---|
DAVID RYAN KOES ET AL: "《PROCEEDINGS OF THE 2006 ACM SIGPLAN CONFERENCE ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION,PLDI‘06》", 30 June 2006 * |
GRIGORI FURSIN ET AL: "《Milepost GCC:Machine Learning Enabled Self-tuning Compiler》", 《INTERNATIONAL JOURNAL OF PARALLEL PROGRAMMING》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598579A (zh) * | 2016-12-06 | 2017-04-26 | 北京果仁宝科技有限公司 | 区块链上集成动态类型编程语言方法和装置 |
CN106933665A (zh) * | 2017-03-09 | 2017-07-07 | 中国科学技术大学 | 预测mpi程序运行时间的方法 |
CN106933665B (zh) * | 2017-03-09 | 2020-06-26 | 中国科学技术大学 | 预测mpi程序运行时间的方法 |
CN111488155A (zh) * | 2020-06-15 | 2020-08-04 | 完美世界(北京)软件科技发展有限公司 | 着色语言翻译方法 |
CN114428653A (zh) * | 2020-10-29 | 2022-05-03 | 慧与发展有限责任合伙企业 | 使用不同编译设置的代码的即时jit编译实例 |
CN114428653B (zh) * | 2020-10-29 | 2024-01-02 | 慧与发展有限责任合伙企业 | 使用不同编译设置的代码的即时jit编译实例 |
Also Published As
Publication number | Publication date |
---|---|
US20140258996A1 (en) | 2014-09-11 |
JP5985766B2 (ja) | 2016-09-06 |
WO2014137521A1 (en) | 2014-09-12 |
US9027007B2 (en) | 2015-05-05 |
EP2965198B1 (en) | 2019-04-17 |
EP2965198A1 (en) | 2016-01-13 |
JP2016510919A (ja) | 2016-04-11 |
CN105009082B (zh) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105009082A (zh) | 减少过多的编译时间 | |
US9996325B2 (en) | Dynamic reconfigurable compiler | |
CN103999128B (zh) | 具有命令处理器的图形处理单元 | |
US10534590B2 (en) | Dynamic recompilation techniques for machine learning programs | |
US8543993B2 (en) | Compiler, compile method, and processor core control method and processor | |
CN101802874A (zh) | 图形处理单元中的片段着色器旁路及其设备和方法 | |
KR20120117020A (ko) | 동적 전력 관리를 위한 도메인 특정 언어, 컴파일러 및 jit | |
CN104067225A (zh) | 对用于图形处理单元的具有相关联的纹理加载指令的控制流指令的判定 | |
CN111738434A (zh) | 在异构处理单元上执行深度神经网络的方法 | |
CN104106049A (zh) | 计算着色器的栅格化 | |
US11934874B2 (en) | Resource optimization for serverless query processing | |
CN109976723B (zh) | 一种算法开发平台、算法开发方法及计算机可读存储介质 | |
CN114879948A (zh) | 基于WebAssembly的智能合约处理方法、装置、设备及存储介质 | |
EP4258175A1 (en) | Node fusion method for computational graph, and device | |
US8935657B2 (en) | Model-to-model transformation by kind | |
CN117271101B (zh) | 一种算子融合方法、装置、电子设备及存储介质 | |
Caracas | From business process models to pervasive applications: Synchronization and optimization | |
CN111819629A (zh) | 管理存储器供电状态的方法及芯片 | |
CN113867714A (zh) | 一种适配多语言的自动代码生成方法 | |
CN112445607B (zh) | 一种应用程序执行方法函数的方法及装置 | |
Su et al. | A power-aware virtual machine mapper using firefly optimization | |
CN111767046A (zh) | 一种着色器代码复用方法及终端 | |
Larracoechea et al. | Towards Services Profiling for Energy Management in Service-oriented Architectures. | |
De Landtsheer et al. | Optimal mapping of task-based computation models over heterogeneous hardware using placer | |
CN117667361B (zh) | 一种分布式协同仿真架构实现方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170329 Termination date: 20190204 |
|
CF01 | Termination of patent right due to non-payment of annual fee |