CN114661301B - 图形处理单元编译方法、装置、编译加速库和存储介质 - Google Patents
图形处理单元编译方法、装置、编译加速库和存储介质 Download PDFInfo
- Publication number
- CN114661301B CN114661301B CN202210569170.6A CN202210569170A CN114661301B CN 114661301 B CN114661301 B CN 114661301B CN 202210569170 A CN202210569170 A CN 202210569170A CN 114661301 B CN114661301 B CN 114661301B
- Authority
- CN
- China
- Prior art keywords
- expression
- container
- parameter
- operator
- programming
- 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.)
- Active
Links
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/44—Encoding
- G06F8/447—Target code generation
-
- 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
- G06F8/427—Parsing
-
- 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/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及一种图形处理单元编译方法、装置、编译加速库、存储介质和计算机程序产品。所述方法包括:获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件中选择的预设存取方式生成得到。采用本方法,能够提高编程程序运行效率。
Description
技术领域
本申请涉及计算机编程技术领域,特别是涉及一种图形处理单元编译方法、装置、编译加速库、存储介质和计算机程序产品。
背景技术
图形处理器单元(Graphics Processing Unit,GPU)是一种进行绘图运算工作的微处理器,通常用于为高性能计算和深度神经网络运算提供并行化计算能力。然而图形处理单元的编程需要开发人员对硬件性能具有较深的理解,对开发人员的要求较高。
传统技术中,通常使用编译器来处理图形处理单元的编程,但是,这种方法使得编程程序的性能受到编译器质量的高度限制,造成编程程序的运行效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高编程程序运行效率的图形处理单元编译方法、装置、编译加速库、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种图形处理单元编译方法。所述方法包括:
获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件中选择的预设存取方式生成得到。
在其中一个实施例中,对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果,包括:
对预设运算符进行重载,得到目标连接符;
根据所述目标连接符,对所述参数表达式进行算子融合,得到所述算子融合结果。
在其中一个实施例中,根据所述目标连接符,对所述参数表达式进行算子融合,得到所述算子融合结果,包括:
根据所述目标连接符,对所述参数表达式进行连接,并将连接在所述目标连接符左边的参数表达式作为目标融合表达式,以及将连接在所述目标连接符右边的参数表达式作为闭包表达式;
根据所述目标融合表达式和所述闭包表达式,确定所述算子融合结果。
在其中一个实施例中,根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序,包括:
对所述算子融合结果的编程代码进行语法分析,生成所述编程代码的机器代码文件;
将所述机器代码文件和所述容器进行组合,得到所述目标执行程序。
在其中一个实施例中,在根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序之前,还包括:
从所述编程文件中,确定出所述选择的预设存取方式;
根据所述选择的预设存取方式,对所述参数进行存储,得到所述参数的容器;所述容器用于指示所述参数的访问方式。
在其中一个实施例中,所述预设存取方式包括结构体数组和数组结构体;
所述根据所述选择的预设存取方式,对所述参数进行存储,得到所述参数的容器,包括:
当所述选择的预设存取方式为所述结构体数组时,对所述参数进行存储,得到所述参数的结构体形式的容器;所述结构体形式的容器中的参数为数组类型。
在其中一个实施例中,在根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序之后,还包括:
当接收到针对所述算子融合结果的获取指令时,运行所述目标执行程序,得到所述算子融合结果的目标运算结果。
第二方面,本申请还提供了一种图形处理单元编译装置。所述装置包括:
文件获取模块,用于获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
算子融合模块,用于对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
程序确定模块,用于根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件中选择的预设存取方式生成得到。
第三方面,本申请还提供了一种编译加速库。所述编译加速库包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件中选择的预设存取方式生成得到。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件中选择的预设存取方式生成得到。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件中选择的预设存取方式生成得到。
上述图形处理单元编译方法、装置、编译加速库、存储介质和计算机程序产品,获取针对图形处理单元的编程文件;编程文件携带有参数表达式以及与参数表达式关联的参数;对参数表达式进行算子融合,得到参数表达式的算子融合结果;根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序;编程代码通过对算子融合结果进行解析得到;参数的容器通过编程文件中选择的预设存取方式生成得到。采用本方法,通过将图形处理单元的编程文件中的参数表达式的算子融合结果转变为的编程代码,而无需计算该算子融合结果,能够节省图形处理单元的计算开销,降低了编程文件的运行时间,并通过选择的预设存取方式来优化算子融合结果中参数的存储和访问,进一步降低了编程文件的运行时间,从而提高了编程文件的运行效率。
附图说明
图1为一个实施例中图形处理单元编译方法的流程示意图;
图2为一个实施例中获取算子融合结果步骤的流程示意图;
图3为一个实施例中运行时间的对比结果图;
图4为另一个实施例中图形处理单元编译方法的流程示意图;
图5为一个实施例中图形处理单元编译装置的结构框图;
图6为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种图形处理单元编译方法,本实施例以该方法应用于编译加速库进行举例说明。本实施例中,该方法包括以下步骤:
步骤S101,获取针对图形处理单元的编程文件;编程文件携带有参数表达式以及与参数表达式关联的参数。
其中,图形处理单元(Graphics Processing Unit,GPU)指的是一种进行绘图运算工作的微处理器。
其中,编程文件指的是输入图形处理单元中需要执行计算任务的编程文件,编程文件可以是关于神经网络模型的编程文件,也可以是科学计算任务的编程文件等。
其中,参数表达式用于对函数进行操作,参数表达式可以是算子,例如变换算子或规约算子。
实际应用中,参数表达式可以对函数进行变换操作,例如通过参数表达式将函数f(t)线性变换为F(W)。
具体地,用户需要进行利用图形处理单元进行编程时,可以将编程文件输入至终端,编译加速库通过终端接收针对图形处理单元的编程文件;编译加速库从编程文件中提取出参数表达式,以及参数表达式关联的参数。
步骤S102,对参数表达式进行算子融合,得到参数表达式的算子融合结果。
具体地,编译加速库从各参数表达式中,确定出存在融合关系的待融合参数表达式;对存在融合关联关系的待融合参数表达式进行融合,得到待融合参数表达式的算子融合结果,作为参数表达式的算子融合结果。
举例说明,编译加速库从编程文件中提取出两个参数表达式,分别为y=(x)和z=(y),由于参数表达式y=(x)和参数表达式z=(y)之间存在y的关联,则对参数表达式y=(x)和z=(y)进行算子融合,得到z=(y(x)),作为算子融合结果。
步骤S103,根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序;编程代码通过对算子融合结果进行解析得到;参数的容器通过编程文件中选择的预设存取方式生成得到。
其中,容器指的是用于存储数据的对象。需要说明的是,容器可以根据存储的数据的大小自行扩展,因此无需预先定义所需的存储空间。
其中,预设存取方式用于指示容器中存储的数据的存储方式以及访问模式。
具体地,编译加速库内预先设置了多种预设存取方式,编程文件从多种预设存取方式中选择一种预设存取方式,编译加速库从编程文件的参数表达式中提取出参数,并按照编程文件中选择的预设存取方式将参数存储至容器中,得到参数的容器;进而根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序。其中,目标执行程序指的是编程代码经过处理后变成待执行的文件。
需要说明的是,此时的目标执行程序未被计算机执行,仍处于待执行状态,目标执行程序中的算子融合结果也未被执行。
举例说明,用户终端上输入编程文件,终端调用编译加速库来对编程文件进行并行计算处理;编译加速库从编程文件中提取出参数表达式y=(x)和z=(y),对参数表达式y=(x)和z=(y)进行算子融合,得到算子融合结果z=(y(x)),根据算子融合结果z=(y(x))的编程代码,以及参数x、y、z的容器,得到编程文件对应的待执行文件,此时算子融合结果z=(y(x))也为待执行的编程代码。
上述图形处理单元编译方法中,获取针对图形处理单元的编程文件;编程文件携带有参数表达式以及与参数表达式关联的参数;对参数表达式进行算子融合,得到参数表达式的算子融合结果;根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序;编程代码通过对算子融合结果进行解析得到;参数的容器通过编程文件中选择的预设存取方式生成得到。采用本方法,通过将图形处理单元的编程文件中的参数表达式的算子融合结果转变为的编程代码,而无需计算该算子融合结果,能够节省图形处理单元的计算开销,降低了编程文件的运行时间,并通过选择的预设存取方式来优化算子融合结果中参数的存储和访问,进一步降低了编程文件的运行时间,从而提高了编程文件的运行效率。
在一个实施例中,上述步骤S102,对参数表达式进行算子融合,得到参数表达式的算子融合结果,具体包括如下步骤:对预设运算符进行重载,得到目标连接符;根据目标连接符,对参数表达式进行算子融合,得到算子融合结果。
其中,运算符指的是用于执行程序代码运算符号,例如算术运算符、连接运算符、逻辑运算符、关系运算符和赋值运算符。
其中,重载指的是将运算符声明为不同功能的同名运算符。
举例说明,算术运算符“+”原本表示两个参数的相加,即算术运算符“+”用于执行参数的相加功能,假设a=1+2,则可以得到a=3;对算术运算符“+”进行重载,使其变为用于执行参数的连接功能的运算符,假设a=1+2,则可以得到a=12。
具体地,编译加速库获取预设运算符,对预设运算符进行重载,得到目标连接符,目标连接符携带有用于接收参数表达式的连接接口;利用目标连接符的连接接口接收存在融合关系的参数表达式,根据融合关系对目标连接符接收的参数表达式进行算子融合,得到算子融合结果。需要说明的是,目标连接符的连接接口指的是代码程序中用于传递数据的程序接口,而不是物理硬件的连接接口。
实际应用中,假设预设运算符为二元运算符“|”,编译加速库对二元运算符“|”进行重载,使其接收左右两个参数表达式,并对左右两个表达式进行算子融合处理。
本实施例中,编译加速库通过对预设运算符进行重载,得到目标连接符,根据目标连接符,对参数表达式进行算子融合,得到算子融合结果,实现了预设运算符的重载,并通过重载得到的目标连接符的连接接口接收参数表达式,进而以目标连接符为处理依据执行后续的算子融合步骤,解决了传统技术中编译模板库的接口有限,需要用户自行设置参数表达式的连接接口而造成的程序开发效率较低的技术问题,提高了编译加速库在图形处理单元上的开发效率。
在一个实施例中,如图2所示,根据目标连接符,对参数表达式进行算子融合,得到算子融合结果,具体包括如下步骤:
步骤S201,根据目标连接符,对参数表达式进行连接,并将连接在目标连接符左边的参数表达式作为目标融合表达式,以及将连接在目标连接符右边的参数表达式作为闭包表达式。
步骤S201,根据目标融合表达式和闭包表达式,确定算子融合结果。
其中,目标融合表达式指的是作为算子融合结果的主体的参数表达式。闭包表达式指的是定义在目标融合表达式内部的参数表达式。
具体地,编译加速库调用目标连接符,将存在融合关联关系的参数表达式连接在目标连接符的左右两侧,确认连接在目标连接符左边的参数表达式为目标融合表达式,确认连接在目标连接符右边的参数表达式为闭包表达式,根据目标融合表达式的函数对象,得到算子融合的函数对象,根据闭包表达式的迭代器,得到算子融合的迭代器;根据算子融合的函数对象和迭代器,得到算子融合结果。
其中,函数对象指的是能够作为函数进行调用的程序对象。迭代器表示编译加速库中容器的地址,用于访问容器中的部分或全部的参数。
举例说明,从编程文件中提取出参数表达式y=(x)和z=(y),然后将二元运算符“|”重载为目标连接符,通过目标连接符“|”连接参数表达式y=(x)和z=(y),得到算子融合结果z=(y)|y=(x);其中z=(y)为目标融合表达式,y=(x)为闭包表达式,相当于z=(y(x))。
实际应用中,变换算子transform用于对容器内的每一个参数执行同一个变换。变换算子transform算子接收编译加速库的三个预设存取方式,包括可调用类型Callable、闭包类型ClosureType和迭代器类型InputIt;其中,闭包类型ClosureType用于保存待执行上下文。变换算子transform的主要成员变量包括一个可调用类型Callable的函数对象,一个闭包类型ClosureType的上下文对象,和两个迭代器类型InputIt的迭代器,用于指定容器的头尾位置。两个transform变换算子可以通过一个目标连接符“|”连接,表示算子的融合。目标连接符“|”接收左右两个变换算子作为参数,返回一个新的算子,新的算子的函数对象与左边变换算子的函数对象相同,新的算子的闭包为右边的变换算子,其迭代器与右边的变换算子的迭代器相同。在求值时,右边的闭包会先被调用,使得右边变换算子被执行,之后再执行左边的变换算子的函数对象,从而达到容器内参数的两次变换,这两个变换之间不需要额外的访存。
进一步地,在GeForce RTX 2080 Ti图形卡上,来验证本公开提出的图形处理单元编译方法与现有的Thrust模板库处理算子融合时所需的运行时间,其中,Thrust模板库指的是基于类标准模板库的C++模板库。使用本公开提出的方法和Thrust模板库,分别对1至6个变换算子进行算子融合处理,图3为运行时间的结果对比图,由图3可知,本公开提出的方法对1至6个变换算子的运行时间基本一致,相差时间小于0.2毫秒,即表明本公开提出的方法无显著的额外访存开销,而Thrust模板库对1至6个变换算子的运行时间与变换算子的数量增长基本成正比。
本实施例中,编译加速库根据目标连接符,对参数表达式进行连接,并将连接在目标连接符左边的参数表达式作为目标融合表达式,以及将连接在目标连接符右边的参数表达式作为闭包表达式,进而根据目标融合表达式和闭包表达式,确定算子融合结果,实现了通过目标连接符进行参数表达式的连接和融合,无需用户自行设置参数表达式的连接接口,也无需算子融合的过程中进行算子融合结果的计算求值,能够节省图形处理单元的计算开销,降低了参数表达式的算子融合时间,从而提高了编程文件的运行效率。
在一个实施例中,上述步骤S103,根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序,具体包括如下步骤:对算子融合结果的编程代码进行语法分析,生成编程代码的机器代码文件;将机器代码文件和容器进行组合,得到目标执行程序。
其中,机器代码文件指的是携带有机器能够直接识别的程序语言或指令代码的文件。
具体地,编译加速库获取算子融合结果的编程代码,对编程代码进行语法分析,得到编程代码的汇编语言,然后将汇编语言编译为机器代码文件,通过连接程序来连接组合机器代码文件和容器,得到目标执行程序,编译加速库连接目标执行程序,以便后续执行目标连接程序。
本实施例中,通过对算子融合结果的编程代码进行语法分析,生成编程代码的机器代码文件;将机器代码文件和容器进行组合,得到目标执行程序,实现了编译加速器库与算子融合结果的目标执行程序的程序连接,进而能够通过编译加速库执行目标执行程序,以获取针对图形处理单元的编程文件的运行结果。
在一个实施例中,在根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序之前,还包括:从编程文件中,确定出选择的预设存取方式;根据选择的预设存取方式,对参数进行存储,得到参数的容器;容器用于指示参数的访问方式。
实际应用中,为提高编译加速库的运行效率,编译加速库中提供了许多容器来存储和访问参数,编译加速库设置有多种预设存取方式来控制容器的布局,并通过迭代器执行容器的访问和操作。
需要说明的是,编译加速库对多种预设存取方式进行偏特化,以分别实现多种容器布局。
具体地,开发人员在开发针对图形处理单元的编程文件时,可以使用编译加速库中的预设存取方式,进而编译加速库得到编程文件之后,可以从编程文件中,确定出开发人员选择的预设存取方式,根据选择的预设存取方式,将参数存储在容器中,得到参数的容器。
本实施例中,编译加速库从编程文件中,确定出选择的预设存取方式,根据选择的预设存取方式,对参数进行存储,得到参数的容器。采用本方法,编译加速库能够通过预设存取方式来优化参数的访问和存储模式,使得目标执行程序在被执行时自动根据预设存取方式来执行,实现了降低访存开销的技术效果,从而提高了编程文件的运行效率。
在一个实施例中,预设存取方式包括结构体数组和数组结构体。根据选择的预设存取方式,对参数进行存储,得到参数的容器,具体包括如下步骤:当选择的预设存取方式为结构体数组时,对参数进行存储,得到参数的结构体形式的容器;结构体形式的容器中的参数为数组类型。
其中,结构体数组(Struct of Array,SoA)指的是将数据存储结构体,结构体中每个域为一个数组。例如struct{array{‘a’, ‘b’, ‘c’}, array{1, 2, 3}}。
其中,数组结构体(Array of Struct,AoS)指的是将数据存储为数组,数组中每个数组元素为一个结构体。例如array{struct{‘a’, 1}, struct{‘b’, 2}, struct{‘c’,3}}。
具体地,当编译加速库检测到选择的预设存取方式为结构体数组时,将参数存储为结构体,其中结构体的每一个域为一个数组,得到参数的结构体形式的容器。进一步地,当编译加速库访问结构体形式的容器时,查询结构体形式的容器的各个数组,得到各个数组中满足查询条件的参数,作为目标访问结果。
举例说明,对于SoA形式的容器布局,编译加速库需要访问下标为i的参数时,从容器中各个数组中提取出下标为i的参数,得到目标访问参数,然后使用sizeof运算符获取目标访问参数的数量(标记为N),根据目标访问参数的数量N,使用std:integer_sequence生成相应长度的整数序列(0, 1, …, N-1),将该整数序列(0, 1, …, N-1)进行返回。
实际应用中,本公开在GeForce RTX 2080 Ti图形卡上,来验证本公开提出的图形处理单元编译方法与现有的Thrust模板库的性能。分别使用本公开提出的方法和现有的Thrust模板库,在一个长度为223的容器上进行相同参数的访问、算子变换、更新的任务,经实验,得到本公开提出的方法消耗的时间为131.129毫秒,而Thrust模板库消耗的时间为308.431毫秒,因此,本公开提出的方法能更好的节省访存开销,减少了运行时间。
本实施例中,当选择的预设存取方式为结构体数组时,对参数进行存储,得到参数的结构体形式的容器,通过容器来控制目标执行程序的访问开销,从而提高了编程文件的运行效率。
在一个实施例中,在根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序之后,还包括:当接收到针对算子融合结果的获取指令时,运行目标执行程序,得到算子融合结果的目标运算结果。
具体地,在上述步骤S103得到目标执行程序之后,不会立刻执行目标执行程序中的算子融合结果,而是基于惰性求值,当接收到针对目标执行程序中的算子融合结果的获取指令时,运行目标执行程序中的算子融合结果的编程代码,得到算子融合结果的目标运算结果。
需要说明的是,惰性求值指的是通过参数表达式得到算子融合结果时不会立刻求值,而是在该算子融合结果在目标执行程序中被取用时再求值,以减少算子融合处理的运行的时间。
本实施例中,通过惰性求值控制算子融合结果的运行时间,能够有效降低目标执行程序处理算子融合时的运行时间,从而提高了编程文件的运行效率。
在一个实施例中,如图4所示,提供了另一种图形处理单元编译方法,以该方法应用于编译加速库为例进行说明,包括以下步骤:
步骤S401,获取针对图形处理单元的编程文件;编程文件携带有参数表达式以及与参数表达式关联的参数。
步骤S402,对预设运算符进行重载,得到目标连接符。
步骤S403,根据目标连接符,对参数表达式进行连接,并将连接在目标连接符左边的参数表达式作为目标融合表达式,以及将连接在目标连接符右边的参数表达式作为闭包表达式。
步骤S404,根据目标融合表达式和闭包表达式,确定算子融合结果。
步骤S405,从编程文件中,确定出选择的预设存取方式;
步骤S406,根据选择的预设存取方式,对参数进行存储,得到参数的容器;容器用于指示参数的访问方式。
其中,步骤S406还包括步骤S406-1,选择的预设存取方式为结构体数组时,对参数进行存储,得到参数的结构体形式的容器;结构体形式的容器中的参数为数组类型。
步骤S407,对算子融合结果的编程代码进行语法分析,生成编程代码的机器代码文件;将机器代码文件和容器进行组合,得到目标执行程序。
步骤S408,当接收到针对算子融合结果的获取指令时,运行目标执行程序,得到算子融合结果的目标运算结果。
上述图形处理单元编译方法,具有以下有益效果:
(1)通过将图形处理单元的编程文件中的参数表达式的算子融合结果转变为的编程代码,并基于惰性求值控制目标执行程序中的算子融合结果的计算求值,降低了图形处理单元处理算子融合的运行时间,从而提高了编程文件的运行效率;
(2)通过预设存取方式,来控制目标执行程序的访问开销,有效地降低编程文件的访问开销,从而进一步提高了编程文件的运行效率。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的图形处理单元编译方法的图形处理单元编译装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个图形处理单元编译装置实施例中的具体限定可以参见上文中对于图形处理单元编译方法的限定,在此不再赘述。
在一个实施例中,如图5所示,提供了一种图形处理单元编译装置500,包括:文件获取模块501、算子融合模块502和程序确定模块503,其中:
文件获取模块501,用于获取针对图形处理单元的编程文件;编程文件携带有参数表达式以及与参数表达式关联的参数。
算子融合模块502,用于对参数表达式进行算子融合,得到参数表达式的算子融合结果。
程序确定模块503,用于根据算子融合结果的编程代码和参数的容器,确定编程文件的目标执行程序;编程代码通过对算子融合结果进行解析得到;参数的容器通过编程文件中选择的预设存取方式生成得到。
在一个实施例中,算子融合模块502,还用于对预设运算符进行重载,得到目标连接符;根据目标连接符,对参数表达式进行算子融合,得到算子融合结果。
在一个实施例中,图形处理单元编译装置还包括参数连接模块,用于根据目标连接符,对参数表达式进行连接,并将连接在目标连接符左边的参数表达式作为目标融合表达式,以及将连接在目标连接符右边的参数表达式作为闭包表达式;根据目标融合表达式和闭包表达式,确定算子融合结果。
在一个实施例中,程序确定模块503,还用于对算子融合结果的编程代码进行语法分析,生成编程代码的机器代码文件;将机器代码文件和容器进行组合,得到目标执行程序。
在一个实施例中,图形处理单元编译装置还包括参数存储模块,用于从编程文件中,确定出选择的预设存取方式;根据选择的预设存取方式,对参数进行存储,得到参数的容器;容器用于指示参数的访问方式。
在一个实施例中,预设存取方式包括结构体数组和数组结构体;图形处理单元编译装置还包括结构体容器模块,用于当选择的预设存取方式为结构体数组时,对参数进行存储,得到参数的结构体形式的容器;结构体形式的容器中的参数为数组类型。
在一个实施例中,图形处理单元编译装置还包括算子执行模块,用于当接收到针对算子融合结果的获取指令时,运行目标执行程序,得到算子融合结果的目标运算结果。
上述图形处理单元编译装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,通过计算机设备调用编译加速库,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种图形处理单元编译方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种编译加速库,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (7)
1.一种图形处理单元编译方法,其特征在于,所述方法包括:
获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件,从编译加速库设置的多个预设存取方式中选择的预设存取方式生成得到,并通过迭代器执行所述容器的访问和操作;所述预设存取方式用于指示所述容器中存储的数据的存储方式以及访问模式;
所述对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果,包括:
根据目标连接符,对所述参数表达式进行连接,并将连接在所述目标连接符左边的参数表达式作为目标融合表达式,以及将连接在所述目标连接符右边的参数表达式作为闭包表达式;所述目标连接符通过对预设运算符进行重载得到;所述目标连接符携带有用于接收所述参数表达式的连接接口;
根据所述目标融合表达式的函数对象和所述闭包表达式的迭代器,得到所述参数表达式的算子融合结果。
2.根据权利要求1所述的方法,其特征在于,所述根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序,包括:
对所述算子融合结果的编程代码进行语法分析,生成所述编程代码的机器代码文件;
将所述机器代码文件和所述容器进行组合,得到所述目标执行程序。
3.根据权利要求1所述的方法,其特征在于,在根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序之前,还包括:
从所述编程文件中,确定出所述选择的预设存取方式;
根据所述选择的预设存取方式,对所述参数进行存储,得到所述参数的容器;所述容器用于指示所述参数的访问方式。
4.根据权利要求3所述的方法,其特征在于,所述预设存取方式包括结构体数组和数组结构体;
所述根据所述选择的预设存取方式,对所述参数进行存储,得到所述参数的容器,包括:
当所述选择的预设存取方式为所述结构体数组时,对所述参数进行存储,得到所述参数的结构体形式的容器;所述结构体形式的容器中的参数为数组类型。
5.一种图形处理单元编译装置,其特征在于,所述装置包括:
文件获取模块,用于获取针对图形处理单元的编程文件;所述编程文件携带有参数表达式以及与所述参数表达式关联的参数;
算子融合模块,用于对所述参数表达式进行算子融合,得到所述参数表达式的算子融合结果;
程序确定模块,用于根据所述算子融合结果的编程代码和所述参数的容器,确定所述编程文件的目标执行程序;所述编程代码通过对所述算子融合结果进行解析得到;所述参数的容器通过所述编程文件,从编译加速库设置的多个预设存取方式中选择的预设存取方式生成得到,并通过迭代器执行所述容器的访问和操作;所述预设存取方式用于指示所述容器中存储的数据的存储方式以及访问模式;
算子融合模块,具体用于根据目标连接符,对所述参数表达式进行连接,并将连接在所述目标连接符左边的参数表达式作为目标融合表达式,以及将连接在所述目标连接符右边的参数表达式作为闭包表达式;所述目标连接符通过对预设运算符进行重载得到;所述目标连接符携带有用于接收所述参数表达式的连接接口;根据所述目标融合表达式的函数对象和所述闭包表达式的迭代器,得到所述参数表达式的算子融合结果。
6.一种编译加速库,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4中任一项所述的方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210569170.6A CN114661301B (zh) | 2022-05-24 | 2022-05-24 | 图形处理单元编译方法、装置、编译加速库和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210569170.6A CN114661301B (zh) | 2022-05-24 | 2022-05-24 | 图形处理单元编译方法、装置、编译加速库和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114661301A CN114661301A (zh) | 2022-06-24 |
CN114661301B true CN114661301B (zh) | 2022-09-06 |
Family
ID=82036975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210569170.6A Active CN114661301B (zh) | 2022-05-24 | 2022-05-24 | 图形处理单元编译方法、装置、编译加速库和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114661301B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684087A (zh) * | 2018-12-17 | 2019-04-26 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN112346916A (zh) * | 2019-08-09 | 2021-02-09 | 中科寒武纪科技股份有限公司 | 测试方法、装置及相关产品 |
CN113554161A (zh) * | 2021-07-20 | 2021-10-26 | 清华大学 | 一种神经网络加速器编译方法及装置 |
CN114138274A (zh) * | 2021-11-12 | 2022-03-04 | 广东浪潮智慧计算技术有限公司 | 一种深度学习编译器的高层中间表示转换方法及相关装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9110681B2 (en) * | 2013-12-11 | 2015-08-18 | International Business Machines Corporation | Recognizing operational options for stream operators at compile-time |
US9614740B2 (en) * | 2014-05-13 | 2017-04-04 | International Business Machines Corporation | Multifusion of a stream operator in a streaming application |
CN111596920B (zh) * | 2019-02-21 | 2024-06-18 | 迈普通信技术股份有限公司 | 文件编译方法、装置、编译设备及存储介质 |
US20190391796A1 (en) * | 2019-06-28 | 2019-12-26 | Intel Corporation | Control of scheduling dependencies by a neural network compiler |
CN112529206B (zh) * | 2019-09-18 | 2024-05-17 | 华为技术有限公司 | 一种模型运行方法和系统 |
US20210182036A1 (en) * | 2019-12-12 | 2021-06-17 | Huawei Technologies Co., Ltd. | Hardware platform specific operator fusion in machine learning |
CN113011585B (zh) * | 2021-03-19 | 2023-09-26 | 上海西井科技股份有限公司 | 消除拼接算子的编译优化方法、系统、设备及存储介质 |
CN113342345A (zh) * | 2021-05-17 | 2021-09-03 | 北京百度网讯科技有限公司 | 深度学习框架的算子融合方法、装置 |
CN113420865A (zh) * | 2021-06-15 | 2021-09-21 | 之江实验室 | 一种基于多算子融合的深度神经网络推理加速方法和系统 |
CN113703741B (zh) * | 2021-10-29 | 2022-02-22 | 深圳思谋信息科技有限公司 | 神经网络编译器配置方法、装置、计算机设备和存储介质 |
-
2022
- 2022-05-24 CN CN202210569170.6A patent/CN114661301B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684087A (zh) * | 2018-12-17 | 2019-04-26 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN112346916A (zh) * | 2019-08-09 | 2021-02-09 | 中科寒武纪科技股份有限公司 | 测试方法、装置及相关产品 |
CN113554161A (zh) * | 2021-07-20 | 2021-10-26 | 清华大学 | 一种神经网络加速器编译方法及装置 |
CN114138274A (zh) * | 2021-11-12 | 2022-03-04 | 广东浪潮智慧计算技术有限公司 | 一种深度学习编译器的高层中间表示转换方法及相关装置 |
Non-Patent Citations (1)
Title |
---|
大数据基础理论与系统关键技术浅析;华强胜等;《数据与计算发展前沿》;20191015(第05期);第26-38页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114661301A (zh) | 2022-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200293360A1 (en) | Techniques to manage virtual classes for statistical tests | |
Breß et al. | Efficient co-processor utilization in database query processing | |
CN108388515B (zh) | 测试数据生成方法、装置、设备以及计算机可读存储介质 | |
CN111078323B (zh) | 基于协程的数据处理方法、装置、计算机设备及存储介质 | |
KR102133906B1 (ko) | 데이터 분석 및 처리 방법, 장치, 컴퓨터 장치 및 저장 매체 | |
CN109542962B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
US20240143397A1 (en) | Data processing method and system, and related device | |
CN110597552A (zh) | 项目持续集成流水线的配置方法、装置、设备及存储介质 | |
CN111045707B (zh) | 小程序的更新方法、装置、计算机设备和存储介质 | |
CN115981980A (zh) | 系统性能测试方法、装置、设备、介质和程序产品 | |
CN110458285B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN116009852A (zh) | 代码构建方法、装置、计算机设备及存储介质 | |
CN113190576B (zh) | 数据处理方法、装置、计算机设备和可读存储介质 | |
US7739083B2 (en) | Program and/or method for calculating tuning parameters for numerical computation library | |
CN110727777A (zh) | 知识图谱的管理方法、装置、计算机设备和存储介质 | |
CN112214443B (zh) | 设置于图形处理器中的二次卸载装置和方法 | |
CN114327435A (zh) | 技术文档生成方法、装置、计算机可读存储介质 | |
CN112527416A (zh) | 任务处理方法、装置、计算机设备和存储介质 | |
CN114661301B (zh) | 图形处理单元编译方法、装置、编译加速库和存储介质 | |
CN112947907A (zh) | 一种创建代码分支的方法 | |
CN114996760A (zh) | 隐私计算、隐私数据及联邦学习的数据管理系统及方法 | |
CN110333870B (zh) | Simulink模型变量分配的处理方法、装置及设备 | |
CN112230931B (zh) | 适用于图形处理器的二次卸载的编译方法、装置和介质 | |
CN112698835B (zh) | 一种单片机编译链接方法、装置、计算机设备及存储介质 | |
US20240143496A1 (en) | Data processing method and system, and related device |
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 |