乘累加优化方法技术

技术编号:39600481 阅读:5 留言:0更新日期:2023-12-03 20:00
提供第一张量和第二张量的乘累加优化方法

【技术实现步骤摘要】
乘累加优化方法、系统、设备和介质


[0001]本申请涉及处理器领域,且更具体地,涉及第一张量和第二张量的乘累加优化方法

系统

电子设备和非暂时存储介质


技术介绍

[0002]在卷积神经网络的推理和训练模型中,通用矩阵乘
(General Matrix Multiplication

GEMM)
和卷积算子
(Conv)
都是一个非常常见的算子,使用频率非常高,比如在
resnet50
这种模型中,卷积算子非常多

所以对卷积算子的优化,对于处理器加速推理与训练模型变得非常重要


技术实现思路

[0003]根据本申请的一个方面,提供一种第一张量和第二张量的乘累加优化方法,包括:加载第一张量中要进行乘累加的一部分;重复利用加载的所述一部分与第二张量中的各个部分分别进行相乘运算;将每次所述相乘运算的当前乘法结果累加并寄存到与每次所述相乘运算相对应的寄存器中

[0004]根据本申请的另一个方面,提供一种第一张量和第二张量的乘累加优化系统,包括:加载装置,被配置为加载第一张量中要进行乘累加的一部分;相乘装置,被配置为重复利用加载的所述一部分与第二张量中的各个部分分别进行相乘运算;寄存装置,被配置为将每次所述相乘运算的当前乘法结果累加并寄存到与每次所述相乘运算相对应的寄存器中

[0005]根据本申请的另一个方面,提供一种电子设备,包括:存储器,用于存储指令;处理器,用于读取所述存储器中的指令,并执行根据本申请的实施例的方法

[0006]根据本申请的另一个方面,提供一种非暂时存储介质,其上存储有指令,其中,所述指令在被处理器读取时,使得所述处理器执行根据本申请的实施例的方法

[0007]如此,可以加载第一张量中要进行乘累加的一部分
(
例如到第一缓冲器中
)
一次,就可以复用该第一张量中要进行乘累加的一部分分别与第二张量中的各个部分分别进行多次相乘运算,这极大地节约了加载第一张量
(
或其各个部分
)(
例如到第一缓冲器中
)
的次数

其次,利用与每次该相乘运算相对应的寄存器来分别寄存每次该相乘运算的当前乘法结果,以便下次继续与新的乘法结果进行累加,相当于扩展了多个累加器
ACC
,因此不局限于系统设计的
ACC
数量

附图说明
[0008]为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图

[0009]图
1A
示出了输入数据张量
(
用立方体表示
)
和权重张量进行卷积运算得到输出数据张量的示意过程

[0010]图
1B
示出了矩阵
A
和矩阵
B
的示例矩阵乘运算过程的示意图

[0011]图2示出了根据本申请的第一张量和第二张量的乘累加优化方法的一个实施例的流程图

[0012]图3示出了根据本申请的第一张量和第二张量的乘累加优化方法的另一实施例的流程图

[0013]图4示出了根据本申请的实施例的将输出的累加结果张量的
N*H*W
三个维度拉直

运用循环转置技术展开成内循环
inner_loop
和外循环
outer_loop
的示意图

[0014]图5示出了根据本申请的实施例的第一张量和第二张量的乘累加优化系统的方框图

[0015]图6示出了适于用来实现本申请的实施例的示例性电子设备的框图

[0016]图7示出了根据本申请的实施例的非暂时性计算机可读存储介质的示意图

具体实施方式
[0017]现在将详细参照本申请的具体实施例,在附图中例示了本申请的例子

尽管将结合具体实施例描述本申请,但将理解,不是想要将本申请限于描述的实施例

相反,想要覆盖由所附权利要求限定的在本申请的精神和范围内包括的变更

修改和等价物

应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体

或者两者的组合

[0018]目前很多人工智能
(AI)
芯片普遍会采用专用的张量运算核来专门加速矩阵运算和卷积运算

[0019]图
1A
示出了输入数据张量
(
用立方体表示
)
和权重张量进行卷积运算得到输出数据张量的示意过程

[0020]如图
1A
所示,卷积算子输入:输入数据和权重数据

输入数据张量的大小为
1*C*H*W。
其中,
W
表示宽度,
H
表示高度,
C
表示通道数,且都是正整数

注意,在此为了简化视图,
N(
批量大小,
batch_size)

1。
[0021]权重的内核总数为
K
,且是正整数

每一个权重内核的大小为
R*S*C
,其中
R
表示高度,
S
表示宽度,
C
表示通道数,且都是正整数

也可以直接用
K*C*R*S
来表示权重张量

[0022]输入数据张量和权重张量的卷积之后得到输出数据张量的大小为
1*K*(H+padH*2

R+1)*(W+padW*2

S+1)。
为了简单起见,设置步幅
(stride)
为1,扩长
(dilation)
为1,高度填充
padH
=宽度填充
padW
=0,即输出矩阵为
1*K*(H

R+1)*(W

S+1)。
[0023]如果有
N
个批次的输入数据
(N
为批量大小
(batch_size))
,则输入数据张量的大小为
N*C*H*W。
[00本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种第一张量和第二张量的乘累加优化方法,包括:加载第一张量中要进行乘累加的一部分;重复利用加载的所述一部分与第二张量中的各个部分分别进行相乘运算;将每次所述相乘运算的当前乘法结果累加并寄存到与每次所述相乘运算相对应的寄存器中
。2.
根据权利要求1所述的方法,其中,利用循环嵌套方式来实现所述乘累加优化方法
。3.
根据权利要求1所述的方法,还包括:基于寄存器资源设置用于寄存乘累加结果的寄存器的个数
R_num
;基于
R_num
,确定内循环次数
inner_loop
和外循环次数
outer_loop
,其中,
inner_loop

R_num

outer_loop
为第二张量中要进行相乘运算的多个维度的总块个数
Iter_NUM
除以
inner_loop。4.
根据权利要求3所述的方法,其中所述加载第一张量中要进行乘累加的一部分包括:在第
out_idx
个外循环运算中,其中
out_idx>
=0且
<outer_loop
:加载第一张量中要进行乘累加的一部分;其中,所述重复利用加载的所述一部分与第二张量中的各个部分分别进行相乘运算包括重复内循环乘累加操作达内循环次数
inner_loop
,其中第
inner_idx
次内循环乘累加操作包括如下步骤,其中
inner_idx>
=0且
<inner_loop
:加载要与所述第一张量的所述一部分进行乘累加的第二张量的第
inner_idx
部分;将第一张量的所述一部分与第二张量的第
inner_idx
部分相乘以得到当前乘法结果
sv
;其中,所述将每次所述相乘运算的当前乘法结果累加并寄存到与每次所述相乘运算相对应的寄存器中包括:将当前乘法结果
sv
累加到第
inner_idx
寄存器先前寄存的先前乘累加结果作为当前乘累加结果且用所述第
inner_idx
寄存器来寄存所述当前乘累加结果
。5.
根据权利要求3所述的方法,其中,在所述第一张量是用于卷积运算的具有
K

C
维度的权重张量且所述第二张量是用于卷积运算的具有
N、C、H、W
维度的数据张量的情况下,所述第二张量中要进行相乘运算的多个维度为
N
维度
、H
维度
、W
维度,
Iter_NUM

N_num*H_num*W_num
,其中
W
表示第二张量的宽度,
H
表示第二张量的高度,
N
表示批量大小,
C
表示通道数,
K
表示权重核数,
N_num
表示
W
维度的块个数,
H_num
表示
H
维度的块个数,
W_num
表示
W
维度的块个数
。6.
根据权利要求4所述的方法,其中,所述第一张量的所述一部分为矩阵
{k,c,0,0}
,所述第二张量的第
inner_idx
部分为矩阵
{n,c,h,w}
,其中,
k>
=0且
<K

c>
=0且
<C,
其中,
iterator

out_idx*inner_loop+inner_idx

N_num

N

H_num

(H+T

1))/T

W_num

(W+(T

1))/T

w

iterator

W_num*T

h

iterator/W_num

H_num*T

n

iterator/W_num/H_num
,其中%表示取余,其中,所述块是每次能够相乘的最小单位,块的大小为
T*T
,其中
T
是正整数
。7.
根据权利要求6所述的方法,其中,在从
k
=0开始
、k+

kstep
的各个循环中的每个循环中,都执行
outer_loop
个外循环运
算,其中
kstep

k
的步长,在所述
outer_loop
个外循环运算中的第
out_idx
个外循环运算中,执行从
c
=0开始
、c+

cstep
的各个循环,在从
c
=0开始
、c+

cstep
的各个循环中的每个循环中,加载第一张量中要进行乘累加的矩阵
{k,c,0,0}
,且重复所述乘累加操作达内循环次数
inner_loop
,其中
cstep

c
的步长
。8.
根据权利要求1‑7中任一所述的方法,其中,
T

8。9.
根据权利要求3所述的方法,其中,在所述第一张量是用于矩阵乘运算的
X2*X3的张量且所述第二张量是用于矩阵乘运算的
X1*X2的张量的情况下,所述第二张量中要进行相乘运算的多个维度为
X1和
X2维度,
Iter_NUM

X1_num*X2_num
,其中
X1表示第二张量的高度,
X2表示第二张量的宽度,
X1_num
表示
X1维度的块个数,
X2_num
表示
X2维度的块个数
。10.
根据权利要求3所述的方法,其中,
inner_loop
个内循环乘累加操作被展开为
inner_loop
个具体运算代码,且将所述
inner_loop
个具体运算代码与其他运算代码共同进行编译优化
。11.
一种第一张量和第二张量的乘累加优化系统,包括:加载装置,被配置为加载第一张量中要进行乘累加的一部分;相乘装置,被配置为重复利用加载的所述一部分与第二张量中的各个部分分别进行相乘运算;寄存装置,被配置为将每次所述相乘运算的当前乘法结果累加并寄存到与每次所述相乘运算相对应的寄存器中
。12.
根据权利要求
11<...

【专利技术属性】
技术研发人员:请求不公布姓名
申请(专利权)人:上海壁仞科技股份有限公司
类型:发明
国别省市:

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

1