定制优化/转换/处理策略的系统和方法与流程

文档序号:12042000阅读:301来源:国知局
定制优化/转换/处理策略的系统和方法与流程
定制优化/转换/处理策略的系统和方法相关申请案交叉申请本发明要求2011年11月29日递交的发明名称为“定制优化/转换/处理策略的系统和方法”的第61/564,665号美国临时申请案的优先权,以及2012年8月8日递交的发明名称为“定制优化/转换/处理策略的系统和方法”的第13/570148号美国专利申请案的在先申请优先权,这些在先申请的内容以引入的方式并入本文本中,如同全文再现一般。技术领域本发明涉及定制优化/转换/处理策略的系统和方法,所述系统和方法用于应用不同策略到输入的不同部分的编译程序或者其他数据处理软件。

背景技术:
性能工程是开发周期中关键的一步,可以确保高效二进制由高级编程语言编写的软件源生成。性能工程关注的焦点可以是运行时间的性能和代码大小。在软件源代码及其二进制之间存在日益增长的差距。软件开发者通过采用强调模块性、代码重用性以及可维护性的软件工程技术来提高生产率。遗憾的是,这些软件工程的具体实施通常与工程师们努力挖掘硬件能力的性能工程互相矛盾。通常的情况是,从软件语义到低级别硬件特征并没有直接的映射关系。编译优化程序负责将高级编程语言编写的应用转换为二进制。虽然有相当大比例的编译程序仅适用于自动二进制的生成,可是在很多其他情况下,仍然要依赖编译程序来生成能够充分利用底层硬件的有效代码。比如说,编译优化程序的重要性在数字信号处理(DSP)领域中尤其显著,这是因为引入定制的处理器通常只是为了加速一组分享相同特性的应用。在这些场景中,充分利用底层硬件对于增强硬件的总体竞争力非常重要。由于学术界和业界不断的努力,过去的50年内内出现了大量的优化技术。越来越多强大的分析和优化技术被集成至现代编译程序中。尽管现代编译程序用途广泛并且功能强大,但工程师经常会因为其生成次优或差的二进制而失望。导致低质量优化的原因可归为两类:硬故障和软故障。硬故障指的是所述编译程序缺少处理某些场景的某些特征(分析或转换)。这需要额外工作来改进所述编译程序。软故障指的是编译程序不能如预期运行,但能够通过使用编译程序选项或微调编译程序来运行的场景。经验表明,相当大比例的性能故障是由软故障导致的。

技术实现要素:
用于定制编译程序优化的实施例方法包括:从应用程序中提取内核;对内核进行性能调节以确定各个内核的定制优化策略,所述定制优化策略不同于编译程序针对各个内核的默认优化策略;以及使用计算机对所述应用程序进行注释来标识针对各个内核确定的定制优化策略。用于定制编译程序优化的实施例方法包括:接收来自主机的已注解程序,所述已注解程序针对各个内核标识出定制优化策略;通过一系列优化引擎传递所述已注解程序,各个配备了适配器的优化引擎用于实现对应于至少一个内核的定制优化策略;以及在通过一系列优化引擎传递已注解程序之后,输出已编译的对象程序。一种实施例处理系统,用于实现定制编译程序的优化,包括一个处理器和一个可操作地耦合到所述处理器上的存储器。所述存储器存放定制优化模块和编译程序模块。所述定制优化模块,用于从加载在存储器内的应用程序中提取内核,使用编译程序模块和各种不同编译策略来确定各个内核的定制优化策略,然后通过测试各个内核的编译质量来对内核进行性能调节,为各个内核决定定制优化策略以及对应用程序进行注释来标识出针对各个内核而确定的定制优化策略。附图说明为了更完整地理解本发明及其优点,现在参考下文结合附图进行的描述,其中:图1示出了一项包括定制优化(TAO)的实施例性能调节过程。图2示出了不含图1所示的定制优化益处的编译程序的操作。图3示出了含有图1所示的定制优化益处的编译程序的实施例操作。图4为一种计算平台的方框图,所述计算平台可用来实现如下文实施例所述的设备和方法。除非另有指示,否则不同图中的对应标号和符号通常指代对应部分。绘制各图是为了清楚地说明实施例的相关方面,因此未必是按比例绘制的。具体实施方式下文将详细论述当前优选实施例的制作和使用。但应了解,本发明提供了许多可以在多种具体环境中实施的适用的发明概念。所论述的具体实施例仅为说明性的,而不限制本发明的范围。实施例适用于编译程序优化、性能调节以及性能工程。实施例通常使性能工程师能够使用编译程序程序快速调节大型应用程序中的各个重点,然后将调解结果传送回原应用程序。编译程序软故障通常由两个因素导致。首先,因为很多编译程序的问题属于非确定型多项式时间困难(NP-hard)问题,所以编译程序的编写人员经常使用探试法来在严格的时间限制内对决定做出分析。更糟糕的是,探试法中使用的大量参数通常是猜测和估算的结果。这种近似值使结果的有效性高度取决于编译程序的输入。如果这些探试法和估算是硬编入编译程序中的,则性能工程师将无法对其进行控制。虽然能够用编译程序选项来控制探试法,但是大部分编译程序选项的有效性颗粒度很粗糙,这经常影响到编译程序的全局运行,使得根本不可能在同一个源文件中找到符合所有热点的探试法。其次,许多优化的实现仅仅是为了尽实施人员所能地实现最常见的情况。常见情况的小幅变化就能够轻易地使这些优化遭受阻碍。通常情况下,输入(中介码(IR))中一个简单的细微差别就能够破坏分析或优化,使得编译不被接受。因为通常需要一系列分析和转换才能实现所述工作,所以敏感性分析或优化使得编译成为一个充满了蝴蝶效应的微妙过程。也就是说,发生在上行分析或转换上的看似很小的变化或故障都会使编译结果有显著差异。因此,通常每个涉及到的部分都应如预期般运行。上述两个因素以及当今流行的僵化的编译程序工作模型可给性能工程造成严重问题。在所述普通模型中,优化编译程序常被用作由有限数量的选项控制的黑盒工具。应用最广泛的选项是优化级别,这些级别非常不灵活,用户无法对编译程序行为进行细粒度控制。或者,可以使用编译程序选项。这些选项能够用来开启或者关闭某些优化和调整试探法的参数等等。然而,这些编译程序选项的影响范围粒度粗;就文件或整个项目方面来说,他们全局性地改变编译程序的行为。其它更先进的方法包括使用特殊的编译指示、指令或扩展关键字。尽管这些结构由于某些特定目的(比如循环并行化、程序提示和数据属性注释)而被广泛使用,他们的范围仍太过于局限,无法控制编译程序的大量行为。例如,编译过程中没有断开特定优化实例的类似编程结构的编译指令。再例如,编译过程中特定的阶段有现存编译指令或告知编译程序如何处理特定数据结构的类似编程结构(如数据依赖图的边缘)。对这些编译程序行为的细粒度控制有利于调节。如果上述方法都无效,最后的办法是在编译程序源可用的情况下修改编译程序。修改编译程序来调节性能是非常费劲的。工程师不仅需要知道每项分析/优化的内容(同上述更先进方法中所需要的类似),还必须知道大量细节,如算法和编译程序的特性,如数据结构、实施的技巧以及编译程序中对最初设计的取舍(有时直接舍弃最初的设计)。针对单个编译程序的知识与经验需要大量时间来获取,并且经常超出性能调节项目允许的时间和资源。具有讽刺意味的是,尽管在底层硬件、复杂软件以及集成了最先进技术的强大编译程序上投入了如此多的时间和资源,但是由于探试法的一些小的不灵活性破坏了精巧的编译过程,所生成的二进制距离能够充分利用硬件仍然存在很大的差距。此外,除了去熟悉编译程序内部的运行之外,性能工程师们别无他法。随着大量使用探试法和精巧的编译过程,用现存的黑盒技术编译程序工作模型来最大化性能基本上是不可能或不实际的。为了尽量发挥底层硬件的最佳性能,实施例分治策略可以从一个大型应用程序中选出单独的内核(也叫做热点),并用不同编译策略对它们进行微调。这些不同的编译策略接着被以编译指令的形式转移回最初的应用。通过为不同的热点定制单独的优化策略,实施例基本避免了当前编译程序中的僵化和全局配置,并且实现了应用中的不同热点的最佳性能。这种定制的优化使用了高度模块化并且可配置的设计、对编译程序组件的实现以及使编译程序容易操作的强大注释框架。实施例为编译程序优化提供一种简单、实用且强大的方法/系统,被称为定制优化(TAO)。TAO方便了优化编译程序和性能工程师之间的交互,从而提高了所述编译程序的可操作性和可用性。与现存的黑盒式编译方法相比,TAO使性能工程师能够更多地控制编译程序的运行,并极大地降低性能调节的复杂性。一项实施例TAO方法包括几个方面:对热点进行划分和微调、高度模块化和可配置的编译程序框架以及能使每个优化阶段都受程序设计员或性能工程师控制的一种机制。实施例将单个热点的调节结果无缝传递回主机程序,并且使每个优化阶段在单个热点上受到控制。实施例为编译程序的行为、编译程序使用的灵活性以及高效的性能工程提供了细粒度的易受内容影响的控制。实施例性能调整的方法使得编译程序的各个组件能够以高度可配置并且模块化的方式进行设计,并且使用户能够利用指定位置的编译程序选项对程序进行注解,以指示所述编译程序如何在编译过程中优化相关的代码。这使得性能工程师能够不用钻研编译程序的内部运行就可以对源代码中各个重点进行微调,然后将局部的调整结果无缝转移回整个应用。实施例明显使得性能工程变得更加快速和简单,从而缩短上市时间缩短、减少费用支出、提高性能以及增强竞争力。在实施例中,编译程序的各个组件的设计与实现,都采取高度可配置的方式,这就暴露出所有可能的取舍,或者允许用户使用生硬的穷举法来指示编译程序如何行动。实施例划分并定位了应用中的热点,对这些热点进行微调,并为每个热点找到特定的优化策略,然后使用程序注释(比如编译指示、指令、关键字、数据库以及描述文件等)来注解这些程序。每个组件接受针对各自的注释并相应采取行动。实施例为代码优化中用户自定义的点定制优化措施,避免可能给源代码中的一些热点带来负面影响的基本编译配置。实施例不需要钻研编译程序或修改装配的内部运行,就可以简化并加快对性能的调节。实施例适用于针对处理器、性能工程工具、编译程序、编译程序生成器、软硬件协同设计以及处理器设计的编译程序和编译工具链。实施例TAO系统允许用户对重要优化项目或热点进行细粒度控制。用户能够为优化而微调探试法的参数,这就使得探试的过程按照用户的预期来发展。例如,一般会为了某个特定循环而下调成本门限,这就使编译程序能够提升一个特定的循环不变量,而通常按照默认的编译程序探试法,该不变量是不会被提升的。此外,用户甚至可以直接指示编译程序去忽略探试法或分析的结果而只遵从用户的指令。例如,用户能够使用编译指令来指示编译程序忽略特定数据的依赖边缘,该边缘是由于进行不完美的数据依赖分析而错误生成的。为了修正编译程序中造成虚假数据依赖边缘的根因(如果可能的话)将需要很多时间。但如果用户确定该边缘是虚假的并阻碍了重要的优化,那么用户只需要使用定制优化就可以快速解决这个问题。图1示出了TAO系统工作模型中的性能调整过程。用于定制编译程序优化的方法10通常从应用程序14中提取内核12开始。在实施例中,一个或多个从应用程序14中提取出来的内核12可以是应用程序14中的或取自于应用程序14的控制构造符,直线代码片段,或者函数等等。提取哪个内核12的决定可能取决于多种不同因素或基于某种性能标准,比如,例如所述内核是否是应用程序14的一个回路、所述内核是性能工程师所识别出的应用程序14的一部分还是会产生质量问题的另一部分(例如,内核12使用编译程序的默认编译策略来进行编译的质量)、运行时间长短、代码的大小以及编译时间的长短等等。所述内核12可以以数字文件的形式存储在存储器中,该数字文件的大小小于整个应用程序14。所述内核12可以存储在存储器或某种存储器设备中。仍然参见图1,在提取了内核12之后,使用定制优化(TAO)16来调整内核的性能,从而确定定制的优化策略确实不同。所述定制的优化策略通常不同于编译程序的默认优化策略。因此,只要采用编译程序的默认编译策略,特定内核12进行编译的方式就会不同。作为使用定制优化策略的结果,内核12的编译质量和编译后二进制输出的质量等性能参数都可以得到提高。在一项实施例中,当使用各种不同的编译策略编译时,可以通过测试内核的编译质量来对图1中的各内核12进行性能调整。换句话说,一个嵌套循环使用第一编译策略来测试内核编译质量、使用第二编译策略测试内核编译质量并使用第三编译策略测试内核编译质量等等。由编译程序提供的各编译策略和可用策略的一些子集可能重复使用编译程序编译各内核的重复过程。在一项实施例中,一旦内核12被提取,计算机或其他处理设备完全地或自动地进行性能调节。当使用不同编译策略对各内核12重复编译之后,选择各内核的定制优化策略。基于哪个编译策略最快地编译内核和哪个编译策略最准确地编译内核等等来选择定制优化策略。在一项实施例中,基于上述性能标准选择定制优化策略。在一项实施例中,用户(例如,性能工程师)有机会从测试的一组编译策略中选择定制优化策略。在一项实施例中,通过一个预定的性能指标,如哪个测试的编译策略最快地编译内核12,最准确地编译内核12等等自动选择定制优化策略。当定制优化策略分配(也叫做,最优化提示)给图1中的各内核12,应用程序14标注18来标识为各个内核12确定的定制优化策略。在一项实施例中,计算机或类似设备用于给应用程序14标注18。实施例中,通过在应用程序14中直接插入编译指示来给应用程序14标注18。实施例中,在应用程序14中包括参考,指令,或指向配置文件,文本文件,数据库,或其他外部文件或源的指针来给应用程序14标注18。在实施例中,通过在应用程序14中嵌入对应各个内核的编译线索(例如,编译指示、指令、神奇评论等等)标注应用程序。根据应用程序的注解生成注释应用程序20。所述注释应用程序20用于装载进编译程序。由于使用TAO,性能工程师密切关注编译过程中与最终的二进制文件中的重要转换。TAO使用分治的策略:主机应用程序中的热点被标识和挑选出来从而将内核分离以便于调整。热点可以是程序中的一个函数、循环或词汇块。性能调节是找到最佳策略或生成高效或预期代码提示的过程。结果包含的信息可以微调探试法的参数,打开或关闭编译程序的某个阶段,以及在某个阶段转换不同的分析策略等等。因此,这种调节能够影响编译程序不同层次的进程,指示所述编译程序在编译过程中如预期般运行。显然,各个热点的策略和提示都很有可能不一样。TAO允许性能工程师为各个热点保持最佳编译策略并将之反馈给所述编译程序。通过为各个热点定制优化策略,TAO避免使用为某些拥有可能是对所有热点来说最好的策略的热点生成次优二进制的策略。二阶优势是TAO允许性能工程师安排多个编译程序阶段以达到复杂转换次序。对内核进行性能调整之后,为各个热点确定定制优化提示,所述提示包括非来自默认编译程序的优化策略。各个优化提示集都与相应热点关联,因此他们能用于宿主程序的编译。注解可以以不同的形式存在。比如,提示可以以编译指示的形式注释在宿主源代码中。或者,提示还可以与配置文件或数据库中的相应热点关联,当编译宿主程序时要查询这些提示。宿主程序编译过程中,所述编译程序通过编译指令或配置文件标识带有定制优化的热点。编译程序通过关联注释提示和相应热点的IR生成工作项目。比如,一个循环和它的优化提示可以是该循环优化、软件流水和硬件循环生成等的单个工作项目。类似地,语法块和函数也能是基于函数或者基于区域的优化的工作项目。这些提示将用来控制关联热点的编译程序行为。由于各热点的定制提示可能覆盖编译过程中的不同组件,这些策略被准确地分派到相应的优化阶段。因此,所述编译组件的设计与传统编译程序不同。图2和图3对带有定制优化的实施例编译程序和传统编译程序进行比较。通常,图3的阴影特指带有定制优化的编译程序。如图2所示,应用程序22(还不具备定制优化)装载进编译程序24。所述应用程序22转换为中介码(IR),中介码通常是与人读格式相反的机读格式的代码。然后,通过一系列优化引擎26为应用程序22中的各函数传递应用程序22(例如,opt1,opt2……optN)。换句话说,编译程序24的优化引擎26遍历应用程序22中的函数。在某些情况下,一个或更多优化引擎26,如opt2,结构复杂且遍历工作项目列表(如,循环、地区等等)。通过优化引擎26为各函数传递应用程序22后,已编译对象以二进制代码的形式输出。参见图3,带有定制优化16(图1)的功能的应用程序28装载进编译程序30。应用程序28可以从主机,如,计算机存储器、远程服务器、网络等等装入。应用程序28转换为中介码(IR),中介码通常是与人读格式相反的机读格式的代码。此后,通过一系列优化引擎32(例如,opt1,opt2……optN)为应用程序28中的各函数传递应用程序28。换句话说,编译程序30的优化引擎32遍历应用程序28中的函数。尤其是,图3中的各优化引擎32都配备适配器34,用于为已装载入编译程序30的已注解应用程序28中的各内核读取或破译定制优化策略。换句话说,适配器34能够读取或理解加至原应用程序的信息(如,编译指示、指针、指令、参考信息等等)。因此,适配器34能够指示相关优化引擎32使用与图2中传统编译程序24的默认编译策略相反的定制优化策略编译特定的内核12或内核。在实施例中,一个或更多优化引擎32,如opt2,结构复杂且遍历工作项目列表(如,循环、地区等等)。通过优化引擎32为各函数传递已注解应用程序28优化各函数后,已编译对象以二进制代码的形式输出。由于优化引擎32被命令使用已注解程序28中各内核12特定的定制优化策略,当不使用定制优化16(图1)时,可以更快获得更好质量的编译结果。TAO编译的输入是TAO注解源文件。TAO编译程序逐一运行在已注解源文件上。便于解释,没有描述内部程序优化(或IPO),但TAO方法可以轻易扩展至IPO。内联、克隆、别名集消歧等许多IPO能够从TAO提示中极大受益。TAO提示用来在编译程序内部生成已注解IR。在对定制优化的支持下,每个编译程序组件对注解在IR中注解的TAO提示进行分析,并在启动最初的核心功能之前按照提示的指令进行配置。这可以作为面向对象程序设计中的类或者C语言中的包装来实现。这确保了能为每个热点配置优化。如果一个热点没有任何相关的提示,那么编译程序会使用默认的策略。在TAO实施例中,提示可以包括任何可区别出优化的项目,例如源文件、函数、循环、区域、基本块,甚至图形。只要编译程序留下的痕迹含有足够的信息可以让用户知道如何从内部识别出提示(比如,循环的标识、数据依赖边界的标识、探试法参数的名称等等),用户就能够通过这些优化项目控制编译程序的运行,并且提示指导的这些配置也能够解析用户的输入以及成功更新其内部状态。或者,经过TAO注解的原始源文件能够被分成多个源文件,其中每个源文件都包括拥有同一组提示注释的热点。接着,将各个分解的源文件与提示注释一起提供给编译程序。该方法对于函数水平的热点定制非常有效。在此实施例中,并不需要如前所述的每个热点编译程序的再次配置。然而,该方法不能解决进行不同优化定制的多个热点存在于相同函数中的情况。图4是处理系统40的方块图,可以用来实现下文公开的设备和方法。特定设备可以应用所示的所有组件,或仅组件的子集。集成水平随设备而不同。进一步地,设备可以包括组件的多个实例,如多个处理单元、处理器、存储器、发送器、接收器等等。处理系统可以包括配备有一个或多个输入/输出设备42的处理单元,所述输入/输出设备包括扬声器、麦克风、鼠标、触摸屏、按键、键盘、打印机、显示器等等。处理单元可以包括中央处理器(CPU)44、存储器46、海量存储设备48、视频适配器50以及连接至总线54的I/O接口52。所述总线54可以含有一个或多个类型的若干总线架构,包括存储总线或者存储控制器、外设总线以及视频总线等等。所述CPU44可包括任意类型的电子数据处理器。所述存储器46可包括任何类型的系统存储器,比如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、只读存储器(ROM)或其组合等等。在实施例中,所述存储器46可包括在开机时使用的ROM以及执行程序时使用的程序和数据存储的DRAM。非暂时的海量存储设备48可以包括任任意类型存储设备,所述任意类型存储设备用于存储数据、程序和其他信息和,并使这些数据、程序和其他信息可通过总线54访问。所述存储设备48可以包括如下项中的一种或多种:固态磁盘、硬盘驱动器、磁盘驱动器、光盘驱动器等等。视频适配器50和I/O接口52提供接口将外部输入输出设备42耦合至处理单元40。照说明,输入输出设备示例包括将显示器耦合至视频适配器和将鼠标/键盘/打印机耦合至连接I/O接口。其它设备可以耦合至处理单元40,可以利用附加的或更少的接口卡。例如,可使用串行接口卡(未示出)将串行接口提供给打印机。处理单元40可以包括一个或多个网络接口56,所述网络接口可包括以太网电缆等有线链路和/或接入节点或不同网络的无线链路。网络接口56允许处理单元通过网络58与远程单元通信。比如,网络接口56可以通过一个或多个发送器/发射天线以及一个或多个接收器/接收天线提供无线通信。在实施例中,所述处理单元40耦合到局域网或广域网用于数据处理并与远程设备通信进行通信,所述远程设备可包括其他处理单元、互联网、远程存储设施或诸如此类。以下参考与本申请的主题相关。各引用以全文引用方式并入本文:·开放多处理应用程序接口,版本3.1(2011年7月)(http://www.openmp.org/mp-documents/OpenMP3.1.pdf.)虽然已参考说明性实施例描述了本发明,但此描述并不旨在限制本发明。所属领域的技术人员在参考该描述后,将会明白说明性实施例的各种修改和组合,以及其他实施例。因此,希望所附权利要求书涵盖任何此类修改或实施例。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1