当前位置: 首页 > 专利查询>微软公司专利>正文

模块间内联候选标识制造技术

技术编号:6636219 阅读:199 留言:0更新日期:2012-04-11 18:40
根据基于服务历史的准则、编译器内联准则和/或执行性能准则自动标识有可能是模块间内联的好候选的例程。也可以通过满足服务历史、执行性能和/或编译器准则的例程的模式匹配代码自动标识候选。已自动标识的候选例程被呈现在内联咨询工具中,允许开发者批准/禁止已自动标识的候选、添加其他例程以及建议或要求开发工具对特定例程执行模块间内联。对候选例程的改变可以触发本机图像的重新生成,例程已被编译进该本机图像。

【技术实现步骤摘要】
模块间内联候选标识
技术介绍
内联扩展,亦称“内联”,是软件代码的手动或自动(例如,通过编译器或链接器) 修改,用被调用例程的主体代替例程调用。一些语言,例如C和C++,支持例程定义中的“内联”关键字,允许开发者建议编译器应尝试内联该例程。编译器使用开发者建议和其他准则来决定哪些例程调用应被内联。链接器可以执行内联,例如,与源不可用的例程和与库例程。运行时系统也可以执行内联。内联优化可以改善程序在运行时的时间和空间使用,但是也可能增加程序的二进制文件的大小。内联往往改善代码执行速度,但是内联也可能降低性能。例如,插入例程的多个副本可能增加代码大小足以使得代码不再适合高速缓存,导致更多高速缓存丢失。在嵌入系统中,较小的代码大小可能被较快的代码执行更加重要,使得内联没有吸引力。在一些系统中,从内联增加变量可能增加处理器寄存器使用足以导致额外RAM存取,因此减慢了执行速度。一些例程不能被内联,例如一些递归例程。
技术实现思路
代码生成器可以将代码从应用程序的一个模块内联到该应用程序的另一个模块, 以节省调用例程的开销。有时候,跨模块边界的内联可以改善应用程序性能。然而,关于模块间内联的决定包含折衷。如果模块可以独立演化,则演化一个模块常常使另一个模块的二进制代码无效。重新生成被无效的代码可能是时间和资源密集的。此处提供的一些实施例帮助标识可能是鉴于所涉及的折衷的模块间内联的好候选的例程。可以根据诸如服务历史准则、编译器内联准则和/或执行性能准则这样的准则来自动标识候选。例如,模块间内联的候选可以是这样的例程,其服务历史显示,相比于已指定的阈值它被较不频繁地和/或较少扩展地修改。可替代地,或此外,可以通过对满足服务历史、执行性能,和/或编译器准则的例程的代码进行模式匹配来自动标识候选。特定类型的例程也可以被标识为模块间内联的候选,例如由字段支持的属性获取或设置例程、由单字段的比特或由恒定值支持的属性、特定布尔属性、设置构造函数、特定相等或不相等的运算符、特定Cast运算符,和增加恒定值的包装函数。可以将自动标识的候选例程呈现给开发者,用于内联咨询工具中考虑。内联咨询工具给予开发者批准/禁止已自动标识的候选、添加其他例程,以及建议或要求开发工具对特定例程执行模块间内联的权利。在一些情况中,自动标识例程的改变可以触发本地图像的重新生成,在本地图像中例程已被编译。给出的示例仅是说明性的。本
技术实现思路
并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。相反,提供本
技术实现思路
是为了以简化的形式介绍将在以下具体实施方式中进一步描述的某些概念。本专利技术用权利要求书来定义,且在本
技术实现思路
与权利要求书冲突的情况下,应以权利要求书为准。附图说明将参考附图来给出更具体的描述。这些附图仅示出了所选方面,且因此未完全确定覆盖或范围。图1是示出计算机系统并且还示出经配置的存储介质实施方式的框图,所述计算机系统具有至少一个处理器、至少一个存储器、搜索模块间内联候选的例程集合、以及操作环境中可存在于多个网络节点上的其它项目;图2是示出示例体系结构的中模块间内联候选的自动标识的框图。图3是示出一些方法的步骤和所配置的存储介质的实施方式的流程图;以及图4是进一步示出一些实施方式的数据流程图。具体实施例方式概览许多虚拟执行环境既支持动态代码生成也支持提前(AOT)编译。AOT 二进制代码被保持,可以跨进程共享,并且通常导致启动时间和在动态代码生成上应用程序的存储器使用的显著改善。本机执行环境仅支持AOT 二进制代码。代码生成器可以将代码从一个函数内联到另一个以节省进行函数调用的开销,并启动进一步优化,从而生成运行更快的代码。跨模块边界执行这样的内联(称为模块间内联)可以改善应用程序性能。然而,如果模块可以独立演化,可能希望将高的值与内联决定相关联,因为演化一个模块常常使另一个模块的AOT 二进制码无效。重新生成被无效的AOT 二进制代码可能是时间和资源(CPU、存储器、磁盘)密集的。为本机执行环境重新分发已重新生成的AOT 二进制代码,例如,对于当应用程序和库厂商是不同实体时许多应用程序所消费的库而言,可能是困难的或不切实际的。跨模块内联的一些熟知方法包括,不允许模块间内联、总是重新生成受影响的AOT 二进制代码,和/或仅依赖于主观的开发者注释来选择跨模块内联候选。相反,此处呈现的方法支持可以被应用到预编译的已管理的(诸如以及本机(诸如C和C++)代码以使得性能从模块间内联胜出的简单和自动方案。此处描述的一些实施例使用基于函数的形状的试探来标识这样的函数,所述函数对于跨模块内联为高值并且不大可能演化,并因此不大可能影响其他AOT 二进制代码。所标识的函数可以通过例如二进制码重写工具来标记,使代码生成器被配置成仅仅跨模块边界内联这种已标记函数。试探也可以被用于创建标志这种方法的内联咨询工具;开发者可以检查已标志的方法并适当地标记它们。一些实施例提供了自动处理二进制代码以允许高值模块间内联而不会影响已经内联进代码的模块的系统。一些提供了标识高值模块间内联候选的试探。一些实施例提供了内联顾问,内联顾问向开发者提供有关特定函数是否是好/安全的模块间内联候选的评估。一些提供了允许将自动标识和开发者标识的函数的混合跨模块被内联的方案。在一些实施例中,使用试探来将自动标识对于跨模块内联高值和安全的函数/方法的模式在一些实施例中,已标识的函数用二进制码重写工具来标记。在一些中,代码生成器被修改为仅仅跨模块边界内联这些已标记的函数。任何对于这样的已标记函数所作的修改在构建期间被自动标志为违反。被这些试探自动标识的函数可以用开发者标识的函数来补充。该试探也可以由内联咨询工具用来帮助开发者容易且一致地为模块间内联标记函数。现在将参考诸如附图中示出的示例性实施例,且此处将使用具体语言来描述这些实施例。但是相关领域且拥有本专利技术的技术人员将想到的、此处所示的特征的更改和进一步修改以及此处所示的原理的其他应用应被认为是在权利要求书的范围内。各术语的意义在本专利技术中阐明,因此权利要求书应仔细注意这些阐明来阅读。给出了具体示例,但是相关领域的技术人员将理解,其他示例也落入所使用的术语的意义内, 且在一个或多个权利要求的范围内。各术语不一定需要具有与它们在一般使用中、在特定行业使用中、或在特定字典或一组字典的使用中所具有的意义相同的意义。与各种措辞一起使用附图标记来帮助显示术语的广度。给定一段文本中省略附图标记并不一定意味着该附图的内容没有被该文本讨论。专利技术人声称并行使其对于其自己的词典编纂的权利。各术语此处可在详细描述和/或申请文件的别处显式或隐式地定义。如本文所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、 个人计算机(便携式或非便携式)、个人数字助理、蜂窝或移动电话、和/或提供至少部分地由指令控制的一个或多个处理器的其他设备。指令可以是以存储器和/或电路中特定的软件的形式。具体而言,尽管可以想到许多实施例在工作站或膝上型计算机上运行,但其他实施例可以在其他计算设备上运行,且任何一个或多个此类设备可以是给定实施例的一部分。“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历同步的任何代本文档来自技高网
...

【技术保护点】
1.一种用于管理模块间内联的方法,所述方法利用具有在操作上与至少一个存储器通信的至少一个逻辑处理器的设备,该方法包括以下步骤:访问(302)服务历史(126)以获取例程集合;以及将根据服务历史已被修改少于已指定阈值(210)次数的例程自动标识(308)为模块间内联的候选(202)。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:S·比斯沃斯D·J·希尼克J·科塔斯F·V·佩斯彻盖里
申请(专利权)人:微软公司
类型:发明
国别省市:US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1