循环与库融合的制作方法

文档序号:15060561发布日期:2018-07-31 21:47阅读:200来源:国知局

本说明书涉及构建和编译计算图。



背景技术:

计算图通过运算类型、被输入到每一运算中并且从其输出的数据以及计算依赖性来定义运算序列。编译器转换运算的计算图以生成编译代码。



技术实现要素:

本说明书一般地描述与计算图系统有关的技术,具体而言,涉及用于将计算表示为能够被转换为高效编译代码的图形运算的系统和方法。

计算图包括节点、连接符有向边和参数有向边。每个节点表示相应运算,每一连接符有向边将相应的第一节点连接到相应的第二节点,该相应的第二节点表示将由相应的第一节点表示的运算的输出接收为输入的运算,并且每一参数有向边连接到相应的节点并且将神经网络的一个或多个参数的流表示为由相应的节点表示的运算的输入。

通常,本说明书中所述的主题的一个创新方面可以由系统体现,该系统包括一个或多个计算机以及一个或多个存储设备,该一个或多个存储设备存储可运算的指令,该指令当由一个或多个计算机执行时,使一个或多个计算机执行实现示例方法的运算。示例方法包括:获得未优化的计算图,所述未优化的计算图包括表示运算的多个节点和表示数据依赖性的有向边;使用模式匹配来分析所述未优化的计算图以确定能够被一起融合成单个融合运算的可融合运算;通过用表示所述单个融合运算的融合节点替换在所述未优化的计算图中表示所述可融合运算的节点,将所述未优化的计算图变换成优化的计算图;以及向编译器提供所述优化计算图的所述融合节点,所述编译器能够将所述融合节点转换为执行所述融合运算以产生有效代码的调用。

该方面的其他实施例包括对应的计算机系统、装置和编码在一个或多个计算机存储设备上的计算机程序,分别被配置为执行方法的动作。对一个或多个计算机的系统被配置为执行特定操作或动作,是指系统已经在其上安装了软件、固件、硬件或它们的组合,其在运算中使系统执行操作或动作。对一个或多个计算机程序被配置为执行特定操作或动作,是指一个或多个程序包括当由数据处理装置执行时,使装置执行操作或动作的指令。

这些和其他实施例可以可选地包括一个或多个下述特征。可以将所述有效代码提供给计算设备以执行。执行可以包括执行所有融合运算的单个融合调用的计算图的运算。使用模式匹配来分析所述未优化的计算图以确定能够被一起融合成单个融合运算的可融合运算包括:将所述未优化的计算图的部分与分别对应于单个融合运算的运算模式比较;确定模式匹配所述未优化的计算图的一部分;以及确定在所述计算图中所述未优化的计算图的匹配部分能够用对应于该匹配模式的单个融合运算替换。所述单个融合运算可以是外部代码库运算。所述单个融合运算可以是循环运算。使用模式匹配来分析所述未优化的计算图以确定能够一起被融合成单个融合运算的可融合运算可以包括:在所述未优化的计算图中搜索需要计算以产生所述输入的输入运算;以及确定在所述计算图中所述输入运算能够用与产生所述输入所需的计算相对应的单个融合运算来替换。所述可融合运算可以是正则运算。所述可融合运算可以是融合成非正则运算的正则运算。使用模式匹配来分析所述未优化的计算图以确定能够一起被融合成单个融合运算的可融合运算可以包括:使用排序算法,在计算图中找出运算序列;以及确定能够使用合成将所述运算序列融合成单个融合运算。

可以在特定实施例中实现本说明书中所述的主题以便实现一个或多个下述优点。示例实施方式通过将运算合并成单个融合运算来产生有效的编译代码,编译器能够将该单个融合运算转换成单个调用例如循环或库调用。为了本说明书的目的,有效的编译代码是指比使用传统编译器编译的代码更快并且可能使用更少内存的代码。

编译器将单个融合运算转换成的单个调用在编译的代码生成阶段执行融合运算的所有运算。这种转换允许编译器生成比由传统编译器生成的代码更快的代码,其一次转换一个运算。另外,通过使用可以比未融合的运算使用更少存储器的融合运算,编译器生成比由传统编译器生成的代码更内存效率的代码。

通过融合运算,示例实施方式还可以提供比传统编译器更小大小的程序。

在附图和下述描述中,阐述本说明书的主题的一个或多个实施方式的细节。从说明书、附图和权利要求,该主题的其他特征、方面和优点将变得显而易见。

附图说明

图1示出了示例编译系统。

图2是用于从计算图内的计算生成有效代码的示例过程的流程图。

图3表示两个正则一元运算的图形链。

图4表示可以融合在一起的非一元运算的运算。

图5a示出表示转置和点运算的计算图的子图。

图5b示出了图5a中所示的子图的优化版本。

图6a示出表示反向滤波器卷积的模式。

图6b示出表示反向输入卷积的模式。

不同图中相似的参考数字和名称表示相似的元件。

具体实施方式

本说明书一般地描述编译由计算图表示的运算的编译系统。特别地,本说明书描述了用于通过将计算融合在一起来从计算图内的计算生成有效代码的技术。

计算数据流图表示例如机器学习模型的计算,其中,节点表示运算,而有向边表示运算之间的数据依赖性。到节点的输入边表示到节点的输入流,即,由节点表示的运算的输入自变量。如果运算所需的所有自变量都可用于运算节点,则该节点被使能并且可以被执行。

来自节点的输出边表示将被用作由另一节点表示的运算的输入的由该节点表示的运算的输出流。因此,将图中的第一节点连接到图中的第二节点的有向边指示由第一节点所表示的运算所生成的输出被用作由第二节点所表示的运算的输入。

在一些实施方式中,在计算图中表示的运算是线性代数运算,例如矩阵乘法、神经网络运算或用于不同种类的机器学习模型的运算。神经网络是采用一层或多层非线性单元来预测接收输入的输出的机器学习模型。一些神经网络是深度神经网络,其除了输出层之外,还包括一个或多个隐藏层。每一隐藏层的输出层被用作网络中另一层即另一隐藏层、输出层或两者的输入。网络的一些层根据相应参数集的当前值,从接收的输入生成输出,而网络的其他层可以不具有参数。

由计算图表示的运算可以是神经网络计算推理即通过神经网络层处理输入以针对输入生成神经网络输出所需的运算。附加或替选地,由计算图表示的运算可以是通过执行神经网络训练过程来调整神经网络的参数的值来训练神经网络、例如用于使用反向传播来从参数的初始值确定参数的训练值所必需的运算。在一些情况下,例如在训练神经网络期间,由计算图表示的运算可以包括由神经网络的多个副本执行的运算。

举例说明,从前一层接收输入的神经网络层可以使用参数矩阵来执行参数矩阵和输入之间的矩阵乘法。在一些情况下,矩阵乘法可以表示为计算图中的多个节点。例如,矩阵乘法可以被分成多个乘法和加法运算,以及每个运算可以由计算图中的不同节点表示。每个节点表示的运算可以生成相应的输出,其在有向边上流向后续节点。在由最终节点表示的运算产生矩阵乘法的结果之后,结果在有向边上流向另一节点。结果等同于执行矩阵乘法的神经网络层的输出。

在一些其他情况下,矩阵乘法被表示为图中的一个节点。节点表示的运算可以将第一有向边上的输入张量和第二有向边上的权重张量例如参数矩阵接收为输入。节点可以处理输入张量和加权张量,例如执行输入张量和加权张量的矩阵乘法,以在第三有向边上输出等效于神经网络层的输出的输出张量。

可以由计算图中的节点表示的其他神经网络运算包括其他数学运算,例如减法、除法和梯度计算;数组运算,例如连结、拼接、拆分或秩;以及神经网络构建块运算,例如softmax、sigmoid、整流线性单元(relu)或卷积。

在示例系统中,计算图中的一个或多个节点集可以表示通过计算图来控制数据流的运算。例如,一个或多个节点集可以例如包括下述的条件语句、递归语句和/或迭代控制流语句:if语句、while循环、do-while循环、针对每个循环的for循环、或者包括这些语句的组合的嵌套的控制流语句。

计算图中的一个或多个节点集可以表示可以转化为高性能库的运算的一些运算,所述高性能库包含线性代数例如矩阵乘法、或神经网络运算例如反向卷积的高性能、可能机器特定的实施方式。在一些实施方式中,如本文所解释的,用于转换成高性能库的运算并且可能融合的图中的运算的适合性可取决于底层硬件体系结构和机器配置。

在示例编译系统中,编译系统将多个运算融合成融合运算,该融合运算可以在执行所有融合运算的代码生成时间被转换为调用。该融合过程产生更快的代码,并且可能使用诸如中央处理器(cpu)或图形处理单元(gpu)等设备的更少的存储器。

图1示出了示例编译系统100。编译系统100是在一个或多个位置中的一个或多个计算机上实现为计算机程序的系统的示例,其中,可以实现下文所述的系统、组件和技术。

编译系统100将未优化的计算图接收为输入102。如上所述,计算图将运算表示为一个或多个节点集以及将运算之间的数据依赖性表示为边。

编译系统100的图形分析器106使用模式匹配器104分析未优化的计算图输入102,例如通过匹配未优化的计算图中的某个模式来提高效率。编译系统将来自模式匹配器104的模式与计算图中的运算模式比较。然后,图形分析器106将所分析的图形提供给图形融合生成器108。对每个匹配模式,图形融合生成器108将来自对应于模式的未优化的计算图102的多个运算合并或融合成单个融合运算以创建具有融合节点的优化计算图。然后,图形融合生成器108将具有融合节点的优化计算图提供给代码生成器114。代码生成器114将每个融合节点作为执行所有融合运算的调用例如循环或库调用来进行转换以产生可以被提供给多个设备(116、118、120、122)以供执行的高效的编译代码。由于在优化图中执行融合运算比在未优化图中执行由单个融合运算替代的对应的多个运算更高效,所以由优化图生成的代码导致效率提高。

执行由有效编译代码表示的运算的任何设备例如设备116、118、120、122可以包括用于存储指令和数据的存储器例如随机存取存储器(ram)、以及用于处理执行存储的指令的处理器。通常,每个设备是独立于其他设备执行编译代码的硬件资源。例如,每个设备都可以有自己的处理单元。这些设备可以是图形处理单元(gpu)、中央处理单元(cpu)、现场可编程门阵列(fpga)、专用集成电路(asic)或其他运算专用处理器。举例说明,一台机器可以托管一个或多个设备,例如多个cpu、gpu、fpga、asic或运算特定的处理器。

图2是用于由计算图内的计算生成高效代码的示例过程200的流程图。为了方便,过程200将被描述为由位于一个或多个位置,并且根据本说明书适当地编程的一个或多个计算机的系统执行。例如,被适当地编程的图1的示例编译系统100可以执行过程200。

系统接收具有表示运算的节点和表示数据依赖性的有向边的未优化的计算图202。

然后,系统使用模式匹配来分析计算图以确定可以被一起融合为单个融合运算的融合运算204。

系统通过用表示单个融合运算的节点替换未优化的计算图中的可融合运算,将未优化的计算图变换成优化的计算图206。

然后,系统通过将优化的计算图的融合节点转换为执行所有融合运算的调用来生成有效编译代码208。然后,可以将有效编译代码提供给计算设备诸如图形处理单元和中央处理单元以供执行。

循环融合

通过可能多次迭代输入数组的元素来实现循环运算,以计算输出数组。计算图的循环运算是正则或非正则运算的形式。正则运算例如加法、指数或转置从输出数组的每个元素的每一输入数组读取至多一个元素。非正则运算例如点或卷积需要读取输入数组的多于一个的元素以产生输出数组的单个元素。

正则运算可以被分解为两种类型的函数:被应用于输入数据的一个函数和被应用于输出索引的一个函数。

例如,正则一元运算可以表示为:

a[i0,…,in-1]=fop(b[findex(i0,…,in-1)]),其中{i0,…,in-1)是多维索引,fop是被应用于来自输入的数据元素的运算的数据函数,例如幂,以及findex是将输出数组的索引映射到输入数组的索引的运算的索引函数。例如,对循环的每次迭代,示例编译系统隐含地构造运算的索引函数findex以便确定要读取哪个输入元素。findex输出的维度可以与例如广播运算中的输入不同。

通过使用单独的索引和数据函数来表达正则运算,示例编译系统可以使用这些函数的组合来容易地融合运算。

图3示出两个正则一元运算的图形链,b=opg(c)和a=opf(b)305。如所示,第一正则一元运算可以通过在输入数组c303c上执行opg来产生输出数组b303b。第二正则一元运算可以通过在输入数组b303b上执行opf来产生输出数组a303a。运算opf具有数据函数fop和索引函数findex,运算opg具有数据函数gop和索引函数gindex。

输出数组a303a可以被表示为c303c的函数:

a[i0,i1]=fop(gop(c[gindex(findex(i0,i1))]))。

该表达式融合opf和opg。该表达式是可以被用来融合任何正则运算的序列的组合。

对融合运算,每个运算应该分解成数据函数和索引函数。被分解成数据函数fop和索引函数findex的正则运算的一些示例是:

(1)基于元素的一元取幂运算

fop(x)=exp(x)

findex(i0,…,in-1)={i0,…,in-1}

(2)转置

fop(x)=x

findex(i0,i1)={i1,i0}

(3)切片(取开始和结束索引)

fop(x)=(x)

findex(i0,…,in-1)={i0+start0,…,in-1+startn-1}

作为示例,假设表1的代码是待编译的代码。

c=...

b=op0(c)

a=op1(b)

d=op2(b)

表1

编译系统使用模式匹配来分析表示代码的计算图。为了融合一元运算,编译系统搜索编译图并且收集尽可能多的正则运算用于融合。如果在融合运算之外使用为融合选择的运算,则运算将不得不被计算两次——一次在融合运算中,一次在融合运算之外。

例如,编译系统可以使用已知的运算模式或算法来找到可以融合在一起的运算链。在一个示例中,模式可以涉及由编程语言或编译器提供的运算。在另一示例中,可以向模式提供高性能库,其中,模式涉及高性能库中包括的运算。在表1的示例中,应用正则一元运算融合得出:

a=(op1°op0)(c)

d=(op2°op0)(c)

对于非一元正则运算,例如a=op(b,c),运算也可以表示为数据函数和索引函数。例如,a=op(b,c)可以被表示为:

a[i0,…,in-1]=fop(b[findex0(i0,…,in-1)],c[findex1(i0,…,in-1)]),其中findex0和findex1可以相同,例如,在索引函数是单位矩阵的按元素(element-wise)的加法中,或者可以不同,例如,如在通过广播的连结和二进制运算中那样。同样的构成规则适用于非一元正规运算。例如,可能需要编译表2的代码。

c=opg(d)

a=opf(b,c)

表2

如果opg具有索引和数据函数gindex和gop,以及opf具有findex和fop,那么融合运算可以被表示为:

a[i0,…,in-1]=fop(b[findex0(i0,…,in-1)],gop(d[gindex1(findex1(i0,…,in-1))]))。

图4示出可以融合在一起的表3的非一元运算的运算。非一元运算形成图形而不是链。

d=opp(b)

e=opq(c)

f=opr(d,e)

g=ops(e)

a=opt(f,g)

表3

如上所述,为了找到可以融合在一起的运算,编译系统使用模式匹配来分析表示代码的计算图。为了融合非一元运算,编译系统试图尽可能多地融合受制于融合运算的输入数量的限制的正则运算。太多输入会增加内存使用量并且阻碍性能。

例如,编译系统可以使用已知的运算模式或算法来查找可以融合在一起的运算。在表3的示例中,应用正则非一元运算融合产生:

a[i0,…,in-1]=top(rop(pop(b[b_index]),

qop(c[c_index_0])),

sop(qop(c[c_index_1])))

其中:

b_index=pindex(rindex(tindex(i0,…,in-1)))

c_index_0=qindex(rindex(tindex(i0,…,in-1)))

c_index_1=qindex(sindex(tindex(i0,…,in-1)))

在该示例中,xindex是opx的索引函数,xop是opx的数据函数。编译系统通过遍历图中从a410到输入b401a和c401b的所有路径来构造该融合表示。向上遍历组成索引函数,从a410到opt405e到opr405c和ops405d,然后到opp405a和opq405b,最后到输入b401a和c401b。向下遍历组成数据函数。

正则运算也可以融合成一些非正则运算以提高代码效率。例如,考虑在表4中的列还原的下述实现,其是非正则运算:

表4

列还原算法将输入矩阵划分成瓦片,每个瓦片由线程还原。每个线程将部分还原结果累加到输出向量。该还原不是正则运算,因为每个输出元素由多个线程而不是一个线程来计算。然而,如果生成输入元素的运算是正则运算,则可以将其融合到列还原中。例如,第10行上的还原器运算的输入可以是两个数即减法运算的左侧lhs[y][x]以及减法运算的右侧rhs[y][x]之间的减法。

表5

表5示出将生成输入元素的运算融合到列还原中。第10行示出实际输入元素计算。通过将计算融合到列还原中,编译系统生成不需要用于减法的单独内核或保存减法结果的额外空间的代码。

如上所述,为了找到可以融合在一起的输入运算,编译系统使用模式匹配来分析表示代码的计算图。例如,编译系统可以将作为正则运算子集的按元素的运算融合成非正则运算。按元素的运算读取处于与输出元素相同的索引处的输入元素。因此,融合按元素的运算不会改变非正则运算的存储器访问模式。

库融合

一些硬件供应商提供高性能库及其硬件。这些库可以包含运算的高性能实施方式。然而,这些库通常是封源的,和/或是以非公开的硬件见解编写。示例编译系统将这些供应商提供的库用于计算图内的某些计算模式。

示例编译系统通过使用模式匹配分析表示代码的计算图来搜索可以融合在一起的计算图的运算。例如,编译系统可以通过查找匹配已知库运算的运算子图的某些模式来提高效率。然后,这些子图可以在计算图中用表示库运算的融合节点来替换。

图5a示出表示转置和点运算的计算图的子图。该子图通过执行对输入数组501a的点运算和转置输入数组b501b的转置运算505来计算输出数组c。子图具有形式:c=dot(a,transpose(b)),作为匹配已知库调用的模式。该模式可以匹配来自由外部硬件供应商提供的库的库调用。

图5b示出了图5a中所示的子图的优化版本。编译系统可以使用包括输入数组502a、502b、转置运算515和点运算的库调用的模式525来匹配图5a的子图中的模式。在编译系统将库调用的模式525与图5a的子图匹配之后,编译系统可以将子图融合成单个融合库调用运算。然后,编译系统可以用表示单个融合库调用的融合节点530替换计算图中的子图5a。在代码生成期间,编译系统将融合节点转换为执行产生有效编译代码的所有融合运算的库调用。

图6a示出表示反向滤波器卷积的模式。该模式匹配其后为转置运算610的激活a601a和梯度g601b上的卷积运算605。如果计算图包括该模式,则编译系统可以将表示反向滤波器卷积的子图融合成单个融合运算,并且用表示单个融合反向滤波卷积运算的单个融合节点替换计算图中的子图。

图6b示出表示反向输入卷积的模式。该模式匹配梯度g602a和由反向运算630产生的镜像滤波器f602b的卷积运算640。如果计算图包括该模式,则编译系统可以将表示反向输入卷积的子图融合成单个融合运算,并且用表示单个融合反向输入卷积运算的单个融合节点替换计算图中的子图。

一旦编译系统用融合节点替换计算图内的子图,则编译系统可以将融合节点转换为执行所有融合运算的调用。此过程产生比一次编译一个运算的代码更有效的代码。

能在数字电子电路装置中或者在有形地体现的计算机软件或固件或者在计算机硬件,包括在本说明书中公开的结构及其结构等效物中或者在它们中的一项或者多项的组合中实施在本说明书中描述的主题和功能操作的实施例。能将在本说明书中描述的主题的实施例实施为一个或者多个计算机程序,即编码在有形非暂时性存储介质上的用于由数据处理装置执行或者控制数据处理装置的操作的一个或者多个计算机程序指令模块。计算机存储介质可以是机器可读存储设备、机器可读存储衬底、随机或者串行存取存储器设备或者它们中的一项或者多项的组合。替选地或除此之外,能在人为生成的传播信号例如机器生成的电、光或者电磁信号上编码程序指令,该信号被生成用于对信息编码以用于向适当接收器装置发送以供数据处理装置执行。

术语“数据处理装置”是指数据处理硬件并且涵盖各种用于处理数据的装置、设备和机器,举例而言包括可编程处理器、计算机、多个处理器或计算机。该装置可以是或进一步包括专用逻辑电路装置,例如,fpga(现场可编程门阵列)或者asic(专用集成电路)。该装置除了硬件之外,还可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统的代码或者它们中的一项或者多项的组合的代码。

计算机程序(也可以被称为或描述为程序、软件、软件应用、应用、模块、软件模块、脚本或者代码)能用任何形式的编程语言编写,包括编译或者解译语言、或声明或者过程语言,并且计算机程序能用任何形式部署,包括部署为独立程序或者部署为适合于在计算环境中使用的模块、组件、子例程或者其他单元。程序可以但是无需对应于文件系统中的文件。程序能被存储于保持其他程序或者数据的文件,例如,存储于标记语言文档中的一个或者多个脚本的一部分中、专用于讨论的程序的单个文件中,或者在多个协同文件中,例如,存储一个或者多个模块、子程序或者代码部分的文件中。计算机程序能被部署用于在一个计算机上或者在位于一个地点或者跨多个地点分布并且由数据通信网络互连的多个计算机上执行。

在本说明书中描述的过程和逻辑流程能由一个或者多个可编程处理器执行,该一个或者多个可编程计算机执行一个或者多个计算机程序以通过对输入数据进行运算并且生成输出来执行功能。该过程和逻辑流还可以由专用逻辑电路例如fpga或者asic执行,或可以由专用逻辑电路和一个或多个编程计算机的组合执行。

适合于执行计算机程序的计算机能基于通用或专用微处理器或者其两者,或者任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或者随机存取存储器或者二者接收指令和数据。计算机的必要元件是用于实现或执行指令的中央处理单元以及用于存储指令和数据的一个或者多个存储器设备。中央处理单元和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。通常,计算机还将包括或可操作地耦接以从其接收数据或向其传送数据的用于存储数据的一个或者多个海量存储设备,例如,磁盘、磁光盘或者光盘。然而,计算机无需具有这样的设备。另外,计算机能被嵌入于另一设备中,聊举数例,例如,移动电话、个人数字助理(pda)、移动音频或者视频播放器、游戏控制台、全球定位系统(gps)接收器或者便携存储设备,例如,通用串行总线(usb)闪存驱动。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,举例而言包括半导体存储器设备,例如,eprom、eeprom和闪速存储器设备;磁盘,例如,内部硬盘或者可移动盘;磁光盘;以及cd-rom和dvd-rom盘。

为了提供与用户的交互,能在计算机上实施在本说明书中描述的主题的实施例,该计算机具有用于向用户显示信息的显示设备,例如,crt(阴极射线管)或lcd(液晶显示器)监视器,以及用户可以向计算机提供输入的键盘和指示设备,例如鼠标或跟踪球。其他种类的设备也能用来提供与用户的交互;例如,向用户提供的反馈能是任何形式的感官反馈,例如,视觉反馈、听觉反馈或者触觉反馈;并且能用包括声音、语音或者触觉输入的任何形式接收来自用户的输入。此外,计算机能通过向用户使用的设备发送文档和从该设备接收文档,例如通过响应于从web浏览器接收的请求向用户的客户端设备上的web浏览器发送网页,来与用户交互。同时,计算机可以通过向个人设备例如智能电话发送文本消息或其他形式的消息、运行消息应用和作为回报接收响应消息来与用户交互。

在本说明书中描述的主题的实施例能在计算系统中实施,该计算系统包括例如作为数据服务器的后端组件,或者包括中间件组件,例如应用服务器,或者包括前端组件,例如具有图形用户界面、web浏览器或app的客户端计算机,用户能通过它们与在本说明书中描述的主题的实施方式交互,或者一个或者多个这样的后端、中间件或者前端部件的任何组合。系统的组件能通过任何数字数据通信形式或者介质例如通信网络互连。通信网络的示例包括局域网(“lan”)和广域网(“wan”),例如,因特网。

计算系统能包括客户端和服务器。客户端和服务器一般相互远离并且通常通过通信网络交互。客户端和服务器的关系借助在相应计算机上运行并且相互具有客户端-服务器关系的计算机程序而产生。在一些实施例中,服务器将数据例如html页面传送到用户设备,例如为了向与用作客户端的设备交互的用户显示数据以及从其接收用户输入的目的。可以在服务器处从设备接收在用户设备处生成的数据,例如用户交互的结果。

除了所附权利要求和上述实施例的实施例外,以下编号的实施例也是创新的:

实施例1是一种方法,包括:获得未优化的计算图,所述未优化的计算图包括表示运算的多个节点和表示数据依赖性的有向边;使用模式匹配来分析所述未优化的计算图以确定可以被一起融合成单个融合运算的可融合运算;通过用表示所述单个融合运算的融合节点替换在所述未优化的计算图中表示所述可融合运算的节点,将所述未优化的计算图变换成优化的计算图;以及向编译器提供所述优化计算图的所述融合节点,所述编译器可以将所述融合节点转换为执行所述融合运算以产生有效代码的调用。

实施例2是实施例1的方法,进一步包括:将所述有效代码提供给计算设备以执行。

实施例3是实施例2所述的方法,其中执行包括:执行包括执行所有融合运算的单个融合调用的计算图的运算。

实施例4是实施例1至3的任何一个所述的方法,其中,使用模式匹配来分析所述未优化的计算图以确定可以被一起融合成单个融合运算的可融合运算包括:将所述未优化的计算图的部分与分别对应于单个融合运算的运算模式比较;确定模式匹配所述未优化的计算图的一部分;以及确定在所述计算图中所述未优化的计算图的匹配部分可以用对应于该匹配模式的单个融合运算替换。

实施例5是实施例1至4的任何一个所述的方法,其中,所述单个融合运算是外部代码库运算。

实施例6是实施例1至5的任何一个所述的方法,其中,所述单个融合运算是循环运算。

实施例7是实施例1至6的任何一个所述的方法,其中,使用模式匹配来分析所述未优化的计算图以确定可以一起被融合成单个融合运算的可融合运算包括:在所述未优化的计算图中搜索需要计算以产生所述输入的输入运算;以及确定在所述计算图中所述输入运算可以由对应于产生所述输入所需的计算的单个融合运算来替换。

实施例8是实施例1至7的任何一个所述的方法,其中,所述可融合运算是正则运算。

实施例9是实施例1至8的任何一个所述的方法,其中,所述可融合运算是融合成非正则运算的正则运算。

实施例10是实施例1至9的任何一个所述的方法,其中,使用模式匹配来分析所述未优化的计算图以确定可以一起被融合成单个融合运算的可融合运算包括:使用排序算法,在计算图中找出运算序列;以及确定可以使用合成将所述运算序列融合成单个融合运算。

实施例11是一个或多个计算机以及存储可操作的指令的一个或多个存储设备的系统,指令当被一个或多个计算机执行时,使一个或多个计算机执行实施例1至10的任何一个的操作。

实施例12是一个或多个非暂时性计算机可读存储介质,包括存储在其上的指令,指令可由处理设备执行,并且在执行时,使处理设备执行实施例1至10的任何一个的操作。

尽管本说明书包含许多具体实施方式细节,但是不应将这些解释为限制任何发明的范围或可以要求保护的内容的范围,而是解释为对具体发明的具体实施方式特有的特征的描述。在本说明书中在分开的实施例的背景中描述的某些特征也能在单个实施例中被组合实施。相反地,在单个实施例的背景中描述的各种特征也能在多个实施例中分开地或者在任何适当子组合中被实施。另外,虽然上文能将特征描述为在某些组合中动作并且甚至起初这样要求保护,但是来自要求保护的组合的一个或者多个特征能在一些情况下从该组合中被删除,并且要求保护的组合能涉及子组合或者子组合的变型。

类似地,尽管在附图中以特定顺序描绘操作,但是这不应被理解为要求以所示特定顺序或者以依次顺序执行这样的操作或者执行所有所示操作以实现希望的结果。在某些境况中,多任务和并行处理会是有利的。另外,在上文描述的实施例中的各种系统模块和部件的分离不应被理解为在所有实施例中要求这样的分离,并且应当理解描述的程序组件和系统一般能一起集成于单个软件产品中或者被封装到多个软件产品中。

描述了主题的具体实施例。其他实施方式在所附权利要求的范围内。例如,在权利要求中记载的动作能按不同顺序被执行而仍然实现希望的结果。作为一个示例,在附图中描绘的过程未必需要所示特定顺序或者依次顺序以实现希望的结果。在一些情况下,多任务和并行处理会是有利的。

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