构建分布式程序的系统和方法与流程

文档序号:11288440阅读:250来源:国知局
构建分布式程序的系统和方法与流程

背景技术
:本发明在其部分实施例中涉及构建分布式程序的系统和方法,更具体地但非唯一地,涉及自动生成分布式代码的系统和方法。由于需要处理大量信息以解决计算问题,导致很多计算问题无法在单计算节点上解决。单计算节点可能没有足够的内存和处理能力来在合理的时间内解决计算问题,或者可能根本无法处理大量信息(例如,本地内存不足)。处理此类大量计算实例的常见方法是将计算分发给具有多个计算节点的集群。分布式计算允许使用集群内存的组合容量来处理不适合单节点内存的数据规模,或单节点要用的时间太长而不可接受的数据规模。分布式程序设计被认为是一项复杂而富有挑战的任务。分布式程序难以编程,同时难以调测和重用。编写分布式程序需要高级编程技巧,并且开发成本高。尽管已尽最大努力,但在一些情况下,所完成的分布式程序的可扩展性和性能都较差。虽然已经提出了不同的方案来改进分布式编程,但仍然存在一种或多种限制。组成分布式程序的一种方案为使用与系统级编程模型相结合的低级语言,例如c/c++、java或者scala。例如,c++程序可以与低级消息传递接口(messagepassinginterface,mpi)编程模型结合,从而允许程序员发起分布式进程并对进程之间的交互进行描述。但是,使用低级语言的设计比较复杂,要求高级编程技巧以及对具体编程模型和目标架构的理解。程序员需要手动将初始任务拆分为子任务,并跟踪子任务交互、同步和数据共享。低级编程开发成本高且程序漏洞风险高。另外一种方案是使用包括高级函数的分布式版本的第三方库。例如,为了使用支持矢量机(supportvectorsmachine,svm)算法解决分类任务,可以使用libsvm库。但是,方案库可能并非针对当前的计算问题而存在。此外,由于应用需求容易随着时间而改变,所以这些库适应每种具体情况的过程变得比较费劲。这些库也有固定的应用程序接口,这些接口要求将数据从应用内部格式转换为库内部格式,或者从库内部格式转为应用内部格式,以便调用库函数或检索结果。这些冗余转换导致最终应用的性能明显下降。又一种方案是分布式程序开发的高级框架。但是,简化的编程模型导致适用性有限。此外,使用高级框架开发的程序可能会遇到性能和扩展性难题。而且,在许多情况下,程序员可能在已开发应用的调测、调优和维护方面遇到困难。技术实现要素:本发明的目的在于改进以低级语言生成由分布式处理系统执行的代码。上述和其它目的通过独立权利要求的特征来实现。其它实施形式在从属权利要求、说明书和附图中显而易见。根据第一方面,一种用于生成在分布式处理系统上执行的代码的装置包括:数据接口,用于接收以高级编程语言编写的第一源代码,所述第一源代码包括多种抽象数据类型;同构专业模块,用于将所述多种抽象数据类型中的每一种映射到从多种同构具体数据类型中选定的至少一种具体数据类型,其中每种同构具体数据类型存储等效值,可与其它同构具体数据类型互换,和/或产生相同的结果值。所述装置和/或方法具有广泛的适用性并支持高级抽象。所述第一源代码可以使用所述抽象数据类型以一般方式来编写,无需考虑与分布式处理相关的实施细节。所述装置和/或方法将程序逻辑从分布式计算中解耦,从而允许程序员专注于编写程序,而分布决定则由编译器处理。所述装置和/或方法结合了高性能和高生产率,从而允许程序员以更低的成本编写分布式程序,且速度更快、错误更少。根据所述第一方面,在所述装置的第一可能实施形式中,所述至少一种具体数据类型为至少一种具体分布式数据类型,其中具体分布式数据类型表示分布在多个处理节点上的某种具体数据类型的元素的集合;所述同构专业模块用于:将所述至少一种具体分布式数据类型映射到低级语言的应用程序接口(applicationprogramminginterface,api),所述低级语言定义在分布式处理系统上执行的程序的数据分布;基于所述多种抽象数据类型的所述映射编译所述第一源代码,从而以所述低级语言生成第二源代码;其中所述低级语言不同于所述高级编程语言。不同的语言用不同的编译器进行编译,从而允许每个编译器基于所编译的语言和目标指令集合进行编译时间优化。这样,高级程序在编译时间内得以优化从而生成分布式语言,分布式程序在编译时间内得以优化从而生成机器可执行代码。根据如上所述第一方面或者根据所述第一方面的所述第一实施形式,在所述装置的第二可能实施形式中,每种所述抽象数据类型可在设计用于对分布式程序进行编码的低级语言定义的多种实施方式中实施。对于相同的抽象数据类型,可以选择不同的表示以在不同的架构中实施,从而允许基于所述架构优化机器可执行代码。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第三可能实施形式中,所述同构专业模块用于根据预定义规则集合来映射所述多种抽象数据类型中的每一种,所述预定义规则集合根据目标分布式执行环境架构定义抽象数据类型到至少一种具体数据类型的映射。所述装置和/或方法支持高级用户指导规范,这允许用户或系统管理通过编译器自定义编译。编译时间优化基于用户自定义的高级规范进行。以第一源代码编写的算法到目标架构的映射独立于算法逻辑。程序员可以专注于编写算法逻辑,无需考虑目标架构。根据所述第一方面的所述第一或第三实施形式,在所述装置的第四可能实施形式中,所述预定义规则集合定义了每种具体分布式数据类型到所述低级语言的所述api的所述映射。抽象数据类型间接映射到某种分布式语言,从而允许程序员使用抽象数据类型而不是某种分布式语言来编写程序。抽象数据类型可以映射到现有分布式语言,从而允许重用现有语言和现有语言的编译器。抽象数据类型可以映射到不同的分布式语言,从而允许对相同的第一源代码进行格式化,以便以不同的分布式语言来编译。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第五可能实施形式中,所述高级编程语言为领域专用语言(domainspecificlanguage,dsl),其中所述抽象数据类型表示有多种低级分布实施方式的分布域抽象,所述dsl语言不定义某种低级分布实施方式。表示数据分布的数据类型明确地由分布式语言而非dsl来定义,从而允许程序员专注于以dsl编写,无需明确定义数据分布。dsl提供更高效的编程,而分布式语言提供更高效的机器实施。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第六可能实施形式中,所述至少一种具体数据类型存储为外部模块。外部模块允许用户定义其自己的具体分布式数据类型。用户不会受限于分布式语言所定义的预定义数据类型。为解决某个问题的特定应用而创建的具体分布式数据类型可以在解决不同问题的其它应用中重用。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第七可能实施形式中,映射到设计用于对分布式程序进行编码的低级语言的所述至少一种具体分布式数据类型为针对非分布式使用的至少一种现有具体数据类型的同构表示,所述非分布式使用映射到设计用于对非分布式程序进行编码的不同低级语言。第一源代码可以是针对重新编译以生成分布式应用的非分布式应用而编写的已有代码。现有代码可以被重新编译以生成分布应用,无需重新编写代码。提供相同抽象数据类型的分布式和非分布式表示的同构表示允许例如基于对架构的最佳实施方式的认知来手动指定(例如,由程序员或系统架构师指定)。可以针对分布式实施方式或非分布式实施方式编译相同的程序。提供相同抽象数据类型的分布式和非分布式表示的同构表示允许在分布式数据类型与非分布式数据类型之间进行运算,例如,用非分布式矢量乘以分布式矩阵。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第八可能实施形式中,所述抽象数据类型定义为所述具体分布式数据和api表示中的至少一项的抽象超类。超类抽象允许使用已经以抽象方式定义的现有具体数据类型,例如用分布式语言定义的抽象数据类型。根据所述第一方面的所述第一到第八实施形式中的任一者,在所述装置的第九可能实施形式中,所述第二源代码的至少一部分打包成库模块以在其它分布式应用中重用。所产生的代码可以打包成库以在其它应用中重用。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第十可能实施形式中,所述第一源代码的至少一部分打包成至少一个子过程模块,用作以所述高级编程语言编写的另一过程或另一程序的编程期间的一个构建块。第二源代码的部分可以用于为分布式应用创建更加复杂的过程。例如,当第二源代码包括矢量-矩阵乘法子过程时,矩阵-矩阵乘法过程可以通过调用矢量-矩阵乘法子过程来实施。根据所述第一方面的所述第一到第十实施形式中的任一者,在所述所述装置的第十一可能实施形式,所述第二源代码表示为所述低级语言程序的基于图形的中间表示,用于根据目标分布式执行环境架构进行优化。基于图形的中间表示可以在编译期间优化。根据所述第一方面的所述第一到第十一实施形式中的任一者,在所述装置的第十二可能实施形式中,所述装置还包括低级语言编译器,用于以所述低级语言编译所述第二源代码,从而生成用于分发给分布式执行环境的多个计算节点的多个指令集合。所述第二源代码使用现有编译器以标准方式编译,以生成所述分布式应用。根据第二方面,提供了一种生成在分布式处理系统上执行的代码的方法,包括:接收以高级编程语言编写的第一源代码,所述源代码包括多种抽象数据类型;将所述多种抽象数据类型中的每一种映射到从多种同构具体数据类型中选定的至少一种具体数据类型,其中每种同构具体数据类型存储等效值,可与其它同构具体数据类型互换,和/或产生相同的结果值。根据第三方面,提供了一种包括可读存储介质的计算机程序产品,所述可读存储介质存储有供同构专业模块使用的程序代码,所述程序代码包括:用于接收以高级编程语言编写的第一源代码的指令,所述源代码包括多种抽象数据类型;用于将所述多种抽象数据类型中的每一种映射到从多种同构具体数据类型中选定的至少一种具体数据类型的指令,其中每种同构具体数据类型存储等效值,可与其它同构具体数据类型互换,和/或产生相同的结果值。除非另有定义,本文所使用的所有技术和/或科学术语的含义与本发明所属领域的普通技术人员通常理解的相同。尽管本发明实施例的实践或测试中可以使用与本文所描述的方法和材料相似或等同的方法和材料,但是下文了描述示例性方法和/或材料。在有冲突的情况下,以包括定义在内的专利说明书为准。此外,材料、方法和示例仅是说明性的,并非意指必然限制。附图说明在此仅作为示例,结合附图描述了本发明的部分实施例。现在具体结合附图,需要强调的是所示的项目作为示例,为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。在附图中:图1为根据本发明的部分实施例的一种从高级源代码生成低级语言代码的方法;图2为根据本发明的部分实施例的包括从高级源代码生成低级语言的装置的系统的框图;图3a-3d为根据本发明的部分实施例的描述抽象数据类型的替代性同构具体表示的示意图;图4a-4b为根据本发明的部分实施例的描述将以高级语言编写的高级源代码编译为使用低级语言的低级代码的流程图;图5为根据本发明的部分实施例的基于图2的系统的示例架构和/或基于图1的方法的编译工作流的示意图;图6为根据本发明的部分实施例的描述将使用本文所述的系统和方法构建的分布式程序的性能与使用其它方法构建的分布式程序的性能进行比较的实验结果的图。具体实施方式本发明在其部分实施例中涉及构建分布式程序的系统和方法,更具体地但非唯一地,涉及自动生成分布式代码的系统和方法。本发明的部分实施例的一方面涉及一种模块,该模块将高级抽象数据类型映射到从在低级存储等效可互换值的多个同构具体数据类型中选定的具体数据类型,以生成在目标执行环境中执行的指令。该模块可以实现为装置、系统、方法和计算机程序产品。可选地,从源代码生成用于在分布式处理系统上执行的低级代码或指令,该源代码包括以高级语言编写的抽象数据类型。每种抽象数据类型映射一种或多种具体数据类型,这些具体数据类型可选地为具体分布式数据类型,表示分布在多个处理节点上的某种具体数据类型的元素的集合。每种具体分布式数据类型映射到低级语言的应用程序接口(api),该低级语言定义在分布式处理系统上执行的程序的数据分布。抽象数据类型可在低级语言定义的多种不同数据分布实施方式中实施。抽象数据类型独立于任何特定数据分布定义。本文描述的系统和方法允许程序员在不考虑分布实施方式和/或不定义与抽象数据类型相关的数据分布实施方式的情况下编写源代码,因为源代码中的抽象数据类型到定义数据分布的低级语言的api的映射由本文所述的模块自动完成。所映射的具体分布式数据类型从多种同构具体数据类型中指定,这些同构具体数据类型可互换的和/或可以从一种转换为另一种。同构具体数据类型使用不同的低级实施方式存储相同的数据。同构具体数据类型在程序执行期间进行处理时产生相同的结果值。所映射的具体分布式数据类型根据目标分布式执行环境架构来制定,例如由用户指定或(例如,由系统管理员)预定义。可选地,源代码以领域专用语言(domainspecificlanguage,dsl)来编写。dsl可以提供更高级的数据类型抽象,和/或比其它编程语言更普遍地使用抽象数据类型,其它编程语言是例如低级编程语言,和/或并非专门设计来处理与dsl相同领域中的问题的编程语言。dsl可以是已有的可用dsl或客户开发的dsl。为源代码定义的抽象数据类型可以反映问题相关的抽象。dsl所定义的抽象数据类型表示具有多种可能的低级分布实施方式的分布域抽象。dsl语言不定义抽象数据类型的某种低级分布实施方式。可选地,同构专业模块,例如领域专用编译器,基于映射来编译高级源代码以生成使用低级语言的第二源代码。dsl编译器或同构专业模块可以应用编译时间优化转换。可选地,同构专业模块将相同的高级源代码编译为选择的目标低级语言。该目标低级语言可以由用户手动选择,或者(例如由系统管理员)预定义,或基于映射自动选择。该第二低级源代码可以通过低级编译器编译,以生成用于分发给目标分布执行环境(distributedexecutionenvironment,dee)中的处理节点的机器可执行指令集。抽象数据类型和/或映射可以设计为高级语言的附加件,例如,由自定义高级语言定义,或者作为包括在现有高级语言中的库。高级语言的适用性可以通过抽象数据类型和相关映射进行扩展,从而允许使用高级语言解决其它不同的计算问题,此类问题不通过其它抽象数据类型和映射就无法解决(或者很难解决)。抽象数据类型和/或映射可以由用户定义或例如基于目标低级语言和/或基于目标架构预定义。可定制的定义提供基于用户定义的高级规范的编译时间优化。此类优化提升编译应用的性能。在详细解释本发明的至少一个实施例之前,应该理解,本发明在其应用中未必限于以下描述中阐述的和/或附图所示的组件和/或方法的构造和设置细节,和/或示例。本发明能够通过其它实施例实现,或以多种方式实践或实行。本发明可以是一种系统,一种方法,和/或一种计算机程序产品。计算机程序产品可以包括一种计算机可读存储介质(或媒体),其上有计算机可读程序指令,用于使处理器实行本发明的各个方面。计算机可读存储介质可以是有形设备,该有形设备可保留和存储指令以供指令执行设备使用。计算机可读存储介质可以是,例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或上述存储设备的任何合适组合。本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者通过网络,例如互联网、局域网、广域网和/或无线网络下载到外部计算机或外部存储设备。计算机可读程序指令可作为独立软件包全部在用户的计算机上执行、部分在用户的计算机上执行、部分在用户的计算机上且部分在远程计算机上执行,或全部在远程计算机或服务器上执行。在后一场景中,远程计算机可通过任意类型的网络连接到用户的计算机,这些类型的网络包括局域网(localareanetwork,lan)或广域网(wideareanetwork,wan),或者可以(例如使用互联网服务提供商通过互联网)连接到外部计算机。在一些实施例中,包括可编程逻辑电路、现场可编程门阵列(field-programmablegatearray,fpga)或可编程逻辑阵列(programmablelogicarray,pla)等的电子电路可使用计算机可读程序指令的状态信息来对电子电路进行个性化,从而执行计算机可读程序指令,以便执行本发明的各方面。本发明的各方面在本文中参考根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或方框图进行描述。将理解,流程图图示和/或方框图中的每个方框以及流程图图示和/或方框图中的方框的组合可以通过计算机可读程序指令实现。图中的流程图和方框图图示了根据本发明各实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。在这一方面,流程图或方框图中的每个方框可表示一个模块、片段或一部分指令,指令包括用于实现指定逻辑功能的一个或多个可执行指令。在一些替代性实施方式中,方框中提到的功能可不按照图中提到的顺序发生。例如,相继示出的两个方框,事实上可以基本上同时执行,或者这些方框有时可以按相反的顺序执行,取决于所涉及的功能。还应注意的是,方框图和/或流程图图示的每个方框以及方框图和/或流程图图示中的方框的组合可通过执行指定功能或动作或执行专用硬件和计算机指令组合的基于硬件的专用系统来实现。现在参考图1,图1为根据本发明的部分实施例的一种基于抽象数据类型到具体数据类型的映射从包括抽象数据类型的高级源代码生成低级语言代码的方法。还参考图2,图2为系统组件的框图,该系统允许程序员通过将源代码自动映射到定义分布式处理实施方式的低级语言来以高级语言编写源代码,而无需考虑分布式处理实施方式。根据本发明的部分实施例,低级语言代码从高级源代码中自动生成。权利要求1的方法可以由图2的装置和/或系统来执行。可选地,具体数据类型映射到低级语言的api。本文所述的系统和/或方法提供广泛的适用性,并支持高级抽象以供程序员编写分布式程序。高级源代码可以通过一般的方式使用抽象数据类型编写,而无需考虑与分布式处理相关的实施细节。实施细节可以由编写高级源代码的程序员或其它实体(如系统管理员)单独定义。实施细节可以针对目标执行环境架构的最佳性能而定义,例如,由熟悉架构的实体定义,而非由例如不熟悉执行目标执行环境架构的程序员来定义。本文所述的系统和/或方法将分布式计算从程序逻辑中解耦,从而支持程序员专注于编写程序,而分布决定由基于映射的同构专业模块来处理。该系统和/或方法结合了高性能和高生产率,从而允许程序员以更低的成本编写分布式程序,且速度更快、错误更少。程序用优化的方式针对目标执行环境来编译,从而提升运行时间性能。在102中,接收以高级编程语言编写的、包括一种或多种抽象数据类型的高级源代码。如此处所述,与同构专业模块210通信的数据接口208接收源代码202(其可以作为文件存储在本地存储器上),其中同构专业模块210自动执行抽象数据类型到低级语言的映射。如此处所述,同构专业模块210可以基于映射生成高级源代码的一个或多个专业低级版本,例如,结合步骤104、106和/或108。抽象数据类型的示例包括:矩阵、矢量和图形。抽象数据类型用作应用程序员的高级接口。每一种抽象数据类型可在低级语言定义的多种不同数据分布实施方式中实施,如此处所述,例如,结合步骤104。如此处所述,抽象数据类型不能直接映射到架构特定代码,要求到一种或多种具体数据类型的中间映射,例如一对一映射、到具体数据类型的组合的映射、到具体数据类型的函数的映射、和/或到生成自具体数据类型的子程序的映射。如此处所述,中间映射从机器可执行代码中解耦抽象数据类型,从而支持自定义映射定义提升编译代码的优化。可选地,高级源代码以领域专用语言(domainspecificlanguage,dsl)编写,例如,一种设计用以执行要求分布式计算的复杂计算的语言,例如机器学习算法。抽象数据类型表示域特定对象和/或域特定抽象。可选地,源代码是一种针对分布式处理应用而编写的新程序。或者,源代码是一种针对非分布式应用而编写的已有源代码。该已有源代码可以使用本文所述的系统和/或方法进行处理和重编译,从而从针对非分布式应用而编写的代码中自动生成该应用的分布式版本。现有代码可以进行重编译以生成分布式应用,而无需重写代码。要注意的是,可能需要对代码进行部分修改,和/或可能需要对已定义的映射进行部分调整。或者或另外,源代码的至少一部分是打包的子过程模块(例如,库),用作以高级编程语言编写的另一过程或另一程序的编程期间的一个构建块。重用模块可以存储在重用库224中。高级编程语言的抽象数据类型可以存储在抽象数据类型存储库204中。存储库204可以存储为库或外部模块,可以定义或修改,从而允许自定义抽象数据类型,例如定义新的抽象数据类型以解决具体问题。存储库204可以由编程语言外部调用,或者编程语言可以进行编写以集成其中的抽象数据类型。源代码202可以使用用户接口206来编写,例如使用台式电脑。在104中,同构专业模块210将每种抽象数据类型映射到从同构具体数据类型表示中选定的一种或多种具体分布式数据类型。同构具体数据类型表示具有可互换和/或可转换的具体数据类型表示的多种不同变体。现在参考图3a和图3b,图3a和图3b为根据本发明的部分实施例的描述抽象数据类型的同构具体数据类型的示例的示意图。所描述的数据类型是同构的,存储等效信息,可以从彼此获取(例如,从一种数据类型转换为另一种数据类型,同时保留等效数据)。同构数据类型在被编译的算法中使用时是可互换的。当在运行时间期间由程序处理时,同构数据类型提供相同的结果值。抽象数据类型可以映射到任一同构数据类型。图3a描述了抽象数据类型矩阵的同构数据类型302。密集矩阵304a、平稀疏矩阵304b和稀疏矩阵304c都是矩阵的不同具体数据类型。图3b描述了抽象数据类型图表的同构数据类型306。邻接矩阵308a、平邻接列表308b和邻接列表308c都是图表的不同具体数据类型。同构具体数据类型可以包括针对分布式应用设计的具体数据类型。每种抽象数据类型可以映射到一种具体分布式数据类型的表示。同构具体数据类型可以包括:仅针对分布式应用的实施方式,仅针对非分布式应用的实施方式,和/或针对分布式和非分布式应用的实施方式。分布式和非分布式具体数据类型可以是相互同构的。包括相同抽象数据类型的分布式和非分布式数据类型的同构数据类型支持为目标执行环境的目标架构选择最佳实施方式。可以针对分布式实施方式或非分布式实施方式编译相同的程序(或其部分)。提供相同抽象数据类型的分布式和非分布式数据类型的同构数据类型允许在分布式数据类型与非分布式数据类型之间进行运算,例如,用非分布式向量乘以分布式矩阵。非分布式数据类型和分布式数据类型可以映射到不同的低级语言。具体分布式数据类型可以映射到设计用于对分布式程序进行编码的低级语言。针对非分布式使用的同构具体数据类型可以映射到设计用于对非分布式程序进行编码的不同低级语言。现在参考图3c,图3c为根据本发明的部分实施例的抽象数据类型矩阵314的分布式具体表示的示例的示意图。要注意的是,图3a和3b所示的具体实施方式的示例不一定设计为在分布式应用中使用,但可以通过增加同构分布式具体数据类型来扩展以在分布式应用中使用。作为矩阵分布式数据类型的具体分布式数据类型的分布式稀疏矩阵316a与作为矩阵抽象数据类型的具体非分布式表示的稀疏矩阵316b是同构的。要注意的是,数据类型316a和316b可以是图3的同构矩阵表示304a至304c的附加同构数据类型。可选地,具体分布式数据类型包括最初设计供非分布式使用的现有具体类型的同构表示。这样,最初设计供非分布式使用的预定义具体分布式数据类型可以重用,并扩展以提供分布式函数。如本文补充详述,此类预定义具体分布式数据类型可以由作为编译目标的低级语言来指定。可选地,抽象数据类型定义为预定义具体数据类型的抽象超类。具体数据类型可最初设计供分布式或非分布式使用。具体数据类型可以基于低级语言的应用程序接口。超类抽象允许使用已通过抽象方式定义的现有具体数据类型,例如低级语言定义的具体数据类型。现在参考图3d,图3d是最初设计供非分布式使用和/或最初设计供分布式使用、扩展为设计供分布式使用的同构数据类型的具体数据类型的示例。阵列312a,作为低级语言的api定义的具体数据类型,用作定义抽象数据类型索引集合310的基础。索引集合是阵列312a的抽象超类。阵列312a现定义为抽象数据类型索引集合310的具体实施方式。其它具体实施方式可以针对抽象数据类型索引集合310而定义,例如针对分布式阵列312b。针对每种抽象数据类型定义的同构具体表示可以存储为同构表示存储库214。存储库214可以是外部库和/或模块。存储库214可以集中定义,例如由系统管理员定义,和/或在本地修改,例如由程序员修改。存储库214允许用户定义自己的具体分布式数据类型。用户不受限于低级语言定义的预定义数据类型。针对解决某个问题的特定应用而创建的具体分布式数据类型可以在解决不同问题的其它应用中重用。例如,同构数据类型的基本集合可以集中定义,例如基于公共系统架构集中定义。可以将其它自定义同构数据类型添加到基础集合中,例如由用户基于本地自定义系统架构来添加。同构专业模块210进行抽象数据类型到具体分布式数据类型表示的映射。针对同一种抽象数据类型,可以选择不同的数据类型以在不同架构中实施,从而允许基于架构优化机器可执行代码。同构专业模块210根据预定义规则集合进行抽象数据类型到一种或多种具体数据类型的映射。预定义映射规则220的集合可以存储为外部可访问的模块和/或库。规则220可以在本地调整,例如由用户调整。规则220可以根据目标分布式执行环境架构来定义映射。该规则集合提供高级用户指导规范,允许用户或系统管理通过同构专业模块来自定义编译。编译时间优化基于用户定义的高级规范。以高级源代码编写的算法到目标架构的映射独立于算法逻辑。程序员可以专注于编写算法逻辑,无需考虑目标架构。具体分布式数据类型可以映射到计算机可执行代码的不同版本,例如此处所述的架构特定代码,例如参考步骤106。作为抽象数据类型或具体数据类型的某种数据类型的定义可以针对同构专业模块210来定义,例如基于模块210在高级源代码编译期间可以访问的抽象数据类型存储库204。在106中,同构专业模块210将每个具体分布式数据类型,或者分布式数据类型的每种组合映射到低级语言的应用程序接口(applicationprogramminginterface,api)的结构,例如映射到低级语言定义的低级数据类型、映射到函数和/或映射到低级数据类型与函数的组合。低级语言以适合编译为计算机可执行语言的格式来定义数据分布,该计算机可执行语言用于在分布式执行环境中执行。具体分布式数据类型可以映射到架构特定代码。具体分布式数据类型的映射可以按目标集群进行定义,可选地基于生成针对目标集群而优化的目标机器可执行代码。抽象数据类型(通过中间具体数据类型)间接映射到低级语言,从而允许程序员使用抽象数据类型以高级语言而非低级语言来编写程序。抽象数据类型可以映射到现有低级语言,从而允许重用现有语言和现有语言的编译器。抽象数据类型可以映射到不同的低级语言,从而允许将相同的高级源代码格式化,以便以不同的低级语言进行编译。不同的具体数据结构在低级实施方式中的处理不同,并且进行编译后生成不同的低级代码以实施为机器可执行代码。例如,当指定了具体数据类型邻接矩阵时,用来将新边缘添加到图表抽象数据类型的高级代码通过设置取值为一(1)的相应矩阵单元格来以低级语言实施。当图表表示为平邻接列表时,低级代码实施是不同的。用于添加新边缘的高级指令通过将新单元格插入到阵列来以低级语言实施。具体数据类型到高级语言的映射由实体手动选择,该实体熟悉目标执行环境架构,例如程序员或系统架构师。该实体基于邻接矩阵或平邻接列表选择所需要的低级代码实施方式,例如基于对在目标执行环境中提高性能的预期实施方式的认知。可选地,预定义的映射规则220集合定义具体分布式数据类型到低级语言的应用程序接口的映射。在108中,同构专业模块210基于本文描述的抽象数据类型的映射编译高级源代码,从而生成以低级语言编写的低级源222代码。以高级语言编写的高级源代码基于映射编译为低级语言代码,高级源代码包括抽象数据类型和抽象数据类型上进行的运算。以低级语言生成的代码可以是设计用于目标集群或目标分布式执行环境的一种实施方式。可选地,低级语言不同于高级编程语言。不同的语言用不同的编译器编译,从而允许每个编译器基于所编译的语言和目标指令集合进行编译时间优化。这样,高级程序在编译时间内得以优化来生成低级语言,分布式程序在编译时间内得以优化来生成机器可执行代码。表示数据分布实施方式的数据类型通过低级语言而非高级语言(例如dsl)来定义,从而允许程序员专注于以高级语言编写,无需定义数据分布。高级语言提供更高效的编程,而低级语言提供更高效的机器实施方式。现在参考图4a和4b,图4a和4b为描述根据本发明的部分实施例的描绘将以高级语言编写的高级代码编译为低级语言的低级代码的不同实施版本的流程图。图4a和4b描述用矢量乘以矩阵的代码的编译。图4a描述了映射到非分布式具体数据类型实施方式的情况。图4b描述了映射到分布式具体数据类型实施方式或非分布式具体数据类型的情况。同构专业模块210接收基于抽象数据类型矩阵404的高级源代码406。源代码406包括用矢量乘以矩阵的算法,从而生成结果矢量408。在所述示例中,矩阵404有两种可能的同构具体实施方式,即密集矩阵410a和稀疏矩阵410b。根据矩阵404的映射,生成了用于密集矩阵乘法的低级代码412a或者用于稀疏矩阵乘法的低级代码412b。代码412a基于矩阵404到密集矩阵410a的映射。密集矩阵410a映射到低级语言array[array[double]]414a的应用程序接口。高级算法matrixmultipliedbyvector406基于映射编译为低级语言416a。结果矢量418a基于低级算法版本416a生成。类似地,代码412b基于矩阵404到稀疏矩阵410b的映射。稀疏矩阵410b映射到低级语言array[array[int,double]]414b的应用程序接口。高级算法matrixmultipliedbyvector406基于映射编译为低级语言416b。结果矢量418b基于低级算法版本416b生成。现在参考图4b,结合图4a所述,同构专业模块210接收基于抽象数据类型矩阵404的相同高级源代码406。在所述示例中,矩阵404有两种可能的同构具体实施方式,即平稀疏矩阵430a和分布式稀疏矩阵430b。根据矩阵404的映射,生成用于稀疏表示的低级代码432a,或者以低级语言生成用于分布式数据的低级代码412b。代码432a基于矩阵404到平稀疏矩阵430a的映射。平稀疏矩阵430a映射到低级语言(array[int],array[int],array[a],int)434a的应用程序接口。高级算法matrixmultipliedbyvector406基于映射编译为低级语言436a。结果矢量438a基于低级算法版本436a生成。类似地,代码432b基于矩阵404到分布式稀疏矩阵430b的映射。分布式稀疏矩阵430b映射到低级语言dist[(array[int],array[int],array[a],int)]434b的应用程序接口。高级算法matrixmultipliedbyvector406基于映射编译为低级语言436b。结果矢量438b基于低级算法版本436b生成。现在返回参考图1和2,可选地,以低级语言编写的一部分(或全部)代码被打包到库模块中,以在其它分布式应用中重用。库模块可以并入到重用库224。所产生的代码可以打包到库中,以在其它应用中重用。打包可以自动进行或手动进行。以高级语言编写程序时,代码可以被重用,例如通过包括重用库中的子过程来重用。当以高级语言编写相同的函数时,同构专业模块可以重用代码。可选地,低级语言源代码表示为低级语言程序的基于图表的中间表示。同构专业模块可以生成基于图表的中间表示而不是用低级语言编写的代码,或者除了用低级语言编写的代码之外还生成基于图表的中间表示。基于图表的中间表示可以根据目标分布式执行环境架构在编译期间进行优化。优化后的图表可以编译为计算机可执行代码,用于在目标执行环境中执行。低级语言源代码(例如,子过程或它的其它部分)可以用于为分布式应用创建更加复杂的过程。例如,当低级语言源代码包括矢量-矩阵乘法子过程时,矩阵-矩阵乘法过程可以通过调用矢量-矩阵乘法子过程来实施。在110中,与同构专业模块210通信的低级语言编译器226接收低级语言源代码222,并编译源代码222以生成用于在分布式执行环境(distributedexecutionenvironment,dee)230中执行的分布式程序228。可选地,分布式程序228包括分发给dee,例如分布式计算内核(distributedcomputationkernel,dck),的多个计算节点的多个指令集合。低级语言源代码222可以使用现有低级语言编译器226以标准方式编译,以生成分布式应用228。低级语言编译器226可以是,例如现成的编译器或针对另一种应用编写的编译器,可以被重用以便对以低级语言编写的代码222进行编译。低级语言源代码222不包括高级源代码202中包括的抽象数据类型,从而允许通过低级编译器226进行编译以生成用于在分布式执行环境230中执行的分布式程序228的机器可执行代码版本。在112中,在分布式执行环境230中执行分布式程序228。可选地,dee用于执行dck,例如使用特定分布式数据源和目的地。发布分布式计算程序以产生分布式结果。现在参考图5,图5为根据本发明的部分实施例的基于图2的系统的示例架构和/或基于图1的方法的编译工作流的示意图。在504中,接收分布式程序的高级源代码。高级源代码包括并基于抽象数据类型506。源代码504通过同构专业模块512编译以生成代码514,代码514以用于对分布式程序进行编码的低级分布式语言510编写。同构专业模块512将抽象数据类型506映射到集群特定具体实施方式508,集群特定具体实施方式508映射到分布式语言(distributedlanguage,dl)510的应用程序接口定义的分布式数据类型。同构专业模块512基于映射生成以低级语言编写的源代码(即,代码514)的一种或多种专业版本。例如,可以生成代码514的多种专业版本,其中每种版本表示一种映射选择。所生成的低级分布式语言(distributedlanguage,dl)源代码514通过低级分布式语言(distributedlanguage,dl)编译器516编译以生成计算内核518。内核518通过低级编译器520编译成分布式程序524,以在分布式执行环境中执行。分布式运行时间库522由低级编译器520用来基于目标执行环境的某种硬件架构编译指令。边界502描述了从高级源代码504生成分布式程序524的运行环境中的元素506、508、510、512、516、518、520、522和524。现在描述一个示例,该示例基于结合图2描述的系统和/或结合图1描述的方法。为清晰起见,该示例基于目标低级语言仅包括一个特定分布式类型的假设,该特定分布式类型在此表示为dist[t],其中t为任一种已定义的具体类型。本质上,出于示例目的,符号dist[t]解释为一组t类型的元素,分布在多个处理节点上,这样每个节点关联一个具体的元素。例如,符号dist[array[int]]表示一组阵列,每个阵列关联一个相应的处理节点。在102中,接收高级源代码202。该源代码包括抽象数据类型matrix[t]和vector[t].重用库224包括已定义的用抽象矢量乘以矩阵的函数:traitmatrix[t]{defmult(vector:vector[t]):vector[t]}用矢量乘以矩阵的程序的源代码如下:defmvm(m:matrix[double],v:vector[double]):vector[double]={m.mult(v)}要注意的是,源代码程序基于现有域特定抽象(例如,对象、类型和运算)的组合而编写,程序员不必涉及分布。在104中,将抽象数据类型映射到从同构具体数据类型选定的一种或多种具体分布式数据类型。为清晰起见,矩阵和矢量已分别具有针对非分布式情况的至少一种具体实施方式,即densematrix[t]和densevector[t].在106中,将具体分布式类型映射到低级语言的应用程序接口。densematrix[t]映射到(dist[array[densevector[t]]],int),其中该对中的第一个元素表示矩阵行的分布式阵列,第二个元素表示矩阵列的数量。densevector[t]作为array[t]映射到低级编程语言的应用程序接口。重用库224包括将抽象函数mult映射到低级语言的应用程序接口定义的函数mapdistribured。mapdistribured为基于dist[array[t]]类型的函数,其允许程序员指定应用到每个计算节点上的初始数据的本地函数。在108中,同构专业模块基于已定义的映射来将源代码(即,函数mvm)编译为低级语言的代码。以低级语言编译的代码为:要注意的是,相同的源代码可以基于映射编译为设计用于分布式程序的使用低级语言的代码(如图所示),或者编译为设计用于非分布式程序的低级语言的代码。此外,要注意的是,所产生的函数mvm可以包装到重用库224,以在进行矩阵-矢量乘法的其它分布式应用中重用。同时,函数mvm可以用于组成多个复杂的分布式过程和/或函数,例如,矩阵-矩阵乘法。在110中,低级语言代码通过现有低级语言编译器编译,从而生成分布式程序的机器可执行代码,以在目标分布式执行环境中执行。在112中,在分布式执行环境中执行机器可执行代码。发明人进行了实验,将基于本文所述的系统和方法的分布式程序的处理性能与apachesparktm开源集群计算框架进行比较。选择合并的openmptm(开放多处理)+消息传递接口(messagepassinginterface,mpi)技术用于此处所述的低级语言。开发同构专业模块来将以高级语言编写的抽象数据结构和运算映射到openmp和mpi低级语言的应用程序接口。实验在由8个处理节点组成的分布式执行环境中进行。实验显示,使用mpi+openmp运行时间环境结合本文所述的系统和方法的计算时间有减少。在第一个实验中,评估了用密集矢量乘以稀疏矩阵的计算问题。矩阵输入以预分布的形式提供(例如从分布式文件系统中读取)。该乘法得出的矢量不会以分布式形式定义,且最终版本被传送给主节点(此处称为连接(joined))。输入矩阵有以下特点:(1)矩阵的每个元素有双精度值;(2)矩阵大小为100,000x10,000个元素;(3)密度为10%(即,非零元素的百分比)。表1描述了与apachesparktm框架相比,本文所述的在低级mpi+openmp分布式运行时间框架内执行的方法和系统的计算结果。表1的结果通过图6的图表描述。本文所述的系统和方法结合mpi+openmp运行时间环境胜过apachesparktm系统约2.8倍。要注意的是,连接最终结果的过程要快大约1000倍。表1:实验结果运行时间环境本地计算时间(秒)连接时间(秒)总时间(秒)mpi+openmp3.5261200.0007443.52686apachesparktm9.5305620.65073610.18130在第二个实验中,使用本文所述的系统和方法结合mpi+openmp运行时间环境和相同的8核执行环境,执行了总共2,000,000,000个整数值的问题,并且与apachesparktm进行了比较。结果表明计算性能在时间上相比apachesparktm大约高出7倍。本发明各实施例的描述已出于说明目的提出,但并非旨在详尽无遗或限制所公开的实施例。对于本领域普通技术人员来说,许多修改和变体将是显而易见的,不脱离所描述的实施例的范围和精神。选择本文使用的术语是为了最好地说明实施例的原则、实际应用或相对于在市场中发现的技术的技术改进,或者是为了使具有本领域普通技术的其他人员能够理解本文公开的实施例。预期在从本申请开始走向成熟的专利的生命周期中,将会开发出许多相关系统和方法,术语中间表示、反馈信息和解释器的范围旨在包括所有这类先验新技术。本文所使用的术语“大约”是指±10%。术语“包括”和“有”表示“包括但不限于”。这个术语包括了术语“由…组成”以及“本质上由…组成”。术语“本质上由…组成”是指构造或方法可包括额外的材料和/或步骤,但前提是额外的材料和/或步骤不会实质上改变所要求保护的构造或方法的基本和新颖特性。本文使用的单数形式“一个”和“所述”包括复数含义,除非上下文中另有明确说明。例如,术语“一个化合物”或“至少一个化合物”可包括多个化合物,包括其混合物。此处使用的词“示例性的”表示“作为一个示例、实例或说明”。任何“示例性的”实施例并不一定理解为优先于或优越于其它实施例和/或并不一定排除其它实施例的特征的并入。本文所使用的词语“可选地”是指“在一些实施例中提供并且在其它实施例中未提供”。本发明的任何具体实施例可以包括多个“可选”特征,除非这些特征相冲突。在本申请中,本发明的各种实施例可以以范围格式呈现。应当理解,以范围格式进行的描述仅为了方便和简洁,不应被解释为对本发明范围的僵化限制。相应地,应考虑对范围的描述,以具体公开所有可能的子范围以及该范围内的各个数值。例如,从1至6的范围的描述应被认为具体公开了诸如1至3、1至4、1至5、2至4、2至6、3至6等,以及该范围内的单个数字,例如1、2、3、4、5和6。无论范围多宽,这都适用。当在此指出一个数字范围时,表示包括了在指出的这个范围内的任意所列举的数字(分数或整数)。短语“在第一个所指示的数和第二个所指示的数范围内”以及“从第一个所指示的数到第二个所指示的数范围内”和在这里互换使用,表示包括第一个和第二个所指示的数以及二者之间所有的分数和整数。单个实施例也可以提供某些特征的组合,这些特征在各个实施例正文中有简短的描述。相反地,本发明的各个特征在单个实施例的正文中有简短的描述,也可以分别提供这些特征或任何适合的子组合或者作为本发明所述的任何合适的其他实施例。不可认为各个实施例的正文中描述的某些特征是这些实施例的必要特征,除非没有这些元素,该实施例无效。在此,本说明书中提及的所有出版物、专利和专利说明书都通过引用本说明书结合在本说明书中,同样,每个单独的出版物、专利或专利说明书也具体且单独地结合在此。此外,对本申请的任何参考的引用或识别不可当做是允许这样的参考在现有技术中优先于本发明。就使用节标题而言,不应该将节标题理解成必要的限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1