描述了用于进行代码优化的系统,所述系统包括编译器内的优化分析器,所述优化分析器为已编译代码产生第一优化转换和第二优化转换以及它们的满足条件。在链接器内放置优化转换模块,以确定当已编译代码和其他已编译代码链接时,应该选择第一和第二优化转换中的哪一个,以及在链接时执行第一和第二优化转换中被选择的那一个。还描述了进行代码优化的方法。
【技术实现步骤摘要】
【国外来华专利技术】
本专利技术的实施方案涉及软件程序的编译和执行。更具体地,本专利技术的实施方案涉及在链接时(link-time)无需对程序代码的额外的代码分析来进行链接时代码优化的方法和系统。背景已经开发了面向对象编程语言(OOPL)来改善开发软件程序的生产能力。典型地,OOPL包括Java(由Sun微系统公司开发)和符合CLI(公共语言架构)(由Microsoft公司开发)的其他编程语言。采用OOPL,程序开发者可以创建被称为“对象”的小的可重用程序代码段(section)。所述对象一旦被创建,可以被快速简易地组合和重用以创建新的程序。典型地,对以这样的语言编写的软件程序的编译涉及使处于源代码格式的软件程序的对象中的每一个被编译器单独地编译成处理器可执行的本机(native)或机器代码文件(即已编译对象文件)。随后已编译对象文件被链接器处理,所述链接器组合已编译对象文件以产生完整的可执行程序。随后,所述可执行程序适于在计算机系统上执行。为了改善可执行程序的性能,在编译期间需要优化程序。优化可执行程序的一种现有解决方案是使编译器中的每一个对它编译的对象文件进行优化转换。已知的由编译器进行的优化操作典型地包括基址绑定(base binding)、函数克隆和部分求值(partial evaluation)。然而,上面描述的现有解决方案的一个问题是在编译期间编译器不能具有整个程序的知识(即缺乏“全程序视角(whole program view)”),因为程序包括被分开编译的对象文件。这表示在编译时的许多优化转换(optimizing transformation)操作取决于只在程序的链接时可获得的信息。因此,即使编译器能够基于特定的信息块来进行优化转换操作,如果优化操作所需的信息在该时刻不可获得,那么编译器可能不能进行这样的操作。在另一方面,链接器并非足够强大到可以进行任何优化转换操作,所述优化转换操作典型地需要程序代码的大量分析和目标指令集结构的大量知识。在链接期间,链接器不需要代码分析和目标指令结构的知识。对上面描述的问题的一个现有的解决方案是采用在链接时优化整个可执行程序的链接时优化器。然而,典型地,现有的链接时优化器是重量级的工具,它通常使得链接时优化比编译时优化昂贵得多。此外,为了优化转换,链接时优化器需要执行它自身的代码分析(即不能够利用编译器进行的代码分析)。因此,存在着对无需额外的代码分析来进行链接时代码优化的方法和系统的需求。附图简要说明本专利技术的实施方案的特征和优点是以实施例的方式来示出的,并且不想把本专利技术的实施方案的范围限制在被示出的特定实施方案。附图说明图1示出包括实现本专利技术的一个实施方案的优化分析器和优化转换模块的编译环境。图2是一般地示出图1的优化分析器所进行的优化分析过程的流程图。图3是一般地示出图1的优化转换模块所进行的优化转换过程的流程图。图4是示出图1的优化分析器所进行的具体的基址绑定优化分析过程的流程图。图5是示出图1的优化分析器所进行的具体的函数克隆优化分析过程的流程图。图6是示出图1的优化转换模块所进行的对地址基址绑定和函数克隆的优化转换过程的流程图。详细说明图1根据本专利技术的一个实施方案,示出包括优化分析器20和优化转换模块22的编译环境10,所述优化分析器20和优化转换模块22对已编译代码文件13进行链接时代码优化而无需额外的代码分析。换句话说,优化分析器20和优化转换模块22允许已编译代码文件13接收在已编译代码文件13的编译时(compile-time)期间被指定的链接时优化转换。如下面将更详细描述的,并且根据本专利技术的一个实施方案,优化分析器20在编译环境10的编译器12内。优化转换模块22在编译环境10的链接器15内。在编译时,由于信息的不可获得性,所述信息仅在链接时已编译代码文件13与其他已编译代码文件19被链接成可执行程序16时可获得,编译器12在编译时不能进行为已编译代码文件13指定的每个代码优化。因此,优化分析器20产生优化指示(directive)21,所述优化指示21为编译器12不能进行的每个优化指定至少第一优化转换和第二优化转换以及它们的满足条件。该信息可以被称为全程序视角数据或全局数据。随后,优化指示21被发送到优化转换模块22。当链接器15将已编译代码文件13与其他已编译代码文件19链接时,优化转换模块22针对在链接时可获得的全程序视角数据检查条件,以确定应该选择第一和第二优化转换中的哪一个。随后优化转换模块22在链接时为可执行程序16执行第一和第二优化转换中被选择的一个。下面将仍然结合图1到6更详细地描述优化分析器20、优化转换模块22以及它们的功能。如从图1可以看到的,编译环境10用于将包含多个对象或模块(包括源代码文件11)的软件程序转变成可执行程序16。这表示源代码文件11是要被编译的软件程序的多个对象或模块中的一个。所述对象或模块中的每一个由某个用户以某种已知的高级编程语言编写。所述对象或模块中的每一个(包括源代码文件11)可以被称为程序文件(或代码文件)。在一个实施方案中,所采用的编程语言是C++编程语言。在另一个实施方案中,编程语言是JAVA(由Sun微系统公司开发)。编译环境10的编译器12被用来将源代码文件11编译成已编译代码文件13。编译器12还可以被用来将软件程序的其他代码文件编译成其他已编译代码文件19。然而,编译器12一次编译一个代码文件。编译环境10的链接器15用于将已编译代码文件13与其他已编译代码文件19链接,以产生可执行程序16。为了组合已编译对象文件13和19以产生可执行程序16,链接器15进行多个操作(例如,段分配、数据分配、符号处理和重定位)。例如,链接器15将符号绑定到地址上并且进行重定位操作。重定位操作本质上是用给定符号的地址修补(patch)存储器字(memory word)的操作。编译器12确定在已编译代码文件13的某个地方需要何种类型的重定位操作,而链接器15执行实际的修补操作。已编译代码文件13和19可以是本机代码,当所述本机代码被链接在一起形成可执行程序16时,它可以直接在数据处理系统或计算机系统上被执行。术语本机代码指这样的机器代码,即对具体体系结构或平台来说是特定的机器代码。可替换地,已编译代码文件13和19(并且因此可执行程序16)还可以是中间语言代码(例如,Java字节代码),所述中间代码可以随后被解释,或者接着被即时(just-in-time,JIT)编译器在运行时系统(或虚拟机)中编译成可以被平台专用的目标计算机系统执行的本机或机器代码。在被编译器12编译之前,源代码文件11可以被储存在计算机系统的存储器(两者均未示出)中。例如,已编译代码文件13和19可以被储存在将执行可执行程序16的计算机系统的存储器(两者均未示出)中。在一个实施方案中,源代码文件11、已编译代码文件13和19,以及可执行程序16被储存在同一计算机系统的存储器中。在可替换的实施方案中,源代码文件11、已编译代码文件13和19,以及可执行程序16被储存在不同的计算机系统中。编译器12是以计算机系统为宿主(或运行在计算机系统上)的软件系统。链接器15也是以计算机系统为宿主(或运行在计算机系统上)的软件系统。例如,本文档来自技高网...
【技术保护点】
一种用于进行代码优化的系统,包括:编译器内的优化分析器,所述优化分析器为已编译代码产生第一优化转换和第二优化转换以及它们的满足条件;以及链接器内的优化转换模块,当所述已编译代码与其他已编译代码链接时,所述优化转换模块确定应该 选择所述第一和第二优化转换中的哪一个,并且在链接时执行所述第一和第二优化转换中被选择的那一个。
【技术特征摘要】
【国外来华专利技术】...
【专利技术属性】
技术研发人员:马库斯梅茨格,凯姆拉吉,奥恩德卡派特,罗伯特威斯纳,
申请(专利权)人:英特尔公司,
类型:发明
国别省市:US[美国]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。