CN115220727A - 面向利用Python语言编写的不规则张量程序的优化方法及装置 - Google Patents
面向利用Python语言编写的不规则张量程序的优化方法及装置 Download PDFInfo
- Publication number
- CN115220727A CN115220727A CN202210641142.0A CN202210641142A CN115220727A CN 115220727 A CN115220727 A CN 115220727A CN 202210641142 A CN202210641142 A CN 202210641142A CN 115220727 A CN115220727 A CN 115220727A
- Authority
- CN
- China
- Prior art keywords
- program
- tensor
- abstract syntax
- transformation
- irregular
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000001788 irregular Effects 0.000 title claims abstract description 89
- 238000000034 method Methods 0.000 title claims abstract description 82
- 238000005457 optimization Methods 0.000 title claims abstract description 41
- 230000009466 transformation Effects 0.000 claims abstract description 202
- 230000006870 function Effects 0.000 claims abstract description 63
- 238000006243 chemical reaction Methods 0.000 claims abstract description 29
- 238000004364 calculation method Methods 0.000 claims abstract description 27
- 238000004590 computer program Methods 0.000 claims description 22
- 238000009795 derivation Methods 0.000 claims description 22
- 238000003860 storage Methods 0.000 claims description 13
- 238000013145 classification model Methods 0.000 claims description 8
- 238000005516 engineering process Methods 0.000 claims description 8
- 125000004122 cyclic group Chemical group 0.000 claims description 4
- 230000008569 process Effects 0.000 claims description 4
- 238000003672 processing method Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 9
- 238000010586 diagram Methods 0.000 description 12
- 238000000844 transformation Methods 0.000 description 6
- 238000007667 floating Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000013598 vector Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种面向利用Python语言编写的不规则张量程序的优化方法及装置,涉及数据处理技术领域。所述方法包括:通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。所述装置执行上述方法。本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化方法及装置,通过本发明提供的优化方法及装置,能改善计算机运行所述不规则张量程序时的内部性能。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种面向利用Python语言编写的不规则张量程序的优化方法及装置。
背景技术
张量是由整数或浮点数组成的任意维度数组。在深度学习、计算机图形学、科学计算等领域中,许多程序的主体是计算张量,这些程序被称为张量程序。张量程序往往需要计算张量中大量的整数或浮点数,因而需要在GPU或多核CPU上部署高性能的实现。然而,为了真正发挥出此类硬件的高性能,程序需要经过复杂的优化,不同硬件需要的优化方法也不甚相同,这需要投入大量人力。相反,编写此类程序的程序员希望使用Python语言灵活地编写此类程序,并利用软件自动为程序实施优化。
目前已有若干软件用于自动优化用Python编写的张量程序,此类软件的共同点是需要用户(此类软件的用户,即使用Python语言编写张量程序的程序员,下文中“用户”和“程序员”指代同一概念)将张量程序表示成一系列基础的“张量算子”的组合。此处“张量算子”包括逐元素加减乘除、按维度归约、矩阵运算、卷积等基础操作。然而,许多张量程序并非天然是此类“张量算子”的组合,本文称之为“不规则张量程序”。若强行使用此类“张量算子”表达程序,不仅使程序更难以编写,而且会引入许多冗余的计算,反而降低了程序性能。
发明内容
针对现有技术中的问题,本发明实施例提供一种面向利用Python语言编写的不规则张量程序的优化方法及装置,能够至少部分地解决现有技术中存在的问题。
一方面,本发明提出一种面向利用Python语言编写的不规则张量程序的优化方法,包括:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
其中,在所述通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树,以及所述通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化的步骤之间,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
对所述抽象语法树进行自动求导,得到求导后的抽象语法树;
用所述求导后的抽象语法树作为程序变换的抽象语法树,并继续执行后续方法步骤。
其中,所述对所述抽象语法树进行自动求导,得到求导后的抽象语法树,包括:
利用可用循环下标索引的张量进行存储程序中的变量;
维护求导后程序复用变量的程序位置,以及变量存储位置之间的对应关系,得到求导后的抽象语法树。
其中,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
利用多面体技术查找反复写入的变量,在自动求导时不存储此类变量,而在求导后程序中重新计算。
其中,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
利用多面体技术分析所述不规则张量程序中对变量的读写依赖关系,若确定程序变换会破坏所述读写依赖关系,则不予实施所述程序变换。
其中,所述编译为包含有硬件指令的程序,包括:
调用与所述硬件相关代码相对应的后端编译器,并通过所述后端编译器将所述硬件相关代码编译为包含有硬件指令的程序。
其中,基于上述面向利用Python语言编写的不规则张量程序的优化方法的三维物体分类处理方法,包括:
获取三维物体的特征信息,用张量表示所述特征信息;
基于预设物体分类模型对用张量表示所述特征信息进行分类处理,得到所述三维物体的分类结果;
其中,所述预设物体分类模型通过优化后的不规则张量程序实现。
一方面,本发明提出一种面向利用Python语言编写的不规则张量程序的优化装置,包括:
转换单元,用于通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
内联单元,用于通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
变换单元,用于对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
编译单元,用于对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
再一方面,本发明实施例提供一种电子设备,包括:处理器、存储器和总线,其中,
所述处理器和所述存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本发明实施例提供一种非暂态计算机可读存储介质,包括:
所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如下方法:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如下方法:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化方法及装置,通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;所述通用程序变换作用于程序的整体;对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序,通过本发明提供的优化方法及装置,能改善计算机运行所述不规则张量程序时的内部性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例提供的面向利用Python语言编写的不规则张量程序的优化方法的流程示意图。
图2是本发明另一实施例提供的面向利用Python语言编写的不规则张量程序的优化方法的流程示意图。
图3是本发明一实施例提供的面向利用Python语言编写的不规则张量程序的优化装置的结构示意图。
图4为本发明实施例提供的电子设备实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明实施例相关的缩略语和关键术语说明如下:
1.张量:由整数或浮点数组成的任意维度数组。向量和矩阵是张量的特殊情况,即分别为一维和二维张量。
2.张量程序:主体为根据一个或多个张量,计算另外的一个或多个张量的程序。
3.不规则张量程序:含有动态控制流、非完美嵌套循环、有依赖循环、随机张量下标访问、和/或动态张量形状的张量程序。
4.(程序的)性能:本文中,程序的性能指的是程序的运行速度。处理相同输入时,程序的运行时间越短,运行速度越高,性能即越高。
5.CPU:中央处理器,即计算机中实际进行计算(而非存储和输入输出)的单元。多核CPU采用多个功能部件同时进行大量计算。
6.GPU:GPU加速器,俗称显卡,是用于高效地运行一类程序的特殊处理器。
7.Python:一种编程语言。其特点是灵活易用,但未经优化时运行性能较低。
8.自动求导:一种程序变换。给定从输入张量x计算输出张量y的程序,生成从输入x计算“输出关于输入的导数”dy/dx的程序。
9.抽象语法树(AST):一种用于表示程序的数据结构。AST将程序表示为树形,将语句和表达式之间的嵌套关系表示为树上的从属关系。例如,“a+b”被表示为具有“a”和“b”两个子结点的“+”结点。
10.(函数调用的)内联:一种程序变换。若需要在函数f中调用函数g,直接将函数g的内容插入函数f中,避免在运行时真正执行此调用。
11.多面体(polyhedral)技术:一种程序分析手段。通过利用整数集合之间的映射表示程序中的读写,分析出程序中每处对变量的读读出的是何处的写写入的值,而每处对变量的写覆盖了何处的读写。多面体技术将上述分析的结果精确到具体的循环迭代及数组元素。
图1是本发明一实施例提供的面向利用Python语言编写的不规则张量程序的优化方法的流程示意图,如图1所示,本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化方法,包括:
步骤S1:通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树。
步骤S2:通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化。
步骤S3:对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体。
步骤S4:对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
在上述步骤S1中,装置通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树。装置可以是执行该方法的计算机设备,例如可以为服务器。
如图2所示,通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;用户输入的不规则张量程序经过前端转换被表示为抽象语法树(AST)。
在上述步骤S2中,装置通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化。具体说明如下:
首先,用户需要按本发明的限制利用Python编写不规则张量程序。程序分为需要通过本发明进行优化和求导的若干个张量计算函数,以及不需要通过本发明进行优化和求导的其他函数(例如输入输出等)。随后,用户将这些张量计算函数传入本发明,本发明对其进行优化和求导。对于张量计算函数,需要满足以下要求:
1.用户需要通过本发明提供的数据类型表示张量和标量,不允许使用其他数据类型;
2.只能使用整数范围的for循环和分支语句,不允许使用其他控制流语句;
3.调用函数时,被调用的函数也必须是张量计算函数。递归地进行函数调用时,递归层数必须是有限的,限值可以根据实际情况自主设置。
张量计算函数之间可能互相存在大量的函数调用,这会阻碍后续的优化。尤其是在计算不确定维度数目的张量时,用户时常会编写一个多层的函数调用结构,每一层函数调用处理张量的某一维。为解决本问题,本发明会强制内联函数调用。由于本发明限制递归的层数须有限,故内联是可行的。通过内联,多层的函数调用将被转换为多层的嵌套循环。
为了保证编程的便利性,本发明也提供了一系列预设的张量计算函数可供用户调用。这些预设函数在形式上可以与现有的张量算子相同。但与现有张量算子不同之处体现在:在进行了上述的内联后,这些预设函数可在Python循环和分支内部被调用,并可以与这些循环和分支一并优化,而现有的张量算子不能。
在上述步骤S3中,装置对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体。本发明将对此AST进行一系列程序变换。这些程序变换分为特殊程序变换及通用程序变换。特殊程序变换作用于程序的局部,且变换后对性能的影响有好有坏;因此,本发明接受用户通过额外的Python语句指明需要对程序何处进行何种特殊程序变换,用户也可以使用本发明提供的预设规则,以自动实施特殊程序变换。通用程序变换作用于程序整体,且不会对程序性能造成坏处;因此,本发明会随后对AST自动进行通用程序变换。
具体说明如下:
本发明将对此AST进行一系列程序变换。这些程序变换分为特殊程序变换及通用程序变换。用户无需将程序实现为“张量算子”或“完美嵌套循环”等特殊形式,即可实现这些变换。为了保证在任意情况下这些变换不会导致程序错误,本发明利用多面体技术分析不规则张量程序中对变量的读写依赖关系,若发现某一变换会破坏这种依赖关系,则不予实施该变换。
特殊程序变换如表1所示。这些变换作用于程序的局部(例如某一语句或某一张量),且变换后对性能的影响有好有坏。因此,本发明接受用户通过额外的Python语句指明需要对程序何处进行何种特殊程序变换,用户也可以使用本发明提供的预设规则,以自动实施特殊程序变换。
表1
通用程序变换如表2所示。这些变换作用于程序整体,且不会对程序性能造成坏处;因此,本发明会随后对AST自动进行下述所有通用程序变换。
表2
在上述步骤S4中,装置对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。进行变换后,本发明会通过代码生成步骤,将AST转换为与硬件相关的C++或CUDA代码,最后调用相应的后端编译器将其编译为由硬件指令组成的程序,并运行。用户利用CPU或硬件加速器运行此程序。执行时,CPU或硬件加速器会执行程序中的硬件指令。与已有工作相比,执行此程序时产生的冗余内存访问、冗余计算核心启动等开销更小,故运行速度更快。
本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化方法,通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;所述通用程序变换作用于程序的整体;对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序,通过本发明提供的优化方法,能改善计算机运行所述不规则张量程序时的内部性能。
进一步地,如图2所示,在所述通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树,以及所述通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化的步骤之间,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
对所述抽象语法树进行自动求导,得到求导后的抽象语法树;
用所述求导后的抽象语法树作为程序变换的抽象语法树,并继续执行后续方法步骤。
本发明可以对AST进行自动求导,其求导结果是一个新的AST。本发明为了同时兼顾高性能和自动求导,进行了如下关于提升性能的设计:
1.由于求导后的程序所需进行的优化与原始程序所需进行的优化不甚相同,本发明先进行自动求导,再进行后续的程序变换以优化,以免在求导后丧失优化机会。本发明提供的所有程序变换,既能应用在原始程序上,也能应用在求导后的程序上。
2.自动求导后,某些变量需要在运行原始程序时被存储下来,并在运行求导后程序时复用。本发明利用一个可用循环下标索引的张量进行此种存储,维护求导后程序的何处需要复用原始程序的何处存储的变量,而不是在运行时使用动态数据结构(如栈)维护此种关系,因为后者会阻碍性能优化。具体而言,上述的循环下表索引的是被存储变量在原始程序运行过程中的产生的不同版本。本发明利用多面体技术分析原始程序中对该变量的读写依赖关系,每当该变量被读取后再写入一个新值时,意味着该变量有了一个新的版本。本发明通过分析这种读写依赖关系,以确定如何索引这些版本。
3.某些需要复用的变量在原始程序中被大量反复写入,产生了大量的版本,存储这些变量会造成大量的性能开销。本发明利用多面体技术,找出这些被大量反复写入的变量。在自动求导时不存储此类变量,而是在求导后的程序中重新计算。
进一步地,所述对所述抽象语法树进行自动求导,得到求导后的抽象语法树,包括:
利用可用循环下标索引的张量进行存储程序中的变量;可参照上述说明,不再赘述。
维护求导后程序复用变量的程序位置,以及变量存储位置之间的对应关系,得到求导后的抽象语法树。可参照上述说明,不再赘述。
进一步地,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
利用多面体技术查找反复写入的变量,在自动求导时不存储此类变量,而在求导后程序中重新计算。可参照上述说明,不再赘述。
进一步地,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
利用多面体技术分析所述不规则张量程序中对变量的读写依赖关系,若确定程序变换会破坏所述读写依赖关系,则不予实施所述程序变换。可参照上述说明,不再赘述。
进一步地,所述编译为包含有硬件指令的程序,包括:
调用与所述硬件相关代码相对应的后端编译器,并通过所述后端编译器将所述硬件相关代码编译为包含有硬件指令的程序。可参照上述说明,不再赘述。
例如,欲实现计算∑j|ej-ej+1|的子程序,可将其实现为如下所示的代码:
for i in range(n_faces):
y=zeros(in_feats)
for j in range(3):
y+=abs(e[adj[i,j],:])
-e[adj[i,(j+1)%3],:]
通过调用本发明的“optimize”Python函数,用户将其标记为上述的“张量计算函数”。用户再通过其他普通的Python函数实现辅助的输入输出等逻辑。
如需自动求导,用户调用本发明提供的“grad”Python函数求出上述函数的导数函数。
随后,用户对上述函数或其导数函数创建本发明提供的“Schedule”Python类,以进行特殊程序变换。用户既可以通过该类的“auto_schedule”方法使用预设规则进行变换,也可以通过该类的其他方法手动指定需进行的变换。最后用户再调用本发明提供的“compile”Python函数进行后续的通用程序变换、代码生成等步骤,此函数返回的对象即可直接在Python中被其他函数调用。
本发明无需用户将张量程序表达为“张量算子”的组合,而是将用Python编写的张量程序优化为高效实现,并实施自动求导。为此,用户也需要满足本发明对Python语言的一些限制,即在需要被本发明优化的部分,只能使用for循环、分支、张量访问和张量计算、调用其他满足此限制的函数等Python语言功能,而不能使用任意函数调用、异常处理、多态等其他功能。
进一步地,本发明实施例提供基于面向利用Python语言编写的不规则张量程序的优化方法的三维物体分类处理方法,包括:
获取三维物体的特征信息,用张量表示所述特征信息;获取三维物体的特征信息的具体信息内容,可以根据三维物体的不同所有不同,特征信息主要包括可以体现三维物体形体结构的特征信息,不作具体限定。
在对三维物体的特征进行分类时,需要利用三角面片、点云等复杂数据结构描述该三维物体,再根据此数据结构进行张量计算。这种依照数据结构进行的张量计算是不规则的。
基于预设物体分类模型对用张量表示所述特征信息进行分类处理,得到所述三维物体的分类结果;通过将用张量表示所述特征信息输入至预设物体分类模型,将预设物体分类模型的输出结果作为三维物体的分类结果。
其中,所述预设物体分类模型通过优化后的不规则张量程序实现。
对于三维物体的分类任务,用户需要将表示三维物体的数据结构输入此变换后的程序中,程序将输出分类结果。
利用现有技术编写此类程序时,需要程序员组合“张量算子”,导致计算机内的冗余内存访问、冗余计算核心启动等开销。利用本发明进行编程时,程序员可直接编写依据此类数据结构进行的张量计算,而无需组合上述算子,从而减少了上述开销,提高了程序的运行速度。通过将此类程序应用到物体分类,能够提高三维物体分类处理的执行效率。
需要说明的是,本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化方法可用于工业领域,也可用于除工业领域之外的任意技术领域,本发明实施例对面向利用Python语言编写的不规则张量程序的优化方法的应用领域不做限定。
图3是本发明一实施例提供的面向利用Python语言编写的不规则张量程序的优化装置的结构示意图,如图3所示,本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化装置,包括转换单元301、内联单元302、变换单元303和编译单元304,其中:
转换单元301用于通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;内联单元302用于通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;变换单元303用于对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;所述通用程序变换作用于程序的整体;编译单元304用于对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
具体的,装置中的转换单元301用于通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;内联单元302用于通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;变换单元303用于对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;所述通用程序变换作用于程序的整体;编译单元304用于对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本发明实施例提供的面向利用Python语言编写的不规则张量程序的优化装置,通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;所述通用程序变换作用于程序的整体;对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序,通过本发明提供的优化装置,能改善计算机运行所述不规则张量程序时的内部性能。
本发明实施例提供面向利用Python语言编写的不规则张量程序的优化装置的实施例具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
图4为本发明实施例提供的电子设备实体结构示意图,如图4所示,所述电子设备包括:处理器(processor)401、存储器(memory)402和总线403;
其中,所述处理器401、存储器402通过总线403完成相互间的通信;
所述处理器401用于调用所述存储器402中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种面向利用Python语言编写的不规则张量程序的优化方法,其特征在于,包括:
通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
2.根据权利要求1所述的面向利用Python语言编写的不规则张量程序的优化方法,其特征在于,在所述通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树,以及所述通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化的步骤之间,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
对所述抽象语法树进行自动求导,得到求导后的抽象语法树;
用所述求导后的抽象语法树作为程序变换的抽象语法树,并继续执行后续方法步骤。
3.根据权利要求2所述的面向利用Python语言编写的不规则张量程序的优化方法,其特征在于,所述对所述抽象语法树进行自动求导,得到求导后的抽象语法树,包括:
利用可用循环下标索引的张量进行存储程序中的变量;
维护求导后程序复用变量的程序位置,以及变量存储位置之间的对应关系,得到求导后的抽象语法树。
4.根据权利要求3所述的面向利用Python语言编写的不规则张量程序的优化方法,其特征在于,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
利用多面体技术查找反复写入的变量,在自动求导时不存储此类变量,而在求导后程序中重新计算。
5.根据权利要求1所述的面向利用Python语言编写的不规则张量程序的优化方法,其特征在于,所述面向利用Python语言编写的不规则张量程序的优化方法还包括:
利用多面体技术分析所述不规则张量程序中对变量的读写依赖关系,若确定程序变换会破坏所述读写依赖关系,则不予实施所述程序变换。
6.根据权利要求1至5任一所述的面向利用Python语言编写的不规则张量程序的优化方法,其特征在于,所述编译为包含有硬件指令的程序,包括:
调用与所述硬件相关代码相对应的后端编译器,并通过所述后端编译器将所述硬件相关代码编译为包含有硬件指令的程序。
7.一种基于如权利要求1所述的面向利用Python语言编写的不规则张量程序的优化方法的三维物体分类处理方法,其特征在于,包括:
获取三维物体的特征信息,用张量表示所述特征信息;
基于预设物体分类模型对用张量表示所述特征信息进行分类处理,得到所述三维物体的分类结果;
其中,所述预设物体分类模型通过优化后的不规则张量程序实现。
8.一种面向利用Python语言编写的不规则张量程序的优化装置,其特征在于,包括:
转换单元,用于通过前端转换将用户输入的由Python语言编写的不规则张量程序表示为抽象语法树;
内联单元,用于通过内联各抽象语法树,使所述不规则张量程序的各个张量计算函数中的循环和分支被一并优化;
变换单元,用于对内联得到的总抽象语法树进行程序变换,得到程序变换后的抽象语法树;所述程序变换包括特殊程序变换及通用程序变换;
其中,所述特殊程序变换作用于程序的局部,且通过用户自定义Python语句指定所述局部的局部位置,以及程序变换方式;
所述通用程序变换作用于程序的整体;
编译单元,用于对所述程序变换后的抽象语法树转换为硬件相关代码,并编译为包含有硬件指令的程序。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述方法的步骤。
11.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210641142.0A CN115220727B (zh) | 2022-06-07 | 2022-06-07 | 面向利用Python语言编写的不规则张量程序的优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210641142.0A CN115220727B (zh) | 2022-06-07 | 2022-06-07 | 面向利用Python语言编写的不规则张量程序的优化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115220727A true CN115220727A (zh) | 2022-10-21 |
CN115220727B CN115220727B (zh) | 2024-05-28 |
Family
ID=83607630
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210641142.0A Active CN115220727B (zh) | 2022-06-07 | 2022-06-07 | 面向利用Python语言编写的不规则张量程序的优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115220727B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115495095A (zh) * | 2022-11-18 | 2022-12-20 | 上海燧原科技有限公司 | 张量程序的整程序编译方法、装置、设备、介质及集群 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976760A (zh) * | 2017-12-27 | 2019-07-05 | 北京东土科技股份有限公司 | 一种图形语言的交叉编译方法及交叉编译器 |
CN112748988A (zh) * | 2021-01-26 | 2021-05-04 | 浙江太美医疗科技股份有限公司 | 基于领域专用语言的自定义函数运行方法和系统 |
CN113031931A (zh) * | 2021-03-04 | 2021-06-25 | 嘉兴丰鸟科技有限公司 | 一种基于脚本交叉编译的Python安全扩展方法 |
CN113553039A (zh) * | 2020-04-23 | 2021-10-26 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
CN113672232A (zh) * | 2021-07-09 | 2021-11-19 | 华为技术有限公司 | 程序编译方法和装置 |
US20220036194A1 (en) * | 2021-10-18 | 2022-02-03 | Intel Corporation | Deep neural network optimization system for machine learning model scaling |
-
2022
- 2022-06-07 CN CN202210641142.0A patent/CN115220727B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976760A (zh) * | 2017-12-27 | 2019-07-05 | 北京东土科技股份有限公司 | 一种图形语言的交叉编译方法及交叉编译器 |
CN113553039A (zh) * | 2020-04-23 | 2021-10-26 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
CN112748988A (zh) * | 2021-01-26 | 2021-05-04 | 浙江太美医疗科技股份有限公司 | 基于领域专用语言的自定义函数运行方法和系统 |
CN113031931A (zh) * | 2021-03-04 | 2021-06-25 | 嘉兴丰鸟科技有限公司 | 一种基于脚本交叉编译的Python安全扩展方法 |
CN113672232A (zh) * | 2021-07-09 | 2021-11-19 | 华为技术有限公司 | 程序编译方法和装置 |
US20220036194A1 (en) * | 2021-10-18 | 2022-02-03 | Intel Corporation | Deep neural network optimization system for machine learning model scaling |
Non-Patent Citations (3)
Title |
---|
ZE TANG ET AL: ""AST-Transformer:Encoding Abstract Syntax Trees Efficiently for Code Summarization"", 《ARXIV.ORG》, 3 December 2021 (2021-12-03) * |
彭灿: ""基于张量填充的网络流量数据恢复和测量"", 《中国硕士学位论文全文数据库 (信息科技辑)》, 15 January 2019 (2019-01-15) * |
欧辉思,曹健: ""面向跨领域的推荐系统研究现状与趋势"", 《小型微型计算机系统》, 15 July 2016 (2016-07-15) * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115495095A (zh) * | 2022-11-18 | 2022-12-20 | 上海燧原科技有限公司 | 张量程序的整程序编译方法、装置、设备、介质及集群 |
Also Published As
Publication number | Publication date |
---|---|
CN115220727B (zh) | 2024-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110766147B (zh) | 神经网络编译器架构及编译方法 | |
CN110764744B (zh) | 用于神经网络计算的中间表示生成方法和装置 | |
US6064819A (en) | Control flow and memory management optimization | |
US6314562B1 (en) | Method and system for anticipatory optimization of computer programs | |
US10901715B1 (en) | Lazy compilation and kernel fusion in dynamic computation graphs | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
CN107003885B (zh) | 用于低级别可组合高性能计算库的技术 | |
WO2018094099A1 (en) | Systems and methods for automatically generating code for deep learning systems | |
CN114461221A (zh) | 编译方法、编译装置、电子设备、存储介质 | |
CN115034402A (zh) | 模型推理性能的优化方法、装置及相关产品 | |
CN115220727B (zh) | 面向利用Python语言编写的不规则张量程序的优化方法及装置 | |
US20130019225A1 (en) | Incremental Inferences for Developing Data Models | |
CN116368494A (zh) | 一种神经网络编译优化方法和相关装置 | |
US11467827B1 (en) | Index space mapping using static code analysis | |
Di Martino et al. | Two program comprehension tools for automatic parallelization | |
Doberkat et al. | ProSet—a language for prototyping with sets | |
CN113420466B (zh) | 一种面向跨平台自动性能优化的单元计算构件及方法 | |
Haensch et al. | Plan operator specialization using reflective compiler techniques | |
Hsu | The key to a data parallel compiler | |
US20170249131A1 (en) | Compilation apparatus and compiling method | |
Fischer | To Iterate Is Human, to Recurse Is Divine---Mapping Iterative Python to Recursive SQL | |
US20240232666A9 (en) | Replacing lambda expressions in a rete network with corresponding code classes | |
US20240135210A1 (en) | Replacing lambda expressions in a rete network with corresponding code classes | |
Yang | Fastad: expression template-based c++ library for fast and memory-efficient automatic differentiation | |
CN113326048B (zh) | 浮点数计算精度处理方法、系统、介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |