深度并行的源代码编译制造技术

技术编号:12817371 阅读:67 留言:0更新日期:2016-02-07 10:06
使用包括与程序结构相关的信息的编程语言的源代码来生成抽象句法树(AST)。可并行地执行AST的生成。这些类型被分割成形成汇编件的多个(例如,可配置的)模块。在编译过程的不同阶段期间,可并行地编译每一模块。由于不同的模块(例如,并行地)编译,因此来自不同模块的编译器元数据可被写入可通过不同编译过程访问的存储库。在流经编译流水线之后,经丰富的AST中的每一个AST都用于代码生成,其中它们被变换成目标语言(例如,可在硬件上执行的代码流)。可执行代码接着被存储为汇编件的一部分。代码的存储还可并行地执行。

【技术实现步骤摘要】
【国外来华专利技术】【专利说明】深度并行的源代码编译背景编译器被用于在计算设备上执行之前,将以更高级的编程语言编写的源代码转换成更低级的语言。例如,可编译使用X++编程语言编写的源代码以创建可在一个或多个计算设备上执行的可执行程序。编译器可执行不同的操作,包括词汇分析、语义分析、代码生成等。编译少量源代码通常快速地执行,而编译大量源代码可花费相当多的时间。概述提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。该概述不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在被用来帮助确定所要求保护的主题的范围。使用包括与程序结构相关的信息的编程语言的源代码来生成抽象句法树(AST)。例如,编译器前端(例如,解析器)可分析源代码,确定源代码所定义的类型/类中的每一种类型/类,并且生成AST。AST的生成可并行地执行。随着它们在编译过程期间经过流水线,所生成的AST被细化以包括进一步的语义信息。这些类型/类被分割成形成汇编件的模块。所使用的多个不同模块可被配置和/或被自动地确定。例如,可为每一类型创建一模块,可为预定数量的类型创建一模块等等。在编译过程的不同阶段期间,每一模块可被并行地编译。由于不同的模块被(例如,并行地)编译,因此来自不同模块的信息被写入存储库。可通过不同的编译过程来访问存储库。在流经编译流水线之后,经丰富的AST中的每一个AST都用于代码生成,其中它们被变换成目标语言(例如,可在硬件上执行的代码流)。然后,这些模块中的每一个模块内的可执行代码被存储为汇编件的一部分。还可并行地执行代码的存储。分配不同的编译线程以使其在多个处理器(例如,两个、四个、八个、高达多个处理器是可用的)上运行。通常,源代码的编译速度由可用硬件资源确定。附图简述图1示出了用于深度并行的源代码编译的系统;图2示出了用于并行地编译源代码的流水线;图3示出了来自编译过程的示例性阶段的示例;图4解说了在编译阶段内的不同阶段使用并行计算的编译过程;图5解说了使用深度并行的源代码编译的示例性在线系统;以及图6、7A、7B和8、以及相关联的描述提供了对其中可实践本专利技术的实施例的各种操作环境的讨论。详细描述现在参考各附图,其中相似的附图标记表示相似的元件,将针对元件描述各个实施例,将描述各个实施例。图1示出了用于深度并行的源代码编译的系统。如所示,系统100包括编译管理器26、编译器110、编译流水线120、抽象句法树(AST) 130、源代码140、模块150、可执行代码160、存储库170、以及包括一个或多个处理器(例如,处理器1-N)的计算设备115。通常,编译管理器26被配置成并行地编译源代码。例如,代替串行地编译源代码,基于类型/类定义将源代码分割成用于编译的多个不同线程。编译管理器26访问源代码140以供编译器110编译。源代码140是以编程语言编写的的源代码,该源代码被编译成可在一个或多个计算设备上执行的可执行代码。可使用一种或多种编程语言(C、C++、C#、X++、VISUAL BASIC、VISUAL BASIC.NET)来编写源代码140。根据一个实施例,源代码140以.NET编译语言(诸如X++代码)编写,该.NET编译语言与C#和/或其他.NET编译语言具有相似性。编译器110被配置成使用在编译流水线120中定义的不同阶段/途径来编译源代码140。可使用不同的方法来配置编译器110。根据实施例,编译器110被配置成编译源代码140以创建MICROSOFT.NET应用。可使用一个或多个编译器。例如,可将不同的编译器与使用不同编程语言编写的每一源代码文件相关联。编译管理器26访问源代码140 (—个或多个文件)并在编译流水线120中的解析阶段期间,编译器110生成抽象句法树(AST)。AST包括与程序的结构相关的信息。例如,解析器可访问源代码140、分析源代码140、确定源代码140的结构并且生成AST。随着解析器识别源代码中的语言构造,它建立包括作为它们表示的源代码伪像(例如,X++伪像)的抽象的节点的AST。可并行地执行AST的生成。随着它们在编译过程期间经过流水线120,所生成的AST被细化以包括进一步的语义信息。流水线120可包括挂接(hook)到流水线中的任意数量的途径。然后,流水线将顺序地经过这些途径。每一途径可按需提取信息和/或修改将进入下一途径的代码(例如,AST)。该上下文中的途径是通过应用某一规则或者通过修改该规则对源代码采取行动的实体。第一途径是读取源代码、解析该源代码且产生后续途径对其操作的抽象句法树(AST)的解析器。在生成AST时确定的类型被分割成形成汇编件的模块。可配置所使用的不同模块的数量。例如,可为每一类型配置一模块,可为预定数量的类型配置一模块等等。在编译过程的不同阶段期间,每一模块可并行地编译。由于不同的模块被(例如,并行地)编译,因此来自不同模块的编译器的信息(例如,编译器元数据)可被写入存储库,诸如存储库170 (例如,数据库)。编译器元数据可被写入文件和/或存储器位置。在源代码的编译过程的不同阶段期间的并行计算期间,可通过不同的线程访问存储库。在流经编译流水线之后,经丰富的AST中的每一个AST被用于代码生成,其中它们被变换成目标语言(例如,可在硬件上执行的代码流)。然后,可执行代码被存储为汇编件160的一部分。代码的存储也可并行地执行。如所示系统100包括各自包含一个或多个处理器(例如,处理器1-N)的计算设备115。编译管理器26可管理不同编译线程并将其分配到可用处理器。通常,源代码的编译速度由可用硬件资源(例如,多个可用处理器(1-N))确定。编译管理器26可以是代码开发系统和/或其他系统/服务的一部分。以下提供更多的细节。图2示出了用于并行地编译源代码的流水线。如所示,图2包括源代码文件205、解析器210、AST 215、分割器20、N个途径230、以及存储240。解析器210访问源代码205 ( 一个或多个文件)并生成抽象句法树(AST)。AST包括与程序结构相关的信息。例如,解析器210可以是分析源代码205、确定所定义的类型中的每一种类型、并且生成相应的AST的自下而上(bottom up)的解析器。AST的生成可并行地执行。例如,可创建处理器以并行地解析每一源代码文件。在生成AST 215之后,分割器220将所确定的类型/类分割成各自可独立且并行地处理的不同模块。可配置和/或自动地确定所使用的不同模块的数量(例如,使用与可用处理资源相关的信息)。一种或多种类型/类可与一模块相关联。源代码205可定义大量类型/类(例如,10,000、20,000、30,000、…),而其他源代码205可定义较小数量的类(例如,10、20、100)。所选择的模块的数量可取决于各种因素/条件(例如,可用过程、所确定类型的数量、可用存储器、…)。根据实施例,这些类型由分割器220基于类型名进行分害J。例如,具有相同的前X个字母的类型被分割成相同的模块。类名可被散列并且使用散列来分割。可基于标识符、类型等分割类。通常,将名称唯一地映射到模块的任何方法可用于在模块之间分割这些类型。流水线230可包括取决于编译过程的每一不同编译线程的任意数量的途径。流水线内的每一当前第本文档来自技高网...

【技术保护点】
一种用于并行地编译源代码的方法,包括:访问所述源代码;标识包含在所述源代码内的类型;将所述类型分割成形成汇编件的不同模块;对所述不同模块中的每一个模块执行编译,所述编译并行地执行;以及生成所述模块中的每一个模块的可执行代码。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:P·弗拉德森G·普兰卡特T·杜塔
申请(专利权)人:微软技术许可有限责任公司
类型:发明
国别省市:美国;US

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

1