CN114281755A - 一种面向向量处理器的半精度向量化卷积方法及系统 - Google Patents

一种面向向量处理器的半精度向量化卷积方法及系统 Download PDF

Info

Publication number
CN114281755A
CN114281755A CN202111662053.6A CN202111662053A CN114281755A CN 114281755 A CN114281755 A CN 114281755A CN 202111662053 A CN202111662053 A CN 202111662053A CN 114281755 A CN114281755 A CN 114281755A
Authority
CN
China
Prior art keywords
cib
data
input
block
cob
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
Application number
CN202111662053.6A
Other languages
English (en)
Other versions
CN114281755B (zh
Inventor
许金伟
李娅琳
肖滔
姜晶菲
苏华友
乔鹏
王庆林
李荣春
高蕾
窦勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202111662053.6A priority Critical patent/CN114281755B/zh
Publication of CN114281755A publication Critical patent/CN114281755A/zh
Application granted granted Critical
Publication of CN114281755B publication Critical patent/CN114281755B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种面向向量处理器的半精度向量化卷积方法及系统,方法包括:将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;调用直接存储器访问操作,将半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据。本发明能够结合向量处理器的体系结构特征,将卷积计算(conv3×3)面向向量处理器体系结构向量化,在保证精度的前提下实现了FLOPs的提升。

Description

一种面向向量处理器的半精度向量化卷积方法及系统
技术领域
本发明涉及向量处理器技术领域,尤其涉及一种面向向量处理器的半精度向量化卷积方法及系统。
背景技术
向量处理器的体系结构是一种新型的体系结构,如图1所示,包含进行标量运算的标量处理单元(SPU)和进行向量运算的向量处理单元(VPU),以及负责数据传输的直接存储器访问(Direct Memory Access,DMA)部件等。SPU由标量处理部件SPE和标量存储器SM构成。VPU由L个向量处理部件VPE和阵列存储器AM构成,L个向量处理部件VPE以单指令多数据(SIMD)的方式协作运行,一个VPE内部集成了3个向量运算部件,用于同时支持向量的定点和浮点操作。
单个VPE一次可以处理1个8字节数据(如FP64、Int64),也可以处理2个4字节数据(如FP32,Int32),也可以处理4个2字节数据(如FP16)。DMA部件负责SM与DDR(双倍速率同步动态随机存储器)、AM与DDR之间的数据传输,其操作的最小粒度也是8字节。
卷积(Convolution)是神经网络的核心计算之一,其中conv3×3又是卷积运算中最常见的一种规格,所以其效率高低对神经网络的性能影响非常大,优化卷积计算就显得尤为重要。
发明内容
有鉴于此,本发明提供了一种面向向量处理器的半精度向量化卷积方法,结合向量处理器的体系结构特征,将卷积计算(conv3×3)面向向量处理器体系结构向量化,在保证精度的前提下实现了FLOPs的提升。
本发明提供了一种面向向量处理器的半精度向量化卷积方法,包括:
将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;
调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;
在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据;
其中,所述半精度权值数据Wddr的数据格式为[ks,ks,Ci,Co,n],Co为输出通道数,Ci为输入通道数,ks为卷积核大小,n为卷积操作中一次批量处理的数量,令
Figure BDA0003447172170000021
d为一个寄存器的位长,
Figure BDA0003447172170000022
为一个寄存器可以存放的半精度数据个数,故一个寄存器刚好可以存放n个半精度数据;在输入输出维度上分别做分块,转换数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],其中,ncob为输出通道上的分块数,Cob为权值子块的输出通道数,即ncob为:
Figure BDA0003447172170000023
其中,Cob为Cob=L×P,P表示向量处理器的体系结构中向量功能运算单元部件的数量,L表示向量处理部件的数量;ncib为输入通道上的分块数,Cib为权值子块的输入通道数,即ncib为:
Figure BDA0003447172170000024
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定;
当卷积conv3×3计算的卷积核的移动步长为1时,在图像层的四个边界对其做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-2,Wi-2,n],Cin表示输入通道数,Hi-2表示原输入图像的高,Wi-2表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure BDA0003447172170000031
一个寄存器刚好存放n个半精度数据;从Cin维度上将输入数据切分为ncib段,即
Figure BDA0003447172170000032
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式可视为[ncib,Gib,Hi,Wi,n];
当卷积conv3×3计算的卷积核的移动步长为2时,在图像层的上边界和左边界做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-1,Wi-1,n],Cin表示输入通道数,Hi-1表示原输入图像的高,Wi-1表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure BDA0003447172170000033
一个寄存器刚好存放n个半精度数据,从Cin维度上将输入数据切分为ncib段,即
Figure BDA0003447172170000034
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式也可视为[ncib,Gib,Hi,Wi,n]。
优选地,所述调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间,包括:
调用直接存储器访问操作,将所述半精度权值数据Wddr加载到片上AM空间中,权值的数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],将[ks,ks,Cib,Cob,n]看做一个权值子块Wbam,Wddr即由ncob×ncib个权值子块Wbam组成,在调用直接存储器访问操作时,将分ncob×ncib次,按权值子块数据大小多次加载到AM空间中;
当卷积计算conv3×3卷积核的移动步长为1时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将加载连续的3行数据到SM空间,为
Figure BDA0003447172170000041
Figure BDA0003447172170000042
卷积计算conv3×3卷积核的移动步长为2时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将按步长为2间隔地加载3行数据到SM空间,为
Figure BDA0003447172170000043
Figure BDA0003447172170000044
优选地,所述在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据,包括:
当卷积计算conv3×3stide=1时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将加载其连续的3列的图像数据进行卷积,故将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure BDA0003447172170000051
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure BDA0003447172170000055
对应位置的数据加载到标量寄存器R27,即R27中存放n个相邻的半精度输入数据;
步骤13、基于标量寄存器R27中存放的半精度输入数据,对标量寄存器R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure BDA0003447172170000052
个字节,单次最少可加载
Figure BDA0003447172170000053
个半精度数据;
步骤15、将
Figure BDA0003447172170000054
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR0、VR1...VRp-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p……VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure BDA0003447172170000061
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、至此,3×3图像的输入子块
Figure BDA0003447172170000062
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=1时,对卷积图像的最左列、最上行、最右列、最下行四个边界做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的边界位置,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure BDA0003447172170000063
的卷积3×3完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure BDA0003447172170000064
步骤26、令w=w+1;
步骤27、判断w是否小于Wi-2,若是,将传入的输入数据的起始地址向后偏移n个半精度数据,并返回步骤6;若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure BDA0003447172170000071
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1p个向量寄存器中;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+1;
步骤36、判断h是否小于Hi-2,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成;
当卷积计算conv3×3stide=2时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将按步长为2间隔地加载3列的图像进行卷积,有如
Figure BDA0003447172170000081
则将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示即将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure BDA0003447172170000082
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure BDA0003447172170000083
对应位置的数据加载到标量寄存器R27
步骤13、基于标量寄存器R27中存放的半精度输入数据,对R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure BDA0003447172170000091
个字节,故单次最少可加载
Figure BDA0003447172170000092
个半精度数据;
步骤15、将
Figure BDA0003447172170000093
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR60、VR61…VRp+60-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure BDA0003447172170000095
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、3×3图像的输入子块
Figure BDA0003447172170000094
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=2时,对卷积图像的最左列和最上行做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的最左一列或最上一行,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure BDA0003447172170000103
的卷积3×3已完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure BDA0003447172170000101
步骤26、令w=w+2;
步骤27、判断w是否小于Wi-1,若是,将传入的输入数据的起始地址向后偏移2×n个半精度数据,并返回步骤6,若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于NCob,若是,则加载权值子块
Figure BDA0003447172170000102
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,为输入数据在输入通道Cib上的最后一个分块,Cib维度的计算已经全部累加完成,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1p个向量寄存器中,输入数据Ibsm:[ncib,Cib,3,Wi,n]与完整权值数据的卷积3×3已完成;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+2;
步骤36、判断h是否小于Hi-1,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成。
一种面向向量处理器的半精度向量化卷积系统,包括:
存储模块,用于将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;
加载模块,用于调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;
处理模块,用于在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据;
其中,所述半精度权值数据Wddr的数据格式为[ks,ks,Ci,Co,n],Co为输出通道数,Ci为输入通道数,ks为卷积核大小,n为卷积操作中一次批量处理的数量,令
Figure BDA0003447172170000111
d为一个寄存器的位长,
Figure BDA0003447172170000112
为一个寄存器可以存放的半精度数据个数,故一个寄存器刚好可以存放n个半精度数据;在输入输出维度上分别做分块,转换数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],其中,ncob为输出通道上的分块数,Cob为权值子块的输出通道数,即ncob为:
Figure BDA0003447172170000113
其中,Cob为Cob=L×P,P表示向量处理器的体系结构中向量功能运算单元部件的数量,L表示向量处理部件的数量;ncib为输入通道上的分块数,Cib为权值子块的输入通道数,即ncib为:
Figure BDA0003447172170000114
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定;
当卷积conv3×3计算的卷积核的移动步长为1时,在图像层的四个边界对其做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-2,Wi-2,n],Cin表示输入通道数,Hi-2表示原输入图像的高,Wi-2表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure BDA0003447172170000121
一个寄存器刚好存放n个半精度数据;从Cin维度上将输入数据切分为ncib段,即
Figure BDA0003447172170000122
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式可视为[ncib,Cib,Hi,Wi,n];
当卷积conv3×3计算的卷积核的移动步长为2时,在图像层的上边界和左边界做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-1,Wi-1,n],Cin表示输入通道数,Hi-1表示原输入图像的高,Wi-1表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure BDA0003447172170000123
一个寄存器刚好存放n个半精度数据,从Cin维度上将输入数据切分为ncib段,即
Figure BDA0003447172170000124
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式也可视为[ncib,Cib,Hi,Wi,n]。
优选地,所述加载模块具体用于:
调用直接存储器访问操作,将所述半精度权值数据Wddr加载到片上AM空间中,权值的数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],将[ks,ks,Cib,Cob,n]看做一个权值子块Wbam,Wddr即由ncob×ncib个权值子块Wbam组成,在调用直接存储器访问操作时,将分ncob×ncib次,按权值子块数据大小多次加载到AM空间中;
当卷积计算conv3×3卷积核的移动步长为1时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将加载连续的3行数据到SM空间,为
Figure BDA0003447172170000131
Figure BDA0003447172170000132
卷积计算conv3×3卷积核的移动步长为2时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将按步长为2间隔地加载3行数据到SM空间,为
Figure BDA0003447172170000133
Figure BDA0003447172170000134
优选地,所述处理模块具体用于执行以下步骤:
当卷积计算conv3×3stide=1时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将加载其连续的3列的图像数据进行卷积,故将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure BDA0003447172170000141
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure BDA0003447172170000142
对应位置的数据加载到标量寄存器R27,即R27中存放n个相邻的半精度输入数据;
步骤13、基于标量寄存器R27中存放的半精度输入数据,对标量寄存器R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure BDA0003447172170000143
个字节,单次最少可加载
Figure BDA0003447172170000144
个半精度数据;
步骤15、将
Figure BDA0003447172170000145
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR0、VR1...VRp-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure BDA0003447172170000151
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、至此,3×3图像的输入子块
Figure BDA0003447172170000152
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=1时,对卷积图像的最左列、最上行、最右列、最下行四个边界做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的边界位置,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure BDA0003447172170000153
的卷积3×3完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure BDA0003447172170000154
步骤26、令w=w+1;
步骤27、判断w是否小于Wi-2,若是,将传入的输入数据的起始地址向后偏移n个半精度数据,并返回步骤6;若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure BDA0003447172170000155
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1p个向量寄存器中;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+1;
步骤36、判断h是否小于Hi-2,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成;
当卷积计算conv3×3stide=2时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将按步长为2间隔地加载3列的图像进行卷积,有如
Figure BDA0003447172170000161
则将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示即将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure BDA0003447172170000171
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure BDA0003447172170000172
对应位置的数据加载到标量寄存器R27
步骤13、基于标量寄存器R27中存放的半精度输入数据,对R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure BDA0003447172170000173
个字节,故单次最少可加载
Figure BDA0003447172170000174
个半精度数据;
步骤15、将
Figure BDA0003447172170000175
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR60、VR61...VRp+60-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure BDA0003447172170000181
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、3×3图像的输入子块
Figure BDA0003447172170000182
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=2时,对卷积图像的最左列和最上行做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的最左一列或最上一行,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure BDA0003447172170000183
的卷积3×3已完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure BDA0003447172170000184
步骤26、令w=w+2;
步骤27、判断w是否小于Wi-1,若是,将传入的输入数据的起始地址向后偏移2×n个半精度数据,并返回步骤6,若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure BDA0003447172170000191
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,为输入数据在输入通道Cib上的最后一个分块,Cib维度的计算已经全部累加完成,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1p个向量寄存器中,输入数据Ibsm:[ncib,Cib,3,Wi,n]与完整权值数据的卷积3×3已完成;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+2;
步骤36、判断h是否小于Hi-1,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成。
综上所述,本发明公开了一种面向向量处理器的半精度向量化卷积方法,首先将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中,然后调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;在SM空间中,对加载到片上SM空间的权值数据进行向量化处理,在AM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据。本发明能够结合向量处理器的体系结构特征,将卷积计算(conv3×3)面向向量处理器体系结构向量化,在保证精度的前提下实现了FLOPs的提升。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为向量处理器的一般体系结构示意图;
图2为本发明提供的一种面向向量处理器的半精度向量化卷积方法实施例的方法流程图;
图3为卷积计算conv3×3卷积核的移动步长为1时Ibsm3×3:[nCib,Cib,3,3,n]格式示意图;
图4为卷积计算conv3×3卷积核的移动步长为1时Wbam:[ks,ks,Cob,Cib,n]格式示意图;
图5为卷积计算conv3×3卷积核的移动步长为1时标量加载实现示意图;
图6为卷积计算conv3×3卷积核的移动步长为1时标量寄存器的广播实现示意图;
图7为卷积计算conv3×3卷积核的移动步长为1时向量加载实现示意图;
图8为卷积计算conv3×3卷积核的移动步长为1时向量乘加实现示意图;
图9为卷积计算conv3×3卷积核的移动步长为1时一种向量乘加的示意图;
图10为卷积计算conv3×3卷积核的移动步长为1时又一种向量乘加的示意图;
图11为卷积计算conv3×3卷积核的移动步长为1时又一种向量乘加的示意图;
图12为卷积计算conv3×3卷积核的移动步长为1时又一种向量乘加的示意图;
图13为卷积计算conv3×3卷积核的移动步长为1时又一种向量乘加的示意图;
图14为卷积计算conv3×3卷积核的移动步长为1时3×3像素点的累加示意图;
图15为卷积计算conv3×3卷积核的移动步长为1时转置示意图;
图16为卷积计算conv3×3卷积核的移动步长为2时Ibsm3×3:[nCib,Cib,3,3,n]格式示意图;
图17为卷积计算conv3×3卷积核的移动步长为2时Wbam:[ks,ks,Cob,Cib,n]格式示意图;
图18为卷积计算conv3×3卷积核的移动步长为2时Ibsm3×3的标量加载示意图;
图19为卷积计算conv3×3卷积核的移动步长为2时标量寄存器的广播实现示意图;
图20为卷积计算conv3×3卷积核的移动步长为2时Wbam(0,0,k,t,n)的向量加载示意图;
图21为卷积计算conv3×3卷积核的移动步长为2时向量乘加的实现示意图;
图22为卷积计算conv3×3卷积核的移动步长为2时一种向量乘加的示意图;
图23为卷积计算conv3×3卷积核的移动步长为2时又一种向量乘加的示意图;
图24为卷积计算conv3×3卷积核的移动步长为2时又一种向量乘加的示意图;
图25为卷积计算conv3×3卷积核的移动步长为2时又一种向量乘加的示意图;
图26为卷积计算conv3×3卷积核的移动步长为2时又一种向量乘加的示意图;
图27为卷积计算conv3×3卷积核的移动步长为2时3×3像素点的累加示意图;
图28为卷积计算conv3×3卷积核的移动步长为2时转置示意图;
图29为卷积计算conv3×3卷积核的移动步长为2时一种向量加载示意图;
图30为卷积计算conv3×3卷积核的移动步长为2时一种以地址取模方式交错地存回AM示意图;
图31为卷积计算conv3×3卷积核的移动步长为2时又一种向量加载示意图;
图32为卷积计算conv3×3卷积核的移动步长为2时又一种以地址取模方式交错地存回AM示意图;
图33为卷积计算conv3×3卷积核的移动步长为2时又一种向量加载示意图;
图34为卷积计算conv3×3卷积核的移动步长为2时又一种以地址取模方式交错地存回AM示意图;
图35为本发明公开的一种面向向量处理器的半精度向量化卷积系统实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图2所示,为本发明公开的一种面向向量处理器的半精度向量化卷积方法实施例的流程图,所述方法可以包括以下步骤:
S201、将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;
当需要对面向向量处理器的半精度数据进行向量化卷积时,首先将半精度输入数据和半精度权值数据存储在DDR(双倍速率同步动态随机存储器)中。半精度权值数据Wddr数据格式为[ks,ks,Ci,Co,n],其中Co为输出通道数,Ci为输入通道数,ks为卷积核大小3,n为卷积操作中一次批量处理的数量,令
Figure BDA0003447172170000231
d为一个寄存器的位长,
Figure BDA0003447172170000232
为一个寄存器可以存放的半精度数据个数,故一个寄存器刚好可以存放n个半精度数据。在输入输出维度上分别做分块,转换数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],其中,ncob为输出通道上的分块数,Cob为权值子块的输出通道数,即ncob为:
Figure BDA0003447172170000233
其中,Cob为Cob=L×P,P表示向量处理器的体系结构中向量功能运算单元部件的数量,L表示向量处理部件的数量;ncib为输入通道上的分块数,Cib为权值子块的输入通道数,即ncib为:
Figure BDA0003447172170000234
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定。例如,(1)与Cib相关的输入子块大小不能大于SM空间;(2)与Cib相关的权值子块与卷积后的输出结果,大小之和不能大于AM空间。
当卷积conv3×3计算的卷积核的移动步长为1时,需要在图像层的四个边界对其做边缘填充处理,故令原半精度输入数据的数据格式为InpUtddr:[Cin,Hi-2,Wi-2,n],Cin表示输入通道数,Hi-2表示原输入图像的高,Wi-2表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi。故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure BDA0003447172170000241
从上述可知,一个寄存器刚好存放n个半精度数据。此外,需从Cin维度上将输入数据切分为ncib段,即
Figure BDA0003447172170000242
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,所以输入数据的数据格式也可视为[ncib,Cib,Hi,Wi,n]。例如,(1)与Cib相关的输入子块大小不能大于SM空间;(2)与Cib相关的权值子块与卷积后的输出结果,大小之和不能大于AM空间。
当卷积conv3×3计算的卷积核的移动步长为2时,需要在图像层的上边界和左边界做边缘填充处理,故令原半精度输入数据的数据格式为InpUtddr:[Cin,Hi-1,Wi-1,n],Cin表示输入通道数,Hi-1表示原输入图像的高,Wi-1表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi。故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure BDA0003447172170000243
从上述可知,一个寄存器刚好存放n个半精度数据。此外,需从Cin维度上将输入数据切分为ncib段,即
Figure BDA0003447172170000244
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,所以输入数据的数据格式也可视为[ncib,Cib,Hi,Wi,n]。
S202、调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;
具体地,调用直接存储器访问操作,将所述半精度权值Wddr加载到片上AM空间中,权值的数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],可将[ks,ks,Cib,Cob,n]看做一个权值子块Wbam,Wddr即由ncob×ncib个权值子块Wbam组成。在调用直接存储器访问操作时,将分ncob×ncib次,按权值子块数据大小多次加载到AM空间中。
当卷积计算conv3×3卷积核的移动步长为1时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n]。每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n]。当进行卷积计算stide=1时,从图像层维度,将加载连续的3行数据到SM空间,有如下:
Figure BDA0003447172170000251
当卷积计算conv3×3卷积核的移动步长为2时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n]。每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n]。当进行卷积计算stide=2时,从图像层维度,将按步长为2间隔地加载3行数据到SM空间,有如下:
Figure BDA0003447172170000252
S203、在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据。
具体的,当卷积计算conv3×3stide=1时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将加载其连续的3列的图像数据进行卷积,故可以将该数据看做Ibsm3×3:[ncib,Cib,3,3,n],Ibsm3×3数据如下图3所示,其中3×3图像中每方格包含n个像素点。
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam,其中ks=3,图中3×3滤波器矩阵中每个数据都复制了n份,具体如图4所示。
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在原权值数据Wddr的ncob维的块索引;
步骤5、初始化w=0,其中w表示Ibsm3×3的起始位置对应输入子块Ibsm中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、向量寄存器将累加并存储计算结果,故先初始化预存储结果的VR0、VR1......等向量寄存器为0;
步骤11、将储存在
Figure BDA0003447172170000261
中对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中(若xcib为0,则跳过该步骤);
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,所以单次将加载n个(batch=n)半精度数据到指定标量寄存器,选取
Figure BDA0003447172170000262
时应位置的数据加载到标量寄存器R27,即R27中可存放n个相邻的半精度输入数据;
例如,令n=4,当k=0时,输入子块Ibsm3×3的3×3图像矩阵如图5所示,当j=0、i=0时,使用标量加载指令,将Ibsm3×3对应位置的数据加载到R27的R[0:15]、R[16:31]、R[32:47]、R[48:63]中,如图5所示。
步骤13、基于标量寄存器R27中存放的半精度输入数据,对标量寄存器R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据,L即VPE(VectorProcessing Element)的个数。
例如,以L=8为例,标量寄存器R27广播到向量寄存器VR51的实现如图6所示。
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据(即Cob个数据)加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,d为一个标量寄存器的位长,单次加载最小粒度为
Figure BDA0003447172170000271
个字节,故单次最少可加载
Figure BDA0003447172170000272
个半精度数据;
例如,当i=0,j=0时,使用向量加载指令,将权值子块Wbam(0,0,k,t,n)的t维上的所有数据(即Cob个数据)加载到向量寄存器VR60、VR61...VRp+60-1中,同上述以L=8,P=2,Cob=L×P=16为例,向量加载的具体实现如图7所示。
步骤15、将
Figure BDA0003447172170000273
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR60、VR61…VRp+60-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加。因为该体系结构集成了p个功能向量运算单元部件,所以上述p组乘加操作支持在同一周期内进行,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
例如,当i=0,j=0时,以上述向量化后的输入数据VR51和权值数据VR60、VR61数据为例,两者对应相乘,将结果与VR11、VR11中的值累加,并将其继续保存在VR11、VR12中,具体实现如图8所示。
当k=0、i=0,j=0时对应输入子块和权值子块的实现如图9所示。
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
例如,此处若k=0、i=0,j=1,则对应输入子块和权值子块的实现如图10所示。
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、至此,当输入通道index为k时,
Figure BDA0003447172170000281
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
当时,此处若k=0,
Figure BDA0003447172170000282
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加已完成,具体实现如下图11所示。
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
该向量卷积(conv3×3)在Cib维上的乘累加如图12所示。
步骤23、至此,3×3图像的输入子块
Figure BDA0003447172170000283
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob(即3×3×L×p)个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=1时,需要对卷积图像的四个边界(最左列、最上行、最右列、最下行)做边缘填充处理,所以如果当前卷积的3×3图像包含原图像层中的边界位置,则需要将储存对应位置结果的寄存器赋零;
步骤25、至此,权值子块Wbam和输入子块
Figure BDA0003447172170000291
的卷积3×3已经完成,此时将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure BDA0003447172170000292
步骤26、令w=w+1;
步骤27、判断w是否小于Wi-2,若是,将传入的输入数据的起始地址向后偏移n个半精度数据,并返回步骤6;若否,则执行步骤28;
步骤28、至此,SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+l;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure BDA0003447172170000293
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
随之xCib在nCib维度的遍历,该向量卷积(conv3×3)在Ci维上的乘累加如图13所示。
步骤31、当xCib=nCib,此时为输入数据在输入通道Cib上的最后一个分块,Cib维度的计算已经全部累加完成,所以,此时将3×3图像层各像素点上结果累加,即将向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p对应相加,最终结果存储在VR11、VR12......VR11+p-1p个向量寄存器中,至此,输入数据Ibsm:[ncib,Cib,3,Wi,n]与完整权值数据的卷积3×3已经完成。
3×3像素点的累加示意图如图14所示。
步骤32、将储存在VRn、VR12......VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
当w在Wi维度遍历完后,可以得到(Wi-2)个n×Cob数据,数据格式为[Wi-2,Cob,n],如图14所示,此时需要将该部分数据进行转置操作,转置示意图如图15所示。
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+1;
步骤36、判断h是否小于Hi-2,若是,返回执行步骤3,若否,执行步骤37;
步骤37、至此,所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成。
当卷积计算conv3×3stide=2时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的index;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将按步长为2间隔地加载3列的图像进行卷积,有如
Figure BDA0003447172170000301
可将该数据看做Ibsm3×3:[ncib,Cib,3,3,n],Ibsm3×3数据如图16所示,其中3×3图像中每方格包含n个像素点。
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam,其中ks=3,图中3×3滤波器矩阵中每个数据都复制了n份,具体如下图17所示。
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块index;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在原权值数据Wddr的ncob维的块index;
步骤5、初始化w=0,其中w表示Ibsm3×3的起始位置对应输入子块Ibsm中Wi维的index;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的index;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的index;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的index;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的index;
步骤10、向量寄存器将累加并存储计算结果,故先初始化预存储结果的VR0、VR1……等向量寄存器为0;
步骤11、将储存在
Figure BDA0003447172170000311
中对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中(若xcib为0,则跳过该步骤);
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,所以单次将加载n个(batch=n)半精度数据到指定标量寄存器。选取
Figure BDA0003447172170000312
对应位置的数据加载到标量寄存器R27,即R27中可存放n个相邻的半精度输入数据;
例如,令n=4,当k=0时,输入子块Ibsm3×3的3×3图像矩阵如下图所示,当j=0、i=0时,使用标量加载指令,将Ibsm3×3对应位置的数据加载到R27的R[0:15]、R[16:31]、R[32:47]、R[48:63]中,如图18所示。
步骤13、基于R27中存放的半精度输入数据,对R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据,L即VPE(Vector Processing Element)的个数。
例如,以L=8为例,通用寄存器R27广播到向量寄存器VR51的实现如图19所示。
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据(即Cob个数据)加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,d为一个标量寄存器的位长,单次加载最小粒度为
Figure BDA0003447172170000321
个字节,故单次最少可加载
Figure BDA0003447172170000322
个半精度数据;
例如,当i=0,j=0时,使用向量加载指令,将权值子块Wbam(0,0,k,t,n)的t维上的所有数据(即Cob个数据)加载到VR60、VR61...VRp+60-1中,同上述以L=8,P=2,Cob=L×P=16为例,向量加载的具体实现如下图20所示。
步骤15、将
Figure BDA0003447172170000323
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR60、VR61...VRp+60-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加。因为该体系结构集成了p个功能向量运算单元部件,所以上述p组乘加操作支持在同一周期内进行,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
例如,当i=0,j=0时,以上述向量化后的输入数据VR51和权值数据VR60、VR61数据为例,两者对应相乘,将结果与VR11、VR11中的值累加,并将其继续保存在VR11、VR12中,具体实现如图21所示。
当k=0、i=0,j=0时对应输入子块和权值子块的实现如图22所示。
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
例如,此处若k=0、i=0,j=1,则对应输入子块和权值子块的实现如下图23所示。
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、至此,当输入通道index为k时,
Figure BDA0003447172170000331
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
当时,此处若k=0,
Figure BDA0003447172170000332
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加已完成,具体实现如图24所示。
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
该向量卷积(conv3×3)在Cib维上的乘累加如图25所示。
步骤23、至此,3×3图像的输入子块
Figure BDA0003447172170000333
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob(即3×3×L×p)个向量寄存器的结果数据。
步骤24、已知当卷积核的移动步长=2时,需要对卷积图像的最左列和最上行做边缘填充处理,所以如果当前卷积的3×3图像包含原图像层中的最左一列或最上一行,则需要将储存对应位置结果的寄存器赋零;
步骤25、至此,权值子块Wbam和输入子块
Figure BDA0003447172170000334
的卷积3×3已经完成,此时将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure BDA0003447172170000335
步骤26、令w=w+2;
步骤27、判断w是否小于Wi-1,若是,将传入的输入数据的起始地址向后偏移2×n个半精度数据,并返回步骤6;若否,则执行步骤28;
步骤28、至此,SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+l;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure BDA0003447172170000341
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
随之xCib在nCib维度的遍历,该向量卷积(conv3×3)在Ci维上的乘累加如图26所示。
步骤31、当xCib=nCib,此时为输入数据在输入通道Cib上的最后一个分块,Cib维度的计算已经全部累加完成,所以,此时将3×3图像层各像素点上结果累加,即将向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p对应相加,最终结果存储在VR11、VR12......VR11+p-1p个向量寄存器中,至此,输入数据Ibsm:[ncib,Cib,3,Wi,n]与完整权值数据的卷积3×3已经完成。
3×3像素点的累加示意图如图27所示。
步骤32、将储存在VR11、VR12......VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
当w在Wi维度遍历完后,可以得到(Wi-1)/2个n×Cob数据,数据格式为[(Wi-1)/2,Cob,n],如上图25所示,此时需要将该部分数据进行转置操作,转置示意图如图28所示。
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+2;
步骤36、判断h是否小于Hi-1,若是,返回执行步骤3,若否,执行步骤37;
步骤37、至此,所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成。
转置的实现具体包括以下步骤:
步骤1、当w在Wi维遍历卷积后,令AM空间中AMtemp2上将储存有W1组(Cob×n)长度的临时结果,我们将在W1维度上,以8为粒度做切分,切分为xtrans段,即
Figure BDA0003447172170000351
切分后数据可看做AMtrans:[xtrans,8,Cob×n];
步骤2、初始化i=0,其中i表示数据AMtrans在xtrans维度上的index;
步骤3、将AM空间中的AMtrans(i,8,Cob×n)数据用向量加载指令将前4行数据分别加载到VR0、VR2...VR8×P-2向量寄存器中,将后4行数据分别加载到VR1、VR3...VR8×P-1向量寄存器中;
例如,当i=0时,以P=1、L=8为例,将AMtrans(0,8,Cob×n)数据分别加载到如下向量寄存器,原数据表格中一个表格表示n个半精度数据,具体实现如图29所示。
步骤4、将向量寄存器VR0和向量寄存器VR1中的数据分别以地址取模方式交错地存回AM空间AMt1中、将向量寄存器VR2和向量寄存器VR3中的数据分别以地址取模方式交错地存回AM空间AMt2中、依次加载,直至将向量寄存器VR8×P-2和向量寄存器VR8×P-1中的数据分别以地址取模方式交错地存回AM空间AMtP×4中;
例如,P=1时,以地址取模方式交错地存回AMt1、AMt2、AMt3、AMt4空间中,具体实现如下图30所示。
步骤5、将AM空间AMt1、AMt2、AMtP×2中的数据用向量加载指令加载到VR0、VR2、VR8×P-2向量寄存器中、将AM空间AMtP×2+1、AMtP×2+2、AMtP×4中的数据用向量加载指令加载到VR1、VR3、VR8×P-1向量寄存器中;
向量的加载具体实现如图31所示。
步骤6、将向量寄存器VR0和向量寄存器VR1中的数据分别以地址取模方式交错地存回AM空间AMt1中、将向量寄存器VR2和向量寄存器VR3中的数据分别以地址取模方式交错地存回AM空间AMt2中、依次加载,直至将向量寄存器VR8×P-2和向量寄存器VR8×P-1中的数据分别以地址取模方式交错地存回AM空间AMtP×4中;
例如,P=1时,以地址取模方式交错地存回AMt1、AMt2、AMt3、AMt4空间中,具体实现如图32所示。
步骤7、将AM空间AMt1、AMt2、AMtP×2中的数据用向量加载指令加载到VR0、VR2、VR8×P-2向量寄存器中、将AM空间AMtP×2+1、AMtP×2+2、AMtP×4中的数据用向量加载指令加载到VR1、VR3、VR8×P-1向量寄存器中;
向量的加载具体实现如图33所示。
步骤8、将向量寄存器VR0和向量寄存器VR1中的数据分别以地址取模方式交错地存回AM空间AMt1中、将向量寄存器VR2和向量寄存器VR3中的数据分别以地址取模方式交错地存回AM空间AMt2中、依次加载,直至将向量寄存器VR8×P-2和向量寄存器VR8×P-1中的数据分别以地址取模方式交错地存回AM空间AMtP×4中;
例如,P=1时,以地址取模方式交错地存回AMt1、AMt2、AMt3、AMt4空间中,具体实现如下图34所示。
步骤9、调用直接存储器访问操作,将AM空间中的AMt1、AMt2...AMtP*4的转置后的数据存储至双倍速率同步动态随机存储器指定位置;
步骤10、令i=i+1;
步骤11、判断i是否小于xtrans,若是,则返回步骤3,若否,则转置操作结束。
直至所有的数据卷积和转置结束,该系统将得到特征图结果数据:
当卷积计算(conv3×3)的卷积核的移动步长为1时,卷积的特征图结果数据格式为output:[ncob,Cob,Hi-2,Wi-2];
当卷积计算(conv3×3)的卷积核的移动步长为2时,卷积的特征图结果数据格式为output:[ncob,Cob,(Hi-1)/2,(Wi-1)/2]。
综上所述,本发明公开的一种面向向量处理器的半精度向量化卷积方法,能够结合向量处理器的体系结构特征,将卷积计算(conv3×3)面向向量处理器体系结构向量化,在保证精度的前提下实现了FLOPs的提升。
如图35所示,为本发明公开的一种面向向量处理器的半精度向量化卷积系统实施例的结构示意图,所述系统可以包括:
存储模块3501,用于将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;
加载模块3502,用于调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;
处理模块3503,用于在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据。
本发明公开面向向量处理器的半精度向量化卷积系统的工作原理,与上述面向向量处理器的半精度向量化卷积方法的工作原理相同,在此不再赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (6)

1.一种面向向量处理器的半精度向量化卷积方法,其特征在于,包括:
将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;
调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;
在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据;
其中,所述半精度权值数据Wddr的数据格式为[ks,ks,Ci,Co,n],Co为输出通道数,Ci为输入通道数,ks为卷积核大小,n为卷积操作中一次批量处理的数量,令
Figure FDA0003447172160000011
d为一个寄存器的位长,
Figure FDA0003447172160000012
为一个寄存器可以存放的半精度数据个数,故一个寄存器刚好可以存放n个半精度数据;在输入输出维度上分别做分块,转换数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],其中,ncob为输出通道上的分块数,Cob为权值子块的输出通道数,即ncob为:
Figure FDA0003447172160000013
其中,Cob为Cob=L×P,P表示向量处理器的体系结构中向量功能运算单元部件的数量,L表示向量处理部件的数量;ncib为输入通道上的分块数,Cib为权值子块的输入通道数,即ncib为:
Figure FDA0003447172160000014
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定;
当卷积conv3×3计算的卷积核的移动步长为1时,在图像层的四个边界对其做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-2,Wi-2,n],Cin表示输入通道数,Hi-2表示原输入图像的高,Wi-2表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure FDA0003447172160000021
一个寄存器刚好存放n个半精度数据;从Cin维度上将输入数据切分为ncib段,即
Figure FDA0003447172160000022
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式可视为[ncib,Cib,Hi,Wi,n];
当卷积conv3×3计算的卷积核的移动步长为2时,在图像层的上边界和左边界做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-1,Wi-1,n],Cin表示输入通道数,Hi-1表示原输入图像的高,Wi-1表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure FDA0003447172160000023
一个寄存器刚好存放n个半精度数据,从Cin维度上将输入数据切分为ncib段,即
Figure FDA0003447172160000024
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式也可视为[ncib,Cib,Hi,Wi,n]。
2.根据权利要求1所述的方法,其特征在于,所述调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间,包括:
调用直接存储器访问操作,将所述半精度权值数据Wddr加载到片上AM空间中,权值的数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],将[ks,ks,Cib,Cob,n]看做一个权值子块Wbam,Wddr即由ncob×ncib个权值子块Wbam组成,在调用直接存储器访问操作时,将分ncob×ncib次,按权值子块数据大小多次加载到AM空间中;
当卷积计算conv3×3卷积核的移动步长为1时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将加载连续的3行数据到SM空间,为
Figure FDA0003447172160000031
Figure FDA0003447172160000032
当卷积计算conv3×3卷积核的移动步长为2时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将按步长为2间隔地加载3行数据到SM空间,为
Figure FDA0003447172160000033
Figure FDA0003447172160000034
3.根据权利要求2所述的方法,其特征在于,所述在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据,包括:
当卷积计算conv3×3stide=1时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将加载其连续的3列的图像数据进行卷积,故将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure FDA0003447172160000041
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure FDA0003447172160000042
对应位置的数据加载到标量寄存器R27,即R27中存放n个相邻的半精度输入数据;
步骤13、基于标量寄存器R27中存放的半精度输入数据,对标量寄存器R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure FDA0003447172160000043
个字节,单次最少可加载
Figure FDA0003447172160000044
个半精度数据;
步骤15、将
Figure FDA0003447172160000045
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR0、VR1...VRp-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VRi2+i×j×p+j×p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure FDA0003447172160000051
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、至此,3×3图像的输入子块
Figure FDA0003447172160000052
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=1时,对卷积图像的最左列、最上行、最右列、最下行四个边界做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的边界位置,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure FDA0003447172160000053
的卷积3×3完成,将储存在VR11+i×j×p+j×p、VRi2+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure FDA0003447172160000054
步骤26、令w=w+1;
步骤27、判断w是否小于Wi-2,若是,将传入的输入数据的起始地址向后偏移n个半精度数据,并返回步骤6;若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure FDA0003447172160000061
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1p个向量寄存器中;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+1;
步骤36、判断h是否小于Hi-2,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成;
当卷积计算conv3×3stide=2时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将按步长为2间隔地加载3列的图像进行卷积,有如
Figure FDA0003447172160000071
则将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示即将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure FDA0003447172160000072
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure FDA0003447172160000073
对应位置的数据加载到标量寄存器R27
步骤13、基于标量寄存器R27中存放的半精度输入数据,对R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure FDA0003447172160000081
个字节,故单次最少可加载
Figure FDA0003447172160000082
个半精度数据;
步骤15、将
Figure FDA0003447172160000083
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR60、VR61...VRp+60-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure FDA0003447172160000084
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、3×3图像的输入子块
Figure FDA0003447172160000085
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=2时,对卷积图像的最左列和最上行做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的最左一列或最上一行,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure FDA0003447172160000091
的卷积3×3已完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure FDA0003447172160000092
步骤26、令w=w+2;
步骤27、判断w是否小于Wi-1,若是,将传入的输入数据的起始地址向后偏移2×n个半精度数据,并返回步骤6,若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure FDA0003447172160000093
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,为输入数据在输入通道Cib上的最后一个分块,Cib维度的计算已经全部累加完成,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1 p个向量寄存器中,输入数据Ibsm:[ncib,Cib,3,Wi,n]与完整权值数据的卷积3×3已完成;
步骤32、将储存在VR11、VR12......VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+2;
步骤36、判断h是否小于Hi-1,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成。
4.一种面向向量处理器的半精度向量化卷积系统,其特征在于,包括:
存储模块,用于将半精度权值数据和半精度输入数据存储在双倍速率同步动态随机存储器中;
加载模块,用于调用直接存储器访问操作,将所述半精度输入数据和半精度权值数据从所述双倍速率同步动态随机存储器分别加载到片上标量存储器SM空间和片上阵列存储器AM空间;
处理模块,用于在SM空间中,对加载到片上SM空间的输入数据进行向量化处理,在AM空间中,将向量化处理后的输入数据与AM空间上的权值数据做卷积操作conv3×3,得到卷积后的特征图数据;
其中,所述半精度权值数据Wddr的数据格式为[ks,ks,Ci,Co,n],Co为输出通道数,Ci为输入通道数,ks为卷积核大小,n为卷积操作中一次批量处理的数量,令
Figure FDA0003447172160000101
d为一个寄存器的位长,
Figure FDA0003447172160000102
为一个寄存器可以存放的半精度数据个数,故一个寄存器刚好可以存放n个半精度数据;在输入输出维度上分别做分块,转换数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],其中,ncob为输出通道上的分块数,Cob为权值子块的输出通道数,即ncob为:
Figure FDA0003447172160000103
其中,Cob为Cob=L×P,P表示向量处理器的体系结构中向量功能运算单元部件的数量,L表示向量处理部件的数量;ncib为输入通道上的分块数,Cib为权值子块的输入通道数,即ncib为:
Figure FDA0003447172160000104
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定;
当卷积conv3×3计算的卷积核的移动步长为1时,在图像层的四个边界对其做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-2,Wi-2,n],Cin表示输入通道数,Hi-2表示原输入图像的高,Wi-2表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure FDA0003447172160000111
一个寄存器刚好存放n个半精度数据;从Cin维度上将输入数据切分为ncib段,即
Figure FDA0003447172160000112
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式可视为[ncib,Cib,Hi,Wi,n];
当卷积conv3×3计算的卷积核的移动步长为2时,在图像层的上边界和左边界做边缘填充处理,故令原半精度输入数据的数据格式为Inputddr:[Cin,Hi-1,Wi-1,n],Cin表示输入通道数,Hi-1表示原输入图像的高,Wi-1表示原输入图像的宽,n表示卷积操作中一次批量处理的数量,对图像层的四个边界做边缘填充后,图像层的高长变为Hi,图像层的宽长变为Wi,故令边缘填充处理后的输入数据为Iddr:[Cin,Hi,Wi,n],令
Figure FDA0003447172160000113
一个寄存器刚好存放n个半精度数据,从Cin维度上将输入数据切分为ncib段,即
Figure FDA0003447172160000114
其中,Cib的大小由SM的空间大小和AM空间的大小综合决定,输入数据的数据格式也可视为[ncib,Cib,Hi,Wi,n]。
5.根据权利要求4所述的系统,其特征在于,所述加载模块具体用于:
调用直接存储器访问操作,将所述半精度权值数据Wddr加载到片上AM空间中,权值的数据格式为[ncob,ncib,ks,ks,Cib,Cob,n],将[ks,ks,Cib,Cob,n]看做一个权值子块Wbam,Wddr即由ncob×ncib个权值子块Wbam组成,在调用直接存储器访问操作时,将分ncob×ncib次,按权值子块数据大小多次加载到AM空间中;
当卷积计算conv3×3卷积核的移动步长为1时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将加载连续的3行数据到SM空间,为
Figure FDA0003447172160000121
Figure FDA0003447172160000122
卷积计算conv3×3卷积核的移动步长为2时,调用直接存储器访问操作,将所述半精度输入Iddr加载到片上SM空间中,输入数据Iddr的数据格式为[ncib,Cib,Hi,Wi,n],可将[Cib,Hi,Wi,n]看做一个输入子块Ibddr,Iddr即由ncib个输入子块Ibddr组成,即Ibddr:[Cib,Hi,Wi,n],每次在做向量化卷积conv3×3操作前,根据计算需求加载对应位置的3行输入图像层数据,即单次加载[ncib,Cib,3,Wi,n]的数据,可将其看做Ibsm:[ncib,Cib,3,Wi,n],从图像层维度,将按步长为2间隔地加载3行数据到SM空间,为
Figure FDA0003447172160000123
Figure FDA0003447172160000124
6.根据权利要求5所述的系统,其特征在于,所述处理模块具体用于执行以下步骤:
当卷积计算conv3×3stide=1时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将加载其连续的3列的图像数据进行卷积,故将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure FDA0003447172160000131
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure FDA0003447172160000132
对应位置的数据加载到标量寄存器R27,即R27中存放n个相邻的半精度输入数据;
步骤13、基于标量寄存器R27中存放的半精度输入数据,对标量寄存器R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61…VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure FDA0003447172160000133
个字节,单次最少可加载
Figure FDA0003447172160000134
个半精度数据;
步骤15、将
Figure FDA0003447172160000135
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR0、VR1...VRp-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure FDA0003447172160000141
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、至此,3×3图像的输入子块
Figure FDA0003447172160000142
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=1时,对卷积图像的最左列、最上行、最右列、最下行四个边界做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的边界位置,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure FDA0003447172160000143
的卷积3×3完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure FDA0003447172160000144
步骤26、令w=w+1;
步骤27、判断w是否小于Wi-2,若是,将传入的输入数据的起始地址向后偏移n个半精度数据,并返回步骤6;若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure FDA0003447172160000151
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1p个向量寄存器中;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+1;
步骤36、判断h是否小于Hi-2,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成;
当卷积计算conv3×3stide=2时,具体包括以下步骤:
步骤1、初始化h=0,其中h表示输入子块Ibsm:[ncib,Cib,3,Wi,n]的初始位置在原输入数据IbddrHi维的索引;
步骤2、对于已经加载到SM上的输入数据Ibsm:[ncib,Cib,3,Wi,n],将按步长为2间隔地加载3列的图像进行卷积,有如
Figure FDA0003447172160000152
则将该数据看做Ibsm3×3:[ncib,Cib,3,3,n];
对于已经加载到AM上的[ks,ks,Cib,Cob,n]大小的权值数据,看做权值子块Wbam
步骤3、初始化xcib=0,其中xcib表示输入子块Ibsm在ncib维的块索引;
步骤4、初始化xcob=0,其中xcob表示权值子块Wbam在ncob维的块索引;
步骤5、初始化w=0,其中w表示即将卷积的3×3图像矩阵的起始位置,对应在SM中的输入子块[Cib,3,Wi,n]中Wi维的索引;
步骤6、初始化k=0,其中k表示输入子块Ibsm3×3在Cib维度上的索引;
步骤7、初始化i=0,其中i表示输入子块Ibsm3×3在Hi维度上的索引;
步骤8、初始化j=0,其中j表示输入子块Ibsm3×3在Wi维度上的索引;
步骤9、初始化t=0,其中,t表示权值子块Wbam的Cob维度的索引;
步骤10、将预存储结果的向量寄存器初始化为0,然后向量寄存器将累加并存储计算结果;
步骤11、将储存在
Figure FDA0003447172160000161
中的对应3×3像素点的暂时乘积结果加载到VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p向量寄存器中,若xcib为0,则跳过该步骤;
步骤12、使用粒度为n×2字节的标量加载指令加载输入数据,半精度数据为2字节,单次将加载n个半精度数据到指定标量寄存器,选取
Figure FDA0003447172160000162
对应位置的数据加载到标量寄存器R27
步骤13、基于标量寄存器R27中存放的半精度输入数据,对R27进行广播操作并将数据储存在向量寄存器VR51中,L个向量处理部件存储相同的数据;
步骤14、将所述AM空间中的权值子块Wbam(i,j,k,t,n)上t维上的所有数据加载到p个向量寄存器VR60、VR61...VRp+60-1中,p表示超长数据指令字的体系结构中功能向量运算单元部件的数量,单次加载最小粒度为
Figure FDA0003447172160000163
个字节,故单次最少可加载
Figure FDA0003447172160000164
个半精度数据;
步骤15、将
Figure FDA0003447172160000165
向量化后的数据VR51分别与Wbam(i,j,k,n)数据VR60、VR61...VRp+60-1做相乘操作,相乘结果再与向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p的值进行累加,同时L个向量处理部件并行操作,计算结果依次存储在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j×p......VR11+p-1+i×j×p+j×p中;
步骤16、令j=j+1;
步骤17、判断j是否小于3,若是,则返回步骤12,若否,则继续执行步骤18;
步骤18、令i=i+1;
步骤19、判断i是否小于3,若是,则返回步骤8,若否,则继续执行步骤20;
步骤20、当输入通道索引为k时,
Figure FDA0003447172160000171
的3×3图像与Cob个输出通道数的3×3卷积核的的向量乘加完成,结果依次保留在向量寄存器VR11+i×j×p+j×p、VR12+i×j×p+j× p......VR11+p-1+i×j×p+j×p中;
步骤21、令k=k+1;
步骤22、判断k是否小于Cib,若是,则返回步骤7,若否,则继续执行步骤23;
步骤23、3×3图像的输入子块
Figure FDA0003447172160000172
在输入通道维度上Cib长度的卷积累加完成,得到3×3×Cob个向量寄存器的结果数据;
步骤24、已知当卷积核的移动步长=2时,对卷积图像的最左列和最上行做边缘填充处理,如果当前卷积的3×3图像包含原图像层中的最左一列或最上一行,则需要将储存对应位置结果的寄存器赋零;
步骤25、权值子块Wbam和输入子块
Figure FDA0003447172160000173
的卷积3×3已完成,将储存在VR11+i×j×p+j×p、VR12+i×j×p+j×p...VR11+p-1+i×j×p+j×p向量寄存器中的数据结果暂时存储到AM空间位置
Figure FDA0003447172160000174
步骤26、令w=w+2;
步骤27、判断w是否小于Wi-1,若是,将传入的输入数据的起始地址向后偏移2×n个半精度数据,并返回步骤6,若否,则执行步骤28;
步骤28、SM上的输入子块Ibsm与AM上的权值子块Wbam的卷积3×3完成,令xCob=xCob+1;
步骤29、判断xCob是否小于nCob,若是,则加载权值子块
Figure FDA0003447172160000181
到对应AM空间,并返回执行步骤5,若否,则执行步骤30;
步骤30、判断xCib是否等于nCib,若是,则返回执行步骤4,若否,则执行步骤31;
步骤31、当xCib=nCib,为输入数据在输入通道Cib上的最后一个分块,Cib维度的计算已经全部累加完成,将3×3图像层各像素点上结果累加,最终结果存储在VR11、VR12……VR11+p-1 p个向量寄存器中,输入数据Ibsm:[ncib,Cib,3,Wi,n]与完整权值数据的卷积3×3已完成;
步骤32、将储存在VR11、VR12……VR11+p-1向量寄存器中的数据结果存储到AM对应空间位置AMtemp1
步骤33、将储存在AMtemp1的结果数据进行转置操作并将结果保存在对应AM空间AMtemp2中;
步骤34、调用直接存储器访问操作,将AM空间中AMtemp2储存的特征图数据结果存储至双倍速率同步动态随机存储器指定位置;
步骤35、令h=h+2;
步骤36、判断h是否小于Hi-1,若是,返回执行步骤3,若否,执行步骤37;
步骤37、所有输入数据Iddr与所有权值数据Wddr的卷积3×3计算完成。
CN202111662053.6A 2021-12-30 2021-12-30 一种面向向量处理器的半精度向量化卷积方法及系统 Active CN114281755B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111662053.6A CN114281755B (zh) 2021-12-30 2021-12-30 一种面向向量处理器的半精度向量化卷积方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111662053.6A CN114281755B (zh) 2021-12-30 2021-12-30 一种面向向量处理器的半精度向量化卷积方法及系统

Publications (2)

Publication Number Publication Date
CN114281755A true CN114281755A (zh) 2022-04-05
CN114281755B CN114281755B (zh) 2022-09-16

Family

ID=80879183

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111662053.6A Active CN114281755B (zh) 2021-12-30 2021-12-30 一种面向向量处理器的半精度向量化卷积方法及系统

Country Status (1)

Country Link
CN (1) CN114281755B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115794671A (zh) * 2023-02-07 2023-03-14 成都申威科技有限责任公司 一种兼容向量数据的访存系统及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110796235A (zh) * 2019-10-21 2020-02-14 中国人民解放军国防科技大学 卷积神经网络Valid卷积的向量化实现方法
CN113626769A (zh) * 2021-10-12 2021-11-09 中国人民解放军国防科技大学 面向向量处理器的低位宽数据矩阵向量化转置方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110796235A (zh) * 2019-10-21 2020-02-14 中国人民解放军国防科技大学 卷积神经网络Valid卷积的向量化实现方法
CN113626769A (zh) * 2021-10-12 2021-11-09 中国人民解放军国防科技大学 面向向量处理器的低位宽数据矩阵向量化转置方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张军阳等: "二维矩阵卷积在向量处理器中的设计与实现", 《国防科技大学学报》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115794671A (zh) * 2023-02-07 2023-03-14 成都申威科技有限责任公司 一种兼容向量数据的访存系统及方法

Also Published As

Publication number Publication date
CN114281755B (zh) 2022-09-16

Similar Documents

Publication Publication Date Title
US11886536B2 (en) Methods and systems for implementing a convolution transpose layer of a neural network
US11204976B2 (en) Expanded kernel generation
US7337205B2 (en) Matrix multiplication in a vector processing system
CN107145939B (zh) 一种低计算能力处理设备的计算机视觉处理方法及装置
CN111213125B (zh) 使用simd指令进行高效的直接卷积
US10853448B1 (en) Hiding latency of multiplier-accumulator using partial results
CN111937009A (zh) 脉动卷积神经网络
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
CN110796235B (zh) 卷积神经网络Valid卷积的向量化实现方法
CN110807170B (zh) 多样本多通道卷积神经网络Same卷积向量化实现方法
CN110399591B (zh) 基于卷积神经网络的数据处理方法和装置
JP2007536628A (ja) Simdアレープロセッサ用のビットシリアル処理要素
CN110851779B (zh) 用于稀疏矩阵运算的脉动阵列架构
CN110705703A (zh) 基于脉动阵列的稀疏神经网络处理器
CN114281755B (zh) 一种面向向量处理器的半精度向量化卷积方法及系统
JP2024028901A (ja) ハードウェアにおけるスパース行列乗算
CN112732630A (zh) 针对深度学习的浮点矩阵乘算子众核并行优化方法
CN114330669B (zh) 一种面向向量处理器的半精度向量化conv1×1卷积方法及系统
CN113052299A (zh) 基于通信下界的神经网络存内计算装置及加速方法
CN112953549B (zh) 一种稀疏矩阵的存储处理方法及装置
CN112434255A (zh) 向量-矩阵运算和数据处理方法、乘法器和处理器芯片
JP3860545B2 (ja) 画像処理装置及び画像処理方法
US20220138282A1 (en) Computing device and computing method
EP4361889A1 (en) Implementing a scatter function on a neural network accelerator
CN117217978A (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