流水线结构神经网络矩阵运算架构及方法与流程

文档序号:16529106发布日期:2019-01-05 10:35阅读:305来源:国知局
流水线结构神经网络矩阵运算架构及方法与流程

本发明涉及数字电路集成设计技术领域,具体涉及一种流水线结构神经网络矩阵运算架构及方法。



背景技术:

对于一组输入数据,如语音信号的特征向量或者二维图像数据,通过神经网络模型的计算能够得出该语音信号或二维图像数据所对应语素信息或图像对应的标注信息,从数据输入到利用神经网络模型计算最后产生输出结果往往需要消耗大量的计算资源或者存储资源。

而我们知道,一块集成电路性能的好坏主要从其处理数据的速度、性能稳定性、材料成本以及占用空间大小等方面进行评价,数据的处理方式关系到运算的速度等多个方面的性能,就目前市场上的芯片设计师在处理算法上想方设法进行各种优化,以便达到高效、节约成本、提高产品性能等目的,例如,现有的神经网络矩阵运算架构通常具有以下缺点:

1、矩阵运算的维度是固定的,不能自适应地改变运算规模;

2、通常是中央处理单元cpu经由占用内存,如ram来进行计算,是一种软件操作运算,其速度取决于cpu的运算频率,规模大时会消耗大量内存空间,计算效率非常低;

3、通过dsp处理器来实现矩阵向量乘法操作,这样的操作往往是串行执行,执行效率低耗时较长,输入向量和权重矩阵式预先存在ram空间,计算过程中的中间变量也需要输出,进一步增加了存储以及宽带开销。



技术实现要素:

本发明的目的在于提供一种流水线结构神经网络矩阵运算架构及方法,利用数字电路实现包含有阵列排布的乘累加mac单元以及配合设置的计数器、移位器实现的加速器,结合循环原理将数据循环输入,实现如流水线结构按照原始要求进行叠加、归位累加,使得矩阵与向量乘操作可以并行执行,相对于cpu以及dsp的处理方式而言,大大提升了处理速度,且中间结果可以保存在本地,不消耗额外的存储开销;通过控制器的辅助,实现动态配置参与乘加运算的矩阵和向量的维度、计数器脉冲的数量、移位器的移位深度。

为了达到上述目的,本发明通过以下技术方案实现:

一种流水线结构神经网络矩阵运算架构,其特征是,包含:

加速器,通过数字电路实现,用于对输入向量a和输入矩阵b执行流水线式乘加操作以得到a*b=d的结果,其中,a为一个维度1*m的列向量,b的维度为m*n,d为1行n列的向量矩阵输出结果;所述的流水线式乘加操作指,将输入矩阵b分为多个不同列块,将输入向量a与输入矩阵b的第一列块进行乘和累加并将结果输出,再继续执行输入向量a与输入矩阵b中下一列块的乘和累加并将结果输出,如此反复迭代,直至输入向量a与输入矩阵b中最后一列块也完成了乘和累加并且结果也输出之后,即得到输入向量a与输入矩阵b的相乘结果d。

上述的流水线结构神经网络矩阵运算架构,其中,所述的加速器包含:

定点乘累加模块,用于对输入向量a与输入矩阵b执行流水式乘加操作;该定点乘累加模块包含若干并行运行的定点乘加器,每个定点乘累加器的两个输入端依次输入向量a的1行m列的各个元素以及输入矩阵b对应列块中对应列里的各个元素,以分别同步地执行对输入向量a与输入矩阵b的对应列块中各对应列的乘和累加,并且计算完成后在计数器reset脉冲对每个定点乘加器的rc复位脉冲使能端的控制下进行乘累加结果的输出和归零,再执行输入向量a与输入矩阵b中下一个对应列块的乘和累加;

计数器,用于在定点乘加器每执行完一次输入向量a和输入矩阵b的对应列块的乘和累加后输出一个reset脉冲,该脉冲经过第一寄存器链产生流水线复位信号给每个定点乘加器的rc复位脉冲使能端,以及在定点乘累加模块每完成一次输入向量a与输入矩阵b的流水式乘加操作以后控制自身脉冲的清零;

移位器,用于控制输入向量a列数的移位深度;

第一寄存器链,计数器通过该第一寄存器链对每个定点乘加器的rc复位脉冲使能端进行脉冲控制;

第二寄存器链,输入向量a的1行m列元素连续地通过该第二寄存器链输入至每个定点乘加器;

若干第三寄存器链,输入矩阵b对应列块中的对应列元素连续地通过对应的第三寄存器链输入至对应的定点乘加器。

上述的流水线结构神经网络矩阵运算架构,其中,还包含:

控制器,连接加速器,用于动态配置输入向量a的列数和输入矩阵b的行数m、输入矩阵b的列数n、以及加速器中计数器脉冲的数量,以便移位器控制对输入向量a列数的移位深度,和在完成一次输入向量a与输入矩阵b的对应列块的乘加操作以后计数器对rc复位脉冲使能端的控制,以及在完成一次输入向量a与输入矩阵b的流水式乘加操作以后计数器控制其脉冲的清零。

上述的流水线结构神经网络矩阵运算架构,其中:

所述的控制器通过cpu实现。

上述的流水线结构神经网络矩阵运算架构,其中:

定点乘加器以及第三寄存器链的数量分别与输入矩阵b每个列块所包含的列数相同。

一种数字电路实现的流水线结构神经网络矩阵运算的方法,其特征是,包含:

通过数字电路实现对输入向量a和输入矩阵b执行流水线式乘加操作以得到a*b=d的结果,其中,a为一个维度1*m的列向量,b的维度为m*n,d为1行n列的向量矩阵输出结果;

所述的流水线式乘加操作指,将输入矩阵b分为多个不同列块,将输入向量a与输入矩阵b的第一列块进行乘和累加并将结果输出,再继续执行输入向量a与输入矩阵b中下一列块的乘和累加并将结果输出,如此反复迭代,直至输入向量a与输入矩阵b中最后一列块也完成了乘和累加并且结果也输出之后,即得到输入向量a与输入矩阵b的相乘结果d。

本发明与现有技术相比具有以下优点:通过高速矩阵向量乘加等操作的硬件加速实现快速的神经网络加速能力,使得数据输入以及模型加载之后通过上述运算构架实时计算出结果,以大程度的提升神经网络运算的速度和效率,进一步加速图像或语音识别过程。

附图说明

图1为本发明的结构框图;

图2为本发明中加速器的结构框图;

图3为本发明的实施例中加速器的具体结构框图。

具体实施方式

以下结合附图,通过详细说明一个较佳的具体实施例,对本发明做进一步阐述。

如图1所示,本发明提出了一种流水线结构神经网络矩阵运算架构,其包含:

加速器,通过数字电路实现,用于对输入向量a和输入矩阵b执行流水线式乘加操作以得到a*b=d的结果,其中,a为一个维度1*m的列向量,b的维度为m*n,d为1行n列的向量矩阵输出结果;所述的流水线式乘加操作指,将输入矩阵b分为多个不同列块,将输入向量a与输入矩阵b的第一列块进行乘和累加并将结果输出,再继续执行输入向量a与输入矩阵b中下一列块的乘和累加并将结果输出,如此反复迭代,直至输入向量a与输入矩阵b中最后一列块也完成了乘和累加并且结果也输出之后,即得到输入向量a与输入矩阵b的相乘结果d。

如图2所示,具体的,所述的加速器包含:

定点乘累加模块,用于对输入向量a与输入矩阵b执行流水式乘加操作;该定点乘累加模块包含若干并行运行的定点乘加器,每个定点乘累加器的两个输入端依次输入向量a的1行m列的各个元素以及输入矩阵b对应列块中对应列里的各个元素,以分别同步地执行对输入向量a与输入矩阵b的对应列块中各对应列的乘和累加(图中,i表示矩阵b中的第i列,b[:][i]表示矩阵b中第i列的所有元素,一次迭代所进行乘加操作的列数为x+1),并且计算完成后在计数器reset脉冲对每个定点乘加器的rc复位脉冲使能端的控制下进行乘累加结果的输出和归零,再执行输入向量a与输入矩阵b中下一个对应列块的乘和累加;

计数器(可以是循环计时器或定时器),用于在定点乘加器每执行完一次输入向量a和输入矩阵b的对应列块的乘和累加后输出一个reset脉冲,该脉冲经过第一寄存器链产生流水线复位信号给每个定点乘加器的rc复位脉冲使能端,在定点乘累加模块每完成一次输入向量a与输入矩阵b的流水式乘加操作以后控制自身脉冲的清零;

移位器,用于控制输入向量a列数的移位深度;

第一寄存器链,计数器通过该第一寄存器链对每个定点乘加器的rc复位脉冲使能端进行脉冲控制;

第二寄存器链,输入向量a的1行m列元素连续地通过该第二寄存器链输入至每个定点乘加器;

若干第三寄存器链,输入矩阵b对应列块中的对应列元素连续地通过对应的第三寄存器链输入至对应的定点乘加器。

所述的流水线结构神经网络矩阵运算架构还包含:

控制器,可以通过cpu来实现,其连接加速器,用于动态配置输入向量a的列数和输入矩阵b的行数m、输入矩阵b的列数n、以及加速器中计数器脉冲的数量,以便移位器控制对输入向量a列数的移位深度,和在完成一次输入向量a与输入矩阵b的对应列块的乘加操作以后计数器对rc复位脉冲使能端的控制,以及在完成一次输入向量a与输入矩阵b的流水式乘加操作以后计数器控制其脉冲的清零。

本实施例中,定点乘加器以及第三寄存器链的数量分别与输入矩阵b每个列块所包含的列数相同。

具体的,可以更进一步拓展更大的并行度,例如,增加定点乘加器的数量,则可以一次计算更多的列,进而降低迭代的次数。

以下结合一个最佳实施例,来进一步说明本发明的运算架构的实现过程:

如图3所示,该结构可以一次计算32列乘加操作,示例中是两个矩阵分别为a:1*m和b:m*n,m、n均可以配置以适应不同的神经网络规模在示例中计数器(timer)是一个循环计数器或者定时器,每完成m次乘加操作就会输出一个reset脉冲进行累加结果输出和归零,图中的mac是一个16位的定点乘加器,一共有32个,即本实施例中x=31,一次迭代所进行乘加操作的列数为32列,mac每进行一次操作完成一次乘和一次累加操作,运算公式为c=c+a*b,其中a为输入向量a中的某一个值,b为输入矩阵b中的某一个值,c为累加的结果,rc为复位脉冲使能。整个矩阵运算过程是输入向量a将他的1行m列元素连续地输入至第二寄存器链(registerchain),与此同时,输入矩阵b将他的m行n列中的每32列作为一个单位进行输入,当输入矩阵b输入完成对应这32列的所有m行元素之后,就完成了d[1:32]=a[1:m]*b[1:m][1:32]的运算,然后再进行下一次的迭代,每次迭代都需要输入输入向量a的所有元素,但是会选择b的不同列块,比如第一次迭代选择了b的第1至第32列,第二次迭代选择b的第33至第64列。迭代结束后将结果输出的同时又开始重复刚才前面的累加操作,不同的只是累加的时候b的元素不同,累加规则还是和原来一模一样;在进行完最后一轮第32次的累加后得到一个新的矩阵,它的排布是1*n这样的一个数组,此时计数器开始一次reset清零,每一次的清零都意味着完成了两个矩阵的运算。如果还要开始新的矩阵运算就还是和上一次一样开始进行同样的重复操作。这种矩阵乘的优势在于他可以有效的减少一些其他cpu和dsp参与同样运算需要的能耗延时成本;首先它有效的避免了比如说像cpu的数据处理时需要首先读取数据、解码,分析与执行,最后输出结果,而这种矩阵乘的运算器在进行数据的处理时可以直接将数据输入寄存器链中并按照节拍进行运算,不需要解码;第三个优点是这种类型的矩阵可以进行随机设计,如果要运算的矩阵比较大,可以设计寄存器链为32位或者64位,但如果为了节省空间和硬件电路的材料成本,可以将电路设计为进行16位定点运算的矩阵运算电路,只不过在运算的过程中需要进行更多次的循环运算;第四这种矩阵运算硬件电路提高了电路中的加法器的使用效率,节约材料成本。

本发明还提出了一种数字电路实现的流水线结构神经网络矩阵运算的方法,其包含:

通过数字电路实现对输入向量a和输入矩阵b执行流水线式乘加操作以得到a*b=d的结果,其中,a为一个维度1*m的列向量,b的维度为m*n,d为1行n列的向量矩阵输出结果;

所述的流水线式乘加操作指,将输入矩阵b分为多个不同列块,将输入向量a与输入矩阵b的第一列块进行乘和累加并将结果输出,再继续执行输入向量a与输入矩阵b中下一列块的乘和累加并将结果输出,如此反复迭代,直至输入向量a与输入矩阵b中最后一列块也完成了乘和累加并且结果也输出之后,即得到输入向量a与输入矩阵b的相乘结果d。

综上所述,本发明利用大阵列的定点乘加器和计数器的整合排布,利用循环原理将数据进行循环输入,有如流水线结构按照原始要求进行叠加、归位累加,将一个大型矩阵向量操作拆分成小的矩阵向量维度进行操作,依次可以自定义做x+1个并行的向量乘,使得向量矩阵的乘操作可以并行执行,相对于传统的cpu和dsp处理方式而言,大大提高了处理速度,且中间结果可以保存在本地,不消耗额外的存储开销,比如向量a与矩阵b任何一列的m次乘加的结果保留在对应的乘加器中即可,无需进行数据搬移;对于控制器来说,可以顺序地访问输入和输出数据,通过移位寄存器将需要计算的数据依次移入,对于控制器来说只需要预先将输入向量a的数据读入,同时分批读入输入矩阵b的每列数据,当所有数据都读入完成,即完成了一次向量矩阵乘操作。

尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1