模块间内联候选标识的制作方法

上传人:ting****789 文档编号:310009983 上传时间:2022-06-14 格式:DOCX 页数:8 大小:31.37KB
返回 下载 相关 举报
模块间内联候选标识的制作方法_第1页
第1页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《模块间内联候选标识的制作方法》由会员分享,可在线阅读,更多相关《模块间内联候选标识的制作方法(8页珍藏版)》请在金锄头文库上搜索。

1、模块间内联候选标识的制作方法专利名称:模块间内联候选标识的制作方法模块间内联候选标识背景技术:内联扩展,亦称“内联”,是软件代码的手动或自动(例如,通过编译器或链接器) 修改,用被调用例程的主体代替例程调用。一些语言,例如C和C+,支持例程定义中的“内联”关键字,允许开发者建议编译器应尝试内联该例程。编译器使用开发者建议和其他准则来决定哪些例程调用应被内联。链接器可以执行内联,例如,与源不可用的例程和与库例程。运行时系统也可以执行内联。内联优化可以改善程序在运行时的时间和空间使用,但是也可能增加程序的二进制文件的大小。内联往往改善代码执行速度,但是内联也可能降低性能。例如,插入例程的多个副本可

2、能增加代码大小足以使得代码不再适合高速缓存,导致更多高速缓存丢失。在嵌入系统中,较小的代码大小可能被较快的代码执行更加重要,使得内联没有吸引力。在一些系统中,从内联增加变量可能增加处理器寄存器使用足以导致额外RAM存取,因此减慢了执行速度。一些例程不能被内联,例如一些递归例程。发明内容代码生成器可以将代码从应用程序的一个模块内联到该应用程序的另一个模块, 以节省调用例程的开销。有时候,跨模块边界的内联可以改善应用程序性能。然而,关于模块间内联的决定包含折衷。如果模块可以独立演化,则演化一个模块常常使另一个模块的二进制代码无效。重新生成被无效的代码可能是时间和资源密集的。此处提供的一些实施例帮助

3、标识可能是鉴于所涉及的折衷的模块间内联的好候选的例程。可以根据诸如服务历史准则、编译器内联准则和/或执行性能准则这样的准则来自动标识候选。例如,模块间内联的候选可以是这样的例程,其服务历史显示,相比于已指定的阈值它被较不频繁地和/或较少扩展地修改。可替代地,或此外,可以通过对满足服务历史、执行性能,和/或编译器准则的例程的代码进行模式匹配来自动标识候选。特定类型的例程也可以被标识为模块间内联的候选,例如由字段支持的属性获取或设置例程、由单字段的比特或由恒定值支持的属性、特定布尔属性、设置构造函数、特定相等或不相等的运算符、特定Cast运算符,和增加恒定值的包装函数。可以将自动标识的候选例程呈现

4、给开发者,用于内联咨询工具中考虑。内联咨询工具给予开发者批准/禁止已自动标识的候选、添加其他例程,以及建议或要求开发工具对特定例程执行模块间内联的权利。在一些情况中,自动标识例程的改变可以触发本地图像的重新生成,在本地图像中例程已被编译。给出的示例仅是说明性的。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。相反,提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的某些概念。本发明用权利要求书来定义,且在本发明内容与权利要求书冲突的情况下,应以权利要求书为准。将参考附图来给出更具体的描述。这些附图仅示出了所选方面,且因此未

5、完全确定覆盖或范围。图1是示出计算机系统并且还示出经配置的存储介质实施方式的框图,所述计算机系统具有至少一个处理器、至少一个存储器、搜索模块间内联候选的例程集合、以及操作环境中可存在于多个网络节点上的其它项目;图2是示出示例体系结构的中模块间内联候选的自动标识的框图。图3是示出一些方法的步骤和所配置的存储介质的实施方式的流程图;以及图4是进一步示出一些实施方式的数据流程图。具体实施例方式概览许多虚拟执行环境既支持动态代码生成也支持提前(AOT)编译。AOT 二进制代码被保持,可以跨进程共享,并且通常导致启动时间和在动态代码生成上应用程序的存储器使用的显著改善。本机执行环境仅支持AOT 二进制代

6、码。代码生成器可以将代码从一个函数内联到另一个以节省进行函数调用的开销,并启动进一步优化,从而生成运行更快的代码。跨模块边界执行这样的内联(称为模块间内联)可以改善应用程序性能。然而,如果模块可以独立演化,可能希望将高的值与内联决定相关联,因为演化一个模块常常使另一个模块的AOT 二进制码无效。重新生成被无效的AOT 二进制代码可能是时间和资源(CPU、存储器、磁盘)密集的。为本机执行环境重新分发已重新生成的AOT 二进制代码,例如,对于当应用程序和库厂商是不同实体时许多应用程序所消费的库而言,可能是困难的或不切实际的。跨模块内联的一些熟知方法包括,不允许模块间内联、总是重新生成受影响的AOT

7、 二进制代码,和/或仅依赖于主观的开发者注释来选择跨模块内联候选。相反,此处呈现的方法支持可以被应用到预编译的已管理的(诸如以及本机(诸如C和C+)代码以使得性能从模块间内联胜出的简单和自动方案。此处描述的一些实施例使用基于函数的形状的试探来标识这样的函数,所述函数对于跨模块内联为高值并且不大可能演化,并因此不大可能影响其他AOT 二进制代码。所标识的函数可以通过例如二进制码重写工具来标记,使代码生成器被配置成仅仅跨模块边界内联这种已标记函数。试探也可以被用于创建标志这种方法的内联咨询工具;开发者可以检查已标志的方法并适当地标记它们。一些实施例提供了自动处理二进制代码以允许高值模块间内联而不会

8、影响已经内联进代码的模块的系统。一些提供了标识高值模块间内联候选的试探。一些实施例提供了内联顾问,内联顾问向开发者提供有关特定函数是否是好/安全的模块间内联候选的评估。一些提供了允许将自动标识和开发者标识的函数的混合跨模块被内联的方案。在一些实施例中,使用试探来将自动标识对于跨模块内联高值和安全的函数/方法的模式在一些实施例中,已标识的函数用二进制码重写工具来标记。在一些中,代码生成器被修改为仅仅跨模块边界内联这些已标记的函数。任何对于这样的已标记函数所作的修改在构建期间被自动标志为违反。被这些试探自动标识的函数可以用开发者标识的函数来补充。该试探也可以由内联咨询工具用来帮助开发者容易且一致地

9、为模块间内联标记函数。现在将参考诸如附图中示出的示例性实施例,且此处将使用具体语言来描述这些实施例。但是相关领域且拥有本发明的技术人员将想到的、此处所示的特征的更改和进一步修改以及此处所示的原理的其他应用应被认为是在权利要求书的范围内。各术语的意义在本发明中阐明,因此权利要求书应仔细注意这些阐明来阅读。给出了具体示例,但是相关领域的技术人员将理解,其他示例也落入所使用的术语的意义内, 且在一个或多个权利要求的范围内。各术语不一定需要具有与它们在一般使用中、在特定行业使用中、或在特定字典或一组字典的使用中所具有的意义相同的意义。与各种措辞一起使用附图标记来帮助显示术语的广度。给定一段文本中省略附

10、图标记并不一定意味着该附图的内容没有被该文本讨论。发明人声称并行使其对于其自己的词典编纂的权利。各术语此处可在详细描述和/或申请文件的别处显式或隐式地定义。如本文所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、 个人计算机(便携式或非便携式)、个人数字助理、蜂窝或移动电话、和/或提供至少部分地由指令控制的一个或多个处理器的其他设备。指令可以是以存储器和/或电路中特定的软件的形式。具体而言,尽管可以想到许多实施例在工作站或膝上型计算机上运行,但其他实施例可以在其他计算设备上运行,且任何一个或多个此类设备可以是给定实施例的一部分。“多线程化”计算机系统是支持多个执行线程的计算机

11、系统。术语“线程”应被理解为包括能够或经历同步的任何代码,并且可用另一名称来称呼,如“任务”、“进程”或“协同例程”。线程可以并行地、顺序地、或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合来运行。以各种配置设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织供并行执行但实际依次轮流执行。多线程化可以例如通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可轮流在共享数据上操作,或者每一线程可

12、以例如在其自己的数据上操作。“逻辑处理器”或“处理器”是单个独立的硬件线程处理单元。例如,每一个核运行两个线程的超线程化四核芯片具有8个逻辑处理器。处理器可以是通用的,或者它们可以针对诸如图形处理、信号处理、浮点算术处理、加密、I/O处理等特定用途来定制。“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境以各种配置出现。在一给定配置中,所有处理器可以在功能上是等价的,而在另一配置中,某些处理器可以借助具有不同硬件能力、不同软件分配或两者而不同于其他处理器。取决于配置,处理器可在单个总线上彼此紧耦合,或者它们可以是松耦合的。在某些配置中,处理器共享中央存储器,在某些配置中它们各

13、自具有其自己的本地存储器,且在某些配置中存在共享和本地存储器两者。“内核”包括操作系统、系统管理程序、虚拟机、以及类似的硬件接口软件。“代码”表示处理器指令、数据(包括常量、变量和数据结构)或指令和数据两者。“例程”意味着函数、方法,或其他代码片段,其非循序地接收控制并接着例如,通过压到调用堆栈上的地址来返回。除了既不接受参数也不返回值的无参数的空例程,例程也使用堆栈来接收和/或返回值。“自动”意味着通过使用自动化(例如,由软件针对此处讨论的具体操作配置的通用计算硬件),与不使用自动化相对。具体而言,“自动”执行的步骤并不是在纸张上用手执行或在人的脑海中执行的;它们是用机器来执行的。贯穿本文,

14、对任选的复数的使用意味着存在一个或多个所指示的特征。例如, “(诸)例程”意味着“一个或多个例程”或等效于“至少一个例程”。类似的,“准则”意味着 “一个或多个准则”或等效于“至少一个准则”。只要参考了数据或指令,就理解这些项目配置了计算机可读存储器,从而将其变换为特定物品,而非简单地存在于纸张上、人的脑海中、或作为例如线路上的瞬时信号。操作环境参考图1,用于一个实施例的操作环境100可包括计算机系统102。计算机系统 102可以是多处理器计算机系统,也可以不是。操作环境可包括给定计算机系统中的一个或多个机器,它们可以群集的、客户机-服务器联网的、和/或对等联网的。人类用户104可以通过使用显

15、示器、键盘和其他外围设备106来与计算机系统102 交互。系统管理员、开发者、工程技术人员、以及最终用户各自都是特定类型的用户104。代表一个或多个人来行动的自动化代理也可以是用户104。存储设备和/或联网设备在某些实施例中可被认为是外围设备。图1中未示出的其他计算机系统可以使用经由例如网络接口设备到网络108的一个或多个连接来与计算机系统102或与另一系统实施例交互。计算机系统102包括至少一个逻辑处理器110。如其他合适的系统,计算机系统 102还包括一个或多个计算机可读非瞬态存储介质112。介质112可以是不同的物理类型。 介质112可以是易失性存储器、非易失性存储器、固定在原处的介质、

16、可移动介质、磁介质、 光介质、和/或其他类型的非瞬态介质(与诸如仅传播信号的线路等瞬态介质形成对比)。 具体地,诸如CD、DVD、记忆棒或其他可移动非易失性存储介质等已配置介质114在被插入或以其他方式安装时可以变为计算机系统的功能部分,从而使得其内容可被存取来供处理器110使用。可移动的已配置介质114是计算机可读存储介质112的一个示例。计算机可读存储介质112的某些其他示例包括内置RAM、ROM、硬盘、和不可由用户104容易地移动的其他存储设备。介质114用可由处理器110执行的指令116来配置;“可执行”在此以宽泛的意义用来包括机器代码、可解释代码、以及在例如虚拟机上运行的代码。介质114还用通过指令116的执行创建、修改、引用和/或以其他方式使用的数据118来配置。指令116和数据 118配置它们所在的介质114 ;当该存储器是给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。在某些实施例中,数据118的一部分代表了诸如产品特性、库存、物理测量、设置、图像、读数、目标、量等的真实项目。如本文讨论的,这样的数据也被转

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号