CN105308565A - 深度并行的源代码编译 - Google Patents
深度并行的源代码编译 Download PDFInfo
- Publication number
- CN105308565A CN105308565A CN201480031172.3A CN201480031172A CN105308565A CN 105308565 A CN105308565 A CN 105308565A CN 201480031172 A CN201480031172 A CN 201480031172A CN 105308565 A CN105308565 A CN 105308565A
- Authority
- CN
- China
- Prior art keywords
- module
- source code
- type
- compiling
- compile
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
- G06F8/437—Type checking
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
使用包括与程序结构相关的信息的编程语言的源代码来生成抽象句法树(AST)。可并行地执行AST的生成。这些类型被分割成形成汇编件的多个(例如,可配置的)模块。在编译过程的不同阶段期间,可并行地编译每一模块。由于不同的模块(例如,并行地)编译,因此来自不同模块的编译器元数据可被写入可通过不同编译过程访问的存储库。在流经编译流水线之后,经丰富的AST中的每一个AST都用于代码生成,其中它们被变换成目标语言(例如,可在硬件上执行的代码流)。可执行代码接着被存储为汇编件的一部分。代码的存储还可并行地执行。
Description
背景
编译器被用于在计算设备上执行之前,将以更高级的编程语言编写的源代码转换成更低级的语言。例如,可编译使用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++、VISUALBASIC、VISUALBASIC.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、AST215、分割器20、N个途径230、以及存储240。
解析器210访问源代码205(一个或多个文件)并生成抽象句法树(AST)。AST包括与程序结构相关的信息。例如,解析器210可以是分析源代码205、确定所定义的类型中的每一种类型、并且生成相应的AST的自下而上(bottomup)的解析器。AST的生成可并行地执行。例如,可创建处理器以并行地解析每一源代码文件。
在生成AST215之后,分割器220将所确定的类型/类分割成各自可独立且并行地处理的不同模块。可配置和/或自动地确定所使用的不同模块的数量(例如,使用与可用处理资源相关的信息)。一种或多种类型/类可与一模块相关联。源代码205可定义大量类型/类(例如,10,000、20,000、30,000、…),而其他源代码205可定义较小数量的类(例如,10、20、100)。所选择的模块的数量可取决于各种因素/条件(例如,可用过程、所确定类型的数量、可用存储器、…)。根据实施例,这些类型由分割器220基于类型名进行分割。例如,具有相同的前x个字母的类型被分割成相同的模块。类名可被散列并且使用散列来分割。可基于标识符、类型等分割类。通常,将名称唯一地映射到模块的任何方法可用于在模块之间分割这些类型。
流水线230可包括取决于编译过程的每一不同编译线程的任意数量的途径。流水线内的每一途径可按需提取信息,或者修改进入下一途径的代码,或者以其他方式丰富AST。该上下文中的途径是通过应用某一规则或者通过修改该规则对源代码采取行动的实体。例如,一个途径可定义方法,另一途径可定义传承,并且另一途径可生成代码。根据实施例,每一模块表示与其他流水线处理并行运行的流水线。
在生成可执行代码之后,该可执行代码被存储在存储240中。可执行代码的存储可并行地发生。根据一实施例,可执行代码定义模块,这些模块定义与应用相关联的.NET汇编件。
图3示出了来自编译过程的示例性阶段的示例。
如所示,图3示出了四个示例性阶段。
阶段1解说了遍历AST中的类型以确定不同的类。在当前示例中,阶段1示出了在最初生成AST时确定的示例类名。在阶段2之前,(例如,根据类名和/或使用某一其他方法确定)不同的类被分割成不同的模块。
阶段2示出了延伸AST以包括更多的信息,诸如遍历定义传承、参数、构造器、元数据等的方法中的每一种方法。
阶段3解说了遍历主体(例如,这些方法中的陈述和表达)、以及生成包括呼叫阶段2中所定义的方法的代码。
阶段4示出了将这些模块中的每一个模块保存到文件。在阶段4期间,可执行代码被写入模块(例如,.NET模块)并且被存储在存储设备和/或存储器上。可并行地执行阶段4。
如可见的,通过编译流水线的每一途径添加更多的信息。
图4解说了在编译阶段内的不同阶段使用并行计算的编译过程。在阅读本文中给出的例程的讨论时,应该理解,各个实施例的逻辑操作被实现为:(1)一系列运行于计算系统上的计算机实现的动作或程序模块;和/或(2)计算系统内的互连的机器逻辑电路或电路模块。这种实现是取决于实现本发明的计算系统的性能需求的选择问题。因此,所例示并构成本文中描述的实施例的逻辑操作被不同地称为操作、结构设备、动作或模块。这些操作、结构设备、动作和模块可以用软件、固件、专用数字逻辑,以及其任何组合来实现。然操作是以特定次序示出,但是操作的次序可以根据实施方式而改变并以其他次序来执行。
在启动操作之后,该过程移动到操作410,在操作410中访问源代码。源代码可被包括在一个或多个文件中,并且使用一种或多种编程语言进行编写。例如,可使用C、C++、C#、X++、VISUALBASIC、VISUALBASIC.NET等编写源代码。根据实施例,以X++编写源代码。
流动到操作420,标识包含在源代码内的类型。例如,解析器可生成可遍历以标识不同类型中的每一种类型的抽象句法树(AST)。
转变到操作430,在不同的模块之间分割这些类型。可配置所使用的不同模块的数量。所选择的模块的数量可取决于各种因素/条件(例如,可用过程、所确定类型的数量、可用存储器、…)。例如,可确定源代码中的多个所定义类,并将其在与多个可用处理器相对应的固定数量的模块之间进行分割。
流动到操作440,基于分割过程,使用不同的线程来执行编译流水线中的编译途径。根据实施例,为每一所创建模块创建一线程,并且该线程与其他模块的处理并行地运行。在编译过程期间,编译错误被诊断,并且可被呈现给用户。随着编译进行,编译器元数据被写入可通过其他线程访问的存储库和/或存储器。编译流水线的最后一个阶段生成该模块的可执行代码。
转变到操作450,这些模块被存储。例如,可为处理的每一模块创建一文件。根据实施例,每一模块是形成与应用相关联的汇编件的.NET模块。这些模块的存储也可并行地发生。
随后该过程移至结束操作并返回以处理其它动作。
图5解说了使用深度并行的源代码编译的示例性在线系统。如所示,系统1000包括服务1010、数据存储1045、模块/汇编件1046、触摸屏输入设备1050(例如,板式机)、智能电话1030、以及显示设备1080。
如所示,服务1010是基于云的和/或基于企业的服务,它可被配置为提供各种服务,如与各种应用(例如搜索、游戏、浏览、定位、生产力服务(例如电子表格、文档、演示、图标、消息等等))交互的某种其他基于云的/在线服务)相关的多模态服务。该服务可以使用不同类型的输入/输出来交互。例如,用户可使用语音输入、触摸输入、基于硬件的输入等等。服务可提供将预录制的语音与合成的语音相组合的语音输出。服务1010提供的服务/应用中的一个或多个服务/应用的功能也可被配置为基于客户端/服务器的应用。
如所示,服务1010是向任何数目的租户(例如,租户1-N)提供资源1015和服务的多租户服务。多租户服务1010是向订阅该服务的租户提供资源/服务1015并分别地维护每个租户的数据且保护其不受其他租户数据的影响的基于云的服务。
如所示的系统1000包括检测触摸输入何时被接收到(如手指触摸或接近触摸触摸屏)的触摸屏输入设备/显示器1050(如板式/平板设备)以及智能电话1030。可利用检测用户的触摸输入的任何类型的触摸屏。例如,触摸屏可包括一层或多层检测触摸输入的电容性材料。除了电容性材料之外或代替电容性材料,可使用其他传感器。例如,可使用红外(IR)传感器。根据一实施例,触摸屏被配置成检测与可触摸的表面接触或位于可触摸的表面上方的对象。尽管在本说明书中使用术语“上方”,应理解,触摸面板系统的定向是不相关的。术语“上方”旨在可适用于所有这样的定向。触摸屏可被配置成确定触摸输入被接收的位置(如起点、中间点和终点)。可通过任何合适的手段,包括如耦合到触摸面板的振动传感器或话筒,来检测可触摸的表面和物体之间的实际接触。用于检测接触的传感器的示例的非穷尽列表包括:基于压力的机构、微机械加速度计、压电器件、电容传感器、电阻传感器、感应传感器、激光振动计和LED振动计。
根据实施例,智能电话1030、触摸屏输入设备1050、以及设备1080被配置有多模式输入/输出,并且各自包括应用(1031、1051、1081)。
如所示,触摸屏输入设备1050、智能电话1030、以及显示设备1080示出示例性显示1052/1032/1082,这些示例性显示示出了对使用多模式输入/输出的应用的使用。数据可被存储在设备(如智能电话1030、平板1050)上和/或某一其他位置(如网络数据存储1045)处。数据存储1045或某一其他存储可用于存储源代码以及其他数据。设备所使用的应用可以是基于客户端的应用、基于服务器的应用、基于云的应用和/或某种组合。根据一实施例,显示设备1080是诸如耦合到显示器的MICROSOFTXBOX之类的设备。
编译管理器26被配置成执行与如本文中所描述的源代码的并行计算相关的操作。例如,可使用如本文中所描述的编译管理器26来编译应用1031、1051、1081。尽管管理器26被示为在服务1010内,但是管理器的功能可被包括在其他位置中(例如,在智能电话1030和/或板式设备1050和/或设备1080上)。
本文描述的实施例和功能可通过多种计算系统来操作,包括但不限于台式计算机系统、有线和无线计算系统、移动计算系统(如移动电话、上网本、图形输入板或平板型计算机、笔记本计算机、和膝上型计算机)、手持设备、多处理器系统、基于微处理器或可编程消费电子产品、小型计算机、以及大型计算机。
此外,本文所述的实施例和功能性可在分布式系统(如基于云的计算系统)上操作,其中应用功能性、存储器、数据存储和检索、以及各种处理功能可在诸如因特网或内联网之类的分布式计算网络上彼此远程地操作。各种类型的用户界面和信息可经板载计算设备显示器或经与一个或多个计算设备相关联的远程显示单元被显示。例如,各种类型的用户界面和信息可在墙壁表面上被显示和交互,各种类型的用户界面和信息被投射在墙壁表面上。与可用于实施本发明的各实施例的许多计算系统的交互包括:键击输入、触摸屏输入、语音或其他音频输入、手势输入(其中相关联的计算设备配备有用于捕捉和解释用于控制计算设备的功能性的用户手势的检测(如相机)功能性)等。
图6-8以及相关联描述提供了其中可实施本发明的实施例的各种操作环境的讨论。然而,关于图6-8所示出和讨论的设备和系统是用于示例和说明的目的,而非对可被用于实施本文所述的本发明的各实施例的大量计算设备配置的限制。
图6是示出可用来实施本发明的各实施例的计算设备1100的物理组件(即硬件)的框图。下面描述的计算设备组件可适用于上述的计算设备。在基本配置中,计算设备1100可包括至少一个处理单元1102和系统存储器1104。取决于计算设备的配置和类型,系统存储器1104可包括,但不限于,易失性存储(例如,随机存取存储器)、非易失性存储(例如,只读存储器)、闪存、或这些存储器的任何组合。系统存储器1104可包括操作系统1105以及适用于运行软件应用1120(诸如编译管理器26)的一个或多个程序模块1106。操作系统1105例如可适合于控制计算设备1100的操作。此外,本发明的实施例可结合图形库、其他操作系统、或任何其他应用程序来实践,并且不限于任何特定应用或系统。该基本配置在图6中由虚线1108内的那些组件例示出。计算设备1100可具有附加特征或功能。例如,计算设备1100还可以包括诸如例如磁盘、光盘或磁带之类的附加数据存储设备(可移动和/或不可移动)。这些附加存储在图6中由可移动存储设备1109和不可移动存储设备1110例示出。
如上所声明的,可在系统存储器1104中存储多个程序模块和数据文件。尽管在处理单元1102上执行,但是程序模块1106(例如,模型管理器26)可以执行包括但不限于下列过程:附图中所示的方法和过程的阶段中的一个或多个。根据本发明的实施例可使用的其他程序模块可包括电子邮件和联系人应用、字处理应用、电子表格应用、数据库应用、幻灯片演示应用、绘图或计算机辅助应用等。
此外,本发明的实施例可在包括分立电子元件的电子电路、包含逻辑门的封装或集成电子芯片、利用微处理器的电路、或在包含电子元件或微处理器的单个芯片上实践。例如,可以通过片上系统(SOC)来实践本发明的各实施例,其中,可以将图6中所例示出的每个或许多组件集成到单个集成电路上。这样的SOC设备可包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元以及各种应用功能性,所有这些都作为单个集成电路被集成到(或“烧录到”)芯片基板上。当通过SOC操作时,在此所述的关于模型管理器26的功能可以通过在单个集成电路(芯片)上集成有计算设备/系统1100的其它组件的专用逻辑来操作。本发明的实施例还可使用能够执行诸如例如,AND(与)、OR(或)和NOT(非)的逻辑运算的其他技术来实践,包括但不限于,机械、光学、流体和量子技术。另外,本发明的实施例可在通用计算机或任何其他电路或系统中实践。
计算设备1100也可具有一个或多个输入设备1112,如键盘、鼠标、笔、语音输入设备、触摸输入设备等等。也可包括输出设备1114,如显示器、扬声器、打印机等等。上述设备是示例,并且可使用其他设备。计算设备1100可包括允许与其他计算设备1118进行通信的一个或多个通信连接1116。合适的通信连接1116的示例包括但不限于RF发射机、接收机和/或收发机电路;通用串行总线(USB)、并行和/或串行端口。
本文所使用的术语计算机可读介质可包括计算机存储介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构或程序模块这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。系统存储器1104、可移动存储设备1109和不可移动存储设备1110都是计算机存储介质(即,存储器存储)的示例。计算机存储介质可以包括RAM、ROM、电可擦除只读存储器(EEPROM)、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或可用于存储信息且可以由计算机设备1100访问的任何其他制造品。任何这样的计算机存储介质都可以是计算设备1100的一部分。计算机存储介质不包括载波或其他传播或已调数据信号。
通信介质由诸如载波或其他传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其他数据来体现,并包括任何信息传递介质。术语“已调制数据信号”可以描述以对该信号中的信息进行编码的方式设定或者改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接等有线介质,以及诸如声学、射频(RF)、红外线和其他无线介质等无线介质。
图7A和7B示出可用来实施本发明的各实施例的移动计算设备1200,例如移动电话、智能手机、平板个人计算机、膝上型计算机等。参考图7A,示出了用于实现各实施例的移动计算设备1200的一个实施例。在一基本配置中,移动计算设备1200是具有输入元件和输出元件两者的手持式计算机。移动计算设备1200通常包括显示器1205以及允许用户将信息输入到移动计算设备1200中的一个或多个输入按钮1210。移动计算设备1200的显示器1205也可充当输入设备(如触摸屏显示器)。如果包括,则可任选的侧输入元件1215允许进一步的用户输入。侧输入元件1215可以是旋转开关、按钮、或任何其他类型的手动输入元件。在替代实施例中,移动计算设备1200可结合更多或更少的输入元件。例如,在某些实施例中,显示器1205可以不是触摸屏。在又一替代实施例中,移动计算设备1200是诸如蜂窝电话之类的便携式电话系统。移动计算设备1200还可包括可选的小键盘1235。可选的小键盘1235可以是物理小键盘或者在触摸屏显示器上生成的“软”小键盘。在各个实施例中,输出元件包括用于显示图形用户界面(GUI)的显示器1205、可视指示器1220(如发光二极管)、和/或音频换能器1225(如扬声器)。在某些实施例中,移动计算设备1200结合振动换能器来向用户提供触觉反馈。在又一实施例中,移动计算设备1200结合诸如音频输入(如传声器插孔)、音频输出(如耳机插孔)、以及视频输出(如HDMI端口)之类的输入和/或输出端口,用于将信号发送到外部设备或从外部设备接收信号。
图7B是例示出移动计算设备的一个实施例的架构的框图。即,移动计算设备1200可结合系统(即架构)1202以实现某些实施例。在一个实施例中,系统1202被实现为能够运行一个或多个应用(如浏览器、电子邮件、日历、联系人管理器、消息收发客户端、游戏、以及媒体客户端/播放器)的“智能电话”。在某些实施例中,系统1202被集成为计算设备,诸如集成的个人数字助理(PDA)和无线电话。
一个或多个应用程序1266可被加载到存储器1262中并在操作系统1264上或与操作系统964相关联地运行。应用程序的示例包括电话拨号程序、电子邮件程序、个人信息管理(PIM)程序、文字处理程序、电子表格程序、因特网浏览器程序、消息通信程序等等。系统1202还包括存储器1262内的非易失性存储区1268。非易失性存储区1268可被用于存储在系统1202断电的情况下不会丢失的持久信息。应用程序1266可使用信息并将信息存储在非易失性存储区1268中,如电子邮件应用使用的电子邮件或其他消息等。同步应用(未示出)也驻留于系统1202上且被编程为与驻留在主机计算机上的对应的同步应用交互,以保持非易失性存储区1268中存储的信息与主机计算机处存储的相应信息同步。如应当理解的,其他应用可被加载到存储器1262中,并且在移动计算设备1200(包括如本文中所描述的编译管理器26)上运行。
系统1202具有可被实现为一个或多个电池的电源1270。电源1270还可包括外部功率源,如补充电池或对电池充电的AC适配器或加电对接托架。
系统1202还可包括执行发射和接收无线电频率通信的功能的无线电1272。无线电1272便于经由通信载波或服务提供者在系统1202和“外部世界”之间的无线连接。来往无线电1272的传输是在操作系统1264的控制下进行的。换言之,无线电1272接收的通信可通过操作系统1264传播到应用程序1266,反之亦然。
可以使用可视指示器1220来提供可视通知,和/或可以使用音频接口1274来经由音频换能器1225产生可听通知。在所示实施例中,可视指示符1220是发光二极管(LED),而音频换能器1225是扬声器。这些设备可直接耦合到电源1270,使得当被激活时,即使为了节省电池功率而可能关闭处理器1260和其它组件,它们也保留一段由通知机制指示的保持通电时间。LED可被编程为无限地保持通电,直到用户采取动作指示该设备的通电状态。音频接口1274用于向用户提供听觉信号并从用户接收听觉信号。例如,除了被耦合到音频换能器1225之外,音频接口1274还可被耦合到话筒来接收可听输入,例如便于电话通话。根据各本发明的各实施例,话筒也可充当音频传感器来便于对通知的控制,如下文将描述的。系统1202可进一步包括允许板载相机1230的操作来记录静止图像、视频流等的视频接口1276。
实现系统1200的移动计算设备1202可具有附加特征或功能。例如,移动计算设备1200还可包括附加数据存储设备(可移动和/或不可移动),例如磁盘、光盘或磁带。这种附加存储在图7B中用非易失性存储区1268示出。
由移动计算设备1200生成或捕捉的且经系统1202存储的数据/信息可如上所述被本地存储在移动计算设备1200上,或数据可被存储在可由设备通过无线电1272或通过移动计算设备1200和与移动计算设备1200相关联的一分开的计算设备之间的有线连接访问的任何数量的存储介质上,该计算设备如例如因特网之类的分布式计算网络中的服务器计算机。如应理解的,此类数据/信息可经移动计算设备1200、经无线电1272或经分布式计算网络来被访问。类似地,这些数据/信息可根据已知的数据/信息传送和存储手段来容易地在计算设备之间传送以存储和使用,这些手段包括电子邮件和协作数据/信息共享系统。
图8解说了如上所述的用于编译源代码的系统的架构的实施例。与编译管理器26相关联地开发、与其交互、或者与其相关联地编辑的内容可被存储在不同的通信信道或者其他存储类型中。例如,各种文档可使用目录服务1322、web门户1324、邮箱服务1326、即时消息收发存储1328或社交联网站点1330来存储。编译管理器26可使用这些类型的系统中的任一种类型的系统或相似的系统来实现数据利用,如本文中所描述的。服务器1320可将编译管理器26提供给客户端。作为一个示例,服务器1320可以是在web上提供编译管理器26的web服务器。服务器1320可通过网络1315在web上将编译管理器26提供给客户端。作为示例,客户端计算设备可被实现为计算设备1100并体现为个人计算机、平板计算设备1310和/或移动计算设备1200(如智能电话)中。客户端计算设备1100、1310、1200的这些实施例中的任一个可从存储1316获得内容。
以上参考例如根据本发明的各实施方式的方法、系统和计算机程序产品的框图和/或操作图示描述了本发明的各实施方式。框中所注明的各功能/动作可以按不同于任何流程图所示的次序出现。例如,取决于所涉及的功能/动作,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以按相反的次序来执行。
本申请中提供的一个或多个实施例的描述和说明不旨在以任何方式限制或约束如权利要求所要求保护的发明范围。本申请中提供的实施例、示例和细节被认为是足以传达所有权,且使得他人能够制作并使用所要求保护的发明的最佳模式。所要求保护的发明不应被理解为限制于本申请中所提供的任何实施例、示例或细节。不管是以组合的方式还是分开的方式示出和描述,各种特征(结构上的和方法逻辑上的)旨在被选择性地包括或忽略,以产生具有特定的特征集的实施例。在被提供本申请的描述和说明的情况下,本领域的技术人员能够想象到落在所要求保护的发明的更宽泛方面以及本申请中所具体化的一般发明概念的精神内的替代实施例并不背离该更宽泛的范围。
Claims (10)
1.一种用于并行地编译源代码的方法,包括:
访问所述源代码;
标识包含在所述源代码内的类型;
将所述类型分割成形成汇编件的不同模块;
对所述不同模块中的每一个模块执行编译,所述编译并行地执行;以及
生成所述模块中的每一个模块的可执行代码。
2.根据权利要求1所述的方法,其特征在于,进一步包括:通过解析所述源代码来生成抽象句法树(AST)。
3.根据权利要求1所述的方法,其特征在于,每一模块是作为.NET框架的一部分的所述汇编件的独立分部。
4.根据权利要求1所述的方法,其特征在于,标识包含在所述源代码内的类型并行地发生。
5.根据权利要求1所述的方法,其特征在于,将所述类型分割成形成汇编件的不同模块包括:部分地基于可用于编译的多个处理器确定要在其间分割所述类型的多个模块。
6.一种存储用于并行地编译源代码的计算机可执行指令的计算机可读介质,包括:
访问所述源代码;
标识包含在所述源代码内的类型中的每一种类型;
将所述类型分割成形成汇编件的不同模块;
对所述不同模块中的每一个模块执行编译,所述编译并行地执行;以及
使用不同的处理线程来存储在所述编译期间生成的模块中的每一个模块的可执行代码。
7.一种用于并行地编译源代码的系统,包括:
处理器和存储器;
使用所述处理器执行的操作环境;以及
被配置成执行动作的编译管理器,所述动作包括:
访问所述源代码;
标识包含在所述源代码内的类型中的每一种类型;
将所述类型分割成形成汇编件的不同模块;
对所述不同模块中的每一个模块执行编译,所述编译并行地执行;以及
使用不同的处理线程来存储在所述编译期间生成的模块中的每一个模块的可执行代码。
8.根据权利要求7所述的系统,其特征在于,将所述类型分割成形成汇编件的不同模块包括:确定要存储所述类型的多个模块;以及至少部分地基于可用于编译的多个处理器将所述类型分割成所述多个模块。
9.根据权利要求7所述的系统,其特征在于,对所述不同模块中的每一个模块执行编译包括:将每一模块与单独的处理线程相关联,并存储并行发生的可执行代码。
10.根据权利要求7所述的系统,其特征在于,对所述不同模块中的每一个模块执行编译包括:在所述编译的途径期间丰富AST。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/907,709 US9760346B2 (en) | 2013-05-31 | 2013-05-31 | Deeply parallel source code compilation |
US13/907,709 | 2013-05-31 | ||
PCT/US2014/039643 WO2014193869A1 (en) | 2013-05-31 | 2014-05-28 | Deeply parallel source code compilation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105308565A true CN105308565A (zh) | 2016-02-03 |
CN105308565B CN105308565B (zh) | 2019-04-02 |
Family
ID=51023109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480031172.3A Active CN105308565B (zh) | 2013-05-31 | 2014-05-28 | 深度并行的源代码编译 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9760346B2 (zh) |
EP (1) | EP3005105B1 (zh) |
CN (1) | CN105308565B (zh) |
WO (1) | WO2014193869A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109344074A (zh) * | 2018-10-19 | 2019-02-15 | 中国银行股份有限公司 | 一种跨平台自动化测试方法及系统 |
CN110187885A (zh) * | 2019-06-10 | 2019-08-30 | 合肥本源量子计算科技有限责任公司 | 一种量子程序编译的中间代码生成方法及装置 |
CN110520857A (zh) * | 2017-04-17 | 2019-11-29 | 微软技术许可有限责任公司 | 使用虚拟化数据迭代器对神经网络进行数据处理性能增强 |
CN111596923A (zh) * | 2020-05-21 | 2020-08-28 | 广东三维家信息科技有限公司 | Haxe静态链接库构建方法、装置和电子设备 |
CN112003827A (zh) * | 2020-07-27 | 2020-11-27 | 山东英信计算机技术有限公司 | 一种基于并行计算的可配置的Redfish服务解析方法及系统 |
CN113287114A (zh) * | 2019-01-14 | 2021-08-20 | 微软技术许可有限责任公司 | 针对以同步数字电路为目标的编程语言的查找表优化 |
CN113791770A (zh) * | 2021-11-15 | 2021-12-14 | 北京壁仞科技开发有限公司 | 代码编译器、代码编译方法、代码编译系统和计算机介质 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9619215B2 (en) * | 2014-11-26 | 2017-04-11 | Sap Se | Pre-compiler |
US10089146B2 (en) * | 2016-03-31 | 2018-10-02 | International Business Machines Corporation | Workload balancing for storlet infrastructure |
JP6933012B2 (ja) * | 2017-06-14 | 2021-09-08 | 富士通株式会社 | 解析装置、解析プログラムおよび解析方法 |
US10768912B1 (en) * | 2019-02-15 | 2020-09-08 | Workday, Inc. | Platform class creation |
CN111078270B (zh) * | 2019-11-20 | 2021-02-19 | 北京国舜科技股份有限公司 | 应用安全管控方法、装置、电子设备及存储介质 |
CN111610977B (zh) * | 2020-05-19 | 2024-06-25 | 腾讯科技(深圳)有限公司 | 一种编译方法和相关装置 |
AU2021297161B2 (en) * | 2020-06-25 | 2024-01-25 | Paypal, Inc. | Fast compiling source code without dependencies |
US11847035B2 (en) * | 2021-08-23 | 2023-12-19 | International Business Machines Corporation | Functional test of processor code modification operations |
KR20230041444A (ko) | 2021-09-17 | 2023-03-24 | 삼성전자주식회사 | 뉴럴 네트워크를 위한 컴파일 방법 및 장치 |
CN115495095B (zh) * | 2022-11-18 | 2023-03-21 | 上海燧原科技有限公司 | 张量程序的整程序编译方法、装置、设备、介质及集群 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01108638A (ja) * | 1987-10-21 | 1989-04-25 | Hitachi Ltd | 並列化コンパイル方式 |
CN1499369A (zh) * | 2002-10-24 | 2004-05-26 | �Ҵ���˾ | 用于在不同种类的体系结构中创建和执行集成可执行程序的方法和装置 |
CN1591325A (zh) * | 2003-08-29 | 2005-03-09 | 松下电器产业株式会社 | 计算机系统、编译器装置以及操作系统 |
US20050102649A1 (en) * | 2003-11-12 | 2005-05-12 | Hogg James H. | Strategy for referencing code resources |
CN1645328A (zh) * | 2001-09-20 | 2005-07-27 | 松下电器产业株式会社 | 编译装置及编译方法 |
CN1853165A (zh) * | 2003-09-30 | 2006-10-25 | 英特尔公司 | 用于多线程的编译器创建辅助线程的方法和装置 |
US20090007065A1 (en) * | 2007-06-29 | 2009-01-01 | Alcatel-Lucent | Logging system and method for computer software |
CN101599009A (zh) * | 2009-04-30 | 2009-12-09 | 浪潮电子信息产业股份有限公司 | 一种异构多处理器上并行执行任务的方法 |
US20100088665A1 (en) * | 2008-10-03 | 2010-04-08 | Microsoft Corporation | Tree-based directed graph programming structures for a declarative programming language |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5276880A (en) * | 1989-12-15 | 1994-01-04 | Siemens Corporate Research, Inc. | Method for parsing and representing multi-versioned computer programs, for simultaneous and synchronous processing of the plural parses |
US6061513A (en) * | 1997-08-18 | 2000-05-09 | Scandura; Joseph M. | Automated methods for constructing language specific systems for reverse engineering source code into abstract syntax trees with attributes in a form that can more easily be displayed, understood and/or modified |
US7089541B2 (en) * | 2001-11-30 | 2006-08-08 | Sun Microsystems, Inc. | Modular parser architecture with mini parsers |
EP2256622A1 (en) * | 2002-02-07 | 2010-12-01 | Sap Ag | Method and apparatus for parallel distributed compilation |
EP1527390A2 (en) * | 2002-07-25 | 2005-05-04 | Koninklijke Philips Electronics N.V. | Source-to-source partitioning compilation |
US7512936B2 (en) * | 2004-12-17 | 2009-03-31 | Sap Aktiengesellschaft | Code diversification |
US8302080B2 (en) * | 2007-11-08 | 2012-10-30 | Ntt Docomo, Inc. | Automated test input generation for web applications |
US8495603B2 (en) * | 2008-08-11 | 2013-07-23 | International Business Machines Corporation | Generating an executable version of an application using a distributed compiler operating on a plurality of compute nodes |
WO2012081024A1 (en) * | 2010-12-16 | 2012-06-21 | Eyal Ben-Avraham | System and method for optimizing parallel compilation of a source code |
US8869125B2 (en) * | 2011-12-27 | 2014-10-21 | Infosys Limited | Systems and methods for demarcating information related to one or more blocks in an application |
US9635441B2 (en) * | 2013-03-06 | 2017-04-25 | Itron, Inc. | Information retrieval for service point channels |
-
2013
- 2013-05-31 US US13/907,709 patent/US9760346B2/en active Active
-
2014
- 2014-05-28 WO PCT/US2014/039643 patent/WO2014193869A1/en active Application Filing
- 2014-05-28 CN CN201480031172.3A patent/CN105308565B/zh active Active
- 2014-05-28 EP EP14733845.3A patent/EP3005105B1/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01108638A (ja) * | 1987-10-21 | 1989-04-25 | Hitachi Ltd | 並列化コンパイル方式 |
CN1645328A (zh) * | 2001-09-20 | 2005-07-27 | 松下电器产业株式会社 | 编译装置及编译方法 |
CN1499369A (zh) * | 2002-10-24 | 2004-05-26 | �Ҵ���˾ | 用于在不同种类的体系结构中创建和执行集成可执行程序的方法和装置 |
CN1591325A (zh) * | 2003-08-29 | 2005-03-09 | 松下电器产业株式会社 | 计算机系统、编译器装置以及操作系统 |
CN1853165A (zh) * | 2003-09-30 | 2006-10-25 | 英特尔公司 | 用于多线程的编译器创建辅助线程的方法和装置 |
US20050102649A1 (en) * | 2003-11-12 | 2005-05-12 | Hogg James H. | Strategy for referencing code resources |
US20090007065A1 (en) * | 2007-06-29 | 2009-01-01 | Alcatel-Lucent | Logging system and method for computer software |
US20100088665A1 (en) * | 2008-10-03 | 2010-04-08 | Microsoft Corporation | Tree-based directed graph programming structures for a declarative programming language |
CN101599009A (zh) * | 2009-04-30 | 2009-12-09 | 浪潮电子信息产业股份有限公司 | 一种异构多处理器上并行执行任务的方法 |
Non-Patent Citations (2)
Title |
---|
DEEPA V.KOMATHUKATTIL等: "Evaluating Speedup in Parallel Compilers", 《UNF DIGITAL COMMONS》 * |
THOMAS GROSS等: "Parallel Compilation for a Parallel Machine", 《ACM SIGPLAN 1989 CONFERENCE》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110520857A (zh) * | 2017-04-17 | 2019-11-29 | 微软技术许可有限责任公司 | 使用虚拟化数据迭代器对神经网络进行数据处理性能增强 |
CN109344074A (zh) * | 2018-10-19 | 2019-02-15 | 中国银行股份有限公司 | 一种跨平台自动化测试方法及系统 |
CN113287114A (zh) * | 2019-01-14 | 2021-08-20 | 微软技术许可有限责任公司 | 针对以同步数字电路为目标的编程语言的查找表优化 |
CN110187885A (zh) * | 2019-06-10 | 2019-08-30 | 合肥本源量子计算科技有限责任公司 | 一种量子程序编译的中间代码生成方法及装置 |
CN111596923A (zh) * | 2020-05-21 | 2020-08-28 | 广东三维家信息科技有限公司 | Haxe静态链接库构建方法、装置和电子设备 |
CN111596923B (zh) * | 2020-05-21 | 2024-02-23 | 广东三维家信息科技有限公司 | Haxe静态链接库构建方法、装置和电子设备 |
CN112003827A (zh) * | 2020-07-27 | 2020-11-27 | 山东英信计算机技术有限公司 | 一种基于并行计算的可配置的Redfish服务解析方法及系统 |
CN113791770A (zh) * | 2021-11-15 | 2021-12-14 | 北京壁仞科技开发有限公司 | 代码编译器、代码编译方法、代码编译系统和计算机介质 |
CN113791770B (zh) * | 2021-11-15 | 2022-06-21 | 北京壁仞科技开发有限公司 | 代码编译器、代码编译方法、代码编译系统和计算机介质 |
Also Published As
Publication number | Publication date |
---|---|
US20140359587A1 (en) | 2014-12-04 |
EP3005105B1 (en) | 2020-10-28 |
EP3005105A1 (en) | 2016-04-13 |
WO2014193869A1 (en) | 2014-12-04 |
CN105308565B (zh) | 2019-04-02 |
US9760346B2 (en) | 2017-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105308565A (zh) | 深度并行的源代码编译 | |
CN105378817B (zh) | 将外部动态内容合并到白板中 | |
CN105493481B (zh) | 自动改变图形用户界面的显示的方法及系统 | |
CN105378624B (zh) | 在交互出现于白板上时显示交互 | |
KR102231733B1 (ko) | 환경 인식 다이얼로그 정책 및 응답 생성 | |
CN105378623B (zh) | 插入式动态内容预览窗格 | |
CN109937402B (zh) | 使用回调通知进行数据的出口和入口 | |
CN104937612A (zh) | 通过用户生成的知识进行协同学习 | |
CN107924679A (zh) | 输入理解处理期间在响应选择中的延迟绑定 | |
CN106104528A (zh) | 用于屏幕上项目选择和消歧的基于模型的方法 | |
CN104584003A (zh) | 词检测和域字典推荐 | |
CN104428749A (zh) | 由用户动作触发的可视ui向导 | |
CN110268431A (zh) | 对消息内容的搜索和过滤 | |
CN109154935A (zh) | 对用于任务完成的信息的智能捕获、存储和取回 | |
CN105229632A (zh) | 在提交文档中建议改变之前查看该改变的效果 | |
CN109690520A (zh) | 通过逻辑标记共享文档 | |
US10402647B2 (en) | Adapted user interface for surfacing contextual analysis of content | |
CN105190612A (zh) | 导航内容分层结构并持久保存内容项集合 | |
US20140350931A1 (en) | Language model trained using predicted queries from statistical machine translation | |
CN104081384A (zh) | 用于为在线文档提供计算web服务的系统和方法 | |
CN105493039A (zh) | 使用解耦的应用编程接口(api)版本化的应用激活 | |
CN106030572B (zh) | 与外部内容项的经编码的关联 | |
CN107111633A (zh) | 基于背景的保存位置的推断 | |
CN109416581A (zh) | 利用触觉反馈来增强文本叙述 | |
CN109952557A (zh) | 分层内容选择 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |