产生在分布式处理系统中执行的程序的基于向量的表示的制作方法

文档序号:15575334发布日期:2018-09-29 05:24阅读:239来源:国知局

本发明在它的一些实施例中涉及用于产生在分布式处理系统中执行的程序实现的系统和方法,并且更具体地但非排他性地说,涉及用于优化用于在分布式处理系统内执行的程序的实现的系统和方法。



背景技术:

某些计算问题需要分布式处理框架(distributedprocessingframework,dpf)来执行。执行此类计算的程序可能无法在单个计算节点上运行,例如,由于单个节点的有限内存和/或有限处理资源。在许多情况下,利用多个处理节点的处理和/或内存资源,在分布式处理系统内执行程序。

dpf通常向烧录器提供数个特定领域(例如,线性代数、图形处理)的库。使用库提供的抽象领域专用对象减轻了烧录器要处理低级细节的必须性,从而使得程序更容易写入。然而,烧录器产率和程序在分布式处理系统中执行时的性能之间存在权衡。提升写入程序的抽象等级会产生额外的低级实现开销,这在执行程序时可能会产生性能损失。

此外,所执行的分布式应用程序的性能等级是基于烧录器针对高级领域对象的实现而选择适当的数据结构。然而,实际上,烧录器很难知道针对特定使用情况何时使用哪一数据结构来获得最佳性能。例如,对于算法处理矩阵,何时选择稀疏矩阵表示以及何时选择密集矩阵表示。

实际上,dpf在它们用于允许烧录器接入分布式处理系统的能力方面具有显著的局限性。这种约束起因于dpf所支持的编程模型。烧录器需要手动绕过这些局限性,这可能较为困难且费时,和/或产生在分布式处理系统中无法有效执行的程序。



技术实现要素:

本发明的目标在于提供一种用于创建在分布式处理系统内执行的程序表示的低级实现的装置、系统、计算机程序产品和方法。

前述目标和其它目标通过独立权利要求的特征实现。其它实施形式根据从属权利要求、说明书以及图式是显而易见的。

根据第一方面,用于产生在分布式处理系统上执行的代码的装置包括:用于接收以高级编程语言编写的程序的表示的数据接口,所述程序表示包含运算,所述程序表示包含抽象数据类型;以及存储向量化代码的存储器;以及耦合到数据接口和存储器以执行向量化代码的处理器,所述向量化代码包括:用于将抽象数据类型中的每一个映射到索引集合数据类型中的至少一个的代码指令,其中索引集合数据类型中的每一个表示某一数据类型的元素集合,其中元素集合中的每一个元素可由索引接入;基于索引集合数据类型,将每一运算转换成基于向量的形式,以创建程序的基于向量的表示;向低级语言的应用程序编程接口(applicationprogramminginterface,api)提供程序的基于向量的表示,以通过分布到分布式处理执行环境的计算节点来执行基于向量的程序表示。

抽象数据类型映射到索引集合数据类型中的至少一个以及基于索引集合数据类型将每一运算转换成基于向量的形式以创建基于向量的表示使得烧录器能够写入分布式程序,所述分布式程序包含嵌套数据并行(例如,分布的分布)。向量类似物允许以分布式方式执行程序的运算,而不是将存储在不同节点中的数据收集到主节点(主节点可能没有足够的内存来存储所有所收集的数据),在主节点处的所收集的数据上执行运算,并将结果重新分布到相应的节点。

在根据第一方面的装置的第一可能实施方案中,装置进一步包括用于基于索引集合数据类型,用向量类似物转换索引集合数据类型等级处的程序表示的嵌套数据并行运算的代码指令。

装置删除烧录器编写的嵌套数据并行代码,并用可由分布式系统执行的向量类似物代替它。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第二可能实施形式中,程序表示的抽象数据类型是基于阶层式数据结构,其中相对较高抽象等级的每一数据类型是基于相对较低抽象等级的至少一个数据类型,其中索引集合数据类型在阶层式数据结构底部。

阶层式数据结构通过允许在每一抽象等级(例如,依序)执行优化来提高程序的执行性能。可转换成向量表示的索引集合位于阶层结构的底部,从而允许在到达索引集合等级之前进行优化,这提高了程序的执行性能。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第三可能实施形式中,装置进一步包括用于将基于抽象数据类型的阶层式数据结构表示的当前等级的抽象数据类型的当前抽象等级的程序指令的中间表示(intermediaterepresentation,ir)依序转换成基于阶层式数据结构的一个较低抽象等级的数据类型的一个较低抽象等级的程序指令的ir的代码指令。

每一ir可在转换到下一较低抽象等级之前在它的相应等级处进行优化,从而提高最低等级处的最终程序的整体执行性能,所述最终程序在运行环境中执行。

在根据第一方面的先前第三实施形式的装置的第四可能实施形式中,数据接口进一步用于接收输入值以供当前抽象等级处的程序的ir的指令集处理;并且装置进一步包括用于从同构特化中选择当前抽象等级处的程序的ir的指令集的同构特化以使用基于向量的形式处理输入值的代码指令,所述选择基于在处理ir的基于向量的表示时的同构特化中的每一个的性能指标;其中基于比当前抽象等级低的一个抽象等级处的抽象数据类型,每一同构特化具有不同实现,其中每一同构特化在处理输入值时产生相同结果。

基于实际接收输入,每一抽象等级的同构特化的动态选择提高了分布环境中程序的执行性能。每一等级可基于实际输入进行动态优化,从而提高在分布环境中执行的最低等级的程序的性能。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第五可能实施形式中,装置进一步包括编译程序,所述编译程序用于依序向每一抽象等级处的程序的每一ir应用程序指令优化。

优化可在每一抽象等级处执行,从而提高程序的整体性能。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第六可能实施形式中,装置进一步包括用于根据创建可通过分布式处理执行环境计算的指令的向量形式的一组预定义向量化规则,基于索引集合数据类型映射程序表示的ir的指令的代码指令。

向量形式使得分布式处理执行环境中的程序的执行性能提高。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第七可能实施形式中,在不需将数据收集到主节点和重新分布结果的情况下计算向量形式。

向量形式允许运算被分布到不同节点,而不是需要将数据收集到主节点并重新分布结果,从而使得分布式处理执行环境中的程序的执行性能提高。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第八可能实施形式中,程序的ir包含数据流图,所述数据流图包括表示基于索引集合数据类型的程序表示的运算的至少一个节点;并且装置进一步包括用于将至少一个节点中的每一个转换成指令的向量形式以创建用于在分布式处理执行环境中执行的变换后的数据流图的代码指令。

变换后的数据流图在分布式执行环境中的执行性能可提高。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第九可能实施形式中,高级编程语言是领域专用语言(domainspecificlanguage,dsl),其中抽象数据类型表示具有多个低级分布实现的分布领域抽象,dsl语言不会定义某一低级分布实现。

使用dsl允许烧录器使用高级抽象写入程序,所述程序可映射到较低等级语言并在分布式环境中以高性能级(即,在从源代码的高级抽象映射到低级指令以供分布式系统执行时,未带来明显的性能损失)执行。

在同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置的第十可能实施形式中,以高级语言编写的程序通过自动虚拟化和分级评估方法变换成基于图的抽象ir,所述分级评估方法标识以高级语言编写的代码的至少一部分,其中提供所标识的代码的至少一部分以用于基于索引集合数据类型将所述至少一部分中的每一运算转换成基于向量的形式,以创建基于图的ir的基于向量的表示。

优化可在每一抽象等级处执行,从而提高程序的整体性能。

在第十一可能实施形式中,提供一种从程序表示产生在分布式处理系统上执行的代码的方法,其中所述方法用于操作同样根据第一方面或根据第一方面的先前实施形式中的任一个的装置。

在第十二可能实施形式中,提供一种存储在计算机可读介质上的计算机程序,所述计算机程序在由计算机的处理器执行时运行先前方法。

除非另外定义,否则本文所使用的所有技术和/或科学术语都具有与本发明所涉及领域的技术人员通常所理解的相同的含义。尽管与本文中所描述的方法和材料类似或等效的材料和方法可以用于本发明的实施例的实践或测试,但下文描述了示例性方法和/或材料。在冲突的情况下,以本专利说明书,包含定义,为准。此外,材料、方法和实例仅为说明性的,且并不意图为必需的限制。

附图说明

此处仅作为示例,结合附图描述了本发明的一些实施例。现在具体结合附图,需要强调的是所示的项目作为示例,且是为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。

在附图中:

图1是根据本发明的一些实施例的用于从在分布式处理系统内执行的高级程序表示产生低级代码的计算机实施方法的流程图;

图2是根据本发明的一些实施例的从在分布式处理系统内执行的高级程序表示产生低级代码的系统的组件的框图;

图3是基于现有技术方法的ndp的低效删除的示意性图解;

图4是根据本发明的一些实施例的表示基于索引集合抽象数据类型的抽象数据类型和实现的不同实例的示意图;

图5是根据本发明的一些实施例的转换高级程序表示以产生基于图的抽象ir的自动虚拟化模块的示意性图示。

图6是根据本发明的一些实施例的说明当前抽象等级的代码和相关联的同构特化之间的关系的示意图;

图7是根据本发明的一些实施例的描绘基于同构特化的代码的选择而从当前抽象等级转换到一个较低抽象等级的示意图;

图8是根据本发明的一些实施例的描绘向量化的示例性过程的数据流图;

图9是根据本发明的一些实施例的描绘低抽象等级处的代码的一部分的示意图,所述低抽象等级处的代码的一部分使用进行向量化和同构特化的选择的索引集合抽象数据类型实施;

图10是根据本发明的一些实施例的描绘用于创建源代码的向量形式的可执行代码的源代码数据流的示意图;以及

图11是根据本发明的一些实施例的使用基于本文中所描述的系统和/或方法的程序提供实验结果的表格。

具体实施方式

本发明在它的一些实施例中涉及用于产生在分布式处理系统中执行的程序实现的系统和方法,并且更具体地但非排他性地说,涉及用于优化用于在分布式处理系统内执行的程序的实现的系统和方法。

本发明的一些实施例的方面涉及向量化代码(可由处理单元实施),所述向量化代码将以高级抽象编程语言编写的程序表示的运算转换成基于向量的形式,以创建程序的基于向量的表示。基于向量的表示转译成低级语言并由分布式处理系统执行。程序表示的高级运算到向量表示的转换允许烧录器使用嵌套数据并行(nesteddataparallelism,ndp)写入程序,例如,使用数据对象的分布式集合写入程序。

向量化代码将程序表示的抽象数据类型映射到一个或多个索引集合数据类型(例如,由库、文件或其它表示定义)。每一索引集合数据类型表示某一数据类型的元素集合。元素集合中的每一元素可由索引接入。使用索引集合数据类型表示的程序运算被转换成基于向量的形式,以创建程序的基于向量的表示。

向量化代码基于索引集合数据类型将程序表示的ndp运算转换成向量类似物。基于对应的高级ndp运算的低级向量形式实施可通过向分布式处理系统中的多个计算节点分布低级指令而执行,可选地通过由计算节点进行并行处理。

程序表示的抽象数据类型可基于多级阶层式数据结构(例如,存储为库、文件或其它表示),其中抽象等级中的一个等级处的每一数据结构是基于较低抽象等级(即,低于由阶层结构定义的等级的一个等级)的一个或多个数据类型。索引集合数据类型被定义为阶层结构的最低等级。

可选地,每一抽象等级处的程序表示通过代码(例如,编译程序)进行优化,并作为输入馈送到下一较低抽象等级,其中较低等级处的程序表示进行优化。可以迭代方式进行这一过程,从而优化每一抽象等级处的程序表示,直到到达最低等级,并且程序表示被转换成向量形式。可在每一抽象等级处执行优化,包含当前抽象等级的同构特化的选择(例如,基于性能指标)、程序指令的优化和程序表示的基于图的表示的优化。

可选地,在每一抽象等级(即,由阶层式数据结构定义)处,可通过处理器实施的代码将当前抽象等级处的程序的中间表示(intermediaterepresentation,ir)转换成一个较低抽象等级处的ir表示。每一等级处的ir表示可进行优化。

应注意,在使用索引集合层实施的抽象等级上执行向量化,所述索引集合层是在分布式执行环境中执行的可执行低级代码(lowlevelcode)上方的层。

在详细解释本发明的至少一个实施例之前,应理解,本发明在其申请中不必限于在以下描述中阐述和/或在附图和/或实例中所说明的组件和/或方法的建构以及布置的细节。本发明能够具有其它实施例或以各种方式实践或进行。

本发明可以是一种系统、方法和/或计算机程序产品。计算机程序产品可包含一个或多个计算机可读存储介质,所述计算机可读存储介质上具有计算机可读程序指令以使处理器执行本发明的各方面。

计算机可读存储介质可以是能够保持和存储供指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于:电子存储设备、磁性存储设备、光学存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适组合。

本文中所描述的计算机可读程序指令可以从计算机可读存储介质下载到相应计算/处理设备,或通过例如因特网、局域网、广域网和/或无线网络等网络下载到外部计算机或外部存储设备。

计算机可读程序指令可完全在用户的计算机上执行、部分地在用户的计算机上执行、作为独立软件包执行、部分地在用户的计算机上且部分地在远程计算机上执行,或完全在远程计算机或服务器上执行。在后一情形中,远程计算机可通过任何类型的网络连接到用户的计算机,包含局域网(localareanetwork,lan)或广域网(wideareanetwork,wan),或者可连接到外部计算机(例如,使用因特网服务提供方通过因特网)。在一些实施例中,包含例如可编程逻辑电路、现场可编程门阵列(field-programmablegatearray,fpga)或可编程逻辑阵列(programmablelogicarray,pla)的电子电路可以通过利用计算机可读程序指令的状态信息将电子电路个人化而执行计算机可读程序指令,以便执行本发明的各方面。

本文参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图图解和/或框图来描述本发明的各方面。应理解,可以通过计算机可读程序指令来实施流程图图解和/或框图中的每个框,以及流程图图解和/或框图中的框的组合。

图中的流程图和框图说明根据本发明的各种实施例的系统、方法和计算机程序产品的可能实施方案的架构、功能性和操作。这样,流程图或框图中的每个框可表示模块、片段或指令的部分,所述指令包括用于实施指定逻辑功能的一个或多个可执行指令。在一些替代实施方案中,框中提及的功能可以不按图中所提及的次序进行。例如,根据所涉及的功能性,连续示出的两个框实际上可以大体上同时执行,或这些框有时可以相反次序执行。还应注意,框图和/或流程图图解中的每个框,以及框图和/或流程图图解中的框的组合可以通过专用的基于硬件的系统实施,所述系统执行指定功能或动作,或实行专用硬件和计算机指令的组合。

现在参考图1,图1是根据本发明的一些实施例的用于从在分布式处理系统内执行的高级程序产生低级代码的计算机实施方法的流程图。方法优化每一抽象等级处的程序的ir,并基于索引集合数据类型,将最低抽象等级处的ir转换成向量表示。还参考图2,图2是根据本发明的一些实施例的允许烧录器写入包含ndp的高级程序的系统200的组件的框图,所述高级程序可使用分布式处理系统的多个节点并行地执行。图1的方法可通过图2的装置和/或系统来执行。

系统和/或方法将高级程序表示的运算转换成低级向量类似物,从而允许以分布式方式执行程序的运算(即,将数据和/或计算分布到不同节点以供并行处理),而不是例如,将存储在不同节点中的数据收集到主节点(所述主节点可能没有足够的内存来存储所有所收集的数据),在主节点处执行所收集的数据的运算,并将结果重新分布到相应的节点。

本文中所描述的系统和/或方法并不是简单地用向量类似物依序替换每一高级运算,就像一些现有技术方法所做的那样,因为这样做不会从代码中删除ndp,例如,如图3的示意图所描绘,图3的示意图描绘通过基于现有技术方法,用向量类似物依序替换每一运算(向量化306)创建的ndp代码302和对应的无ndp代码304。此类程序的执行例如通过将数据收集到中心节点、执行运算并重新分布结果来执行(308),这会导致程序的执行产生瓶颈,因为运算无法像最初编程得那样并行执行(310)。尽管根据应用程序编程接口(applicationprogramminginterface,api)语法,程序代码可为有效的,并且可以进行编译,但是由于并行映射函数的主体中的并行lookup运算(ndp),所编译的代码无法并行执行。为了使用现有技术方法执行程序,可通过用用于lookup的向量类似物替换并行map来删除ndp,这是基于将数据收集到主节点、依序处理数据并重新分布结果。应注意,当主节点无法处理所收集的数据(例如,内存不够和/或处理资源不够)时,程序在运行期间可能无法执行或失败。如在图3中所概括,现有技术方法无法使用并行架构处理高级ndp。相比之下,本文中所描述的系统和/或方法将抽象数据类型映射到索引集合数据类型形式,所述索引集合数据类型形式被转换成向量表示,并且允许向量化格式由分布环境中的不同节点并行地执行,即,不需要将数据收集到主节点来执行运算。

在102处,接收以高级编程语言编写的程序202的表示。程序202可以是完整的程序,或程序的一部分(例如,函数)。程序202可包含源代码,或ir表示(例如,数据流图),或经编译代码,或其它人类和/或计算机可读指令。程序202可接收为文件、一组网络消息(例如,包)或可本地和/或远程地存储在存储设备(例如,硬盘驱动器、服务器外部存储器)上的其它格式。程序202可通过烧录器使用客户端终端212(例如,计算机、笔记本电脑、服务器、移动设备)创建,例如,如本文中所描述。

程序表示202可通过用于接收程序表示202的数据接口205(例如,网络连接、连接端口、无线接口、外部存储器设备连接)由装置204(例如,计算机、服务器、移动设备、联网的计算机、分布式系统或其它计算单元)接收。

装置204包含一个或多个处理单元206(例如,中央处理单元、数字信号处理单元、现场可编程门阵列、定制电路),所述处理单元206实施存储于存储器208(和/或其它本地和/或外部和/或远程存储设备,例如,硬盘驱动器、随机存取存储器、光盘驱动器、其它存储设备)中的代码。

装置204与分布式执行环境216通信。装置204将程序表示202从高级抽象表示变换成可由分布式执行环境216执行的低级代码。

分布式执行环境216(在本文中也被称作分布式系统或分布式处理系统)可组织为异质分布式处理系统和/或均质分布式处理系统。分布式执行环境216包含多个计算节点,每一计算节点包含一个或多个处理器。处理器可具有不同类型或类似类型。处理器可使用不同指令集架构或类似指令集架构。处理器可具有不同架构设计,例如,中央处理单元(centralprocessingunit,cpu)、图形处理单元(graphicalprocessingunit,gpu)、现场可编程门阵列(fieldprogrammablegatearray,fpga)、用于与其它单元介接的处理器,和/或专用硬件加速器(例如,编码器、解码器和加密协处理器)。

程序表示202包含用于处理表示为抽象数据类型的数据的多个运算。抽象数据类型可基于数据结构库210定义,所述数据结构库210可本地地存储在存储器208上、另一存储设备上,和/或远程地存储在服务器或与装置204通信的存储设备上。

抽象数据类型表示领域对象,例如,编程语言是领域专用语言(domainspecificlanguage,dsl)时的领域专用对象。抽象数据类型的实例包含:矩阵、向量和图。dsl可提供较高抽象等级的数据类型,和/或比其它编程语言所提供的更通用的抽象数据类型,例如低级编程语言,和/或未专门设计成处理与dsl相同的领域中的问题的编程语言。dsl可以是预先存在的可用dsl,或自定义开发dsl,例如,用于统计计算的r编程语言,和用于数据库的结构化查询语言(structuredquerylanguage,sql)编程语言。

数据结构库210为可用于dsl的每一领域对象定义抽象接口。例如,领域对象可以在面向对象的范例中实施,例如抽象类。接口可提供对对象属性和/或对象方法的接入。本文所使用的术语“抽象数据类型”可指代此类领域对象。

每一领域对象可基于一个或多个具体实现而实施。具体实现可以在面向对象的范例中实施,例如扩展对应的抽象类并实施抽象类的接口的类型。每一具体实现包含为抽象对象表示定义数据结构的一个主要构造函数。每一主要构造函数可基于一个或多个其它领域对象和/或基于基本类型。

每一抽象数据类型可映射到一个或多个具体数据类型或较低等级的一个或多个抽象数据类型。每一具体数据类型可被提供到定义在分布式处理系统上执行的程序的数据分布的低级语言的api。抽象数据类型可在由低级语言定义的多个不同的数据分布实现中实施。抽象数据类型独立于任何专用数据分布定义。

抽象数据类型的不同实现(可选地,具体)是同构的。如本文中所使用,术语同构是指持有相同的信息量并且可从彼此获得(即,可互换和/或可转换)的不同实现。

抽象数据类型包含索引集合抽象数据类型,其表示某一数据类型的元素集合,其中元素集合中的每一个元素可由索引接入。例如,抽象数据类型索引集合[t]表示t型元素集合,其中定义了索引接入运算。一个或多个具体实现可针对索引集合数据类型定义。例如,索引集合[t]可具有基于阵列[t]数据类型的具体实现中的一个。

现在参考图4,图4是根据本发明的一些实施例的表示基于索引集合抽象数据类型的较高等级抽象数据类型和一个较低等级抽象数据类型实现的不同实例的示意图。较低等级处的抽象数据类型彼此同构。

抽象数据类型矩阵[t]402可通过同构数据类型复合矩阵404a和扁平矩阵404b实施。复合矩阵404a使用由箭头406a所示的索引集合数据类型[向量]实施。扁平矩阵404b使用由箭头406b所示的索引集合数据类型[t]实施。

抽象数据类型向量[t]412可通过同构数据类型密集向量414a和稀疏向量414b实施。密集向量414a使用由箭头416a所示的索引集合数据类型[t]实施。稀疏向量414b使用由箭头416b所示的索引集合数据类型[int]和[t]实施。

抽象数据类型索引集合[t]422可通过同构数据类型阵列集合424a和spark索引集合424b实施。阵列集合424a使用由箭头426a所示的阵列[t]类型实施。spark索引集合424b使用由箭头426b所示的rdd[(int,t)]类型实施。(rdd=由apachesparktm定义的弹性分布式数据集)。

现在返回参考图1的框102,抽象数据类型是基于阶层式数据结构(阶层式数据结构可进行定义和/或存储在数据结构库210中。)。阶层式数据结构定义抽象等级,以及相对较高抽象等级的每一抽象数据类型和相对较低抽象等级的一个或多个抽象数据类型之间的关系(例如,映射)。例如,抽象类型矩阵可以由相对较低等级抽象数据类型向量阵列表示。每一向量抽象数据类型可以由相对较低抽象数据类型元素阵列表示。

图4以图形方式说明抽象数据类型和具体实现之间的依赖性关系,所述依赖性关系可形成阶层式数据结构。如图所示,矩阵402可通过复合矩阵404a实施,所述复合矩阵404a通过向量412实施,所述向量412通过密集向量414a和稀疏向量414b实施,密集向量414a和稀疏向量414b两者都使用索引集合[t]422实施。

应注意,向量412可能不使用较高等级矩阵402数据类型实施。如果在数学上表达关系,在抽象类型a基于类型b而具有一个或多个具体实现的情况下,a取决于b。此关系自然地具有传递性属性:如果a取决于b且b取决于c,那么a取决于c。如果规定不允许循环依赖性,那么依赖性关系允许构建对应的次序。

返回参考图1的框102,索引集合数据类型被定义为位于阶层式数据结构的底部。索引集合数据类型被定义为映射到可被提供到api接口222以在分布式执行环境216内执行的一个或多个低级具体实现。

阶层式数据结构通过允许在每一抽象等级处(例如,依序)执行优化来提高程序的执行性能,如本文中所描述。可转换成向量表示且位于阶层式数据结构的底部的索引集合数据类型允许在到达索引集合等级之前进行优化,这提高程序的执行性能。

可选地,数据结构库210替代提供对元素的索引接入的预先存在的抽象类的定义,例如由高级编程语言定义的抽象类。数据结构库210可重定义基于索引集合抽象数据类型实施的抽象类,这允许预先存在的抽象数据类型变换成向量表示以在分布式处理系统内并行执行。

程序表示202可以是烧录器使用高级编程语言编写的源代码,所述高级编程语言可选地是领域专用语言(domainspecificlanguage,dsl)。dsl可被设计成用于编写分布式程序,和/或可被设计成在分布式环境内执行在某一领域中编写的程序。烧录器可使用表示分布领域抽象的定义的抽象数据类型写入程序表示202,所述分布领域抽象具有多个可用低级分布实现,而不需指定针对分布领域抽象使用哪一低级实现。dsl语言可能不会定义低级分布实现,从而允许本文中所描述的代码基于向量格式和/或在不同抽象等级处执行的其它优化而选择低级分布实现。

使用dsl允许烧录器使用高等级抽象写入程序,所述程序可映射到较低等级语言并在分布式环境中以高性能级(即,在从源代码的高等级抽象映射到低等级指令以供分布式系统执行时,未带来明显的性能损失)执行。

在104处,以高级语言(例如,源代码)编写的程序变换成ir,可选地基于图的抽象ir。代码虚拟化可包含从呈高级语言形式的表示抽象出抽象数据类型和/或语言构造。可通过作为自动虚拟化模块214a实施存储在存储器208中的代码(或与处理单元204通信)的装置204的处理单元206自动执行变换。可替代地或另外,代码虚拟化可由烧录器手动执行。

自动虚拟化模块214a可存储代码指令以指定以高级语言编写的代码的一个或多个部分。每一代码部分可进行标识并被指定为包含在执行程序时相当重要的代码和/或运算,例如,在执行程序时被调用多次的函数、被执行多次的回路,以及依赖于数据来做出对执行程序来说很关键的决策的决策分支。

标识每一代码部分以基于索引集合数据类型,将每一部分的运算转换成基于向量的形式,从而创建基于图的ir的基于向量的表示,如本文中所描述。

自动虚拟化模块214a可内嵌一个或多个数据对象,可选地,程序表示的数据结构库,例如,作为所标识的热点的标签。在优化程序的转换后的ir的过程中可以使用内嵌的数据结构库和/或热点的标记,如本文中所描述。

可对每一抽象等级处的所标识的代码部分执行优化,从而当程序的最低等级表示在分布式执行环境中执行时可以提高程序的整体性能。

自动虚拟化模块214a可基于在当前抽象等级处定义的数据类型,将程序的高级表示转换成包含一个或多个互连节点的数据流图,每一互连节点表示程序表示的运算。应注意,如本文所论述,程序的每一ir被转换成相对较低的抽象等级。在最低抽象等级处的图表示使用索引集合数据类型。

现在参考图5,图5是根据本发明的一些实施例的可选地实施为配置文件504的自动虚拟化模块502(例如,图2的自动虚拟化模块214a)的示意性图示,自动虚拟化模块502转换包含多个所标识的热点508的高级程序表示506(例如,图2的程序表示202)以产生基于图的抽象ir510。热点508可使用数据结构库512而在程序表示506中内嵌和/或标记。

现在返回参考图1,在106处,向编译程序214b(例如,存储在存储器208上和/或在另一本地和/或远程存储设备上)提供程序表示202的基于图的抽象ir,所述编译程序214b包含供装置204的处理单元206实施的代码。编译程序214b包含针对程序的ir的每一抽象等级执行分级评估的代码指令。编译程序214b优化每一抽象等级的程序的ir。编译程序214b可执行图变换以优化基于图的ir,例如,减少运算节点的数目,改变运算节点的次序,用不同节点替换运算节点,和/或增加运算节点的数目(例如,当替换的节点被估计为相比于先前节点提高了执行环境中的性能时)。

编译程序214b可通过接收当前抽象等级ir表示、优化当前抽象ir、将当前抽象ir转换成较低抽象等级,并重复将所接收的较低抽象等级ir表示为当前抽象等级的过程来依序执行优化。可在每一抽象等级处执行优化,从而提高程序的整体性能。

在108处,存储在同构特化模块214c中的可由装置204的处理单元206实施的代码(存储在存储器208上和/或在与装置204通信的另一存储设备上)选择当前抽象等级处的程序的ir的一个或多个指令集的同构特化。同构特化的选择可基于实际接收输入218和/或基于供在分布式执行环境216内运行的程序表示202处理的预测输入218而动态地执行。可替代地或另外,基于所选择的同构特化,可通过同构特化214c动态地创建代码。如本文中所使用,术语同构特化的选择和同构特化的代码的自动创建可互换。基于实际接收输入,每一抽象等级的同构特化的动态选择(和/或代码的动态创建)提高了分布环境中的程序的执行性能。每一等级可基于实际输入而动态地优化,从而提高了在分布环境中执行的程序的最低等级的性能。

同构特化选自可存储在存储器208和/或(本地和/或远程定位的)同构特化模块的外部库中的一组预定义同构特化。基于比当前抽象等级低的一个抽象等级处的抽象数据类型,每一同构特化具有不同实现。每一同构特化在处理输入值时产生相同结果。每一同构特化的实际性能当在分布式执行环境216内处理不同输入值(具有不同绝对值、类型和/或表示)时可为不同的。例如,在输入值的一些情况下,稀疏矩阵实现的性能可优于密集矩阵实现。在输入值的其它情况下,在相同的分布式执行环境内,密集矩阵表示的性能可优于稀疏矩阵实现。

每一同构特化包含用于使用ir的当前抽象等级处的抽象数据类型(即,最低抽象等级处的基于向量的形式)处理接收输入值218的代码。同构特化的选择可基于当使用针对当前抽象等级而定义的相应抽象数据类型(即,最低抽象等级处的ir的基于向量的表示)处理接收输入值218时的每一个同构特化的性能指标。选择表示在由相应的同构特化处理时的输入值218的最佳预测和/或实际性能的同构特化。

性能指标可表示在分布式执行环境中由相应的同构特化执行输入值的先前和/或当前性能。例如,可从模拟性能指标和/或以实验方式确定的性能指标的数据库获得性能指标,所述性能指标表示输入的不同的可能绝对值和/或类型。

数据处理接口205可接收输入值218以供当前抽象等级处的程序的ir的指令集处理。可替代地,输入值218可以是基于预测为在执行期间通过程序接收的输入的估计输入。输入值218可例如作为网络消息、作为信号通过功能、通过api和/或其它接口从用户、从存储的文件、从远程服务器、从另一程序和/或从分布式执行环境216接收。输入值218可以是供程序表示202在分布式执行环境216内处理的实际值,例如,从存储的数据库获得的值、从用户输入获得的值和/或从其它程序和/或功能获得的值。

现在参考图6,图6是根据本发明的一些实施例的说明当前抽象等级处的代码和相关联的同构特化之间的关系的示意图。同构特化模块214c从多个可用同构特化中选择包含某一同构特化的代码。

同构特化模块214c接收当前抽象等级处的程序的ir表示,例如,将矩阵a与矩阵b相乘602的运算。矩阵相乘602使用由当前抽象等级定义的抽象数据类型实施,所述抽象数据类型表示为抽象数据类型matr604。矩阵相乘602输出抽象数据类型matr的矩阵c610。抽象数据类型matr604可使用一个较低抽象等级处的具体数据类型实施,例如,sparsematr606a和/或densematr606b。

基于不同的可用同构特化,同构特化模块214c自动选择和/或自动产生较低抽象等级处的代码,例如,用于基于输出sparsematr类型的矩阵c612a的sparsematr606a抽象数据类型执行稀疏矩阵相乘608a的代码和/或基于输出densematr类型的矩阵c612b的densematr606b数据类型执行密集矩阵相乘608b的代码。

对于当前抽象等级处的接收矩阵相乘602,同构特化模块214c选择使用稀疏矩阵表示614a执行矩阵相乘的较低抽象等级处的代码,或使用密集矩阵表示614b执行矩阵相乘的较低抽象等级处的代码。

现在返回参考图1,在110处,根据所选择的同构特化,例如,通过用相应的所选择的同构特化替换ir的片段(例如,代码、子图或其它表示),将当前抽象等级处的程序指令的ir转换成下一较低抽象等级。每一ir可在转换成下一较低抽象等级之前在它相应的等级处进行优化,从而提高在运行环境中执行的最低等级处的最终程序的整体执行性能。

同构特化的选择使程序的当前ir的抽象等级降低一级。基于针对当前抽象等级而定义的抽象数据类型,每一抽象等级包含其自身的同构特化,以及到较低抽象等级的抽象数据类型的映射,例如,由可选地存储在数据结构库210中的阶层式数据结构表示所定义。

现在参考图7,图7是根据本发明的一些实施例的描绘基于同构特化的代码的选择而从当前抽象等级转换到一个较低抽象等级的示意图。框702包含使用scala编程语言编写的高级代码。框704包含基于所选择的同构特化而自动产生的较低等级代码。

框702中的代码是使用矩阵抽象数据类型编写。框704中的代码使用较低等级的抽象数据类型向量和索引集合(它们是矩阵的示例性实现,如本文所论述)。框702中的矩阵专用于向量的较低等级索引集合,例如,用于将矩阵相乘运算(*)转换到它的较低等级表示。

现在返回参考图1,在112处,针对每一抽象等级,可选地依序重复框104、106和108,直到到达使用索引集合数据类型实施的较低抽象等级。如本文中所描述,在每一抽象等级处,编译程序214b优化ir,并且同构特化模块214c选择(和/或自动产生)同构特化代码。

在114处,到达基于阶层式数据结构的最低抽象等级。由装置204的处理单元206实施的代码(例如,存储在存储器208中)将ir的抽象数据类型映射到索引集合数据类型。索引集合数据类型使用具体数据类型实施,所述具体数据类型可在分布式环境中执行。每一个索引集合数据类型表示某一数据类型的元素集合。元素集合中的每一个元素可由索引接入。索引接入允许转换成基于向量的表示,和/或允许使用可由索引接入的索引集合数据类型并行处理多个运算。

在116处,将基于索引集合数据类型的ir的最低等级的运算转换成基于向量的形式,从而创建程序的基于向量的表示(在本文中被称作向量化)。例如,可通过存储在存储器208和/或与装置204通信的另一存储设备中的向量化代码214d执行到向量形式的转换。向量化代码214d由装置204的处理单元206实施。

应注意,在使用索引集合层实施的抽象等级上执行向量化,所述索引集合层是在分布式执行环境216中执行的可执行低级代码上方的层。

向量化代码214d包含用于从程序表示中删除ndp代码的指令。ndp代码可被可由分布式执行环境216执行的向量类似物替换。向量化代码214d包含基于索引集合数据类型用向量类似物转换(和/或替换)索引集合数据类型处的程序表示的嵌套数据并行运算的指令。

向量化代码214d包含用于根据创建可由分布式执行环境216计算的指令的向量形式的一组预定义向量化规则,基于索引集合数据类型映射程序表示的ir的指令的指令。向量形式使得分布式处理执行环境中的程序的执行性能提高。向量化规则可存储为向量化规则存储库220,例如,文件、库,还可存储为人类可读规则,和/或存储为机器指令。向量化规则存储库220可本地和/或远程地存储在存储器208和/或另一存储设备上。

向量化代码214d可包含用于将程序的ir的节点转换成指令的向量形式以创建用于在分布式处理执行环境216中执行的变换后的数据流图的指令。变换后的数据流图在分布式执行环境中的执行性能可提高。

现在参考图8,图8是根据本发明的一些实施例的描绘通过向量化代码214d和/或编译程序或其它代码的指令执行的向量化的示例性过程的数据流图。

使用索引集合抽象数据类型802的当前抽象等级处的ir表示的图表示充当向量化过程804的输入,以创建向量化ir806。

图ir被提供到图形解译器(graphinterpreter,gi)代码808(其可以用向量化代码214d实施并存储在存储器208中)。gi808可创建空的上下文。考虑到节点之间的依赖性,gi可遍历图ir(示出为框810)。

对于图ir的每一节点(或节点群组),分级评估器(stagedevaluator,se)代码812(其可以用向量化代码214d实施并存储在存储器208中)使用向量化规则220以在给定当前上下文中创建图的每一运算的向量形式(示出为框814)。

已经通过se812转换成向量化形式的图ir的每一节点被提供到gi808。gi808用新对(operation→|operation|)更新上下文,并继续遍历图中的节点。所遍历的每一节点(或节点群组)被提供到se812以进行向量化,并通过gi808进行更新。当gi808遍历图ir中的节点时,这一过程持续进行。

在gi808完成图中的节点的遍历后,提供所创建的向量化图806。针对输入程序p的向量化形式|p|创建向量化图ir806。

现在参考图9,图9是根据本发明的一些实施例的描绘低抽象等级处的代码的一部分的示意图,所述低抽象等级处的代码的一部分使用通过向量化代码214d进行向量化以创建代码的向量形式904的索引集合抽象数据类型902实施。根据向量化规则220,例如,示出为向量化规则906,由向量化代码214d执行将代码902转换成向量形式的过程。基于所选择的同构表示(例如,如参考框120所描述),将向量化代码904转换成较低等级的代码908以在分布式执行环境216内执行。

在118处,例如,如参考图1的框106所描述,可选地通过执行一个或多个图变换来优化程序的向量化ir。

在120处,例如,如参考图1的框108所描述,针对向量化ir而选择同构特化。同构特化的实现将向量化ir转换成被设计成在分布式执行环境216内执行的较低等级表示。

在122处,可将使用所选择的同构特化实施的程序的基于向量的表示,例如,作为可执行文件和/或可执行代码部分,提供到低级语言的应用程序编程接口(applicationprogramminginterface,api)222。

在124处,程序表示202的可执行表示在分布式执行环境216中执行。由程序表示202定义的运算的执行通过多个节点并行执行。向量形式允许运算被分布到不同节点,而不是需要将数据收集到主节点并重新分布结果,从而使得分布式处理执行环境中的程序的执行性能提高。

现在参考图10,图10是根据本发明的一些实施例的描绘用于创建在分布式执行环境216中执行的程序的向量形式的可执行代码1004的程序的源代码1002表示的数据流的示意性数据流图。

如本文中所描述,使用数据结构库210编写源代码1002。源代码1002由自动虚拟化模块214a处理(虚拟化1006)以创建抽象ir表示1008,可选地基于图的ir,例如,如参考图1的框104所描述。抽象ir1008处于高抽象等级。降低抽象等级1010的过程由装置204的处理单元206执行,如本文中参考图1的框106到112所描述。

在1012处,通过由编译程序214b执行的一个或多个图变换优化抽象ir,以创建变换后的ir1014,如参考图1的框106所描述。

在1016处,针对变换后的ir1014而选择一个或多个同构特化。同构特化用于将变换后的ir1016转换到一个较低抽象等级,以创建较低抽象等级1018处的ir。针对基于索引集合数据类型1020实施的每一较低抽象等级,迭代当前抽象等级处的ir的变换、同构特化的选择和到较低等级的转换的过程,如参考框114所描述。

基于索引集合抽象数据类型的ir可进行变换(如本文中针对其它抽象等级所描述)和向量化1022,如本文中参考框116所描述。

针对向量化ir1022而选择同构特化以将向量化ir转换成较低等级代码,所述较低等级代码可进行优化(例如变换)以创建ir1024。例如,通过向低级程序的api提供ir1024,从ir1024创建可执行代码1004,如参考框122所描述。可执行代码1004(例如,通过向api提供ir1024产生)在分布式执行环境216内执行。

现在参考图11,图11是根据本发明的一些实施例的提供实验结果的表格,所述实验结果指示基于将高级程序表示的抽象数据类型映射到索引集合数据类型并基于索引集合数据类型将高级程序的运算转换成基于向量的形式,本文中所描述的系统和/或方法提高了分布式处理系统中的程序的执行性能。

本发明人比较了使用本文中所描述的系统和/或方法的包含ndp的程序的性能与另一dpf。基于本文中所描述的系统和/或方法编写的程序用于实施针对协同过滤问题的svd++算法,例如,如http://public.research.att.com/~volinsky/netflix/kdd08koren.pdf中所描述。基于本文中所描述的系统和/或方法,使用ndp编程模型编写程序,并且将所述程序与利用使用apachesparktm的dpf(可获自http://spark.apache.org/graphx/)得到的graphx程序的执行过程比较。

每一程序在4种不同的分布式执行环境中运行,所述分布式执行环境由不同的硬件配置组成。local[4]、local[8]和local[16]是本地sparktm集群,每一集群在具有对应数目的工作线程的一个机器上运行。4节点集群配置是4节点sparktm集群。

实验结果概括在图11的表格中。结果指示基于本文中所描述的系统和/或方法开发的算法相比于以50次迭代(sqrterr=1.32)或100次迭代(sqrterr=1.23)执行的graphx程序具有改进的性能(sqrterr=1.05)。改进的性能是基于本文中所描述的系统和/或方法执行ndp代码的向量形式的并行处理的能力,但是如本文所论述,现有技术方法由于不具有支持ndp代码的并行处理的能力而无法实现此性能。

此外,结果指示基于本文中所描述的系统和/或方法,程序减少了处理时间,这是因为在每一抽象等级处执行了程序表示的优化,如本文中所描述。

对本发明各个实施例的描述只是为了说明的目的,而这些描述并不旨在穷举或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,本领域技术人员可以清楚理解许多修改和变化。相比于市场上可找到的技术,选择此处使用的术语可最好地解释实施例的原理、实际应用或技术进步,或使本领域其他技术人员理解此处公开的实施例。

希望在从本申请逐渐成熟的专利的有效期内,可以开发很多相关的系统和方法,并且术语分布式执行环境的范围旨在包含所有先验的此类新技术。

本文所使用的术语“约”是指±10%。

术语“包括”、“包含”、“具有”以及其变化形式表示“包含但不限于”。这个术语涵盖术语“由……组成”以及“主要由……组成”。

短语“主要由…组成”意指组成物或方法可以包含额外成分和/或步骤,但前提是所述额外成分和/或步骤不会实质上改变所要求的组成物或方法的基本和新颖特性。

除非上下文中另有明确说明,否则此处使用的单数形式“一个”和“所述”包括复数含义。例如,术语“化合物”或“至少一个化合物”可以包含多个化合物,包含其混合物。

此处使用的词“示例性”表示“作为一个实例、示例或说明”。任何“示例性”实施例并不一定理解为优先于或优越于其它实施例,和/或并不排除其它实施例的特点的结合。

此处使用的词语“可选地”表示“在一些实施例中提供且在其它实施例中没有提供”。本发明的任意特定的实施例可以包含多个“可选的”特征,除非这些特征相互矛盾。

在整个本申请中,本发明的各种实施例可以范围格式呈现。应理解,范围格式的描述仅为了方便和简洁起见,并且不应该被解释为对本发明范围的固定限制。因此,对范围的描述应被认为是已经具体地公开所有可能的子范围以及所述范围内的个别数值。例如,对例如从1到6的范围的描述应被认为是已经具体地公开子范围,例如从1到3、从1到4、从1到5、从2到4、从2到6、从3到6等,以及所述范围内的个别数字,例如1、2、3、4、5和6。不管范围的宽度如何,这都适用。

当此处指出一个数字范围时,表示包含了在指出的这个范围内的任意所列举的数字(分数或整数)。短语“在第一个所指示的数和第二个所指示的数范围内”以及“从第一个所指示的数到第二个所指示的数范围内”在这里互换使用,表示包括第一个和第二个所指示的数以及二者之间所有的分数和整数。

应了解,为简洁起见在单独实施例的上下文中描述的本发明的某些特征还可以组合提供于单个实施例中。相反地,为简洁起见在单个实施例的上下文中描述的本发明的各个特征也可以单独地或以任何合适的子组合或作为本发明的任何合适的其它实施例提供。在各个实施例的上下文中描述的某些特征未被视为那些实施例的基本特征,除非没有这些元素所述实施例无效。

此处,本说明书中提及的所有出版物、专利和专利申请都通过全文引用结合在本说明书中,如同每个单独的出版物、专利或专利申请具体且单独地结合在此。此外,对本申请的任何参考的引用或识别不可当做是允许这样的参考在现有技术中优先于本发明。就使用节标题而言,不应该将节标题理解成必要的限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1