一种流应用优化的方法及装置与流程

文档序号:19924962发布日期:2020-02-14 16:48阅读:177来源:国知局
一种流应用优化的方法及装置与流程

本发明涉及计算机技术领域,具体涉及一种流应用优化的方法及装置。



背景技术:

流处理依靠在流计算平台上部署流应用实现,流应用开发人员通过流语言编写流应用的算子代码,根据算子代码构建出该应用的应用流图。该应用的流处理则依靠算子代码和应用流图来实现。应用流图包括算子和数据流,其中算子是承载业务的逻辑处理单元,数据流是算子间交互的数据;应用流图用于描述流应用的数据处理和交互过程。算子代码用于描述应用流图中算子所承载的逻辑。流应用的算子代码的优劣会直接影响应用的性能,而开发高性能流应用存在一定的技术门槛,对于缺乏流式应用开发经验的工程人员,往往开发的流应用性能不高,无法满足业务要求。如何对用户使用流语言开发出的流应用实现优化很有必要。

现有技术中,流计算平台通常不具备优化流应用的算子代码的能力,应用部署到流计算平台之后,如果开发人员不主动更新流应用的算子代码,则该流应用的算子代码就基本会保持不变,流应用的性能无法再提高。



技术实现要素:

本发明实施例提供一种流应用优化的方法,可以自动优化算子代码,从而提高了流应用性能。本发明实施例还提供了相应的装置。

本发明第一方面提供一种流应用优化的方法,包括:

获取待优化的流应用的应用流图和初始算子代码,所述应用流图包含算子,所述初始算子代码用于描述所述算子所承载的初始运算逻辑;根据所述初始算子代码确定所述算子的数据流图,所述数据流图用于描述所述算子对第一输入数据进行运算以得到第一输出数据的逻辑运算过程;根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,所述多条路径中的每条路径都代表一个运算逻辑,所述热点路径为逻辑运算过程中使用次数满足预置条件的运算逻辑,所述满足预置条件的运算逻辑与所述初始算子代码中的局部算子代码对应;优化所述热点路径对应的所述局部算子代码,以得到优化的算子代码。

结合第一方面,在第一种可能的实现方式中,所述应用流图还包括所述算子间的数据流走向,所述方法还包括:

根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,所述应用数据流图用于描述所述各算子的数据流图中的节点对第二输入数据进行运算以得到第二输出数据的逻辑运算过程;确定所述应用数据流图中上游算子向下游算子输出的第一数据的量,以及第二数据的量,所述第二数据的量为:若所述上游算子的第一运算逻辑迁移到所述下游算子中,或所述下游算子的第二运算逻辑迁移到所述上游算子中,所述上游算子向所述下游算子输出的数据的量;当所述第二数据的量小于所述第一数据的量时,在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图;将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

结合第一方面或第一方面第一种可能的实现方式,在第二种可能的实现方式中,所述初始算子代码包括运算变量、运算符号和运算关系;所述根据所述初始算子代码确定所述算子的数据流图,包括:以所述初始算子代码中的所述运算变量和所述运算符号为节点,所述运算关系为边,构建出所述算子的数据流图,所述算子的数据流图的输入节点代表所述第一输入数据,输出节点代表所述第一输出数据。

结合第一方面第二种可能的实现方式,在第三种可能的实现方式中,所述根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,包括:按照所述算子承载的初始运算逻辑的逻辑运算过程,统计从所述第一输入数据输入到所述第一输出数据输出的逻辑运算过程中所述算子的数据流图中各节点和各条边被使用的次数;将节点和边被统计次数最多的路径确定为热点路径。

结合第一方面第三种可能的实现方式,在第四种可能的实现方式中,所述优化所述热点路径对应的所述局部算子代码,得到优化的算子代码,包括:将所述热点路径对应的所述局部算子代码包括的全量运算的操作表达式修改为使用前一次运算结果的增量运算的操作表达式,得到优化的算子代码,所述全量运算的运算量大于所述增量运算的运算量,所述操作表达式由所述运算变量和所述运算符号组成。

结合第一方面第一种可能的实现方式,在第五种可能的实现方式中,所述根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,包括:根据应用流图中算子间的数据流走向,将所述应用流图中各算子的数据流图进行拼接,得到所述流应用的应用数据流图。

结合第一方面第一种或第五种可能的实现方式,在第六种可能的实现方式中,所述在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,包括:确定所述上游算子和所述下游算子的逻辑运算复杂度;当所述上游算子的逻辑运算复杂度高于所述下游算子的逻辑运算复杂度,则将所述第一运算逻辑迁移到所述下游算子中;当所述下游算子的逻辑运算复杂度高于所述上游算子的逻辑运算复杂度,则将所述第二运算逻辑迁移到所述上游算子中。

结合第一方面第一种或第五种可能的实现方式,在第七种可能的实现方式中,所述将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图之后,所述方法还包括:计算优化的应用流图中各算子的复杂度,所述复杂度用于描述单个算子的运算复杂程度;根据所述各算子的复杂度计算所述各算子的并发度,所述并发度用于描述所述各算子间协同运算时的并行程度;根据所述各算子的并发度,为所述各算子配置资源。

本发明第二方面提供一种流应用优化的装置,包括:

获取模块,用于获取待优化的流应用的应用流图和初始算子代码,所述应用流图包含算子,所述初始算子代码用于描述所述算子所承载的初始运算逻辑;第一确定模块,用于根据所述获取模块获取的所述初始算子代码确定所述算子的数据流图,所述数据流图用于描述所述算子对第一输入数据进行运算以得到第一输出数据的逻辑运算过程;第二确定模块,用于根据所述第一确定模块确定的所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,所述多条路径中的每条路径都代表一个运算逻辑,所述热点路径为逻辑运算过程中使用次数满足预置条件的运算逻辑,所述满足预置条件的运算逻辑与所述初始算子代码中的局部算子代码对应;第一优化模块,用于优化所述第二确定模块确定的所述热点路径对应的所述局部算子代码,以得到优化的算子代码。

结合第二方面,在第一种可能的实现方式中,所述装置还包括:第三确定模块,用于根据所述第一确定模块确定的所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,所述应用数据流图用于描述所述各算子的数据流图中的节点对第二输入数据进行运算以得到第二输出数据的逻辑运算过程;第四确定模块,用于确定所述第三确定模块确定的所述应用数据流图中上游算子向下游算子输出的第一数据的量,以及第二数据的量,所述第二数据的量为:若所述上游算子的第一运算逻辑迁移到所述下游算子中,或所述下游算子的第二运算逻辑迁移到所述上游算子中,所述上游算子向所述下游算子输出的数据的量;第二优化模块,用于当所述第四确定模块确定的所述第二数据的量小于所述第一数据的量时,在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图;第三优化模块,用于将所述第二优化模块优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

结合第二方面或第二方面第一种可能的实现方式,在第二种可能的实现方式中,所述第一确定模块,具体用于在所述初始算子代码包括运算变量、运算符号和运算关系时,以所述初始算子代码中的所述运算变量和所述运算符号为节点,所述运算关系为边,构建出所述算子的数据流图,所述算子的数据流图的输入节点代表所述第一输入数据,输出节点代表所述第一输出数据。

结合第二方面第二种可能的实现方式,在第三种可能的实现方式中,所述第二确定模块,具体用于按照所述算子承载的初始运算逻辑的逻辑运算过程,统计从所述第一输入数据输入到所述第一输出数据输出的逻辑运算过程中所述算子的数据流图中各节点和各条边被使用的次数;将节点和边被统计次数最多的路径确定为热点路径。

结合第二方面第三种可能的实现方式,在第四种可能的实现方式中,第一优化模块,具体用于将所述热点路径对应的所述局部算子代码包括的全量运算的操作表达式修改为使用前一次运算结果的增量运算的操作表达式,得到优化的算子代码,所述全量运算的运算量大于所述增量运算的运算量,所述操作表达式由所述运算变量和所述运算符号组成。

结合第二方面第一种可能的实现方式,在第五种可能的实现方式中,所述第三确定模块,具体用于根据应用流图中算子间的数据流走向,将所述应用流图中各算子的数据流图进行拼接,得到所述流应用的应用数据流图。

结合第二方面第一种或第五种可能的实现方式,在第六种可能的实现方式中,所述第二优化模块,具体用于:确定所述上游算子和所述下游算子的逻辑运算复杂度;当所述上游算子的逻辑运算复杂度高于所述下游算子的逻辑运算复杂度,则将所述第一运算逻辑迁移到所述下游算子中;当所述下游算子的逻辑运算复杂度高于所述上游算子的逻辑运算复杂度,则将所述第二运算逻辑迁移到所述上游算子中。

结合第二方面第一种或第五种可能的实现方式,在第七种可能的实现方式中,所述装置还包括:第一计算模块,用于计算所述第三优化模块优化的应用流图中各算子的复杂度,所述复杂度用于描述单个算子的运算复杂程度;第二计算模块,用于根据所述第一计算模块计算的所述各算子的复杂度计算所述各算子的并发度,所述并发度用于描述所述各算子间协同运算时的并行程度;配置模块,用于根据所述第二计算模块计算得到的所述各算子的并发度,为所述各算子配置资源。

本发明第三方面提供一种流应用优化的装置,包括处理器,存储器,通信接口,总线,所述处理器、通信接口和所述存储器通过总线进行相互通信;所述存储器用于存储程序;所述处理器用于执行所述存储器中的所述程序,执行第一方面或第一方面任一可能的实施方式所描述方法,其中所述处理器通过所述通信接口获取待优化的流应用的应用流图和初始算子代码。

与现有技术中流应用的算子代码无法自动优化相比,本发明实施例提供的流应用优化的方法,可以自动对流应用的初始算子代码进行优化,从而提高了流应用的计算性能。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是流计算系统的一示例示意图;

图2是流计算系统的另一示例示意图;

图3是本发明实施例中待优化的流应用的应用流图示意图;

图4是本发明实施例中待优化的流应用的初始算子代码示意图;

图5是图3所示的应用流图中算子m的数据流图;

图6是本发明实施例中算子的数据流图构建的一示意图;

图7为本发明实施例中算子的数据流图构建的另一示意图;

图8是本发明实施例中确定热点路径的一示意图;

图9是图3中算子m优化的算子代码;

图10为假设的图3中算子n的数据流图;

图11为流应用的应用数据流图;

图12是本发明实施例中的应用数据流图的优化示意图;

图13为流应用优化的应用流图;

图14是本发明实施例中流应用优化的方法的一实施例示意图;

图15是本发明实施例中流应用优化的装置的一实施例示意图;

图16是本发明实施例中流应用优化的装置的另一实施例示意图;

图17是本发明实施例中流应用优化的装置的另一实施例示意图;

图18是本发明实施例中流应用优化的装置的另一实施例示意图;

图19是本发明实施例中流应用优化的装置的另一实施例示意图。

具体实施方式

本发明实施例提供一种流应用优化的方法,可以自动优化算子代码,从而提高了流应用的易用性和计算性能。本发明实施例还提供了相应的装置。以下分别进行详细说明。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供的流应用优化的方法可以通过独立的计算机来实现优化,也可以是在流计算系统的主控节点中来实现优化。

流计算系统可以参阅图1进行理解,图1为流计算系统的一示例示意图。

流计算系统包括:主控节点和工作节点,在集群部署时,所述主控节点和工作节点都可以有一个或多个,主控节点可以是与工作节点分离的物理节点,在单机部署时,主控节点和工作节点可以是部署在同一个物理节点上的主控逻辑单元。流计算系统用于调度并处理流应用,具体过程是,主控节点负责将流应用调度到工作节点上进行处理。一台物理节点可以包括一个工作节点,也可以包括多个工作节点,一台物理节点包括的工作节点的数量取决于该物理节点的硬件物理资源。可以将一个工作节点理解为是一份硬件物理资源。属于同一台物理节点中的工作节点间采用进程通信的方式进行通信,属于不同物理节点中的工作节点间采用网络通信的方式进行通信。流计算系统可以将流应用调度到工作节点上进行处理。针对运行在流计算系统上的流应用可以预先建立应用流图,所述应用流图为针对所述流应用预先建立的包含算子和算子间数据流走向的逻辑关系图,所述算子承载有流应用的运算逻辑。本发明实施例中的物理节点指的是物理设备。

如图1所示,流计算系统包括主控节点、工作节点1、工作节点2和工作节点3。工作节点1、工作节点2属于物理节点1,工作节点3属于物理节点2。

主控节点将图1所示的应用流图调度到工作节点1、工作节点2和工作节点3这三个工作节点上进行流应用处理。图1所示的应用流图为包含p1至p9的九个算子以及这九个算子之间的数据流走向的逻辑关系图。

被调度到工作节点1上的算子p1、p2和p3与被调度到工作节点2上的算子p4、p7和p9之间通过进程方式通信,p1、p2和p3,以及p4、p7和p9与被调度到工作节点3上的算子p5、p6、p8之间通过网络通信。

图1中的应用流图只是举例,应用流图可以有很多种,根据具体的流应用而定。

图2是本发明实施例中流应用的优化和部署的流程示意图。

参阅图2,本发明实施例流应用的优化和优化后流应用的部署可以包括三种可能的实现方式:

第一种是在流计算系统之外的计算机上实现流应用的优化,然后将优化的应用流图传输到主控节点中,由主控节点将优化的应用流图部署到各工作节点上,流计算系统之外的计算机可以是开发人员的计算机,也可以是流应用发布者的计算机。

第二种是主控节点从流计算系统之外的计算机上获取未优化的流应用,然后由主控节点实现流应用的优化,然后主控节点再将优化的应用流图部署到各工作节点上。

第三种是主控节点先将未优化的流应用部署到各工作节点上,然后在各工作节点运行时进行动态优化。

上述三种流应用的优化和优化后流应用的部署中,无论是哪一种,具体的优化方式都可以参阅下面将要介绍的流应用优化的方法实施例中的描述进行理解。

图2中所记载的提交流应用可以是未优化的流应用,也可以是优化的流应用,具体可以参阅上述三种可能的方式进行选择。

本发明实施例提供的流应用优化的方法的一实施例包括:

获取待优化的流应用的应用流图和初始算子代码,所述应用流图包含算子,所述初始算子代码用于描述所述算子所承载的初始运算逻辑。

图3为本发明实施例中待优化的流应用的应用流图示意图。如图3所示,应用流图包括算子m和算子n,算子m有两个数据入口,分别是ain0和ain1,从入口ain0输入的数据可以理解为是数据ain0,从入口ain1输入的数据可以理解为是数据ain1。算子m还有一个数据出口aout0,从出口aout0输出的数据可以理解为是数据aout0。算子n有三个数据入口,分别是bin0、bin1和bin2,从入口bin0输入的数据可以理解为是数据bin0,从入口bin1输入的数据可以理解为是数据bin1,从入口bin2输入的数据可以理解为是数据bin2,本发明实施例中,数据aout0从入口bin0输入。算子n还有一个出口bout0,从出口bout0输出的数据可以理解为是数据bout0。

图4为本发明实施例中待优化的流应用的初始算子代码示意图。图4所示出的只是图3中算子m的初始算子代码,算子n的初始算子代码未示出,本发明实施例以算子m的初始算子代码为例介绍本发明实施例中的初始算子代码。算子m的初始算子代码包括运算变量、运算符号和运算关系,运算变量在本发明实施例中可以简称为变量。算子m的初始算子代码包括变量a、变量b和变量c,运算符号包括“+=”、“*”、“=”,运算关系为if(0==@port),else这些条件语句。

需要说明的是,在if语句中b是常量不是变量,else语句中a是常量不是变量。

运算变量和运算符号组成操作表达式,在图4中操作表达式在执行if语句时包括:a+=ain0,c=a*b,c对应着图3中的数据aout0。图4中的ain0即为图3中的数据ain0。在执行else语句时包括:b+=ain1,c=a*b,c对应着图3中的数据aout0。图4中的ain1即为图3中的数据ain1。

本发明实施例中,在获取待优化的流应用的应用流图和初始算子代码后,根据所述初始算子代码确定所述算子的数据流图,所述数据流图用于描述所述算子对第一输入数据进行运算以得到第一输出数据的逻辑运算过程。

其中,所述根据所述初始算子代码确定所述算子的数据流图,可以包括:

以所述初始算子代码中的所述运算变量和所述运算符号为节点,所述运算关系为边,构建出所述算子的数据流图,所述算子的数据流图的输入节点代表所述第一输入数据,输出节点代表所述第一输出数据。

图5为图3所示的应用流图中算子m的数据流图。

如图5所示,根据图4算子代码中所示出的,在执行if语句时有操作表达式:a+=ain0,c=a*b,在执行else语句时有操作表达式:b+=ain1,c=a*b,根据操作表达式a+=ain0可以构建出图5中的路径1,构建原理是a为运算变量,+=为运算符号,所以变量a和运算符号“+=”都为节点,运算关系包括条件语句if这些控制结构和条件语句下的操作表达式a+=ain0所表达出来的运算关系,边指的就是图5中的路径,ain0是第一输入数据。第一数据输入可以理解为是起始节点,第一输出数据可以理解为是结束节点。同理,根据操作表达式b+=ain1可以构建出图5中的路径2,根据操作表达式c=a*b可以构建出图5中的路径3。图4所示的算子代码可以构建图5所示的三条路径,三条路径构建完成,整个算子m的数据流图也就得到了。如果图4所示的算子代码还包含其他操作表达式,要一直将所有的操作表达式够用路径的形式表达出来,才完成最终的数据流图的构建。

图6是本发明实施例中算子的数据流图构建示意图。

算子m的数据流图构建过程具体的还可以参阅图6进行理解,主要分三个步骤:

第一个步骤是根据算子代码构建执行路径图,图6中用①表示:

算子代码可以理解为是由控制结构和操作表达式组成。控制结构用于控制语句执行路径,例如:循环执行、条件执行等。也就是图中所示的if…else语句,操作表达式用于控制算子由第一输入数据到第一输出数据的运算过程,它包括直接作用于算子输出和作用于控制结构从而间接作用于算子输出两类。

执行路径图是基于算子代码构建的,表示算子代码执行顺序,结构示例如图6所示。它由控制结构组成,控制结构内可包含操作表达式和内嵌控制结构。控制结构之间存在先后执行和选择执行关系。同一控制结构内的操作表达式只存在先后执行关系。

根据图6所示的算子代码中所包含的控制结构和操作表达式可以得到图6部分的执行路径图。

第二步骤:根据执行路径图构建操作表达式数据关系图,图6中用②表示:

操作表达式数据关系图是根据执行路径图的操作表达式构建的,表示变量运算关系。它是以运算变量和运算符号为节点,运算关系为边的树型结构。

如图6所示,根据操作表达式:a+=ain0,c=a*b和b+=ain1,c=a*b可以构建出图6所示的据操作表达式数据关系图。

第三步骤:根据操作表达式数据关系图构建算子的数据流图,图6中用③表示:

算子的数据流图是基于操作表达式数据关系图构建的,它以算子输出为输出节点,算子输入为输入节点,对于非算子输入的输入节点,则以生成它的表达式数据关系图进行替换,直到所有输入节点均为算子输入。非算子输入的输入节点存在多个时,按照所在算子表达式和控制结构反向执行顺序选择就近的表达式数据关系图。

根据操作表达式数据关系图构建数据流图可以理解为是路径拼接的过程,例如:如图7所示,第一步完成图5中路径1的拼接,图7中用①表示,第二步完成图5中路径2的拼接,图7中用②表示。从而得到算子m的数据流图。

因本发明实施例中未用图示出算子n的算子代码,所以在此处说明中暂不描述算子n的数据流图的构建过程,但不管算子n的算子代码如果描述,构建原理与算子m是相同的,算子n的数据流图的构建过程只需根据算子n的算子代码,参考算子m的数据流图的构建原理理解即可。

当然,上述只是部分构建算子的数据流图的方案,其他只要能描述清楚从第一数据输入到第一数据输出所经历的逻辑运算过程的流图都可以等同与本发明实施例中的算子的数据流图。

在每个算子的数据流图都构建完成后根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,所述多条路径中的每条路径都代表一个运算逻辑,所述热点路径为逻辑运算过程中使用次数满足预置条件的运算逻辑,所述满足预置条件的运算逻辑与所述初始算子代码中的局部算子代码对应。

本发明实施例中,确定数据流图中的热点路径有多种方案,例如:如图5所示,无论是执行if语句,还是执行else语句,都有路径3的逻辑运算过程,所以路径3被使用的次数自然是最多的,就可以确定出图5中的路径3为热点路径。

下面再介绍一种确定热点路径的方案:

所述根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,可以包括:

按照所述算子承载的初始运算逻辑的逻辑运算过程,统计从所述第一输入数据输入到所述第一输出数据输出的逻辑运算过程中所述算子的数据流图中各节点和各条边被使用的次数;

将节点和边被统计次数最多的路径确定为热点路径。

统计的过程可以是遍历所述每个算子输入至输出的每条路径,遍历完成后即可完成统计。

具体的确定过程可以参阅图8进行理解,图8为本发明实施例中确定热点路径的过程示意图:

算子的数据流图构建好后,按照算子代码遍历算子的数据流图,在算子的数据流图中,每个节点都会有1个统计数值,初始值为0。根据算子代码逻辑遍历数据流图,执行的操作表达式相关节点统计数值加1。算子代码逻辑遍历完成后,在数据流图中查找统计数值较大节点所在的路径,即热点路径。

当然,本发明实施例中查找的是统计数值最大节点所在路径,实际上也可以是设置阈值,只要超过阈值就可以认为是热点路径。

如图8所示,算子代码中有四个操作表达式,a+=ain0,c=a*b和b+=ain1,c=a*b,分别用①②③④来标记。然后按照算子代码开始遍历数据流图,按照①所标记的a+=ain0遍历时,分别在节点a和a所在路径的运算符号“+=”的统计值上+1,因初始值是0,所以节点a和a所在路径的运算符号“+=”的统计值变为1,具体如图8中的左上角标记①的算子的数据流图所示。接下来再按照②所标记的c=a*b遍历时,分别在节点a、节点b、节点“*”、节点“=”、节点c的统计值上+1,因节点a的统计值已经是1,则在左上角标记②的图中,节点a的统计值变为2,其他节点b、节点“*”、节点“=”、节点c的初始值都是1,在+1后,统计值都变为1,具体如图8中的左上角标记②的算子的数据流图所示。然后再按照③所标记的b+=ain1遍历时,分别在节点b、节点b所在路径的节点“+=”的统计值上+1,则节点b的统计值变为2,节点b所在路径的节点“+=”的统计值变为1,具体如图8中的左上角标记③的算子的数据流图所示。接下来再按照④所标记的c=a*b遍历时,分别在节点a、节点b、节点“*”、节点“=”、节点c的统计值上+1,则节点a、节点b、节点“*”、节点“=”、节点c的统计值分别变为3、2、2、2、2。具体如图8中的左上角标记④的算子的数据流图所示。

由第④个算子的数据流图中的统计值可以确定热点路径,也就是其中各个节点的统计值都是最高的路径。

确定热点路径后,可以确定该热点路径对应的局部代码,如图8所示的热点路径对应的局部算子代码为a+=ain0,c=a*b和b+=ain1,c=a*b,则可以通过优化所述热点路径对应的所述局部算子代码,得到优化的算子代码。

所述优化所述热点路径对应的所述局部算子代码,得到优化的算子代码,可以包括:

将所述热点路径对应的所述局部算子代码包括的全量运算的操作表达式修改为使用前一次运算结果的增量运算的操作表达式,得到优化的算子代码,所述全量运算的运算量大于所述增量运算的运算量,所述操作表达式由所述运算变量和所述运算符号组成,所述全量运算的操作表达式属于局部算子代码。

本发明实施例中全量运算就是每一次都需要重新计算一次变量,增量运算是通过前一次的运算结果来计算本次的运算结果,不需要再重新计算一次变量。

图9为图3中算子m优化的算子代码。

如图9所示,通过保存前一次的计算结果c,就可以将a+=ain0,c=a*b修改为c+==ain0*b,在if语句中b是常量不是变量。将b+=ain1,c=a*b修改为c+==ain1*a,在else语句中a是常量不是变量。由此可见,每次只需要计算一次就可以得到c,减少了计算量,提高了计算效率,而且是自动优化算子代码,不需要人工二次优化,提高了算子代码的易用性。

在算子代码优化后,还可以对应于流应用的应用流图进行优化。

应用流图的优化方案可以是:

根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,所述应用数据流图用于描述所述各算子的数据流图中的节点对第二输入数据进行运算以得到第二输出数据的逻辑运算过程;

确定所述应用数据流图中上游算子向下游算子输出的第一数据的量,以及第二数据的量,所述第二数据的量为:若所述上游算子的第一运算逻辑迁移到所述下游算子中,或所述下游算子的第二运算逻辑迁移到所述上游算子中,所述上游算子向所述下游算子输出的数据的量;

当所述第二数据的量小于所述第一数据的量时,在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图;

将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

需要说明的是,本发明实施例中的第一输入数据、第一输出数据、第二输入数据和第二输出数据并不代表数量,也不代表顺序,只是为了方便不同场景下进行说明,分别用第一和第二进行标示。本发明实施例中,第一用于算子的数据流图的场景,第二用于应用数据流图的场景。

结合上述对图5所示算子m的数据流图的描述,图5中已构建出来算子m的数据流图,虽然本发明实施例中未给出算子n的算子代码,在假定算子n的算子代码存在的条件下构建出图10所示的算子n的数据流图。

算子m和算子n的数据流图都构建好后,根据图3所示的应用流图中的数据流走向,由m到n,确定该流应用的应用数据流图。

实际上,所述根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,可以包括:

根据应用流图中算子间的数据流走向,将所述应用流图中各算子的数据流图进行拼接,得到所述流应用的应用数据流图。

图11所示,将算子m和算子n的数据流图按照图3所示应用流图中数据流的走向拼接到一起,就得到了流应用的应用数据流图。

本发明实施例中上游算子和下游算子指的是数据传输方向上的上和下,并不代表实际地理位置。而且,本发明实施例中的上游算子和下游算子是直接有数据传输关系的两个算子。例如:图3中的算子m为上游算子,算子n为下游算子。

因算子m需要向算子n传输数据,这样就涉及到传输的数据的量,如果传输的数据的量大则必然浪费传输资源,这样,也就有了本发明实施例中进一步的优化方向。

因需要进一步优化的前提的根据传输的数据的量做出的,所以需要确定所述应用数据流图中上游算子向下游算子输出的第一数据的量。

第一数据的量可以通过数据的个数、数据的类型等参数来确定,以数据个数为例:例如:第一数据中包含一个n*n的矩阵,则可以确定数据个数为n*n,如果将上游算子中的第一运算逻辑和下游算子中的第二运算逻辑迁移到同一个算子中,再计算下上游算子向下游算子的输出的第二数据的量是否有减少,如果有减少,则说明可以通过运算逻辑迁移的方式来优化应用数据流图,从而可以减少数据传输的资源开销。本发明实施例中的同一个算子指的是所述上游算子或所述下游算子。如果上游算子中的第一运算逻辑和下游算子中的第二运算逻辑迁移到同一个算子中再输出的第二数据中包含一个n*1的矩阵,则说明第二数据的量比第一数据的量有减少,则可以在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图。

本发明实施例中的第一运算逻辑指的是上游算子中的部分或全部运算逻辑,第二运算逻辑指的是下游算子中的部分或全部运算逻辑。

其中,所述在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,包括:

确定所述上游算子和所述下游算子的逻辑运算复杂度;

当所述上游算子的逻辑运算复杂度高于所述下游算子的逻辑运算复杂度,则将所述第一运算逻辑迁移到所述下游算子中;

当所述下游算子的逻辑运算复杂度高于所述上游算子的逻辑运算复杂度,则将所述第二运算逻辑迁移到所述上游算子中。

图12为本发明实施例中的应用数据流图的优化示意图。

如图12所示,算子m的运算逻辑为第一运算逻辑,算子n中的部分运算逻辑为第二运算逻辑,算子m的输出数据aout0要传输给算子n的入口bin0,按照上述实例中的判断,确定数据aout0为大数据集,需要占用大量传输资源,如果将第一运算逻辑与第二运算逻辑合并则数据aout0就会成为小数据集,只需要少量的传输资源,因此,可以将第一运算逻辑和第二运算逻辑合并到一个算子中。

具体是将第二运算逻辑迁移到算子m中还是将第一运算逻辑迁移到算子n中,可以结合算子m和算子n的复杂度进行判断,如图12所示,算子n的复杂度远远高于算子m的复杂度,因此,可以将第二运算逻辑迁移到算子m中,得到优化的应用数据流图。

得到优化的应用数据流图后,可以将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

图13为流应用优化的应用流图。如图13所示,原来从算子n的入口bin1输入算子n的数据bin1,优化后从算子m输入。从而减少了算子m和算子n之间传输的数据量,提高了传输资源的利用率。

另外,所述将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图之后,所述方法还可以包括:

计算优化的应用流图中各算子的复杂度,所述复杂度用于描述单个算子的运算复杂程度;

根据所述各算子的复杂度计算所述各算子的并发度,所述并发度用于描述所述各算子间协同运算时的并行程度;

根据所述各算子的并发度,为所述各算子配置资源。

应用流图优化后,可以重新计算算子的复杂度,例如图13中算子m和算子n的复杂度,根据复杂度再计各算子的并发度,计算复杂度和并发度的算法为现有技术,本发明实施例中不做过多介绍,只是在重新计算并发度后可以为各算子重新配置并发资源,以保证各算子之间协调工作,各算子的处理能力一致,从整体上提高流应用的性能。

例如:优化后,算子m的并发度为3,算子n的并发度为5,则可以在为算子m配置3个线程,为算子n配置5个线程,这样就可以保证算子m和算子n的处理能力一致,从整体上提高流应用的性能。

以上结合多个附图对本发明实施例所涉及的算子代码和应用流图的优化方案进行了介绍,算子代码可以自动优化,降低了二次开发的难度,应用流图也可以自动优化,提高了传输资源的利用率,而且,还可以从整体上提高流应用的性能。

图14为本发明实施例提供的流应用优化的方法的一实施例示意图。

如图14所示,本发明实施例提供的流应用优化的方法的一实施例包括:

101、获取待优化的流应用的应用流图和初始算子代码,所述应用流图包含算子,所述初始算子代码用于描述所述算子所承载的初始运算逻辑。

102、根据所述初始算子代码确定所述算子的数据流图,所述数据流图用于描述所述算子对第一输入数据进行运算以得到第一输出数据的逻辑运算过程。

103、根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,所述多条路径中的每条路径都代表一个运算逻辑,所述热点路径为逻辑运算过程中使用次数满足预置条件的运算逻辑,所述满足预置条件的运算逻辑与所述初始算子代码中的局部算子代码对应。

104、优化所述热点路径对应的所述局部算子代码,以得到优化的算子代码。

与现有技术中流应用的算子代码无法自动优化相比,本发明实施例提供的流应用优化的方法,可以自动优化流应用的初始算子代码,从而提高了流应用的易用性和计算性能。

可选地,在上述图14对应的实施例的基础上,本发明实施例提供的流应用优化的方法的第一个可选实施例中,所述应用流图还包括所述算子间的数据流走向,所述方法还可以包括:

根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,所述应用数据流图用于描述所述各算子的数据流图中的节点对第二输入数据进行运算以得到第二输出数据的逻辑运算过程;

确定所述应用数据流图中上游算子向下游算子输出的第一数据的量,以及第二数据的量,所述第二数据的量为:若所述上游算子的第一运算逻辑迁移到所述下游算子中,或所述下游算子的第二运算逻辑迁移到所述上游算子中,所述上游算子向所述下游算子输出的数据的量;

当所述第二数据的量小于所述第一数据的量时,在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图;

将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

本发明实施例进一步优化了应用流图,减少了算子间传输的数据量,提高了传输资源的利用率。

可选地,在上述图14对应的实施例的基础上或第一个可选实施例的基础上,本发明实施例提供的流应用优化的方法的第二个可选实施例中,所述初始算子代码包括运算变量、运算符号和运算关系;

所述根据所述初始算子代码确定所述算子的数据流图,可以包括:

以所述初始算子代码中的所述运算变量和所述运算符号为节点,所述运算关系为边,构建出所述算子的数据流图,所述算子的数据流图的输入节点代表所述第一输入数据,输出节点代表所述第一输出数据。

可选地,在上述流应用的优化方法的第二个可选实施例的基础上,本发明实施例提供的流应用优化的方法的第三个可选实施例中,所述根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,可以包括:

按照所述算子承载的初始运算逻辑的逻辑运算过程,统计从所述第一输入数据输入到所述第一输出数据输出的逻辑运算过程中所述算子的数据流图中各节点和各条边被使用的次数;

将节点和边被统计次数最多的路径确定为热点路径。

可选地,在上述流应用的优化方法的第三个可选实施例的基础上,本发明实施例提供的流应用优化的方法的第四个可选实施例中,所述优化所述热点路径对应的所述局部算子代码,得到优化的算子代码,可以包括:

将所述热点路径对应的所述局部算子代码包括的全量运算的操作表达式修改为使用前一次运算结果的增量运算的操作表达式,得到优化的算子代码,所述全量运算的运算量大于所述增量运算的运算量,所述操作表达式由所述运算变量和所述运算符号组成。

可选地,在上述流应用的优化方法的第一个可选实施例的基础上,本发明实施例提供的流应用优化的方法的第五个可选实施例中,所述根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,可以包括:

根据应用流图中算子间的数据流走向,将所述应用流图中各算子的数据流图进行拼接,得到所述流应用的应用数据流图。

可选地,在上述流应用的优化方法的第一个或第五个可选实施例的基础上,本发明实施例提供的流应用优化的方法的第六个可选实施例中,所述在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,可以包括:

确定所述上游算子和所述下游算子的逻辑运算复杂度;

当所述上游算子的逻辑运算复杂度高于所述下游算子的逻辑运算复杂度,则将所述第一运算逻辑迁移到所述下游算子中;

当所述下游算子的逻辑运算复杂度高于所述上游算子的逻辑运算复杂度,则将所述第二运算逻辑迁移到所述上游算子中。

可选地,在上述流应用的优化方法的第一个或第五个可选实施例的基础上,本发明实施例提供的流应用优化的方法的第七个可选实施例中,所述将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图之后,所述方法还可以包括:

计算优化的应用流图中各算子的复杂度,所述复杂度用于描述单个算子的运算复杂程度;

根据所述各算子的复杂度计算所述各算子的并发度,所述并发度用于描述所述各算子间协同运算时的并行程度;

根据所述各算子的并发度,为所述各算子配置资源。

图14提供的实施例或任一可选实施例,可以参阅图1至图13部分的描述进行理解,本处不做过多赘述。

图15为本发明实施例中流应用优化的装置20的一实施例示意图。

如图15所示,本发明实施例提供的流应用优化的装置的一实施例包括:

获取模块201,用于获取待优化的流应用的应用流图和初始算子代码,所述应用流图包含算子,所述初始算子代码用于描述所述算子所承载的初始运算逻辑;

第一确定模块202,用于根据所述获取模块201获取的所述初始算子代码确定所述算子的数据流图,所述数据流图用于描述所述算子对第一输入数据进行运算以得到第一输出数据的逻辑运算过程;

第二确定模块203,用于根据所述第一确定模块202确定的所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,所述多条路径中的每条路径都代表一个运算逻辑,所述热点路径为逻辑运算过程中使用次数满足预置条件的运算逻辑,所述满足预置条件的运算逻辑与所述初始算子代码中的局部算子代码对应;

第一优化模块204,用于优化所述第二确定模块203确定的所述热点路径对应的所述局部算子代码,以得到优化的算子代码。

与现有技术中流应用的算子代码无法自动优化相比,本发明实施例提供的流应用优化的装置,可以自动优化算子初始代码,从而提高了流应用的易用性和计算性能。

可选地,在图15对应的实施例的基础上,参阅图16,本发明实施例提供的流应用优化的装置20的第一个可选实施例中,所述装置20还包括:

第三确定模块205,用于根据所述第一确定模块202确定的所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,所述应用数据流图用于描述所述各算子的数据流图中的节点对第二输入数据进行运算以得到第二输出数据的逻辑运算过程;

第四确定模块206,用于确定所述第三确定模块205确定的所述应用数据流图中上游算子向下游算子输出的第一数据的量,以及第二数据的量,所述第二数据的量为:若所述上游算子的第一运算逻辑迁移到所述下游算子中,或所述下游算子的第二运算逻辑迁移到所述上游算子中,所述上游算子向所述下游算子输出的数据的量;

第二优化模块207,用于当所述第四确定模块206确定的所述第二数据的量小于所述第一数据的量时,在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图;

第三优化模块208,用于将所述第二优化模块207优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

可选地,在上述图15或图16对应的实施例的基础上,本发明实施例提供的流应用优化的装置20的第二个可选实施例中,

所述第一确定模块202,具体用于在所述初始算子代码包括运算变量、运算符号和运算关系时,以所述初始算子代码中的所述运算变量和所述运算符号为节点,所述运算关系为边,构建出所述算子的数据流图,所述算子的数据流图的输入节点代表所述第一输入数据,输出节点代表所述第一输出数据。

可选地,在上述流应用优化的装置20的第二个可选实施例的基础上,本发明实施例提供的流应用优化的装置20的第三个可选实施例中,

所述第二确定模块203,具体用于按照所述算子承载的初始运算逻辑的逻辑运算过程,统计从所述第一输入数据输入到所述第一输出数据输出的逻辑运算过程中所述算子的数据流图中各节点和各条边被使用的次数;将节点和边被统计次数最多的路径确定为热点路径。

可选地,在上述流应用优化的装置20的第三个可选实施例的基础上,本发明实施例提供的流应用优化的装置20的第四个可选实施例中,

第一优化模块204,具体用于将所述热点路径对应的所述局部算子代码包括的全量运算的操作表达式修改为使用前一次运算结果的增量运算的操作表达式,得到优化的算子代码,所述全量运算的运算量大于所述增量运算的运算量,所述操作表达式由所述运算变量和所述运算符号组成。

可选地,在上述流应用优化的装置20的第一个可选实施例的基础上,本发明实施例提供的流应用优化的装置20的第五个可选实施例中,

所述第三确定模块205,具体用于根据应用流图中算子间的数据流走向,将所述应用流图中各算子的数据流图进行拼接,得到所述流应用的应用数据流图。

可选地,在上述流应用优化的装置20的第一个或第五个可选实施例的基础上,本发明实施例提供的流应用优化的装置20的第六个可选实施例中,

所述第二优化模块207,具体用于:

确定所述上游算子和所述下游算子的逻辑运算复杂度;

当所述上游算子的逻辑运算复杂度高于所述下游算子的逻辑运算复杂度,则将所述第一运算逻辑迁移到所述下游算子中;

当所述下游算子的逻辑运算复杂度高于所述上游算子的逻辑运算复杂度,则将所述第二运算逻辑迁移到所述上游算子中。

可选地,在上述流应用优化的装置20的第一个或第五个可选实施例的基础上,参阅图17,本发明实施例提供的流应用优化的装置20的第七个可选实施例中,,所述装置20还包括:

第一计算模块209,用于计算所述第三优化模块208优化的应用流图中各算子的复杂度,所述复杂度用于描述单个算子的运算复杂程度;

第二计算模块211,用于根据所述第一计算模块209计算的所述各算子的复杂度计算所述各算子的并发度,所述并发度用于描述所述各算子间协同运算时的并行程度;

配置模块212,用于根据所述第二计算模块211计算得到的所述各算子的并发度,为所述各算子配置资源。

以上多个实施例中第一确定模块、第二确定模块、第三确定模块和第四确定模块可以是通过一个确定模块来实现的,第一优化模块、第二优化模块和第三优化模块可以是通过一个优化模块来实现的,第一计算模块和第二计算模块可以是通过一个计算模块来实现的,当然也可以是两个或多个,具体实现形式不做限定。

图15-图17提供的实施例或任一可选实施例,可以参阅图1至图13部分的描述进行理解,本处不做过多赘述。

在上述流应用优化的装置的多个实施例中,应当理解的是,获取模块可以是由输入/输出i/o设备(比如网卡)来实现,第一确定模块、第二确定模块、第三确定模块、第四确定模块、第一优化模块、第二优化模块、第三优化模块、第一计算模块、第二计算模块、配置模块可以由处理器、专有电路、或现场可编程门阵列(fpga,field-programmablegatearray)或执行存储器中的程序或指令来实现的(换言之,即由处理器以及与所述处理器耦合的存储器中的特殊指令相互配合来实现);具体实现方式参见现有技术,这里不再赘述,本发明包括但不限于前述实现方式,应当理解的是,只要按照本发明的思想实现的方案,都落入本发明实施例所保护的范围。

本实施例提供了一种流应用优化的装置的硬件结构,参见图18所示,一种流应用优化的装置的硬件结构可以包括:

收发器件、软件器件以及硬件器件三部分;

收发器件为用于完成包收发的硬件电路,在本发明实施例中可以获取待优化的流应用的应用流图和初始算子代码。

硬件器件也可称“硬件处理模块”,或者更简单的,也可简称为“硬件”,硬件器件主要包括基于fpga、asic之类专用硬件电路(也会配合其他配套器件,如存储器)来实现某些特定功能的硬件电路,可以执行上述实施例中的第一确定模块、第二确定模块、第三确定模块、第四确定模块、第一优化模块、第二优化模块、第三优化模块、第一计算模块、第二计算模块、配置模块的相应功能,完成流应用的优化。

软件器件(或者也简单“软件”)主要包括通用的处理器(例如cpu)及其一些配套的器件(如内存、硬盘等存储设备),可以通过编程来让处理器具备本发明实施例中的流应用优化的处理功能。

下面结合附图就处理器执行存储器中的程序或指令来实现本发明实施例中的流应用优化的技术方案来做详细的介绍:

图19是本发明实施例提供的流应用优化的装置20的结构示意图。所述流应用优化的装置20包括处理器210、存储器250和输入/输出i/o设备230,存储器250可以包括只读存储器和随机存取存储器,并向处理器210提供操作指令和数据。存储器250的一部分还可以包括非易失性随机存取存储器(nvram)。

在一些实施方式中,存储器250存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:

在本发明实施例中,通过调用存储器250存储的操作指令(该操作指令可存储在操作系统中),

获取待优化的流应用的应用流图和初始算子代码,所述应用流图包含算子,所述初始算子代码用于描述所述算子所承载的初始运算逻辑;

根据所述初始算子代码确定所述算子的数据流图,所述数据流图用于描述所述算子对第一输入数据进行运算以得到第一输出数据的逻辑运算过程;

根据所述算子的数据流图和所述算子承载的初始运算逻辑,从所述数据流图的多条路径中确定热点路径,所述多条路径中的每条路径都代表一个运算逻辑,所述热点路径为逻辑运算过程中使用次数满足预置条件的运算逻辑,所述满足预置条件的运算逻辑与所述初始算子代码中的局部算子代码对应;

优化所述热点路径对应的所述局部算子代码,以得到优化的算子代码。

与现有技术中流应用的算子代码无法自动优化相比,本发明实施例提供的流应用优化的装置,可以自动优化流应用的算子代码,从而提高了流应用的易用性和计算性能。

处理器210控制流应用优化的装置20的操作,处理器210还可以称为cpu(centralprocessingunit,中央处理单元)。存储器250可以包括只读存储器和随机存取存储器,并向处理器210提供指令和数据。存储器250的一部分还可以包括非易失性随机存取存储器(nvram)。具体的应用中流应用优化的装置20的各个组件通过总线系统220耦合在一起,其中总线系统220除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统220。

上述本发明实施例揭示的方法可以应用于处理器210中,或者由处理器210实现。处理器210可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器210中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器210可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器250,处理器210读取存储器250中的信息,结合其硬件完成上述方法的步骤。

可选地,所述应用流图还包括所述算子间的数据流走向,

处理器210还用于:

根据所述应用流图中各算子的数据流图和所述算子间的数据流走向,确定所述流应用的应用数据流图,所述应用数据流图用于描述所述各算子的数据流图中的节点对第二输入数据进行运算以得到第二输出数据的逻辑运算过程;

确定所述应用数据流图中上游算子向下游算子输出的第一数据的量,以及第二数据的量,所述第二数据的量为:若所述上游算子的第一运算逻辑迁移到所述下游算子中,或所述下游算子的第二运算逻辑迁移到所述上游算子中,所述上游算子向所述下游算子输出的数据的量;

当所述第二数据的量小于所述第一数据的量时,在所述上游算子和所述下游算子之间迁移所述第一运算逻辑或所述第二运算逻辑,得到优化的应用数据流图;

将优化的应用数据流图从节点的形式转换为算子的形式,得到所述流应用优化的应用流图。

可选地,所述初始算子代码包括运算变量、运算符号和运算关系;

处理器210具体用于:

以所述初始算子代码中的所述运算变量和所述运算符号为节点,所述运算关系为边,构建出所述算子的数据流图,所述算子的数据流图的输入节点代表所述第一输入数据,输出节点代表所述第一输出数据。

可选地,处理器210具体用于:

按照所述算子承载的初始运算逻辑的逻辑运算过程,统计从所述第一输入数据输入到所述第一输出数据输出的逻辑运算过程中所述算子的数据流图中各节点和各条边被使用的次数;

将节点和边被统计次数最多的路径确定为热点路径。

可选地,处理器210具体用于:

将所述热点路径对应的所述局部算子代码包括的全量运算的操作表达式修改为使用前一次运算结果的增量运算的操作表达式,得到优化的算子代码,所述全量运算的运算量大于所述增量运算的运算量,所述操作表达式由所述运算变量和所述运算符号组成。

可选地,处理器210具体用于:

根据应用流图中算子间的数据流走向,将所述应用流图中各算子的数据流图进行拼接,得到所述流应用的应用数据流图。

可选地,处理器210具体用于:

确定所述上游算子和所述下游算子的逻辑运算复杂度;

当所述上游算子的逻辑运算复杂度高于所述下游算子的逻辑运算复杂度,则将所述第一运算逻辑迁移到所述下游算子中;

当所述下游算子的逻辑运算复杂度高于所述上游算子的逻辑运算复杂度,则将所述第二运算逻辑迁移到所述上游算子中。

可选地,处理器210还用于:

计算优化的应用流图中各算子的复杂度,所述复杂度用于描述单个算子的运算复杂程度;

根据所述各算子的复杂度计算所述各算子的并发度,所述并发度用于描述所述各算子间协同运算时的并行程度;

根据所述各算子的并发度,为所述各算子配置资源。

图19对应的实施例或任一可选实施例中可以参阅图1至图17部分的相关描述进行理解,本处不做过多赘述。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:rom、ram、磁盘或光盘等。

以上对本发明实施例所提供的流应用优化的方法以及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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