[发明专利]基于向量指令加速计算的Winograd卷积实现方法有效
申请号: | 202111412784.5 | 申请日: | 2021-11-25 |
公开(公告)号: | CN113835758B | 公开(公告)日: | 2022-04-15 |
发明(设计)人: | 曾令仿;陈晓锋;陈志广 | 申请(专利权)人: | 之江实验室 |
主分类号: | G06F9/30 | 分类号: | G06F9/30;G06F9/50;G06N3/04;G06N3/063 |
代理公司: | 杭州浙科专利事务所(普通合伙) 33213 | 代理人: | 孙孟辉;杨小凡 |
地址: | 310023 浙江省杭州市余*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 向量 指令 加速 计算 winograd 卷积 实现 方法 | ||
1.基于向量指令加速计算的Winograd卷积实现方法,其特征在于包括如下步骤:
S1,构建寄存器分块策略,在CPU上的Winograd卷积实现过程中,原始数据转换到Winograd数据域时,对中间缓冲的数据进行向量分块和寄存器分块,Winograd分块是Winograd卷积的最小单位,将原始数据按Winograd分块大小通过转换矩阵转换为Winograd数据域的矩阵,多个Winograd分块在Winograd数据域的矩阵堆叠成高维矩阵,构成中间缓冲的数据,将中间缓冲中,预设的并行执行的数据维度的数据,根据向量指令宽度,进行向量分块,并安排在中间缓冲的最内层,使向量分块内的数据在内存上是连续的,根据CPU中可用寄存器数量,对中间缓冲进行寄存器分块,使成批的向量分块读取到向量寄存器中执行计算,再成批地写回内存;
S2,构建内存数据布局策略,将Winograd卷积的原始数据和中间缓冲的数据在内存上进行排列,对于中间缓冲的分块数据,按照cache分块的块数、cache分块、寄存器分块和向量分块,从外层到内层排布,cache分块将矩阵乘法步骤所使用的数据划分成多个基本块,每个基本块的数据暂时驻留于cache中,中间缓冲的数据除以向量分块,得到向量分块的块数,将向量分块的块数除以寄存器分块,得到寄存器分块数,将寄存器分块数除以cache分块,得到cache分块的块数;相对于矩阵乘法的最优性,对中间缓冲的数据布局,将Winograd分块维度安排到更内层的位置;
S3,构建cache分块搜索,采用小范围参数空间搜索的方法,作为cache分块的策略,根据CPU硬件参数和卷积参数确定的小范围内,搜索cache分块的性能最优解,并将其与对应的卷积参数一起保存,后续遇到相同的卷积参数,直接采用该性能最优解作为cache分块大小。
2.根据权利要求1所述的基于向量指令加速计算的Winograd卷积实现方法,其特征在于所述S1中原始数据包括输入数据、卷积核数据、输出数据,将原始数据转换到Winograd数据域,得到输入矩阵、卷积核矩阵和输出矩阵,并暂存在中间缓冲。
3.根据权利要求2所述的基于向量指令加速计算的Winograd卷积实现方法,其特征在于所述S1中,将输入数据向量化K维度,K表示输入通道,向量分块为KsimdBlock,通过alpha*alpha表示Winograd分块大小,N表示Winograd分块的总块数;S2中,对输入矩阵的排布进行优化,将alpha*alpha维度大小的Winograd分块排布在Kblock与Nblock的cache分块中间。
4.根据权利要求3所述的基于向量指令加速计算的Winograd卷积实现方法,其特征在于在寄存器分块中,采用分而治之寄存器分块策略,将中间缓冲根据数据维度N,即Winograd总分块数,分成主体部分和附加部分,对于附加部分的排布,在原有排布层次中去除Nblock。
5.根据权利要求1所述的基于向量指令加速计算的Winograd卷积实现方法,其特征在于所述S1,将采取寄存器分块优化策略的数据维度分成主体部分和附加部分,主体部分为可用向量寄存器数量的整数倍,附加部分是中间缓冲的数据减去主体部分剩余的部分,包括如下步骤:
S11,根据CPU可用的向量寄存器个数NUM_REG,以及向量指令宽度VLEN,设定寄存器分块算法参数,执行向量分块和寄存器分块;
S12,在向量分块中,将中间缓冲预设的并行执行的数据维度的数据向量化,向量分块大小等于向量指令集宽度VLEN,向量分块排布在中间缓冲数据布局的最内层,使每个向量加载指令都可以读取对齐的数据到向量寄存器中,和/或每个向量保存指令都能将向量寄存器中的数据写到连续的内存空间中;
S13,在寄存器分块中,采用分而治之寄存器分块策略,将中间缓冲根据数据维度N,即Winograd总分块数,分成主体部分和附加部分,将N除以可用向量寄存器数量NUM_REG,得到商S_REG和余数R_REG,S_REG是主体部分总的寄存器分块的块数,R_REG是附加部分RemainNregBlock,S_REG乘以NUM_REG是主体部分MainNregBlock;附加部分的寄存器分块大小便是R_REG,主体部分的寄存器分块大小则是NUM_REG。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于之江实验室,未经之江实验室许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111412784.5/1.html,转载请声明来源钻瓜专利网。