深度学习框架编译器宽度非一致自动向量优化方法技术

技术编号:27740541 阅读:21 留言:0更新日期:2021-03-19 13:33
本发明专利技术公开一种深度学习框架编译器宽度非一致自动向量优化方法,基于异构平台,包括以下步骤:S1、框架编译器前端识别计算图中可进行向量优化的子图,S2、框架编译器中端对步骤S15标记的可进行向量优化的子图中的算子进行融合,并计算图编译为底层IR,S3、框架编译器后端根据异构众核处理器的控制核心和计算核心的向量宽度,分别对步骤S2中获得的底层IR进行宽度非一致的向量优化,S4、框架编译器的代码生成模块将步骤S32获得的向量优化后的底层IR转换为用户指定的高级语言代码,并通过基础编译器生成向量优化后的平台目标码。本发明专利技术进一步的挖掘深度学习负载的指令集并行性能,提升深度学习负载的向量化程度,从而提升深度学习负载在异构众核平台上的推理性能。

【技术实现步骤摘要】
深度学习框架编译器宽度非一致自动向量优化方法
本专利技术涉及一种深度学习框架编译器宽度非一致自动向量优化方法,属于深度学习

技术介绍
深度学习工作负载需要部署在特定硬件才能够充分发挥其作用。目前深度学习领域开发人员设计了多种框架,例如Tensorflow、Caffe等,来完成深度学习模型的训练和推断任务,同时硬件厂商也推出了多种硬件后端,例如GPU、FPGA等,来加速深度学习模型的训练和推断速度。大量不同的深度学习框架和越来越多的硬件架构之间需要一个桥梁。深度学习框架编译器作为一个完整的优化工具链,提供了将不同框架的深度学习工作负载部署到各种硬件设备上的端到端解决方案。国产异构众核处理器采用新型的片上异构融合体系结构,在基本指令系统的基础上,增加了向量扩展指令系统,以增强处理器指令集并行能力,实现了多种类型的向量扩展加速指令,非常适合加速深度学习模型的推理任务。指令级并行是提高程序运行性能的一种主流手段,向量指令被广泛用于提升课题的指令集并行优化上,且达到很好的优化效果。深度学习的推理过程同时对大量数据进行相同操作,因此非常适合进行向量优化。目前异构众核是高性能计算硬件平台发展的趋势,但是在功耗、面积、频率的限制下,主从异构设计的差异性也越来越大,主控制或主计算分别成为主核和从核的区分标志。在向量宽度的设计上,控制核心并不需要太高的向量宽度,而计算核心则更讲究计算的数据效率,即主核和从核在短向量的宽度选择上并不会采取统一的宽度标准。GCC和LLVM等基础编译器中的自动向量优化遍能够发现高级语言中存在优化潜力的代码段,并自动对其进行向量优化。然而,在深度学习负载的部署过程中,框架编译器在生成C++和LLVMIR等高级语言代码的同时丢失了部分计算图信息,很多具有优化潜力的代码段无法被基础编译器识别,导致深度学习负载无法充分发挥国产众核处理器的全部性能。
技术实现思路
本专利技术的目的是提供一种深度学习框架编译器宽度非一致自动向量优化方法,该深度学习框架编译器宽度非一致自动向量优化方法进一步的挖掘深度学习负载的指令集并行性能,提升深度学习负载的向量化程度,从而提升深度学习负载在异构众核平台上的推理性能。为达到上述目的,本专利技术采用的技术方案是:一种深度学习框架编译器宽度非一致自动向量优化方法,基于异构平台,包括以下步骤:S1、框架编译器前端识别计算图中可进行向量优化的子图,具体如下:S11、以通过AI框架生成的深度学习负载作为输入,框架编译器根据AI框架的类型,识别深度学习负载的模型格式,并将深度学习负载转换为统一的计算图;S12、框架编译器遍历步骤S11中获得的整个计算图,识别出计算图中可进行向量优化的子图,具体方法如下:S13、框架编译器分析S11中获得的计算图中的数据依赖关系,构建计算图的数据依赖图,并基于数据依赖图,构建包含数据和语句依赖信息的有向图,使同一条语句内的所有数据节点都在一个强连通分量内,并对强连通分量之间的依赖边进行剪枝,实现有向图的更新操作;S14、框架编译器分析步骤S13获得的包含数据和语句依赖信息的有向图中不同强连通分量内的数据节点之间的可达性,并根据数据节点之间的可达性,将不可达的数据节点从有向图中删除,并分析剩余的可达节点,获得识别出计算图中可进行向量优化的子图所需的数据和语句的依赖信息,从而确定子图中的循环是否可以进行向量优化;S15、框架编译器前端对步骤S14确定的可进行向量优化的子图进行标记,并将标记后的子图传递给框架编译器中端进行处理;S2、框架编译器中端对步骤S15标记的可进行向量优化的子图中的算子进行融合,并计算图编译为底层IR,具体如下:S21、框架编译器中端遍历步骤S15标记的整个可进行向量优化的子图,搜索并标记所述子图中所有相邻的可进行向量优化的算子;S22、将步骤S21中搜索到的相邻的可进行向量优化的算子进行融合,将融合后的算子中“向量-标量-向量”转换操作替换为“向量-向量”赋值操作;S23、框架编译器中端通过层次化lower和优化,将步骤S22中算子融合后的计算图编译为底层IR;S3、框架编译器后端根据异构众核处理器的控制核心和计算核心的向量宽度,分别对步骤S2中获得的底层IR进行宽度非一致的向量优化,具体如下:S31、框架编译器后端根据控制核心和计算核心的向量宽度,分别对步骤S2中获得的底层IR进行循环展开;S32、将步骤S31中被循环展开的底层IR修改为宽度非一致向量计算格式;S4、框架编译器的代码生成模块将步骤S32获得的向量优化后的底层IR转换为用户指定的高级语言代码,并通过基础编译器生成向量优化后的平台目标码,具体如下:S41、对于LLVM编译器,向量优化后的IR被LLVM编译器的代码生成模块转化为LLVM的中间表示,再通过LLVM编译器生成可执行程序;S42、对于GCC编译器,向量优化后的IR通过C代码自动生成技术转化为C代码,进而通过GCC编译器生成可执行程序。上述技术方案中进一步改进的方案如下:1.上述方案中,在S31中,针对控制核心,框架编译器后端将底层IR循环展开4次,针对运算核心,框架编译器后端将底层IR循环展开8次。2.上述方案中,在S32中,针对控制核心,框架编译器后端将被展开的底层IR修改为4倍字向量宽度的向量计算格式,针对计算核心,框架编译器后端将被展开的底层IR修改为8倍字向量宽度的向量计算格式。3.上述方案中,在S4中,所述高级语言代码包括C和LLVM中间表示。由于上述技术方案的运用,本专利技术与现有技术相比具有下列优点:本专利技术深度学习框架编译器宽度非一致自动向量优化方法,其基于异构众核平台的特殊架构,充分利用其宽度非一致向量扩展指令集,能够在框架编译器对计算图的编译过程中识别计算图中的可向量化优化子图,并分别根据主从核向量宽度自动将其中的算子编译为主从核宽度非一致的向量化的C++/LLVMIR高级语言代码,最终通过基础编译器编译生成向量化的目标码,进一步的挖掘深度学习负载的指令集并行性能,提升深度学习负载的向量化程度,从而提升深度学习负载在异构众核平台上的推理性能。附图说明附图1为本专利技术框架编译器宽度非一致自动向量优化方法流程示意图;附图2为本专利技术深度学习框架编译器宽度非一致自动向量优化方法流程图。具体实施方式实施例:一种深度学习框架编译器宽度非一致自动向量优化方法,基于异构平台,包括以下步骤:S1、框架编译器前端识别计算图中可进行向量优化的子图,具体如下:S11、以通过AI框架生成的深度学习负载作为输入,框架编译器根据AI框架的类型,识别深度学习负载的模型格式,并将深度学习负载转换为统一的计算图;S12、框架编译器遍历步骤S11中获得的整个计算图,识别出计算图中可进行向量优化的子图,具体方法如下:S13、框架编译器分析S11中获得的计算图中的数据依赖关系,本文档来自技高网
...

【技术保护点】
1.一种深度学习框架编译器宽度非一致自动向量优化方法,其特征在于:基于异构平台,包括以下步骤:/nS1、框架编译器前端识别计算图中可进行向量优化的子图,具体如下:/nS11、以通过AI框架生成的深度学习负载作为输入,框架编译器根据AI框架的类型,识别深度学习负载的模型格式,并将深度学习负载转换为统一的计算图;/nS12、框架编译器遍历步骤S11中获得的整个计算图,识别出计算图中可进行向量优化的子图,具体方法如下:/nS13、框架编译器分析S11中获得的计算图中的数据依赖关系,构建计算图的数据依赖图,并基于数据依赖图,构建包含数据和语句依赖信息的有向图,使同一条语句内的所有数据节点都在一个强连通分量内,并对强连通分量之间的依赖边进行剪枝,实现有向图的更新操作;/nS14、框架编译器分析步骤S13获得的包含数据和语句依赖信息的有向图中不同强连通分量内的数据节点之间的可达性,并根据数据节点之间的可达性,将不可达的数据节点从有向图中删除,并分析剩余的可达节点,获得识别出计算图中可进行向量优化的子图所需的数据和语句的依赖信息,从而确定子图中的循环是否可以进行向量优化;/nS15、框架编译器前端对步骤S14确定的可进行向量优化的子图进行标记,并将标记后的子图传递给框架编译器中端进行处理;/nS2、框架编译器中端对步骤S15标记的可进行向量优化的子图中的算子进行融合,并计算图编译为底层IR,具体如下:/nS21、框架编译器中端遍历步骤S15标记的整个可进行向量优化的子图,搜索并标记所述子图中所有相邻的可进行向量优化的算子;/nS22、将步骤S21中搜索到的相邻的可进行向量优化的算子进行融合,将融合后的算子中“向量-标量-向量”转换操作替换为“向量-向量”赋值操作;/nS23、框架编译器中端通过层次化lower和优化,将步骤S22中算子融合后的计算图编译为底层IR;/nS3、框架编译器后端根据异构众核处理器的控制核心和计算核心的向量宽度,分别对步骤S2中获得的底层IR进行宽度非一致的向量优化,具体如下:/nS31、框架编译器后端根据控制核心和计算核心的向量宽度,分别对步骤S2中获得的底层IR进行循环展开;/nS32、将步骤S31中被循环展开的底层IR修改为宽度非一致向量计算格式;/nS4、框架编译器的代码生成模块将步骤S32获得的向量优化后的底层IR转换为用户指定的高级语言代码,并通过基础编译器生成向量优化后的平台目标码,具体如下:/nS41、对于LLVM编译器,向量优化后的IR被LLVM编译器的代码生成模块转化为LLVM的中间表示,再通过LLVM编译器生成可执行程序;/nS42、对于GCC编译器,向量优化后的IR通过C代码自动生成技术转化为C代码,进而通过GCC编译器生成可执行程序。/n...

【技术特征摘要】
1.一种深度学习框架编译器宽度非一致自动向量优化方法,其特征在于:基于异构平台,包括以下步骤:
S1、框架编译器前端识别计算图中可进行向量优化的子图,具体如下:
S11、以通过AI框架生成的深度学习负载作为输入,框架编译器根据AI框架的类型,识别深度学习负载的模型格式,并将深度学习负载转换为统一的计算图;
S12、框架编译器遍历步骤S11中获得的整个计算图,识别出计算图中可进行向量优化的子图,具体方法如下:
S13、框架编译器分析S11中获得的计算图中的数据依赖关系,构建计算图的数据依赖图,并基于数据依赖图,构建包含数据和语句依赖信息的有向图,使同一条语句内的所有数据节点都在一个强连通分量内,并对强连通分量之间的依赖边进行剪枝,实现有向图的更新操作;
S14、框架编译器分析步骤S13获得的包含数据和语句依赖信息的有向图中不同强连通分量内的数据节点之间的可达性,并根据数据节点之间的可达性,将不可达的数据节点从有向图中删除,并分析剩余的可达节点,获得识别出计算图中可进行向量优化的子图所需的数据和语句的依赖信息,从而确定子图中的循环是否可以进行向量优化;
S15、框架编译器前端对步骤S14确定的可进行向量优化的子图进行标记,并将标记后的子图传递给框架编译器中端进行处理;
S2、框架编译器中端对步骤S15标记的可进行向量优化的子图中的算子进行融合,并计算图编译为底层IR,具体如下:
S21、框架编译器中端遍历步骤S15标记的整个可进行向量优化的子图,搜索并标记所述子图中所有相邻的可进行向量优化的算子;
S22、将步骤S21中搜索到的相邻的可进行向量优化的算子进行融合,将融合后的算子中“向量-标量-向量”转换操作替换为“向量-向量”赋值操作;
...

【专利技术属性】
技术研发人员:沈莉周文浩王飞武文浩肖谦
申请(专利权)人:无锡江南计算技术研究所
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1