算子加速方法、装置、设备及存储介质与流程

摘要: 本技术涉及算子编译优化,尤其涉及一种算子加速方法、装置、设备及存储介质。背景技术:1、面向通用向量矩阵计算架构的算子编译优化技术广泛应用于矩阵运算编译加速场景。...
算子加速方法、装置、设备及存储介质与流程

本技术涉及算子编译优化,尤其涉及一种算子加速方法、装置、设备及存储介质。

背景技术:

1、面向通用向量矩阵计算架构的算子编译优化技术广泛应用于矩阵运算编译加速场景。现有编译器一般在高层张量阶段执行算子加速分析,该阶段尚未确定缓冲区布局、存储别名、分块策略等关键信息。当程序完成缓冲区转换后,高层张量依赖转变为缓冲区读写关系,高层依赖链路不再能够准确反映存储层面真实数据流。

2、受信息缺失制约,传统算子加速方法难以识别能够消除的组内中间量,组内中间量是仅在缓冲区内产生和消费,如仅由内部读写操作完成生成与读取,不存在外部读写操作访问的缓冲区数据。出于语义安全性考虑,编译器通常保守地为所有组内中间量分配独立中间缓冲区,大量仅在计算操作中内部流转的组内中间量依然需要写入内存并再次读取,引入高昂的数据搬运开销。这种所有组内中间量都在缓冲区中重复读写的读取方式,导致向量矩阵计算场景的编译速度较慢。

3、因此,亟须对算子编译中组内中间量的内存访问方式进行调整,以减少向量矩阵计算场景中中间数据的读取开销,提高算子编译计算速度。

技术实现思路

1、本技术的主要目的在于提供一种算子加速方法、装置、设备及存储介质,旨在解决现有技术算子编译时为所有操作产生的组内中间量均分配缓冲区,导致编译计算时组内中间量在缓冲区中重复读写导致的编译计算速度慢的技术问题。

2、为实现上述目的,本技术提出一种算子加速方法,所述算子加速方法包括:

3、在缓冲区转换完成后,获取当前编译作用域下各显式缓冲区对象所关联的所有算子,并根据各所述算子重建当前编译作用域下的所有数据流依赖关系;

4、根据各所述数据流依赖关系构建若干融合组,并确定每一所述融合组的组内数据流依赖关系;

5、对于每一所述融合组,根据所述组内数据流依赖关系确定当前融合组的各可消除组内数据流;

6、对各所述可消除组内数据流对应的中间缓冲区读写操作进行消除,并将各所述可消除组内数据流映射到寄存器,确定映射关系;

7、根据所述映射关系生成目标代码,基于所述目标代码对当前编译作用域下的内存访问逻辑进行改写,以实现当前编译作用域下的算子加速。

8、在一个可行的实施例中,所述根据各所述数据流依赖关系构建若干融合组,并确定每一所述融合组的组内数据流依赖关系,包括:

9、根据所述数据流依赖关系构建数据流依赖关系图;

10、遍历所述数据流依赖关系图,从所述数据流依赖关系图中筛选若干能形成串行长连接的数据流依赖关系作为若干所述组内数据流依赖关系;

11、对于每一所述组内数据流依赖关系,根据所述组内数据流依赖关系关联的各算子构建对应的融合组。

12、在一个可行的实施例中,所述根据所述组内数据流依赖关系确定当前融合组的各可消除组内数据流,包括:

13、获取当前编译作用域下所有缓冲区的存储区间信息,并根据所述存储区间信息,确定当前编译作用域下存在区域重叠的缓冲区集合;

14、根据所述组内数据流依赖关系确定当前融合组关联的第一中间缓冲区集合;其中,所述第一中间缓冲区集合包含若干中间缓冲区;

15、将被所述缓冲区集合包含的各中间缓冲区从所述第一中间缓冲区集合中移除,得到第二中间缓冲区集合;

16、遍历所述第二中间缓冲区集合,剔除关联算子包含当前融合组关联算子外的其余算子的中间缓冲区,得到第三中间缓冲区集合;

17、根据所述第三中间缓冲区集合中的各中间缓冲区确定各初始可消除组内数据流;

18、获取各所述初始可消除组内数据流关联算子的迭代域,根据各所述迭代域和各所述初始可消除组内数据流确定当前融合组的各可消除组内数据流。

19、在一个可行的实施例中,在根据所述组内数据流依赖关系确定当前融合组的各可消除组内数据流之后,还包括:

20、根据所述融合组和所述数据流依赖关系,确定待并入算子集合;

21、遍历所述待并入算子集合,将满足并入条件的待并入算子集合元素并入所述融合组,并对所述融合组的各可消除组内数据流进行更新。

22、在一个可行的实施例中,所述遍历所述待并入算子集合,将满足并入条件的待并入算子集合元素并入所述融合组,包括:

23、在每一遍历过程中,根据当前遍历轮次对应的待并入算子集合元素和所述融合组构建待验证融合组;

24、确定所述待验证融合组的各待验证组内数据流;

25、验证各待验证组内数据流关联算子的迭代域、关联中间缓冲区的区域重叠关系、关联中间缓冲区的外部算子访问行为和数据类型语义特征,得到各所述待验证组内数据流的验证结果集;其中,所述验证结果集包括:迭代域验证结果、区域重叠验证结果、外部访问验证结果和数据类型语义特征验证结果;

26、在所述验证结果集中所有验证结果均通过时,将所述待并入算子集合元素并入所述融合组。

27、在一个可行的实施例中,所述将各所述可消除组内数据流映射到寄存器,确定映射关系,包括:

28、确定各所述可消除组内数据流包含的中间操作值,将各所述中间操作值分别写入若干寄存器分块;

29、根据各寄存器分块的分块编码信息与各中间操作值的对应关系确定所述映射关系。

30、在一个可行的实施例中,所述根据所述映射关系生成目标代码,基于所述目标代码对当前编译作用域下的内存访问逻辑进行改写,包括:

31、根据所述映射关系,生成包含所述中间操作值与所述寄存器分块绑定指向的目标代码;

32、将所述目标代码写入当前编译器,以使当前编译器基于所述目标代码对当前编译作用域下的内存访问逻辑进行改写。

33、此外,为实现上述目的,本技术还提出一种算子加速装置,所述算子加速装置包括:数据流重建模块、中间量识别模块和融合映射模块;

34、所述数据流重建模块,用于在缓冲区转换完成后,获取当前编译作用域下各显式缓冲区对象所关联的所有算子,并根据各所述算子重建当前编译作用域下的所有数据流依赖关系;

35、所述中间量识别模块,用于根据各所述数据流依赖关系构建若干融合组,并确定每一所述融合组的组内数据流依赖关系;对于每一所述融合组,根据所述组内数据流依赖关系确定当前融合组的各可消除组内数据流;

36、所述融合映射模块,用于对各所述可消除组内数据流对应的中间缓冲区读写操作进行消除,并将各所述可消除组内数据流映射到寄存器,确定映射关系;根据所述映射关系生成目标代码,基于所述目标代码对当前编译作用域下的存储关系进行改写,以实现当前编译作用域下的算子加速。

37、此外,为实现上述目的,本技术还提出一种算子加速设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如上文所述的算子加速方法的步骤。

38、此外,为实现上述目的,本技术还提出一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上文所述的算子加速方法的步骤。

39、此外,为实现上述目的,本技术还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上文所述的算子加速方法的步骤。

40、本技术提出的一个或多个技术方案,至少具有以下技术效果:

41、本技术提出了一种算子加速方法、装置、设备及存储介质,该方法应用在缓冲区转换完成后。由于缓冲区转换完成后,编译器高层张量依赖被转变为缓冲区读写关系,高层张量依赖不再能够准确反映存储层面真实数据流,因此,本技术通过获取当前编译作用域下各显式缓冲区对象所关联的所有算子,并根据各所述算子重建当前编译作用域下的所有数据流依赖关系。在恢复数据流依赖关系后,再通过数据流依赖关系构建若干融合组和确定每一融合组的组内数据流依赖关系,进而识别每一融合组中可消除组内数据流。通过对可消除组内数据流对应的中间缓冲区读写操作进行消除,并将各所述可消除组内数据流映射到寄存器,确定映射关系。根据所述映射关系生成目标代码,基于所述目标代码对当前编译作用域下的内存访问逻辑进行改写,以实现当前编译作用域下的算子加速。

42、对可消除组内数据流对应的中间缓冲区读写操作进行消除的操作本身并不会直接删除编译器为组内中间量分配的缓冲区,但通过对可消除组内数据流对应的中间缓冲区读写操作的消除,使得这些在缓冲区转换完成后为组内中间量分配的缓冲区变成了完全没有读写操作的缓冲区,此时会触发编译器的死代码消除(dce)机制,编译器会删除这些缓冲区,减少对编译器内存的分配占用。在此基础上,通过映射关系生成目标代码,使得需要在中间缓冲区重复读写的组内中间量转换为寄存器读写,依托寄存器紧邻运算单元、计算结果可直接驻留复用的原理,省去中间数据写回缓冲区、再从缓冲区读回的内存搬运动作,消除读写访存开销,进而提升算子执行速度。