CN112214727A - 运算加速器 - Google Patents

运算加速器 Download PDF

Info

Publication number
CN112214727A
CN112214727A CN202010992871.1A CN202010992871A CN112214727A CN 112214727 A CN112214727 A CN 112214727A CN 202010992871 A CN202010992871 A CN 202010992871A CN 112214727 A CN112214727 A CN 112214727A
Authority
CN
China
Prior art keywords
matrix
accelerator
arithmetic
memory
data
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.)
Pending
Application number
CN202010992871.1A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010992871.1A priority Critical patent/CN112214727A/zh
Publication of CN112214727A publication Critical patent/CN112214727A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • G06F7/4981Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only

Abstract

本发明公开了一种运算加速器,涉及数据计算技术领域,旨在降低处理两个N*N的矩阵乘法运算的时间。该运算加速器包括:第一存储器、第二存储器、运算电路和控制器,其中,运算电路与第一存储器和第二存储器可以通过总线进行数据通信,运算电路用于提取第一存储器和第二存储器中的矩阵数据并进行乘法运算,控制器用于依据预设的程序或者指令控制运算电路完成乘法运算。该运算加速器可以用于对两个矩阵进行相乘运算。

Description

运算加速器
技术领域
本申请涉及数据计算技术领域,尤其涉及一种运算加速器。
背景技术
目前,要计算两个矩阵A和B的乘积,可以通过以下两种方式中的任意一种方式进行计算:
方式一、通过向量处理器进行计算。
假设C=A*B,向量处理器可同时计算的元素个数为M个,参见图1,向量处理器会将矩阵A的第i行向量(包括元素Ai1、Ai2、...、Ai(M-1)、AiM)加载到源寄存器Reg0中,再将矩阵B的第j列向量(包括元素Bj1、Bi2、...、Bj(M-1)、BjM)加载到寄存器Reg1中,可以实现Reg0与Reg1各对应元素之间的乘法,最后通过加法树来完成累加操作,计算出矩阵C的第i行第i列的数据Cij,进行多次计算则可以得到矩阵C。
方式二、为了进一步提高计算速度,可以通过二维的计算阵列来完成矩阵的乘法运算。
例如,二维的计算阵列可以为N*N的脉动阵列,通过这样的一个脉动阵列,在每一个时钟周期可以完成一个向量与一个矩阵相乘的运算。
在方式一中,完成两个N*N的矩阵乘法运算,需要N^3次乘法操作,由于向量处理器每个时钟周期可以计算M个元素之间的乘法,因此完成一次乘法运算所需时长为N^3/M个时钟周期。在方式二中,完成两个N*N的矩阵乘法运算,需要N^3次乘法操作,由于脉动阵列有N^2个运算单元,那么完成一次矩阵运算所需时长为N∧3/N^2=N个时钟周期。方式一和方式二完成N*N的矩阵乘法运算耗费的时间都很长。
发明内容
本申请实施例提供了一种运算加速器,旨在降低处理两个N*N的矩阵乘法运算的时间。
为达到上述目的,本申请实施例提供如下技术方案:
第一方面,提供了一种运算加速器,包括:第一存储器,用于存储第一矩阵,第一矩阵为M*N矩阵;第二存储器,用于存储第二矩阵,第二矩阵为N*K矩阵;与第一存储器和第二存储器连接的运算电路,运算电路包括矩阵乘法电路和加法电路;矩阵乘法电路包括M个由运算块组成的运算组,每个运算组中包括K个运算块,每个运算块包括N个运算单元,运算单元设有两路输入,分别用于接收第一存储器和第二存储器发送的数据,并将两路数据相乘;加法电路用于对属于同一运算块的运算单元的计算结果进行累加得到每个运算块的计算结果;与运算电路连接的控制器,控制器用于执行以下动作:将第二矩阵的K个列向量分别写入每个运算组的K个运算块中,其中,第二矩阵的第g列向量中的第j个数据写入K个运算块中的第g个运算块中的第j个运算单元;将第一矩阵的M个行向量分别发送给M个运算组,其中,第一矩阵的第i个行向量被发送至M个运算组中的第i个运算组、且第i个运算组中的每个运算块中的第i个运算单元接收第i个行向量中的第j个数据;使得M个运算组中的每个运算单元对其接收的两路数据进行乘法运算,并使得加法电路将每个运算块中的运算单元的计算结果进行累加得到第三矩阵,第三矩阵为第一矩阵和第二矩阵的乘积,第三矩阵中的第i行第g列元素为第i个运算组中的第g个运算块的计算结果,M、N和K均为大于0的整数,i为大于0小于M+1的整数,g为大于0小于K+1的整数,j为大于0小于N+1的整数。
第一方面提供的方法,由于M个运算组中包括M*N*K个运算单元,因此,在一个时钟周期内,运算加速器可以进行M*N*K次乘法运算,则运算加速器可以计算一个M*N矩阵和N*K矩阵的乘积,与现有技术相比,可以大大的降低矩阵乘法运算所需的时间。
在一种可能的设计中,加法电路包括M*K个加法树,一个加法树对应一个运算块,一个加法树与对应的运算块中的N个运算单元连接,一个加法树用于对连接的N个运算单元的计算结果进行累加。
在该种可能的设计中,具体提供了一种加法电路的组成结构。
在一种可能的设计中,运算单元包括:存储单元,用于存储写入存储单元的数据;与存储单元连接的乘法电路,用于计算接收到的数据和存储单元中存储的数据的乘积。
在该种可能的设计中,具体提供了一种运算单元的组成结构。
在一种可能的设计中,运算单元包括:多个存储单元、乘法电路、与多个存储单元连接的第一选择电路和与多个存储单元和乘法电路连接的第二选择电路;多个存储单元,用于存储数据;第一选择电路,用于在乘法电路进行乘法运算之前在多个存储单元中选择存储乘法电路进行乘法运算时使用的数据的存储单元;第二选择电路,用于在乘法电路进行乘法运算时选择存储乘法电路进行乘法运算时使用的数据的存储单元;乘法电路,用于计算接收到的数据和第二选择电路选择出的存储单元中存储的数据的乘积。
在该种可能的设计中,存储单元可以被分为两个block(块),当运算单元中包括多个存储单元时,若运算单元根据一个存储单元中的一个block中的数据进行乘法运算时,控制器还可以在多个存储单元中的其他存储单元或在参与乘法运算的存储单元中的另一个block中写入数据,从而提高运算单元的工作效率。
在一种可能的设计中,第一存储器和运算电路通过第一总线连接,第一总线的位宽为Wi*N*M;第二存储器和运算电路通过第二总线连接,第二总线的位宽为Wi*N,Wi为运算单元允许的输入数据的最大位宽。
在一种可能的设计中,运算加速器还包括与第一存储器、第二存储器和控制器连接的存储单元访问控制器;存储单元访问控制器用于在控制器的控制下获取第一矩阵和第二矩阵,并将第一矩阵存储在第一存储器,将第二矩阵存储在第二存储器。
在一种可能的设计中,运算加速器还包括:第三存储器,用于存储第一矩阵的源数据;与第一存储器、第二存储器、第三存储器和控制器连接的存储单元访问控制器,存储单元访问控制器用于在控制器的控制下获取第一矩阵的源数据和第二矩阵,并将第一矩阵的源数据存储在第三存储器,将第二矩阵存储在第二存储器;与第一存储器、第三存储器和控制器连接的向量计算单元,向量计算单元用于在控制器的控制下将第一矩阵的源数据转换为第一矩阵后存储在第一存储器。
在该种可能的设计中,运算加速器还具备通过第一矩阵的源数据获取第一矩阵的能力。
在一种可能的设计中,第三存储器与运算电路单元连接,第三存储器还用于存储第三矩阵。
在一种可能的设计中,运算加速器还包括:与运算电路、向量计算单元和控制器连接的累加器;累加器用于在控制器的控制下将第三矩阵和第四矩阵中的对应位置的元素进行累加得到第五矩阵;向量计算单元还用于在控制器的控制下将第五矩阵存储在第三存储器;其中,第三矩阵为第一矩阵和第二矩阵的乘积,第一矩阵包括第一待计算矩阵的第一部分,第一待计算矩阵的第一部分为第一待计算矩阵的第1至第N列元素,第二矩阵为第二待计算矩阵的第一部分,第二待计算矩阵的第一部分为第二待计算矩阵的第1至第N行元素,第一待计算矩阵包括M行元素,第二待计算矩阵包括K列元素,第四矩阵为第一待计算矩阵的第二部分和第二待计算矩阵的第二部分的乘积,第一待计算矩阵的第二部分为第一待计算矩阵中的除第一部分之外的其他部分,第二待计算矩阵的第二部分为第二待计算矩阵中的除第一部分之外的其他部分。
在一种可能的设计中,运算加速器还包括:与控制器连接的取指存储器,用于存储控制器使用的指令;与取指存储器、存储单元访问控制器和外部存储器连接的总线接口单元,用于取指存储器从外部存储器获取指令,还用于存储单元访问控制器从外部存储器获取第一矩阵的源数据、第一矩阵和第二矩阵中的至少一个。
附图说明
图1为现有技术中的计算两个矩阵乘积的过程示意图;
图2为现有技术中的将卷积核转换为权重矩阵的示意图;
图3为现有技术中的将输入数据转换为输入矩阵的示意图;
图4为现有技术中的两个矩阵进行乘法运算的方法示意图;
图5为本发明实施例提供的一种运算加速器的组成示意图;
图6为本发明实施例提供的一种运算电路的组成示意图;
图7为本发明实施例提供的一种运算电路中的布线示意图;
图8为本发明实施例提供的一种每个运算块中加载的列向量的示意图;
图9为本发明实施例提供的一种每个运算组中的运算单元中的数据的示意图;
图10为本发明实施例提供的一种每个运算块中加载的行向量的示意图;
图11为本发明实施例提供的一种每个运算组中的运算单元中的数据的示意图;
图12为本发明实施例提供的一种每个运算组中的运算单元计算的数据的示意图;
图13为本发明实施例提供的一种加法树与运算块的关系示意图;
图14为本发明实施例提供的一种运算单元的组成示意图;
图15为本发明实施例提供的又一种运算单元的组成示意图;
图16为本发明实施例提供的又一种运算加速器的组成示意图;
图17为本发明实施例提供的又一种运算加速器的组成示意图;
图18为本发明实施例提供的一种填充矩阵的示意图;
图19为本发明实施例提供的一种分割矩阵的示意图;
图20为本发明实施例提供的一种控制器控制运算加速器完成矩阵乘法运算的流程图;
图21对本发明实施例提供的一种CPU控制运算加速器实现矩阵乘法运算的流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B,“多个”是指两个或多于两个。
本发明实施例提供的运算加速器可以应用于机器学习、深度学习以及卷积神经网络等领域,也可以应用到数字图像处理和数字信号处理等领域,还可以应用在其他涉及矩阵乘法运算的领域。
近些年,由于卷积神经网络在图像分类、图像识别、音频识别以及其他相关领域的不俗表现,使其成为了学术界与工业界的研究与开发热门。卷积神经网络主要包括卷积和全连接(fully connected,简称FC)运算,其中卷积运算的运算量通常能够占据整个网络运算量的70%以上。本发明实施例提供的运算加速器可以进行卷积神经网络中的卷积运算和FC运算。
卷积运算从严格意义上不等同与矩阵乘法运算,但通过合理的数据调整,可以将卷积运算转换成矩阵乘法运算。在卷积神经网络中,通常会有多个卷积核,卷积核是三维的,包含三个维度的数据,x、y方向为数据的长和宽,z方向可以认为是数据的深度。卷积核其实就是滤波器(filter),主要用于提取图像中不同的特征。参见图2,卷积核实质上是一系列权重的组合,假设卷积核个数为K,将K个卷积核中同一位置z方向上的N个元素提取出来,即可得到N*K的权重矩阵(weight matrix),根据运算加速器的规格(即运算加速器可以计算的矩阵的行数和列数),可以将卷积核按照权重矩阵的形式预先存储在运算加速器的存储器中,以便在运算加速器进行矩阵乘法运算时进行调用。本发明实施例中的“*”表示“乘以”。
参见图3,根据卷积核的步幅(stride)(本发明实施例中步幅为1),运算加速器可提取输入的M个点在z方向的N个数据,共M*N个数据,可以形成输入矩阵(input matrix),运算加速器需要对输入矩阵和权重矩阵进行乘法运算。
FC运算本质上是一个向量与矩阵的乘法操作。FC运算的输入为一个9216的向量,FC需要输出4096个点,那么要得到FC输出的一个点,需要一个9126的向量与9216个权重进行点乘操作,要得到所有4096个点,需要9216的向量与9216x4096个权重进行点乘操作。
图4示出了矩阵C=A*B的计算公式,其中,A为尺寸为M*N的矩阵,B为尺寸为N*K的矩阵,在本发明实施例中,M、N和K均为正整数。要计算得到C矩阵中的一个数据,需要矩阵A中的一个行向量中的数据与矩阵B中的一个列向量中的对应数据做点乘运算后再累加,即要计算得到C矩阵中的一个数据要进行N次乘法运算,则要计算得到矩阵C需要进行M*N*K次乘法运算。
本发明实施例提供了一种运算加速器50,如图5所示,运算加速器50包括:第一存储器501、第二存储器502、运算电路503和控制器504,其中,运算电路503与第一存储器501和第二存储器502可以通过总线进行数据通信,运算电路503用于提取第一存储器501和第二存储器502中的矩阵数据并进行乘法运算,控制器504用于依据预设的程序或者指令控制所述运算电路503完成乘法运算。
第一存储器501用于存储第一矩阵,第一矩阵为M*N矩阵。若矩阵A为第一矩阵,则第一矩阵A中的第i行第j列的元素可以记为Aij。本发明实施例中提到的第一存储器501,以及下文中提到的第二存储器502、第三存储器506和存储单元均可以为寄存器、随机存取存储器(random access memory,简称RAM)、静态随机存储器、闪存或其他可读可写的存储器。
第二存储器502用于存储第二矩阵,第二矩阵为N*K矩阵。若矩阵B为第二矩阵,则第二矩阵B中的第j行第g列的元素可以记为Bjg
其中,M、N和K均为大于0的整数,i为大于0小于M+1的整数,g为大于0小于K+1的整数,j为大于0小于N+1的整数。M、N和K中的任意两个参数可以相等,M、N和K也可以都相等。
如图6所示,运算电路503可以包括一个或多个矩阵乘法电路5031和一个或多个加法电路5032,一个加法电路5032可以对应一个矩阵乘法电路5031,一个加法电路5032也可以对应多个矩阵乘法电路5031。运算电路503中包括的多个矩阵乘法电路5031可以各自独立的进行矩阵乘法运算。参见图6,图6中以运算电路503包括2个矩阵乘法电路5031为例进行绘制。矩阵乘法电路5031包括M个由运算块组成的运算组,每个运算组中包括K个运算块,每个运算块包括N个运算单元,运算单元设有两路输入,分别用于接收第一存储器和第二存储器发送的数据,并将两路数据相乘;加法电路5032用于对属于同一运算块的运算单元的计算结果进行累加得到每个运算块的计算结果。
控制器504可以通过执行以下动作对第一矩阵和第二矩阵的乘积进行计算:
将第二矩阵的K个列向量分别写入每个运算组的K个运算块中,其中,第二矩阵的第g列向量中的第j个数据写入每个运算组的第g个运算块中的第j个运算单元;运算电路503可以在控制器504的控制下读取第二存储器502中的第二矩阵中的数据并将第二矩阵中的数据缓存到每个运算组的K个运算块中,或者,控制器504可以控制第二存储器502将第二矩阵中的数据写入运算电路503中的每个运算组的K个运算块中;
将第一矩阵的M个行向量分别发送给M个运算组,其中,第一矩阵的第i个行向量被发送至M个运算组中的第i个运算组、且第i个运算组中的每个运算块中的第j个运算单元接收第i个行向量中的第j个数据;运算电路503可以在控制器504的控制下读取第一存储器501中的第一矩阵中的数据,或者,控制器504可以控制第一存储器501将第一矩阵中的数据发送给运算电路503中的M个运算组。
使得M个运算组中的每个运算单元对其接收的两路数据进行乘法运算,并使得加法电路5032将每个运算块中的运算单元的计算结果进行累加得到第三矩阵,第三矩阵为第一矩阵和第二矩阵的乘积,第三矩阵中的第i行第g列元素为第i个运算组中的第g个运算块的计算结果。
可选的,第一存储器501和运算电路503通过第一总线连接,第一总线的位宽为Wi*N*M;第二存储器502和运算电路503通过第二总线连接,第二总线的位宽为Wi*N,Wi为运算单元允许的输入数据的最大位宽。
具体的,Wi可以根据运算单元的输入数据的类型进行设置,例如,int(整数)8类型数据位宽为8-bit,fp(浮点数)16类型数据位宽为16-bit,fp32类型数据位宽为32-bit等。运算单元允许的输出数据的位宽可以根据运算单元的计算结果的范围进行设置,也可以根据其他方式确定,例如,当运算加速器50用于计算输入矩阵和权重矩阵的乘积时,输入矩阵中的数据与权重数据中的数据均为int8类型,则可以让运算单元的输出结果也为int8类型,此时输出数据的位宽=输入数据位宽,当然也可以将运算单元的输出数据转换成int16类型,此时输出数据的位宽为16-bit,另外,输出数据的位宽还可以根据其他实际需求来设计。
具体的,基于图6所示的运算电路503中的运算块以及运算单元的排布方式,参见图7,图7示出了一种具体的运算电路503中的布线的示意图。
根据上述实施例可知,运算电路503中包含M*N*K个运算单元,参见图6和图7,这些运算单元被分成M个运算组,每一个运算组中包含N*K个运算单元,N*K个运算单元排布成K列,构成K个运算块,每个运算块中包含N个运算单元。
在运算加速器50正式进行矩阵乘法运算之前,需要将第二矩阵中的数据预先加载到M个运算组,由于每个运算组使用的第二矩阵均相同,因此第二存储器502可通过广播的方式加载第二矩阵中的数据。
参见图7,运算电路503与第二存储器502之间有一个位宽为Wi*N的第二总线(Wi为运算单元允许的输入数据的最大位宽,N为一个运算块中运算单元的个数,则第二总线宽度为Wi*N),用于进行数据广播,每次对M个运算组中的一个运算块进行列向量广播,具体的,可以先将第二矩阵中的一个列向量复制M份,再将M份列向量广播到M个运算组中的对应的运算块中,每个运算块中加载的列向量可参见图8。若第二存储器502广播一个列向量需要一个周期(该周期可以为基于特定时钟信号设置的时钟周期,也可以基于其他控制信号产生的处理周期),则完成第二矩阵中的全部列向量的广播需要K个周期。
示例性的,基于图6所示的运算组中的运算块的排布方式,若矩阵B为第二矩阵,假设第二矩阵B为:
Figure BDA0002689464880000061
此时,N=5,K=4,则将第二矩阵B中的4个列向量分别写入4个运算组的4个运算块中后各个运算单元中的数据可以参见图9。
运算电路503与第一存储器501之间有一个位宽为Wi*N*M的第一总线(Wi为运算单元允许的输入数据的最大位宽,N为一个运算块中运算单元的个数,M为运算组的个数,则第一总线宽度为Wi*N*M),用于进行第一矩阵中的数据的发送,输入到每一个运算组的数据位宽为Wi*N。每一个运算组会接收到第一矩阵中的一个行向量,每一个运算组中所有的运算块同时接收到的行向量相同,运算组之间接收到的行向量不同。具体的,可以在运算组中将要发送到该运算组的第一矩阵的行向量复制K份,并将K份行向量分别发送到该运算组中的K个运算块中,每个运算块中加载的行向量可参见图10。由于每一个运算组中的一行运算单元使用的数据相同,因此第一存储器501可以采用行广播的方式向运算单元中发送数据。由于共有M个运算组,因此在一个周期内,可以完成一个尺寸为M*N的矩阵的发送。
示例性的,基于图6所示的运算组中的运算块的排布方式,若矩阵A为第一矩阵,假设第一矩阵A为:
Figure BDA0002689464880000062
此时,M=4,N=5,则将第一矩阵A的4个行向量分别发送给4个运算组中后各个运算单元中的数据可以参见图11。4个运算组中的每个运算单元计算的数据可以参见图12。将每个运算块中的运算单元的计算结果进行累加即可得到第一矩阵A和第二矩阵B的乘积第三矩阵C。
当本发明实施例提供的方法应用于卷积神经网络时,第一矩阵可以为输入矩阵,第二矩阵可以为权重矩阵。
本发明实施例提供的方法,由于M个运算组中包括M*N*K个运算单元,因此,在一个时钟周期内,运算加速器可以进行M*N*K次乘法运算,则运算加速器50可以计算一个M*N矩阵和N*K矩阵的乘积,与现有技术相比,可以大大的降低矩阵乘法运算所需的时间。
可选的,当一个矩阵乘法电路5031对应一个加法电路5032时,加法电路5032包括M*K个加法树,一个加法树对应一个运算块,一个加法树与对应的运算块中的N个运算单元连接,一个加法树用于对连接的N个运算单元的计算结果进行累加。
需要说明的是,运算块中N个运算单元的计算结果,都需要进行累加操作,才能够得到该运算块的计算结果。具体可以通过如图13所示的加法树对一个运算块中所有运算单元的计算结果进行累加操作。加法树实质上是一系列加法器的组合,连接方式如图13所示。该情况下,由于加法树需要对N个运算单元的计算结果进行累加,将加法树的输出结果位宽记为Wa,Wa取决于加法树的输出结果的范围。假设若每个运算单元的计算结果位宽为Wo,那么经过加法树累加后得到的运算块的输出结果很可能会超过Wo最大能表示的范围,因此通常需要通过更大位宽来表示运算块的输出结果,例如,运算单元的输入数据的最大位宽为8-bit,而加法树的输出数据的位宽可以设置为32-bit。
一个加法电路5032也可以对应多个矩阵乘法电路5031。一种情况下,一个矩阵乘法电路5031可以对应M*K个加法树,多个矩阵乘法电路5031对应的M*K个加法树可以部署在一个加法电路5032中。参见图6,图6中所示的运算电路503中包括的加法电路5032对应2个矩阵乘法电路5031,该情况下,加法电路5032中包括2*M*K个加法树,2*M*K个加法树中的M*K个加法树用于对2个矩阵乘法电路5031中的一个矩阵乘法电路5031中的M*K个运算块中的运算单元输出的计算结果进行累加,2*M*K个加法树中的另外M*K个加法树用于对2个矩阵乘法电路5031中的另一个矩阵乘法电路5031中的M*K个运算块中的运算单元输出的计算结果进行累加。
一种情况下,参见图14,运算单元包括:存储单元,用于存储写入存储单元的数据;与存储单元连接的乘法电路,用于计算接收到的数据和存储单元中存储的数据的乘积。具体的,为了描述方便,本文中将运算单元中的第一矩阵中的数据称为“第一数据”,第二矩阵中的数据称为第二数据。则参见图14,存储单元可以用于存储第二数据。乘法电路还可以包括用于输入第一数据、第二数据和输出计算结果的接口,存储单元还可以包括用于写入第二数据的接口。
另一种情况下,参见图15,运算单元包括:多个存储单元(图15中以运算单元包括2个存储单元为例进行绘制)、乘法电路、与多个存储单元连接的第一选择电路和与多个存储单元和乘法电路连接的第二选择电路;
多个存储单元,用于存储数据;
第一选择电路,用于在乘法电路进行乘法运算之前在多个存储单元中选择存储乘法电路进行乘法运算时使用的数据的存储单元;
第二选择电路,用于在乘法电路进行乘法运算时选择存储乘法电路进行乘法运算时使用的数据的存储单元;
乘法电路,用于计算接收到的数据和第二选择电路选择出的存储单元中存储的数据的乘积。
具体的,多个存储单元中可以存储不同矩阵中的数据,第一选择电路可以选择将一个矩阵中的数据存储在哪个存储单元。
存储单元可以被分为两个block(块),当运算单元中包括多个存储单元时,若运算单元根据一个存储单元中的一个block中的数据进行乘法运算时,控制器504还可以在多个存储单元中的其他存储单元或在参与乘法运算的存储单元中的另一个block中写入数据,从而提高运算单元的工作效率。
参见图15,若矩阵乘法电路5031需要计算第一矩阵A和第二矩阵B的乘积,还要计算第一矩阵A和矩阵D的乘积,则控制器504可以将第二矩阵B和矩阵D中的数据均写入到运算单元的存储单元中,第一选择电路可以选择将第二矩阵B中的第二数据0写入存储单元0,将矩阵D中的第二数据1写入存储单元1。在乘法电路进行第一数据和第二数据0的乘法运算时,第二选择电路选择将存储单元0中的第二数据0输出至乘法电路,在乘法电路进行第一数据和第二数据1的乘法运算时,第二选择电路选择将存储单元1中的第二数据1输出至乘法电路。
该情况下,每一个运算单元接收4个输入,第一数据、第二数据和2个寄存器选择信号,一个寄存器选择信号用于控制第一选择电路选择在乘法电路进行乘法运算之前在多个存储单元中选择存储乘法电路进行乘法运算时使用的数据的存储单元,另一个寄存器选择信号用于控制第二选择电路在乘法电路进行乘法运算时选择存储乘法电路进行乘法运算时使用的数据的存储单元。
可选的,参见图16,运算加速器50还可以包括与第一存储器501、第二存储器502和控制器504连接的存储单元访问控制器505;
存储单元访问控制器505用于在控制器504的控制下获取第一矩阵和第二矩阵,并将第一矩阵存储在第一存储器501,将第二矩阵存储在第二存储器502。
存储单元访问控制器505可以为直接存储器访问控制器504(Direct MemoryAccess Controller,简称DMAC)或加载/存储单元。
可选的,参见图16,运算加速器50还可以包括:
第三存储器506,用于存储第一矩阵的源数据;
与第一存储器501、第二存储器502、第三存储器506和控制器504连接的存储单元访问控制器505,存储单元访问控制器505用于在控制器504的控制下获取第一矩阵的源数据和第二矩阵,并将第一矩阵的源数据存储在第三存储器506,将第二矩阵存储在第二存储器502;
与第一存储器501、第三存储器506和控制器504连接的向量计算单元(vectorunit)507,向量计算单元507用于在控制器504的控制下将第一矩阵的源数据转换为第一矩阵后存储在第一存储器501。
具体的,在一种应用场景下,存储单元访问控制器505获取到的数据不直接为第一矩阵,该情况下,存储单元访问控制器505可以将获取到的数据(即第一矩阵的源数据)存储在第三存储器506中,向量计算单元507可以将第三存储器506中的第一矩阵的源数据进行转换得到第一矩阵。
例如,若运算加速器50要求第一矩阵为5*4矩阵,第一矩阵的源数据为4*4矩阵,则向量计算单元507可以在第一矩阵的源数据中填充(padding)一个数据均为0的行向量,得到第一矩阵。示例性的,若第一矩阵的源数据为
Figure BDA0002689464880000091
则第一矩阵为
Figure BDA0002689464880000092
再例如,若运算加速器50要求第一矩阵为2*4矩阵,第一矩阵的源数据为4*4矩阵,则向量计算单元507可以将第一矩阵的源数据中的前两行向量组成的矩阵确定为第一矩阵。示例性的,若第一矩阵的源数据为
Figure BDA0002689464880000093
则第一矩阵为
Figure BDA0002689464880000094
在一种情况下,参见图17,第三存储器506与运算电路503单元连接,第三存储器506还用于存储第三矩阵。该情况下,第三存储器506和运算电路503还可以通过下文中的累加器508连接,运算电路503可以将计算结果输出到累加器508中,累加器508可以将第三矩阵存储到第三存储器中。
在另一种情况下,参见图16,运算加速器50还包括:与运算电路503、向量计算单元507和控制器504连接的累加器508;
累加器508用于在控制器504的控制下将第三矩阵和第四矩阵中的对应位置的元素进行累加得到第五矩阵;
向量计算单元507还用于在控制器504的控制下将第五矩阵存储在第三存储器506;
其中,第三矩阵为第一矩阵和第二矩阵的乘积,第一矩阵包括第一待计算矩阵的第一部分,第一待计算矩阵的第一部分为第一待计算矩阵的第1至第N列元素,第二矩阵为第二待计算矩阵的第一部分,第二待计算矩阵的第一部分为第二待计算矩阵的第1至第N行元素,第一待计算矩阵包括M行元素,第二待计算矩阵包括K列元素,第四矩阵为第一待计算矩阵的第二部分和第二待计算矩阵的第二部分的乘积,第一待计算矩阵的第二部分为第一待计算矩阵中的除第一部分之外的其他部分,第二待计算矩阵的第二部分为第二待计算矩阵中的除第一部分之外的其他部分。
需要说明的是,本发明实施例提供的运算加速器50可以计算一个M*N矩阵和N*K矩阵的乘积,而在实际运算中,需要计算的矩阵的尺寸可能比M*N,N*K要大或小。当需要计算的矩阵的尺寸比M*N,N*K大时,运算加速器50的每次计算只能够得到需要计算的两个矩阵的乘积的最终结果的部分结果,还需要经过多次循环迭代,对部分结果进行累加,才能完成需要计算的两个矩阵的乘积。
实质上,通过对需要计算的矩阵进行一些变换之后,本发明实施例提供的运算加速器50可以对任意行数和列数的两个矩阵进行乘法运算。具体实现如下:
若运算加速器50要计算一个Q*R矩阵和R*T矩阵的乘积,则会出现以下两种情况:
情况一:Q小于M,R小于N,T小于K。
该情况下,可以将Q*R矩阵填充为M*N矩阵,将R*T矩阵填充为N*K矩阵,再采用本发明实施例提供的运算加速器50进行矩阵乘法运算。具体的填充方法为在矩阵的周围填充0元素,使得矩阵变为要求的行数和列数的矩阵,示例性的,当M=N=8时,参见图18,图18示出了将一个4*5的矩阵和一个5*8的矩阵填充为8*8的矩阵的示例。
情况二:Q大于M,或者,R大于N,或者,T大于K。
该情况下,当Q大于M,或者,R大于N时,需要将Q*R矩阵切割为M*N的矩阵,在切割之前需要将Q*R矩阵填充成行数为M的倍数、列数为N的倍数的矩阵;当R大于N,或者,T大于K,需要将R*T矩阵切割为N*K矩阵,在切割之前需要将R*T矩阵填充成行数为N的倍数、列数为K的倍数的矩阵。
假设Q*R矩阵的行数为M的2倍、列数为N的2倍,R*T矩阵行数为N的2倍、列数为K的2倍,则可以将Q*R矩阵切割成4个M*N矩阵,记为
Figure BDA0002689464880000101
其中,A1、B1、C1和D1均为M*N矩阵;可以将R*T矩阵切割成4个N*K矩阵,记为
Figure BDA0002689464880000102
其中,A2、B2、C2和D2均为N*K矩阵。Q*R矩阵与R*T矩阵的乘积
Figure BDA0002689464880000103
则要计算矩阵S,可以通过计算
Figure BDA0002689464880000104
Figure BDA0002689464880000105
的乘积得到,计算
Figure BDA0002689464880000106
Figure BDA0002689464880000107
的乘积需要完成8次M*N矩阵和N*K矩阵的乘法运算,这8次M*N矩阵和N*K矩阵的乘法运算分别为:A1A2、B1C2、A1B2、B1D2、C1A2、D1C2、C1B2和D1D2,这8次的矩阵乘法运算可以通过在运算电路503中配置8个矩阵乘法电路5031来完成,也可以由运算电路503中的小于8个的矩阵乘法电路5031来完成,例如,由2个矩阵乘法电路5031各完成4次矩阵乘法运算来完成。
在完成8次矩阵乘法运算后,根据
Figure BDA0002689464880000108
可以看出,通过将A1A2和B1C2相加得到矩阵S的第1行第1列的元素,将A1B2和B1D2相加得到矩阵S的第1行第2列的元素,将C1A2和D1C2相加得到矩阵S的第2行第1列的元素,将C1B2和D1D2相加得到矩阵S的第2行第2列的元素。以A1A2和B1C2为例,A1A2和B1C2均为M*K的矩阵,因此,将A1A2和B1C2中的对应位置的元素相加即可得到矩阵S的第1行第1列的元素(这里所述的矩阵S的行和列是指以
Figure BDA0002689464880000109
表示的行和列)。
具体的,
Figure BDA00026894648800001010
Figure BDA00026894648800001011
中的任意两个元素之间的乘积的计算结果可以存储在累加器508中,累加器508对计算结果进行加法运算得到矩阵S。
上文中只是以将Q*R矩阵和R*T矩阵切割为4个矩阵为例进行说明,实际上,Q*R矩阵和R*T矩阵可以被切割为2个、6个或8个等,计算原理与上文中描述的相同,在此不再赘述。
示例性的,假设M=N=K=3(此时,由于矩阵A的行数和列数不为3,矩阵B的行数和列数也不为3,因此,矩阵A不为第一矩阵,矩阵B不为第二矩阵),要计算矩阵
Figure BDA0002689464880000111
和矩阵
Figure BDA0002689464880000112
的乘积,由于矩阵A为4*5的矩阵,因此,需要将矩阵A填充为矩阵
Figure BDA0002689464880000113
由于矩阵B为5*4的矩阵,因此,需要将矩阵B填充为矩阵
Figure BDA0002689464880000114
参见图19,可以将矩阵A和矩阵B分割为4个3*3的矩阵,则计算矩阵A和矩阵B的乘积需要进行8次3*3矩阵和3*3矩阵的乘法运算,8次3*3矩阵和3*3矩阵的乘法运算分别为:A1A2、B1C2、A1B2、B1D2、C1A2、D1C2、C1B2和D1D2。其中,A1A2的计算结果为
Figure BDA0002689464880000115
得到A1A2的计算结果之后将该结果存储在累加器508中,B1C2的计算结果为
Figure BDA0002689464880000116
得到B1C2的计算结果之后将该结果存储在累加器508中,累加器508将A1A2和B1C2中的对应位置上的元素相加得到
Figure BDA0002689464880000117
Figure BDA0002689464880000118
即矩阵A和矩阵B的乘积的前三行数据和前三列数据的公共区域的数据,矩阵A和矩阵B的乘积的其余位置的数据的计算同理,在此不再赘述。
向量计算单元507可以包含M*K个运算单元,在需要的情况下,向量计算单元507可以对累加器508输出的数据做进一步的处理,例如向量乘、向量加、指数运算、对数运算和大小比较等处理。例如,向量计算单元507具体可以用于卷积神经网络中非卷积/非FC层的网络计算,如池化(pooling),批归一化(batch normalization),局部响应归一化(localresponse normalization)等。需要说明的是,参见图16,若向量计算单元507不对累加器508输出的数据做进一步的处理,累加器508也可以直接将第五矩阵存储在第三存储器506。
可选的,参见图16和图17,运算加速器50还可以包括:
与控制器504连接的取指存储器(instruction fetch buffer)509,用于存储控制器504使用的指令;
与取指存储器509、存储单元访问控制器505和外部存储器连接的总线接口单元510(Bus Interface Unit,简称BIU),用于取指存储器509从外部存储器获取指令,还用于存储单元访问控制器505从外部存储器获取第一矩阵的源数据、第一矩阵和第二矩阵中的至少一个。
具体的,参见图16和图17,本发明实施例提供的运算加速器50可以作为协处理器挂载到中央处理器(Central Processing Unit,简称CPU)上,由CPU为运算加速器50分配计算任务,具体的,CPU可以将第一矩阵和第二矩阵以及指令存储在外部存储器中,运算加速器50可以通过读取外部存储器中的第一矩阵和第二矩阵以及指令完成矩阵乘法运算。外部存储器具体可以为双倍数据率同步动态随机存储器(Double Data Rate SynchronousDynamic Random Access Memory,简称DDR)或其他可读可写的存储器,外部存储器可以为私有于运算加速器50的存储器。具体的,第一存储器501、第二存储器502、第三存储器506以及取指存储器509一般都为片上存储器(On-Chip Buffer)。
示例性的,以运算加速器50应用在卷积神经网络中为例,参见图20,运算加速器50中的控制器504控制运算加速器50完成权重矩阵和输入矩阵的乘积的过程具体可以包括:
2001、DMAC从DDR获取权重矩阵并将权重矩阵写入第二存储器502。
2002、DMAC从DDR获取输入矩阵并将输入矩阵发送至第一存储器501。
2003、运算电路503读取第二存储器502中的权重矩阵,并将权重矩阵的K个列向量分别写入每个运算组的K个运算块中。
2004、运算电路503读取第一存储器501中的输入矩阵,并将输入矩阵中的M个行向量分别发送给M个运算组。
2005、运算电路503进行矩阵乘法计算,输出第三矩阵。
第三矩阵为权重矩阵和输入矩阵的乘积。
2006、运算电路503将第三矩阵缓存至累加器508中。
2007、累加器508判断第三矩阵是否为最终结果。
若是,结束,若否,返回步骤2001。
上述步骤的具体实现以及相关解释可以参见上文中的描述,在此不再赘述。运算加速器50在正式开始矩阵乘法运算之前,需要完成步骤2001-2004。步骤2001-2004的执行顺序不一定要严格以图20为准,只需要保证步骤2003在步骤2001之后,步骤2004在步骤2002之后,步骤2005在步骤2004之后即可。
由于运算加速器50可以作为协处理器挂载到CPU上,因此,对CPU控制运算加速器50实现矩阵乘法运算的过程作简单介绍,如图21所示,该过程具体可以包括:
2101、CPU启动任务调度。
该任务为矩阵乘法运算任务。
2102、CPU准备权重矩阵。
2103、CPU将权重矩阵复制到DDR中。
2104、CPU准备输入数据和指令。
2105、CPU复制输入数据和指令到DDR中。
2106、CPU将指令置于运算加速器50中的取指存储器509中。
该步骤之后,CPU执行动作2107-2108,运算加速器50执行动作2109-2113。
2107、CPU接收中断。
该中断为运算加速器50进行矩阵乘法运算得到计算结果,并将计算结果写入DDR后,向CPU发送的中断,用于使得CPU处理计算结果。
2108、CPU处理中断。
若还有输入数据则返回步骤2104,若无输入数据则结束。
2109、运算加速器50读取取指存储器509中的指令。
2110、运算加速器50启动任务执行。
2111、运算加速器50根据指令执行矩阵乘法运算。
2112、运算加速器50将计算结果写入DDR。
2113、运算加速器50向CPU发送中断。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,简称DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,简称SSD))等。
尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (32)

1.一种运算加速装置,其特征在于,包括:外部存储器和运算加速器,
所述运算加速器,用于:
从所述外部存储器中获取Q*R矩阵和R*T矩阵;
将所述Q*R矩阵和所述R*T矩阵分别填充为M*N矩阵和N*K矩阵,其中,Q小于M,R小于N,T小于K,且Q、M、R、N、T和K均为正整数;
在一个时钟周期内对所述M*N矩阵和所述N*K矩阵进行乘法运算。
2.根据权利要求1所述的运算加速装置,其特征在于,所述运算加速器包括运算电路,所述运算电路包括M个运算组,每个运算组中包括K个运算块,每个运算块包括N个运算单元,每个运算单元设有两路输入,分别用于将两路输入的数据进行相乘。
3.根据权利要求2所述的运算加速装置,其特征在于,每个运算组获取所述M*N矩阵的M个行向量中一个行向量,且每个运算组获取的行向量不同;每个运算组中K个运算块加载的行向量相同。
4.根据权利要求3所述的运算加速装置,其特征在于,每个运算组中K个运算块分别加载所述N*K矩阵的K个列向量中一个列向量。
5.根据权利要求2-4任一所述的运算加速装置,其特征在于,所述运算加速器还包括控制器,所述控制器用于依据指令控制所述运算电路完成所述乘法运算。
6.根据权利要求5所述的运算加速装置,其特征在于,所述运算加速器还包括与所述控制器连接的取指存储器和总线接口单元,
所述取指存储器,用于存储所述控制器使用的指令,且所述存储控制器使用的指令通过所述总线接口单元从所述外部存储器中获取。
7.根据权利要求1-6任一所述的运算加速装置,其特征在于,还包括:
中央处理器CPU,用于为所述运算加速器分配计算任务。
8.根据权利要求1-7任一所述的运算加速装置,其特征在于,所述填充是指在矩阵的周围填充0元素。
9.根据权利要求1-8任一所述的运算加速装置,其特征在于,M=N=K。
10.一种运算加速装置,其特征在于,包括:外部存储器和运算加速器,
所述运算加速器用于:
从所述外部存储器中获取Q*R矩阵和R*T矩阵;
将所述Q*R矩阵和所述R*T矩阵分别切割为M*N矩阵和N*K矩阵,其中,Q大于M,R大于N,T大于K,且Q、M、R、N、T和K均为正整数;
在一个时钟周期内对所述M*N矩阵和所述N*K矩阵进行乘法运算。
11.根据权利要求10所述的运算加速装置,其特征在于,所述运算加速器包括运算电路,所述运算电路包括M个运算组,每个运算组中包括K个运算块,每个运算块包括N个运算单元,每个运算单元设有两路输入,分别用于将两路输入的数据进行相乘。
12.根据权利要求11所述的运算加速装置,其特征在于,每个运算组获取所述M*N矩阵的M个行向量中一个行向量,且每个运算组获取的行向量不同;每个运算组中K个运算块加载的行向量相同。
13.根据权利要求12所述的运算加速装置,其特征在于,每个运算组中K个运算块分别加载所述N*K矩阵的K个列向量中一个列向量。
14.根据权利要求11-13任一所述的运算加速装置,其特征在于,所述运算加速器还包括控制器,所述控制器用于依据指令控制所述运算电路完成所述乘法运算。
15.根据权利要求14所述的运算加速装置,其特征在于,所述运算加速器还包括与所述控制器连接的取指存储器和总线接口单元,
所述取指存储器,用于存储所述控制器使用的指令,且所述存储控制器使用的指令通过所述总线接口单元从所述外部存储器中获取。
16.根据权利要求10-15任一所述的运算加速装置,其特征在于,还包括:
中央处理器CPU,用于为所述运算加速器分配计算任务。
17.根据权利要求10-16任一所述的运算加速装置,其特征在于,所述Q*R矩阵的行数为M的倍数、列数为N的倍数,所述R*T矩阵的行数为N的倍数、列数为K的倍数。
18.根据权利要求10-17任一所述的运算加速装置,其特征在于,所述Q*R矩阵和所述R*T矩阵为经过填充所形成的矩阵。
19.根据权利要求18所述的运算加速装置,其特征在于,所述填充是指在矩阵的周围填充0元素。
20.根据权利要求10-19任一所述的运算加速装置,其特征在于,M=N=K。
21.一种运算方法,其特征在于,包括:
运算加速器获取Q*R矩阵和R*T矩阵;
所述运算加速器将所述Q*R矩阵和所述R*T矩阵分别填充为M*N矩阵和N*K矩阵,其中,Q小于M,R小于N,T小于K,且Q、M、R、N、T和K均为正整数;
所述运算加速器在一个时钟周期内对所述M*N矩阵和所述N*K矩阵进行乘法运算。
22.根据权利要求21所述的运算方法,其特征在于,所述运算加速器包括运算电路,所述运算电路包括M个运算组,每个运算组中包括K个运算块,每个运算块包括N个运算单元,每个运算单元设有两路输入,分别用于将两路输入的数据进行相乘,
所述运算加速器在一个时钟周期内对所述M*N矩阵和所述N*K矩阵进行乘法运算包括:
每个运算组获取所述M*N矩阵的M个行向量中一个行向量,且每个运算组获取的行向量不同,每个运算组中K个运算块加载的行向量相同;
每个运算组中K个运算块分别加载所述N*K矩阵的K个列向量中一个列向量。
23.根据权利要求22所述的运算方法,其特征在于,包括:
所述运算加速器从外部存储器中获取指令以控制所述运算电路完成所述乘法运算。
24.根据权利要求21-23任一所述的运算方法,其特征在于,所述填充是指在矩阵的周围填充0元素。
25.根据权利要求21-24任一所述的运算方法,其特征在于,M=N=K。
26.一种运算方法,其特征在于,包括:
运算加速器获取Q*R矩阵和R*T矩阵;
所述运算加速器将所述Q*R矩阵和所述R*T分别切割为M*N矩阵和N*K矩阵,其中,Q大于M,R大于N,T大于K,且Q、M、R、N、T和K均为正整数;
所述运算加速器在一个时钟周期内对所述M*N矩阵和所述N*K矩阵进行乘法运算。
27.根据权利要求26所述的运算方法,其特征在于,所述运算加速器包括运算电路,所述运算电路包括M个运算组,每个运算组中包括K个运算块,每个运算块包括N个运算单元,每个运算单元设有两路输入,分别用于将两路输入的数据进行相乘,
所述运算加速器在一个时钟周期内对所述M*N矩阵和所述N*K矩阵进行乘法运算包括:
每个运算组获取所述M*N矩阵的M个行向量中一个行向量,且每个运算组获取的行向量不同,每个运算组中K个运算块加载的行向量相同;
每个运算组中K个运算块分别加载所述N*K矩阵的K个列向量中一个列向量。
28.根据权利要求27所述的运算方法,其特征在于,包括:
所述运算加速器从外部存储器中获取指令以控制所述运算电路完成所述乘法运算。
29.根据权利要求26-28任一所述的运算方法,其特征在于,所述Q*R矩阵的行数为M的倍数、列数为N的倍数,所述R*T矩阵的行数为N的倍数、列数为K的倍数。
30.根据权利要求26-29任一所述的运算方法,其特征在于,所述Q*R矩阵和所述R*T矩阵为经过填充所形成的矩阵。
31.根据权利要求30所述的运算方法,其特征在于,所述填充是指在矩阵的周围填充0元素。
32.根据权利要求26-31任一所述的运算方法,其特征在于,M=N=K。
CN202010992871.1A 2017-07-07 2017-07-07 运算加速器 Pending CN112214727A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010992871.1A CN112214727A (zh) 2017-07-07 2017-07-07 运算加速器

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010992871.1A CN112214727A (zh) 2017-07-07 2017-07-07 运算加速器
CN201710553286.XA CN109213962B (zh) 2017-07-07 2017-07-07 运算加速器

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201710553286.XA Division CN109213962B (zh) 2017-07-07 2017-07-07 运算加速器

Publications (1)

Publication Number Publication Date
CN112214727A true CN112214727A (zh) 2021-01-12

Family

ID=64949706

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201710553286.XA Active CN109213962B (zh) 2017-07-07 2017-07-07 运算加速器
CN202010992871.1A Pending CN112214727A (zh) 2017-07-07 2017-07-07 运算加速器
CN202010991817.5A Active CN112214726B (zh) 2017-07-07 2017-07-07 运算加速器

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201710553286.XA Active CN109213962B (zh) 2017-07-07 2017-07-07 运算加速器

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202010991817.5A Active CN112214726B (zh) 2017-07-07 2017-07-07 运算加速器

Country Status (9)

Country Link
US (2) US11321423B2 (zh)
EP (1) EP3637281A4 (zh)
JP (1) JP7016942B2 (zh)
KR (1) KR102316670B1 (zh)
CN (3) CN109213962B (zh)
BR (1) BR112020000167B1 (zh)
CA (1) CA3069185C (zh)
SG (1) SG11202000140QA (zh)
WO (1) WO2019007095A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112966729A (zh) * 2021-02-26 2021-06-15 成都商汤科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
CN117574036A (zh) * 2024-01-16 2024-02-20 北京壁仞科技开发有限公司 运算装置、操作方法和机器可读存储介质

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111201525A (zh) * 2017-10-18 2020-05-26 三菱电机株式会社 运算电路以及运算方法
CN109992743B (zh) 2017-12-29 2020-06-16 华为技术有限公司 矩阵乘法器
US11620130B2 (en) 2018-02-13 2023-04-04 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN110147347B (zh) * 2019-03-18 2023-01-06 腾讯科技(深圳)有限公司 用于矩阵处理的芯片、矩阵处理方法、装置及存储介质
US11169957B2 (en) * 2019-03-31 2021-11-09 Intel Corporation Systems and methods for reconfigurable systolic arrays
CN110263324B (zh) * 2019-05-16 2021-02-12 华为技术有限公司 文本处理方法、模型训练方法和装置
US11334647B2 (en) * 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
CN110580324B (zh) * 2019-07-23 2020-11-17 珠海格力电器股份有限公司 图像矩阵运算方法、装置、计算机设备和存储介质
KR102372869B1 (ko) * 2019-07-31 2022-03-08 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
KR102327234B1 (ko) * 2019-10-02 2021-11-15 고려대학교 산학협력단 행렬 연산시 메모리 데이터 변환 방법 및 컴퓨터
CN110647984B (zh) * 2019-10-25 2022-07-12 芯盟科技有限公司 芯片、集成处理设备及其操作方法
CN111124360B (zh) * 2019-12-23 2022-08-16 中国电子科技集团公司第五十八研究所 一种可配置矩阵乘法的加速器
US11861369B2 (en) 2020-01-07 2024-01-02 SK Hynix Inc. Processing-in-memory (PIM) device
US11537323B2 (en) 2020-01-07 2022-12-27 SK Hynix Inc. Processing-in-memory (PIM) device
US11630991B2 (en) * 2020-02-04 2023-04-18 Apple Inc. Broadcasting mode of planar engine for neural processor
CN113536219B (zh) * 2020-04-21 2024-01-26 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
CN113536221B (zh) * 2020-04-21 2023-12-15 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
CN113536220A (zh) * 2020-04-21 2021-10-22 中科寒武纪科技股份有限公司 运算方法、处理器及相关产品
US20230169144A1 (en) * 2020-04-21 2023-06-01 Cambricon (Xi'an) Semiconductor Co., Ltd. Operation method, processor, and related product
CN113836481A (zh) * 2020-06-24 2021-12-24 北京希姆计算科技有限公司 矩阵计算电路、方法、电子设备及计算机可读存储介质
US20220051086A1 (en) * 2020-08-17 2022-02-17 Alibaba Group Holding Limited Vector accelerator for artificial intelligence and machine learning
CN114168895A (zh) * 2020-09-11 2022-03-11 北京希姆计算科技有限公司 矩阵计算电路、方法、电子设备及计算机可读存储介质
CN112632464B (zh) * 2020-12-28 2022-11-29 上海壁仞智能科技有限公司 用于处理数据的处理装置
KR20220101519A (ko) 2021-01-11 2022-07-19 에스케이하이닉스 주식회사 엘리먼트-와이즈 곱셈을 위한 프로세싱-인-메모리 장치
US20220261456A1 (en) * 2021-01-14 2022-08-18 Microsoft Technology Licensing, Llc Computing partial matrices at hardware accelerator
US11544213B2 (en) 2021-03-04 2023-01-03 Samsung Electronics Co., Ltd. Neural processor
CN113110822A (zh) * 2021-04-20 2021-07-13 安徽芯纪元科技有限公司 一种可配置矩阵乘法装置及算法
CN113918120A (zh) * 2021-10-19 2022-01-11 Oppo广东移动通信有限公司 计算装置、神经网络处理设备、芯片及处理数据的方法
CN115437602A (zh) * 2021-10-20 2022-12-06 中科寒武纪科技股份有限公司 任意精度计算加速器、集成电路装置、板卡及方法
CN115860080B (zh) * 2023-02-15 2023-05-09 苏州浪潮智能科技有限公司 计算核、加速器、计算方法、装置、设备、介质及系统
CN116795432B (zh) * 2023-08-18 2023-12-05 腾讯科技(深圳)有限公司 运算指令的执行方法、装置、电路、处理器及设备
CN117093816B (zh) * 2023-10-19 2024-01-19 上海登临科技有限公司 矩阵乘运算方法、装置和电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5170370A (en) * 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US20040028148A1 (en) * 1999-04-06 2004-02-12 Dowling Eric Morgan Reduced complexity multicarrier precoder
US20080250094A1 (en) * 2007-04-09 2008-10-09 Hari Chakravarthula Efficient implementations of kernel computations
JP2009245381A (ja) * 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
CN105589677A (zh) * 2014-11-17 2016-05-18 沈阳高精数控智能技术股份有限公司 一种基于fpga的脉动结构矩阵乘法器及其实现方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6131308A (ja) 1984-07-20 1986-02-13 Hitachi Chem Co Ltd 黒鉛層間化合物の製造法
JPS61150067A (ja) * 1984-12-25 1986-07-08 Matsushita Electric Ind Co Ltd 演算装置
JPH0748203B2 (ja) * 1988-06-17 1995-05-24 三菱電機株式会社 3次元デバイスを用いた正方行列乗算器
US5274832A (en) * 1990-10-04 1993-12-28 National Semiconductor Corporation Systolic array for multidimensional matrix computations
JPH05324700A (ja) * 1992-05-19 1993-12-07 N T T Data Tsushin Kk 行列乗算装置
US6167502A (en) * 1997-10-10 2000-12-26 Billions Of Operations Per Second, Inc. Method and apparatus for manifold array processing
US8051124B2 (en) * 2007-07-19 2011-11-01 Itt Manufacturing Enterprises, Inc. High speed and efficient matrix multiplication hardware module
WO2011156247A2 (en) * 2010-06-11 2011-12-15 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
CN101980182A (zh) * 2010-10-15 2011-02-23 清华大学 基于矩阵运算的并行计算方法
CN102662623A (zh) * 2012-04-28 2012-09-12 电子科技大学 基于单fpga的并行矩阵乘法器及其实现方法
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
CN104391820B (zh) * 2014-11-25 2017-06-23 清华大学 基于fpga的通用浮点矩阵处理器硬件结构
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
CN104572011B (zh) * 2014-12-22 2018-07-31 上海交通大学 基于fpga的通用矩阵定点乘法器及其计算方法
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
CN104899182B (zh) * 2015-06-09 2017-10-31 中国人民解放军国防科学技术大学 一种支持可变分块的矩阵乘加速方法
CN106445471B (zh) * 2016-10-13 2018-06-01 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法
US10394929B2 (en) * 2016-12-20 2019-08-27 Mediatek, Inc. Adaptive execution engine for convolution computing systems
EP3812900B1 (en) * 2016-12-31 2023-11-29 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US11157801B2 (en) * 2017-02-28 2021-10-26 Microsoft Technology Licensing, Llc Neural network processing with the neural network model pinned to on-chip memories of hardware nodes

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5170370A (en) * 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US20040028148A1 (en) * 1999-04-06 2004-02-12 Dowling Eric Morgan Reduced complexity multicarrier precoder
US20080250094A1 (en) * 2007-04-09 2008-10-09 Hari Chakravarthula Efficient implementations of kernel computations
JP2009245381A (ja) * 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
CN105589677A (zh) * 2014-11-17 2016-05-18 沈阳高精数控智能技术股份有限公司 一种基于fpga的脉动结构矩阵乘法器及其实现方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112966729A (zh) * 2021-02-26 2021-06-15 成都商汤科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
CN112966729B (zh) * 2021-02-26 2023-01-31 成都商汤科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
CN117574036A (zh) * 2024-01-16 2024-02-20 北京壁仞科技开发有限公司 运算装置、操作方法和机器可读存储介质
CN117574036B (zh) * 2024-01-16 2024-04-12 北京壁仞科技开发有限公司 运算装置、操作方法和机器可读存储介质

Also Published As

Publication number Publication date
CN109213962A (zh) 2019-01-15
SG11202000140QA (en) 2020-02-27
KR102316670B1 (ko) 2021-10-22
CA3069185A1 (en) 2019-01-10
JP7016942B2 (ja) 2022-02-07
US20200142949A1 (en) 2020-05-07
KR20200019736A (ko) 2020-02-24
BR112020000167B1 (pt) 2022-01-25
CN112214726A (zh) 2021-01-12
EP3637281A1 (en) 2020-04-15
US11720646B2 (en) 2023-08-08
WO2019007095A1 (zh) 2019-01-10
EP3637281A4 (en) 2020-07-08
US20220327181A1 (en) 2022-10-13
US11321423B2 (en) 2022-05-03
JP2020526830A (ja) 2020-08-31
CA3069185C (en) 2023-07-18
BR112020000167A2 (pt) 2020-07-07
CN112214726B (zh) 2024-05-03
CN109213962B (zh) 2020-10-09

Similar Documents

Publication Publication Date Title
CN109213962B (zh) 运算加速器
KR102443546B1 (ko) 행렬 곱셈기
US10768894B2 (en) Processor, information processing apparatus and operation method for processor
CN111915001B (zh) 卷积计算引擎、人工智能芯片以及数据处理方法
CN110415157B (zh) 一种矩阵乘法的计算方法及装置
JP6880160B2 (ja) 計算装置と計算方法
CN111767986A (zh) 一种基于神经网络的运算方法及装置
CN114995782B (zh) 数据处理方法、装置、设备和可读存储介质
WO2023065983A1 (zh) 计算装置、神经网络处理设备、芯片及处理数据的方法
CN111814957B (zh) 神经网络运算方法及相关设备
KR20200097396A (ko) 메모리 장치 및 이를 이용한 컴퓨팅 장치
WO2022007597A1 (zh) 矩阵运算的方法和加速器
CN110929854B (zh) 一种数据处理方法、装置及硬件加速器
JP2023513608A (ja) アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム
CN111832714A (zh) 运算方法及装置
JP7482636B2 (ja) メモリ装置およびそれを用いたコンピューティング装置
CN118012628A (zh) 一种数据处理方法、装置和存储介质
CN117055800A (zh) 数据存储方法及装置、计算机可读介质和电子设备
CN114936636A (zh) 一种基于fpga的通用型轻量级卷积神经网络加速方法
CN116862750A (zh) 电力矩阵lu分解加速方法、装置、设备及存储介质
CN113642722A (zh) 用于卷积计算的芯片及其控制方法、电子装置
CN111583382A (zh) 数据计算方法、装置、计算机设备和存储介质
CN111291884A (zh) 神经网络剪枝方法、装置、电子设备及计算机可读介质
KR20190120509A (ko) 부하분산 처리장치 및 그 방법

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