买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】精细粒度需求驱动的IPO基础架构_谷歌有限责任公司_201680008221.0 

申请/专利权人:谷歌有限责任公司

申请日:2016-01-12

公开(公告)日:2020-09-25

公开(公告)号:CN107209677B

主分类号:G06F8/54(20180101)

分类号:G06F8/54(20180101)

优先权:["20150202 US 62/110,738","20150227 US 14/634,401"]

专利状态码:有效-授权

法律状态:2020.09.25#授权;2018.02.06#著录事项变更;2017.10.27#实质审查的生效;2017.09.26#公开

摘要:提供了用于过程间优化IPO的方法和系统。新的IPO架构称为“ThinLTO”被设计为解决现有IPO手段诸如,传统的链接时间优化LTO和轻量级过程间优化LIPO的缺点和限制,并成为新的链接‑时间优化标准。使用ThinLTO,需求驱动和基于摘要的精细粒度的导入最大化跨模块优化CMO的潜力,这使得CMO尽可能有用。ThinLTO还提供全局索引,其使得能够快速函数导入;并行一些性能关键但昂贵的过程间分析和转换;利用需求驱动的惰性导入将调试构建的存储器消耗最小化的调试信息;并允许轻松集成第三方分布式构建系统。此外,ThinLTO还可以使用IPO服务器实现,从而消除对串行步骤的需要。

主权项:1.一种用于过程间优化的方法,包括:由处理器为多个源代码模块中的每一个生成中间表示文件;由所述处理器为所述多个源代码模块中的每一个生成函数索引和函数摘要数据,其中每个函数索引包括将函数ID映射到所述中间表示文件中的函数本体偏移的函数符号表;由所述处理器在每个中间表示文件的单独部分中存储对应源代码模块的所生成的函数索引和函数摘要数据;由所述处理器针对所述多个源代码模块生成与所生成的中间表示文件相对应的精简档案,其中所生成的精简档案包括组合函数映射并且在缺少所生成的中间表示文件的副本时引用所生成的中间表示文件;以及由所述处理器使用所述对应精简档案对所述多个源代码模块执行跨模块优化。

全文数据:精细粒度需求驱动的IP0基础架构[0001]相关申请的交叉引用[0002]本申请要求于2015年2月2日提交的美国临时专利申请序列号62110,738的优先权,其全部公开内容通过引用并入本文。背景技术[0003]跨模块优化CM0其通常意指过程间优化IP0是使得编译器能够优化用户程序的最有效方式之一。传统上,使用称为链接时间优化LT0的技术实现CM01T0是编译模型,其在链接时启用跨模块优化和整个程序分析顾名思义)。然而,LT0受到几个限制,使其不适合用于非常大的应用。这样的限制包括例如:(1LT0需要大量的存储器来执行链接步骤;(2链接步骤是连续的,并且大大减慢了整体编译;和3LT0不能轻易地与大型分布式构建系统集成。[0004]用于实现CM0的其它现有技术被称为轻量级IPOLIPO,其比LT0更具可扩展性。然而,LIP0受到自己的限制,并且在能够进一步提高LIP0的性能方面己经达到了上限。与LIP0相关联的事务的一些示例包括:(1LIP0需要简档profile反馈,并且默认不能启用;(2LIP0对构建系统非常侵入例如,需要复杂的构建系统支持来部署它);以及3LIP0使用粗略粒度导入方法,其大大限制了CM0的潜力。发明内容[0005]本发明内容以简化形式介绍了概念的选择,以提供对本公开的某些方面的基本理解。本发明内容不是对本公开的广泛概述,并且不旨在识别本公开的关键或重要要素或描绘本公开的范围。本发明内容只是将本公开的一些概念呈现为下面提供的具体实施方式的前序。[0006]本公开一般涉及用于源代码编译的方法和系统。更具体地,本公开的方面涉及用于实现IP0的新的架构。[0007]如将在本文中更详细地描述的,本公开的IP0架构被设计为扩展到非常大的程序,在其可以处理的源模块的数量方面几乎没有限制,非常快,并且针对默认编译模式例如,默认开启)。此外,本文所述的IP0架构设计为对单个机器并行构建和大型分布式构建系统都友好,并允许以最少的开销进行非常深入的优化。[0008]本公开的一个实施例涉及一种用于过程间优化的方法,包括:为多个源代码模块中的每一个生成中间表示文件;为多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储用于对应的源代码模块的所生成的函数索引和函数摘要数据;使用组合函数映射生成所生成的中间表示文件的精简档案;以及对多个源代码模块执行跨模块优化。[0009]在另一个实施例中,在用于过程间优化的方法中执行跨模块优化包括使用组合函数映射执行快速函数导入。[0010]在另一个实施例中,在用于过程间优化的方法中执行跨模块优化包括使用来自一个或多个其它模块的调试信息的需求驱动的导入。[0011]本公开的另一个实施例涉及一种计算机实现的方法,包括对多个源代码模块执行跨模块优化,其中跨模块优化以模块粒度并行,使用组合函数映射执行快速函数导入,并使用来自其它模块的调试信息的需求驱动的导入。[0012]在另一个实施例中,该方法还包括为多个源代码模块中的每一个生成中间表示文件。[0013]在另一个实施例中,该方法还包括为多个源代码模块中的每一个生成函数索引和函数摘要数据。[00M]还在另一个实施例中,该方法还包括:为多个源代码模块中的每一个生成中间表示文件;为多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储用于对应的源代码模块的所生成的函数索引和函数摘要数据;以及使用组合函数映射生成所生成的中间表示文件的精简档案。[0015]本公开的另一实施例涉及一种用于过程间优化的系统,包括至少一个处理器和耦合到至少一个处理器的非暂时性计算机可读介质,具有存储在其上的指令,所述指令当由至少一个处理器执行时使至少一个处理器:为多个源代码模块中的每一个生成中间表示文件;为多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储用于对应的源代码模块的所生成的函数索引和函数摘要数据;使用组合函数映射生成所生成的中间表示文件的精简档案;和对多个源代码模块执行跨模块优化。[0016]在另一个实施例中,用于进程间优化的系统中的至少一个处理器进一步使使用组合函数映射执行快速函数导入。[0017]在另一个实施例中,用于过程间优化的系统中的至少一个处理器进一步使使用来自一个或多个其它模块的调试信息的需求驱动的导入。[0018]本公开的另一个实施例涉及一种系统,包括至少一个处理器和耦合到至少一个处理器的非暂时性计算机可读介质,其具有存储在其上的指令,所述指令当由至少一个处理器执行时,使至少一个处理器:对多个源代码模块执行跨模块优化,其中跨模块优化以模块粒度并行,使用组合函数映射执行快速函数导入,并且使用来自其它模块的调试信息的需求驱动的导入。[0019]在另一个实施例中,系统中的至少一个处理器进一步使:为多个源代码模块中的每一个生成中间表示文件。[0020]在另一个实施例中,系统中的至少一个处理器进一步使:为多个源代码模块中的每一个生成函数索引和函数摘要数据。[0021]在另一个实施例中,系统中的至少一个处理器进一步使:为多个源代码模块中的每一个生成中间表示文件;为多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储用于对应的源代码模块的所生成函数索引和函数摘要数据;并且使用组合函数映射生成所生成的中间表示文件的精简档案。[0022]本文公开的一些或全部处理器和存储器系统的实施例还可以被配置为执行上述竺开的方法实施例中的一些或全部。上面公开的方法中的一些或全部的实施例也可以被表示为芒暂时性或非暂时性的处理器可读存储介质诸如光学或磁存储器上体现的指令,或者表示为经由通信网络诸如互联网或电话连接提供给处理器或数据处理装置的传播信_3]AT耐帥的具体实施城巾,本公湖方細纖幡臓贼它麵将变得显而易见。_,应当理讎是,具体实施方式和具体示例虽然指出了方法和系统的实施例,但是仅以说明的方式纟Ft出,因为在本文公开的概念的精神和范围内的各种改变和修改对于本领域技术人员来说根据该具体实施方式将变得显而易见。附图说明[0024]结合所附权利要求和附图对以下具体实施方式的研宄,本公开的这些和其它目的、特征和特性对于本领域技术人员将变得更加显而易见,所有这些都形成本说明书的一部分。在附图中:[0025]图1是图示出根据本文所述的一个或多个实施例的IP0系统中的示例阶段的流程图。[0026]图2是图^出根据本文所述的一个或多个实施例的示例巧生成过程的流程图。[0027]图3是图示出根据本文所述的一个或多个实施例的使用惰性函数导入的示例115〇过程的流程图。[0028]图4是图示出根据本文所述的一个或多个实施例的用于迭代惰性函数导入的示例方法的流程图。[0029]图5是图示出根据本文所述的一个或多个实施例的布置用于创建跨模块优化的示例计算装置的框图。[0030]本文提供的标题仅为方便起见,并不一定影响本公开要求保护的范围或含义。[0031]在附图中,相同的附图标记和任何缩略语识别具有相同或相似结构或功能的元件或动作,以便于理解和方便。在下面的具体实施方式的过程中将详细描述附图。具体实施方式[0032]现在将描述本公开的方法和系统的各种示例和实施例。以下描述提供了对这些示例的透彻理解和实现描述的具体细节。然而,相关领域技术人员将理解,可以在没有这些细节的许多的情况下实践本文描述的一个或多个实施例。类似地,相关领域的技术人员还将理解,本公开的一个或多个实施例可以包括本文中未详细描述的其它特征。此外,一些众所周知的结构或功能可能在下面不能被显示或描述,以避免不必要地模糊相关描述。[0033]跨模块优化CM0其通常意指过程间优化IP0是使得编译器能够优化用户程序的最有效方法之一。默认情况下,编译器在单个模块模式下运行。在这种模式下,编译器的优化能力受到程序员建立的人造源模块边界的限制。[0034]已经提出了几个现有的机制来解决这个问题,包括例如链接时间优化LT0和轻量级过程间优化LIP0。然而,这种现有手段受到限制,使得它们不适合默认开启。如将在下面更详细描述的,本公开的新CM0架构其在本文中有时可能称为“ThinLTO”)被设计为解决LT0和LIP0两者的缺点和限制,并且成为新的链接-时间-优化标准。[0035]存在ThinLTO的许多特征,其提供了相对于现有手段的各种优点。例如,本公开的方法和系统解决了CM0可扩展性问题,这些问题困扰着实施CM0的现有手段。在默认情况下,ThinLTO还将编译过程中的串行例如,不可并行化,从而遇到瓶颈部分中花费的时间减少到绝对最小值。IO操作也被最小化,因为例如可以消除第二中间表示⑽序列化。例如,使用传统CMO,在过程间分析之后,为了在不同的分区中发生转换,编译器需要读入IR文件,进行转换所需的函数的克隆例如,内联转换),并将重新分区的巧写回磁盘。此序列化步骤非常IO敏感,并在本文呈现的方法和系统中被消除。[0036]使用ThinLTO,需求驱动和基于摘要的精细粒度导入最大化CM0的潜力,这使得CM〇尽可能有用。ThinLTO还提供全局索引,其使得能够快速函数导入;并行一些性能关键但昂贵的过程间分析和转换;利用需求驱动的惰性导入将调试构建的存储器消耗最小化的调试信息;并允许轻松集成第三方分布式构建系统。此外,ThinLTO还可以使用IP0服务器实现,从而消除对串行步骤的需要。^[0037]本公开的新IP0例如,CM0架构结合了LIP0和传统LT0的许多最佳特征,还包括基本变化和或增加。虽然ThinLTO中包含的这些基本变化增加提供了许多相对于现有手段的优点,但在每个中包括的某些概念之间仍然存在一些相似之处。下面描述在本公开中使用的常用术语的一些示例。[0038]过程间优化IPO〇,则该点可以被放置在优先队列中。[0112]在框415处,可以进行关于优先队列是否为空或已经达到了优先队列的限制的确定。[0113]如果在框415处确定优先队列为空或者已经达到了优先队列的限制,则函数导入完成,并且该过程可以移动到框440。[0114]在框440处,一旦迭代函数导入完成例如,如在框415处所确定的),导入的函数的类型信息可以被惰性地导入。[0115]另一方面,如果在框415处确定优先队列不为空并且尚未达到优先队列的限制,则迭代过程可以在框420处继续,其中,来自优先队列的顶部条目可能被弹出。[0116]在框425处,全局函数索引中的函数的条目可以用于在对应的模块中定位并加载函数的IR。[0117]在框430处,如果存在用于函数的简档,并且简档尚未处于加载的函数IR中,则可以将简档注释到在框425处加载的函数IR上。[0118]在框435处,可以从框425处加载的函数IR收集例如,获得,确定等新的非库外部调用点。如果确定任何新的非库外部调用点是导入有益的(例如,基于调用点的函数摘要和调用点分析),则可以将它们添加到优先队列。[0119]返回到图3所示的示例过程3〇〇,框31〇可以包括全局符号链接跨模块和静态促进。显式标记为“未导入”的冷模块不需要这样做。[0120]框315可以包括从辅助导入和合并的惰性调试信息。在此步骤中,仅将导入的函数所需的调试DIE或其元数据合并例如统一到主模块中。应当注意,根据本公开的一个或多个实施例,可以在ThinLTO的第三阶段300函数导入期间迭代地执行框310全局符号链接和静态促进和框315调试导入中的任一个或两个。[0121]框320可以包括在扩展主模块上的过程间分析通路。[0122]ThinLTO的第三阶段3〇0中的框325可以包括后期全局优化、机器特定优化和代码生成。[0123]应当理解,从其它模块导入的所有函数是根据LIP0定义的辅助函数。它们可以在内联转换后被安全地丢弃,除非副本变为本地或不能保证被其它模块定义的情况。[0124]ThinLTO惰性调试信息导入[0125]调试信息消耗大量的存储器,并且统一合并许多类型可能是昂贵的。如果主模块从M个不同的模块中导入N个函数,则从所有M个模块导入调试信息可能是非常昂贵的。根据本公开的一个或多个实施例,处理该问题的一种方式是通过以需求驱动的方式导入调试信息条目。这样的手段可以包括例如针对每个导入的函数的IR步彳丁walk,计算可传引用的调试信息实体的集合,并将它们合并到主模块中。[0126]将阶段2和阶段3构建分割成两个通路[0127]为了利用构建并行性,阶段1编译通常在其自身的通路中完成(例如,经由编译器选项-c和每个源文件的独立构建动作)。然而,根据本公开的至少一个实施例,默认ThinLT〇的阶段2和阶段3的步骤可以在合并通路中完成,其中链接器插件驱动后端动作的并行构建。[0128]对于ThinLTO,还存在不同的构建模式:在链接器插件步骤中,在创建精简档案文件之后,链接器插件可以选择创建后端动作文件例如,通常是GNUmakefile,并且停止通过使后端驱动程序参与来编译替代恢复编译。用户然后可以直接使用生成的makefile来调用“make”。例如:[0129]通路1:[0130]${CC}-fthin-lto-csourcel.cc[0131]${CC}-fthin-lto-csource2.cc[0132]通路2:#生成generated.mk并且停止而不调用BE[0133]${CC}-fthin-1to=.thin_arch.a-fthin-1t〇-twopass=.generated.mksourcel.ccsource2.c[0134]通路3:#由用户显式调用)[0135]make-j1〇-f.generated.mk[0136]上述模式给予用户轻松地将ThinLTO构建与其定制的构建系统整合用于远程编译的灵活性。[0137]用于分布式构建系统的ThinLTO[0138]根据本公开的至少一个实施例,阶段IThinLTO可以完全受到任何分布式构建系统提供的完全并行性的影响。虽然链接器插件是串行步骤,但是ThinLTO将其缩小到绝对最小值。然而,在构建的更昂贵的步骤期间,阶段3例如,链接器插件需要与任何分布式构建系统一起工作,而不将构建系统特定知识嵌入到编译器本身中。[0139]使用本公开的ThinLTO设计和架构,可以容易地解决该问题。例如,上述的2通路编译可以用来解决这个问题。在链接器插件生成makefile之后,构建系统特定的变换工具可以用于将makefile变换为目标构建文件格式。然后可以将此构建文件馈送到分布式构建前端以执行。[0M0]使用简档反馈构建FD0AFD0[0141]ThinLTO使用自动反馈指导优化AFD0甚至使用陈旧的简档透明地工作。使用基于仪器的FD0,使用ThinLTO的简档使用编译可以像传统的02或LIP0构建一样简化为单阶段编译。想法是可以在简档生成通路中生成并在简档使用步骤中重新使用精简档案。[0142]应当注意,根据本文所述的一个或多个实施例,对于具有简档反馈的ThinLTO,模块级摘要可以消除对大部分冷模块进行函数导入的需要。使用简档指导,函数级导入也可以更有选择性和更快速。[0143]根据本公开的至少一个实施例,以下描述可以实现与ThinLTO相似的跨模块内联中的有效性的IP0基础架构的一个可能的替代设计的示例。[0144]1在链接器插件步骤中,执行LIP0风格粗略粒度内联分析。内联分析基于摘要数据例如,主要是调用图);[G145]2替代进行完整的内联决定(例如,如在GCC中所做的那样),该通路仅决定需要完成什么分组以启用有用的CM0;[0146]⑶可以基于原始源模块边界对函数进行分区;[0147]⑷基于上述内联分析,可以将启用CM内联所需的函数克隆到目标源模块中。函数克隆本质上是ThinLTO中的辅助函数导入,但在链接器插件阶段完成。L0148J与处1111™相比,上述示例替代设计具有一些缺点,包括例如以下:[0149]i在编译流水线的瓶颈中增加了内联分析,从而降低了使用并行化最大可能的速度因子;[0150]ii辅助函数导入步骤也被添加到序列化步骤。即使可以应用线程级并行性,宜也限于单个机器;[0151]Hi摘要数据的大小对于程序大小仍然是线性的,并且因此可能在将来某个时刻达到构建机器限制;[0152]iv调试信息处理问题。为了支持惰性按需调试类型导入,编译器需要在序列化步骤中遍历大多数模块的IR。[0153]图5是根据本文描述的一个或多个实施例的被布置用于创建跨模块优化的示例性计算机500的高级框图。在非常基本的配置5〇1中,计算装置500通常包括一个或多个处理器510和系统存储器520。存储器总线(530可以用于处理器(510和系统存储器520之间的通信。[0154]根据期望的配置,处理器510可以是任何类型的,包括但不限于微处理器uP、微控制器uC、数字信号处理器DSP或其任何组合。处理器510可以包括一级或多级缓存,诸如一级缓存511和二级缓存512,处理器核心(513和寄存器514。处理器核心513可以包括算术逻辑单元ALU、浮点单元FPU、数字信号处理核心DSP核心或其任何组合。存储器控制器516也可以与处理器510—起使用,或者在一些实现中,存储器控制器515可以是处理器510的内部部分。[0155]根据期望的配置,系统存储器52〇可以是任何类型的,包括但不限于易失性存储器诸如RAM、非易失性存储器诸如R0M,闪速存储器等)或其任何的组合。系统存储器520通常包括操作系统521、一个或多个应用522和程序数据524。应用522可以包括用于为应用创建跨模块优化的方法和架构523。程序数据524可以包括存储指令,所述指令当由一个或多个处理设备执行时实现用于代码优化的方法和架构523。根据至少一些实施例,应用522可以被布置成与操作系统521上的程序数据524—起操作。[0156]计算装置500可以具有附加特征或功能,以及用于促进基本配置501和任何所需装置和接口之间的通信的附加接口。[0157]系统存储器520是计算机存储介质的示例。计算机存储介质包括但不限于RAM、R0M、EEPR0M、闪速存储器或其它存储器技术、CD-ROM、数字通用盘DVD或其它光学存储器、磁带盒、磁带、磁盘存储器或其它磁存储装置或可用于存储所需信息并且可被计算装置500访问的任何其它介质。任何这样的计算机存储介质可以是装置500的一部分。[0158]计算装置500可以被实现为小型便携式或移动)电子装置诸如蜂窝电话、智能电话、个人数据助理PDA、个人媒体播放器装置、平板电脑平板、无线web收看装置、个人耳机装置、应用专用装置或包括上述任何功能的混合装置)的一部分。计算装置500还可以实现为包括膝上型计算机和非膝上型计算机配置的个人计算机。[0159]前面的具体实施方式己经通过使用框图、流程图和或示例来阐述了设备和或过程的各种实施例。只要这些框图、流程图和或示例包含一个或多个功能和或操作,本领域技术人员将会理解,可以通过各种硬件、软件、固件或其虚拟任何组合单独地和或共同地实现这些框图、流程图或示例内的每个功能和或操作。根据至少一个实施例,本文描述的主题的几个部分可以经由专用集成电路ASIC、现场可编程门阵列FPGA、数字信号处理器DSP或其它集成格式来实现。然而,本领域技术人员将认识到,本文公开的实施例的某些方面可以全部或部分在集成电路中等同地实现,作为在一个或多个计算机上运行的一个或多个计算机程序,作为在一个或多个处理器上运行的一个或多个程序,作为固件或其虚拟任何组合,并且设计电路和或编写软件和或固件的代码本领域技术人员将根据本公开己知。此外,本领域技术人员将理解,本文描述的主题的机制能够作为多种形式的程序产品分发,并且本文描述的主题的说明性实施例应用而不考虑用于实际执行分发的非暂时性信号承载介质的具体类型。非暂时性信号承载介质的示例包括但不限于以下:可记录型介质,诸如软盘、硬盘驱动器、压缩盘CD、数字视频盘DVD、数字磁带、计算机存储器等;以及传输类型介质,诸如数字和或模拟通信介质。(例如,光纤电缆、波导、有线通信链路、无线通f目链路等)。[0160]关于本文使用基本上任何复数和或单数术语,本领域技术人员可以从复数转变为单数形式和或从单数转变为复数形式以适合于上下文和或应用。为了清楚起见,可以在此明确阐述各种单数复数排列。[0161]因此,已经描述了主题的特定实施例。其它实施例在所附权利要求的范围内。在一些情况下,权利要求中所述的动作可以以不同的顺序执行并且仍然实现期望的结果。此外,附图中所描绘的过程不一定需要所示的特定顺序或次序来实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。

权利要求:1.一种用于过程间优化的方法,包括:为多个源代码模块中的每一个生成中间表示文件;为所述多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储对应源代码模块的所生成的函数索引和函数摘要数据;使用组合函数映射生成所生成的中间表示文件的精简档案;以及对所述多个源代码模块执行跨模块优化。2.根据权利要求1所述的方法,其中,所述跨模块优化以模块粒度并行。3.根据权利要求1所述的方法,其中,执行所述跨模块优化包括:使用所述组合函数映射执行快速函数导入。4.根据权利要求1所述的方法,其中,执行所述跨模块优化包括:使用来自一个或多个其它模块的调试信息的需求驱动导入。5.—种计算机实现的方法,包括:对多个源代码模块执行跨模块优化,其中,所述跨模块优化以模块粒度并行,使用组合函数映射执行快速函数导入,并且使用来自其它模块的调试信息的需求驱动导入。6.根据权利要求5所述的方法,还包括:为所述多个源代码模块中的每一个生成中间表示文件。7.根据权利要求5所述的方法,还包括:为所述多个源代码模块中的每一个生成函数索引和函数摘要数据。8.根据权利要求5所述的方法,还包括:为所述多个源代码模块中的每一个生成中间表示文件;为所述多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储对应源代码模块的所生成的函数索引和函数摘要数据;以及使用组合函数映射生成所生成的中间表示文件的精简档案。9.一种用于过程间优化的系统,包括:至少一个处理器;和非暂时性计算机可读介质,所述非暂时性计算机可读介质耦合到所述至少一个处理器,具有存储在其上的指令,所述指令当由所述至少一个处理器执行时,使所述至少一个处理器:为多个源代码模块中的每一个生成中间表示文件;为所述多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储对应源代码模块的所生成的函数索引和函数摘要数据;使用组合函数映射生成所生成的中间表示文件的精简档案;以及对所述多个源代码模块执行跨模块优化。10.根据权利要求9所述的系统,其中,所述跨模块优化以所述模块粒度并行。11.根据权利要求9所述的系统,其中,进一步使所述至少一个处理器:使用所述组合函数映射执行快速函数导入。12.根据权利要求9所述的系统,其中,进一步使所述至少一个处理器:使用来自一个或多个其它模块的调试信息的需求驱动导入。13.—种系统,包括:至少一个处理器;和非暂时性计算机可读介质,所述非暂时性计算机可读介质耦合到所述至少一个处理器,具有存储在其上的指令,所述指令当由所述至少一个处理器执行时,使所述至少一个处理器:对多个源代码模块执行跨模块优化,其中,所述跨模块优化以模块粒度并行,使用组合函数映射执行快速函数导入,并且使用来自其它模块的调试信息的需求驱动导入。14.根据权利要求13所述的系统,其中,进一步使所述至少一个处理器:为所述多个源代码模块中的每一个生成中间表示文件。15.根据权利要求13所述的系统,其中,进一步使所述至少一个处理器:为所述多个源代码模块中的每一个生成函数索引和函数摘要数据。16.根据权利要求13所述的系统,其中,进一步使所述至少一个处理器:为所述多个源代码模块中的每一个生成中间表示文件;为所述多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储对应源代码模块的所生成的函数索引和函数摘要数据;以及使用组合函数映射生成所生成的中间表示文件的精简档案。17.存储计算机可执行指令的一种或多种非暂时性计算机可读介质,所述计算机可执行指令当由一个或多个处理器执行时,使所述一个或多个处理器执行操作,所述操作包括:为多个源代码模块中的每一个生成中间表示文件;为所述多个源代码模块中的每一个生成函数索引和函数摘要数据;在每个中间表示文件的单独部分中存储对应源代码模块的所生成的函数索引和函数摘要数据;使用组合函数映射生成所生成的中间表示文件的精简档案;以及对所述多个源代码模块执行跨模块优化。18.根据权利要求17所述的一种或多种非暂时性计算机可读介质,其中,所述跨模块优化以模块粒度并行。19.根据权利要求17所述的一种或多种非暂时性计算机可读介质,其中,所述计算机可执行指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行进一步的操作,所述操作包括:使用所述组合函数映射执行快速函数导入。20.根据权利要求17所述的一种或多种非暂时性计算机可读介质,其中,所述计算机可执行指令当由所述一个或多个处理器执行时,使所述一个或多个处理器执行进一步的操作,所述操作包括:使用来自一个或多个其它模块的调试信息的需求驱动导入。

百度查询: 谷歌有限责任公司 精细粒度需求驱动的IPO基础架构

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。