用于优化应用程序的并行构建的方法和系统的制作方法

文档序号:6489091阅读:201来源:国知局
用于优化应用程序的并行构建的方法和系统的制作方法
【专利摘要】公开了一种优化应用程序的并行构建的方法和系统以及使用其的编译系统和计算机系统。所述方法包括:在命令的并行执行中,记录命令顺序号及命令的访问信息;基于命令顺序号及命令的访问信息检测执行冲突;以及对执行冲突所涉及的命令进行重新执行。根据本发明的构建工具具有通用性、检测的成功率很高、便利性高且对于用户是完全透明的。
【专利说明】用于优化应用程序的并行构建的方法和系统
【技术领域】
[0001]本发明涉及计算机应用程序的编译,更具体地,涉及一种优化应用程序的并行构建的方法、系统以及使用该系统的编译系统和计算机系统。
【背景技术】
[0002]在当今世界,应用程序无处不在。小到计算机中的计算器程序,大到股票交易系统都是应用程序的一种。而在计算机程序的日常开发中,构建(build)扮演了重要角色。构建是指调用编译器去分析源代码,生成目标代码并生成二进制代码的整个过程。当构建大型应用程序(例如日常驱动程序)时,开发人员不得不等待一些时间。该等待时间有可能是数小时,也可能是数天。
[0003]当今,开发人员一般使用并行构建来缩短构建时。例如,gmake是Linux下的一款程序编译工具,配合makefile的使用,以对程序进行编译。Makefile是共享文件系统中的构建文件,它是应用程序的底层文件,在应用程序编写后伴随应用程序而存在。应用程序中各命令执行的顺序存储在makefile中。以gmake_4为例,gmake_4可以同时取4条指令并行执行。例如,gmake按照makefile中指令的执行顺序先取出4条命令并并行执行。当某一路的命令执行完毕后,再取出下一条命令在该路上执行,从而提高构建的效率。
[0004]但是,有时并行构建会出现一些问题。例如,在串行构建模式下应用程序的构建没有问题,而在并行构建时却不能成功完成构建。这种问题出现的原因例如是一些命令读/写同一个文件,但这种读/写关系是隐性的。因此gmake按照makefile中的命令顺序取出命令时很难发现,导致例如执行依赖前一命令对某文件的读/写的后一命令与前一命令并行执行,甚至在前一命令之前执行。当这种问题出现时,很难跟踪错误。开发人员往往要花很长时间来进行调查并消除问题。
[0005]为了对并行构建发生错误进行跟踪调试错误源,现有技术中已经针对不同厂商的并行构建工具开发出错误跟踪调试工具,但是这些工具不具有通用性,其中一些不能完全消除由于命令执行乱序弓I起的错误。

【发明内容】

[0006]本发明解决的一个问题是减少在命令的并行构建中由于具有对同一文件的读/写关系的命令执行乱序弓I起的错误。
[0007]根据本发明的一个方面,提供了一种优化应用程序的并行构建的方法,包括:在命令的并行执行中,记录命令顺序号及命令的访问信息;基于命令顺序号及命令的访问信息检测执行冲突;以及对执行冲突所涉及的命令进行重新执行。
[0008]根据本发明的另一个方面,提供了一种优化应用程序的并行构建的系统,包括:记录装置,被配置成在命令的并行执行中,记录命令顺序号及命令的访问信息;检测装置,被配置成基于命令顺序号及命令的访问信息检测执行冲突;以及重新执行装置,被配置成对执行冲突所涉及的命令进行重新执行。[0009]根据本发明的另一个方面,提供了一种编译系统,包括:编译器,被配置成编译应用程序;以及优化装置,被配置成使用上述系统来对所述编译器的编译进行优化。
[0010]根据本发明的另一个方面,还提供了一种计算机系统,包括:共享文件系统,被配置成并行构建应用程序;以及上述编译系统。
[0011]本发明的一个有益效果是,本发明的并行构建的优化方案可以适用于各个厂商的构建工具,具有通用性。
[0012]本发明的另一个有益效果是,由于根据文件系统在执行命令时获得的信息来检测命令执行冲突,因此检测的成功率很高。
[0013]本发明的再一个有益效果是,由于不再需要开发人员的对进行额外的跟踪调试,所以维护成本低而便利性高。
[0014]本发明的这种检测对于用户是完全透明的。
【专利附图】

【附图说明】
[0015]通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0016]图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。
[0017]图2示出了现有技术的并行构建中存在的问题。
[0018]图3示出了本发明的一个实施例的优化应用程序的并行构建的方法的流程图。
[0019]图4示出了本发明的一个实施例的检测命令执行冲突的过程的流程图。
[0020]图5示出了本发明的一个实施例的优化应用程序的并行构建的时序图。
[0021]图6示出了本发明的一个实施例的优化应用程序的并行构建的系统框图。
[0022]图7示出了使用了本发明的编译系统的框图。
[0023]图8示出了使用了本发明的计算机系统的框图。
【具体实施方式】
[0024]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0025]所属【技术领域】的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0026]可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0027]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0028]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0029]可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言一诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0030]下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0031]也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
[0032]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0033]图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0034]如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0035]总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
[0036]计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0037]系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如⑶-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
[0038]具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0039]计算机系统/服务器12也可以与一个或多个外部设备14 (例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口 22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0040]本发明的发明人注意到并行构建中错误的发生往往是由于要并行执行的命令中一些命令有依赖关系、重用临时文件、资源耗尽、串行工具等。图2示出了现有技术的并行构建中存在的问题。例如,在并行执行的命令A、B、C和D中有针对同一文件的读取操作和写入操作C和B。如果要求读取操作发生在写入操作之后,而在并行执行中,读取操作发生在写入操作之前,或与写入操作同时发生,那么这次并行执行就会出错。这种错误是程序开发人员所无法预见的,并且也难以跟踪调试。为了克服现有技术中的这些问题,发明人设想通过检测并行执行的命令中命令执行顺序和依赖关系不匹配的命令,然后再次顺序执行这些命令。由于命令之间的依赖关系(例如,对同一文件的读/写)不一定体现在makefile中,不实际执行很难检测。因此,本发明执行这些命令,并在执行命令的同时记录命令对于文件的访问信息,并据此发现命令的文件访问冲突,然后对与冲突有关的命令按照彼此的依赖关系,重新串行执行。此外,可以在顺序执行的同时,并行或串行地执行没有依赖关系的其它命令。
[0041]图3示出了本发明的优化应用程序的并行构建的方法的流程图。对于任何一个应用程序,开发人员都要编写代码,使用编译工具(例如,Linux的make和gmake, Solaris的GCC等)将程序代码编译成二进制的可执行文件。只有在具体的编译过程中,系统才能知道针对哪一个文件进行何种访问,读取还是写入操作。例如,当执行一个命令例如:Ptr=1caltime (O。该命令是要指针执行本地时间,只有在具体编译时,才能够知道本地时间是哪个文件,其访问应为读取。因此,只有对命令语句执行了一遍编译之后才能获得命令的访问信息。
[0042]现有技术已经提供了一些工具以供开发人员从文件系统获取相关信息。这些工具中的典型例子就是Windows系统的Hook工具。钩子(hook)是一种特殊的消息处理机制,钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。Windows事件消息中有本发明所需要的各种信息。
[0043]图3中的所述优化应用程序的并行构建的方法包括:步骤301在命令的并行执行中,记录命令顺序号及命令的访问信息;步骤303基于命令顺序号及命令的访问信息检测执行冲突;以及步骤305对执行冲突所涉及的命令进行重新执行。
[0044]在步骤301中,在命令的并行执行中,记录命令顺序号及命令的访问信息。可选地,还记录命令本身。如本领域技术人员所知的那样,make工具一般结合makefile使用。
[0045]根据本发明的一个实施例,可以通过利用make工具,而使得给makefile中的命令分配一个命令顺序号。这个命令顺序号给出了在串行执行时命令的执行顺序,也就是,在正确执行的情况下命令的调用顺序。
[0046]举例而言,一个常规的makefile可以如下所示:
[0047]Makefilel:
[0048]sed_i" s/adfd/asdf/" test, h //对 test, h 进行写操作
[0049]gcc “#include" test, h into test.c",,-〇 test2//将 test, h 读入
[0050]Η 到 test, c 头部并将 test, c 编译成 test, ο
[0051]通过使用本发明的一个实施例,以上文件变为:
[0052]Makefilel:
[0053]l、sed_i" s/adfd/asdf/" test, h //对 test, h 进行写操作
[0054]2、gcc “#include" test, h into test.c" ”_o test2//将 test, h
[0055]读入Il到test, c头部并将test, c编译成test, ο
[0056] 在并行执行的过程中,可以使用诸如以上所述的Hook之类的工具来截取文件系统为执行命令而发出的消息,从而获取命令顺序号及命令的访问信息。
[0057]例如,对于以上Makefile,其中包括2条并行执行的命令。命令顺序号是命令被发出给处理器以进行执行的顺序,例如分别为1、2。命令内容分别为“Sed-1〃S/adfd/asdf/"test.h,,、“gcc “#include"test.h into test.c"”-。test2,,。以上仅仅是不例,命令顺序号可以使用其它值。
[0058]命令的访问信息包括访问时间戳、访问文件ID以及访问类型。它们是按照与命令顺序号对应的方式记录的。命令的访问时间戳是指在命令被执行时的时间。虽然在并行执行中,若干个命令按照顺序被同时取出并执行,但其访问文件的时间未必是同时的,引起了有时命令顺序号在前的命令与命令顺序号在后的命令同时取出、但命令顺序号在后的命令反而先访问某一文件的乱序情形。例如对于命令“sed-1〃s/adfd/asdf/〃test.h”,其实际执行时间可能是12:01:23:26。
[0059]访问文件ID是指命令所针对的文件的标识号。例如对于命令“sed-1〃s/adfd/asdf/〃test.h”,其针对文件test, h进行操作,该test, h可能具有系统给其分配的标识ID:1D1345678432。
[0060]命令的访问类型指的是命令执行的操作是读取还是写入。
[0061]由上述可知,例如,在步骤301中获取的信息可以被记录如下(如果命令本身也记录的话):
[0062]1、sed-1"s/adfd/asdf/"test.h、12:01:23:26、1D1345678432、W
[0063]2、gcc “#include"test.h into test.c"”_o test2、12:01:23:24、1D1345678432、R
[0064]在步骤303中基于命令顺序号及命令的访问信息检测执行冲突。如前所述,命令执行冲突的发生一般是由于彼此有依赖关系的命令的执行顺序发生错乱。
[0065]图4示出了本发明的一个实施例的检测命令执行冲突的过程的流程图。
[0066]在步骤401中,根据所记录的访问信息中的访问文件ID,确定访问同一文件的多个命令。本领域技术人员应当知道,如果是针对不同文件的不同读写操作,则其彼此之间不存在依赖关系。往往语句的执行顺序需要到程序运行中才能确定。虽然现有技术中使用有向图来表现程序的各语句之间的不同依赖关系,但是这对于检测命令执行冲突是远远不够的。
[0067]本实施例使用在命令执行过程中获取的信息来检测依赖关系。还以Makefilel为例,根据文件ID可知,命令1、2都对ID为1D1345678432的文件进行了操作。那么,命令1、2之间可能存在依赖关系。
[0068]在步骤403中,如果基于记录的所述多个命令的访问类型,确定访问同一文件的多个命令只涉及读取操作,则确定不存在命令执行冲突。这是由于读取操作之间不存在彼此依赖关系。只有读写操作或写写操作之间才会由于操作顺序不同而导致不同的结果,从而这些操作结果依赖于其执行顺序。还以Makefilel为例,根据访问类型可知,命令1、2的操作包括读取和写入。从而确定命令1、2之间可能存在依赖关系。
[0069]在步骤405中,基于记录的所述多个命令的访问类型,确定访问同一文件的多个命令中的至少一个涉及写入操作,则根据记录的访问时间戳和命令顺序号,确定针对同一文件发生了执行冲突,如果发生了执行冲突,将与执行冲突有关的命令的命令顺序号和相应的命令放入重新执行列表中以便进行重新执行。
[0070]还以Makefilel为例,根据访问时间戳可知,命令1、2访问同一文件的顺序如下:
[0071]2、gcc test.c_o test, ο
[0072]1、gcc “#include"test.h into test.c"”_o test2
[0073]例如,通过比较文件访问顺序2、1和命令发出顺序1、2,确定命令执行顺序错误,即发生了命令执行冲突。[0074]还以Makefilel为例,可以确定将命令1、2放入重新执行列表中,例如:
[0075]re-execute list:
[0076]l、sed_i" s/adfd/asdf/" test, h
[0077]2、gcc “#include" test, h into test.c" ”_o test2
[0078]如果在命令的并行执行中记录了命令本身,则直接将记录的命令放入重新执行列表中。如果未记录,则需要根据命令顺序号重新在应用程序中查找相应命令,并放入重新执行列表中。
[0079]在步骤305中,对执行冲突所涉及的命令进行重新执行。可以将重新执行列表中的语句按照顺序提交给编译器以便串行执行,然后将执行结果提交给共享文件系统。这样确保了按照命令之间的依赖关系执行这些发生冲突的语句,从而确保不会发生错误。
[0080]在按照重新执行列表执行各个命令的同时,执行除与执行冲突有关的命令之外的其它命令。例如,使命令1、2与其它命令并行执行。可替换地,在按照重新执行列表执行各个命令之后,执行后续的除与执行冲突有关的命令之外的其它命令。例如,在执行完命令1、2之后,再执行其后续的命令。
[0081]此外,还可以使用调度算法对重新执行列表中的命令执行调度,以便进一步优化执行效率。现有技术中典型的重新调度算法是记分牌算法(scoreboard algorithm)。对一个文件的读/写比较简单,但如果涉及到多个文件的读/写且这些读/写操作之间的依赖关系更加复杂(例如,命令I向文件I写,命令2从文件I读,向文件2写,而命令I从文件2读),那么使用重新调度算法可以进一步提高处理效率。记分牌算法将所涉及的文件模拟为资源,也就是说,同一时刻只能对一个文件执行一个操作,而不能同时有两个操作。这确保了完成对一个文件的一个操作之后才对该文件执行下一操作。
[0082]图5是示出了根据本发明的一个实施例的优化应用程序的并行构建的时序图。
[0083]在步骤501,编译器解析好程序代码准备好进行编译。
[0084]在步骤503,发出命令。
[0085]在步骤505,按照常规方法执行命令。
[0086]在步骤507,根据在常规执行期间收集到的数据,检测冲突。
[0087]在步骤509,对与冲突相关的命令按照其依赖关系进行串行执行。
[0088]在步骤511,提交执行结果。
[0089]上文描述了本发明中的优化应用程序的并行构建的方法,下面将结合图6描述在同一发明构思下的优化应用程序的并行构建的系统,其中相同或相应的实现细节由于在上文中已经进行了详细和完整的描述,因此在下文中将不再进行赘述。
[0090]图6示出了本发明的一个实施例的优化应用程序的并行构建的系统600的框图。如图6所示,优化系统600包括记录装置601,被配置成在命令的并行执行中,记录命令顺序号及命令的访问信息;检测装置603,被配置成基于命令顺序号及命令的访问信息检测执行冲突;以及重新执行装置605,被配置成于对执行冲突所涉及的命令进行重新执行。
[0091]按照本发明的一个实施例,优化系统600还包括分配装置(未示),被配置成按照共享文件系统中的构建文件给命令分配命令顺序号。可选地,记录装置601还记录命令本身。
[0092]按照本发明的一个实施例,命令的访问信息包括访问时间戳、访问文件ID以及访问类型。[0093]按照本发明的一个实施例,检测装置603包括:第一确定装置6031,被配置成基于记录的访问文件ID,确定访问同一文件的多个命令;第二确定装置6032,被配置成如果基于多个命令的访问类型,确定访问同一文件的多个命令只涉及读取操作,则确定不存在命令执行冲突;第三确定装置6033,被配置成如果基于多个命令的访问类型,确定访问同一文件的多个命令中的至少一个涉及写入操作,则根据记录的访问时间戳和命令顺序号,确定针对同一文件发生了执行冲突,且如果发生了执行冲突,将与执行冲突有关的命令的命令顺序号以及相应的命令放入重新执行列表中以便进行重新执行。
[0094]按照本发明的一个实施例,如果命令顺序号的顺序与访问时间戳的顺序不一致,则确定发生了冲突。
[0095]按照本发明的一个实施例,重新执行装置605包括:获得装置(未示),被配置成对重新执行列表中的命令执行计分牌算法以获得应执行的顺序链;确保装置(未示),被配置成按照应执行的顺序链,确保该顺序链中的后一命令在前一命令执行完之后才开始执行。
[0096]按照本发明的一个实施例,在按照应执行的顺序链执行与执行冲突有关的命令的同时,执行除与执行冲突有关的命令之外的其它命令。
[0097]按照本发明的一个实施例,在按照应执行的顺序链执行与执行冲突有关的命令之后,执行后续的除与执行冲突有关的命令之外的其它命令。
[0098]图7示出了使用了本发明的编译系统700的框图。如图7所示,编译系统700包括:编译器701,被配置成编译应用程序;以及优化装置703,被配置成使用根据本发明的优化系统,如图6所示,来对所述编译器的编译进行优化。
[0099]图8示出了使用了本发明的计算机系统800的框图。如图8所示,计算机系统800包括:共享文件系统801,被配置成并行构建应用程序;以及编译系统803,其如图7所示。
[0100]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0101]以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本【技术领域】的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本【技术领域】的其它普通技术人员能理解本文披露的各实施例。
【权利要求】
1.一种优化应用程序的并行构建的方法,包括: 在命令的并行执行中,记录命令顺序号及命令的访问信息; 基于命令顺序号及命令的访问信息检测执行冲突;以及 对执行冲突所涉及的命令进行重新执行。
2.根据权利要求1所述的方法,还包括: 按照共享文件系统中的构建文件给命令分配所述命令顺序号。
3.根据权利要求 2所述的方法,其中,所述命令的访问信息包括访问时间戳、访问文件ID以及访问类型。
4.根据权利要求3所述的方法,其中检测执行冲突包括: 基于记录的访问文件ID,确定访问同一文件的多个命令; 如果基于所述多个命令的访问类型,确定访问同一文件的所述多个命令只涉及读取操作,则确定不存在命令执行冲突。
5.根据权利要求3所述的方法,其中检测执行冲突包括: 基于记录的访问文件ID,确定访问同一文件的多个命令; 如果基于所述多个命令的访问类型,确定访问同一文件的所述多个命令中的至少一个涉及写入操作,则根据记录的访问时间戳和命令顺序号,确定针对同一文件是否发生了执行冲突,如果发生了执行冲突,则将与执行冲突有关的命令的命令顺序号以及相应的命令放入重新执行列表中以便进行重新执行。
6.根据权利要求5所述的方法,其中,如果命令顺序号的顺序与访问时间戳的顺序不一致,则确定发生了执行冲突。
7.根据权利要求5所述的方法,其中所述重新执行包括: 对重新执行列表中的命令执行计分牌算法以获得应执行的顺序链; 按照应执彳丁的顺序链,确保该顺序链中的后一命令在如一命令执彳丁完之后才开始执行。
8.根据权利要求7所述的方法,其中在按照应执行的顺序链执行与执行冲突有关的命令的同时,执行除与执行冲突有关的命令之外的其它命令。
9.根据权利要求7所述的方法,其中在按照应执行的顺序链执行与执行冲突有关的命令之后,执行后续的除与执行冲突有关的命令之外的其它命令。
10.一种优化应用程序的并行构建的系统,包括: 记录装置,被配置成在命令的并行执行中,记录命令顺序号及命令的访问信息; 检测装置,被配置成基于命令顺序号及命令的访问信息检测执行冲突;以及 重新执行装置,被配置成对执行冲突所涉及的命令进行重新执行。
11.根据权利要求10所述的系统,还包括: 分配装置,被配置成按照共享文件系统中的构建文件给命令分配所述命令顺序号。
12.根据权利要求11所述的系统,其中,所述命令的访问信息包括访问时间戳、访问文件ID以及访问类型。
13.根据权利要求12所述的系统,其中所述检测装置包括: 第一确定装置,被配置成基于记录的访问文件ID,确定访问同一文件的多个命令; 第二确定装置,被配置成如果基于所述多个命令的访问类型,确定访问同一文件的多个命令只涉及读取操作,则确定不存在命令执行冲突。
14.根据权利要求12所述的系统,其中所述检测装置包括:第一确定装置,被配置成基于记录的访问文件ID,确定访问同一文件的多个命令;第三确定装置,被配置成如果基于所述多个命令的访问类型,确定访问同一文件的所述多个命令中的至少一个涉及写入操作,则根据记录的访问时间戳和命令顺序号,确定针对同一文件是否发生了执行冲突,且如果发生了执行冲突,将与执行冲突有关的命令的命令顺序号以及相应的命令放入重新执行列表中以便进行重新执行。
15.根据权利要求14所述的系统,其中,如果命令顺序号的顺序与访问时间戳的顺序不一致,则确定发生了执行冲突。
16.根据权利要求14所述的系统,其中所述重新执行装置包括: 获得装置,被配置成对重新执行列表中的命令执行计分牌算法以获得应执行的顺序链; 确保装置,被配置成按照应执行的顺序链,确保该顺序链中的后一命令在前一命令执行完之后才开始执行。
17.根据权利要求16所述的系统,其中在按照应执行的顺序链执行与执行冲突有关的命令的同时,执行除与执行冲突有关的命令之外的其它命令。
18.根据权利要求16所述的系统,其中在按照应执行的顺序链执行与执行冲突有关的命令之后,执行后续的除与执行冲突有关的命令之外的其它命令。
19.一种编译系统,包括: 编译器,被配置成编译应用程序;以及 优化装置,被配置成使用如权利要求10 - 18中的任一项所述的系统来对所述编译器的编译进行优化。
20.一种计算机系统,包括: 共享文件系统,被配置成并行构建应用程序;以及 如权利要求19所述的编译系统。
【文档编号】G06F11/36GK103677754SQ201210356575
【公开日】2014年3月26日 申请日期:2012年9月21日 优先权日:2012年9月21日
【发明者】纪金松, 蒋健, 张嗣元, 朱鸿伟 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1