CN108491359B - 子矩阵运算装置及方法 - Google Patents
子矩阵运算装置及方法 Download PDFInfo
- Publication number
- CN108491359B CN108491359B CN201810236769.1A CN201810236769A CN108491359B CN 108491359 B CN108491359 B CN 108491359B CN 201810236769 A CN201810236769 A CN 201810236769A CN 108491359 B CN108491359 B CN 108491359B
- Authority
- CN
- China
- Prior art keywords
- sub
- matrix
- data
- instruction
- submatrix
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种子矩阵运算装置及方法,上述方法包括如下步骤:获取子矩阵运算指令,子矩阵运算指令包括张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令中的至少一种;根据子矩阵运算指令分别从寄存器单元中获取第一子矩阵信息和第二子矩阵信息;根据第一子矩阵信息从存储单元中获取第一子矩阵数据,根据第二子矩阵信息从存储单元中获取第二子矩阵数据;根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果。本发明的子矩阵运算装置及方法,使得子矩阵运算过程中可以更加灵活有效地支持不同宽度的数据,提高了张量运算及子矩阵加减乘除运算等运算的运算效率。
Description
本申请是申请日为2016年04月22日、申请号为201610258546.6、专利名称为“一种子矩阵运算装置及方法”的分案申请。
技术领域
本发明属于计算机领域,尤其涉及一种子矩阵运算装置及方法。
背景技术
当前计算机领域有越来越多的算法涉及到矩阵运算,包括人工神经网络算法和图形的渲染算法。与此同时,作为矩阵运算中的一个重要组成部分,子矩阵运算也越来越频繁的出现在各种计算任务中。所以对于那些面向解决矩阵运算问题的方案,必须同时考虑子矩阵运算实现的效率和难度。
在现有技术中一种进行子矩阵运算的已知方案是使用通用处理器,该方法通过通用寄存器堆和通用功能部件来执行通用指令,从而执行子矩阵运算。然而,该方法的缺点之一是单个通用处理器多用于标量计算,在进行子矩阵运算时运算性能较低。而使用多个通用处理器并行执行时,通用处理器之间的相互通讯又有可能成为性能瓶颈,同时,实现子矩阵运算的代码量也大于正常的矩阵运算。
在另一种现有技术中,使用图形处理器(GPU)来进行子矩阵计算,其中,通过使用通用寄存器堆和通用流处理单元执行通用SIMD(Single Instruction Multiple Data,单指令多数据流)指令来进行子矩阵运算。然而,上述方案中,GPU片上缓存太小,在进行大规模子矩阵运算时需要不断进行片外数据搬运,片外带宽成为了主要性能瓶颈。
在另一种现有技术中,使用专门定制的矩阵运算装置来进行子矩阵计算,其中,使用定制的寄存器堆和定制的处理单元进行子矩阵运算。然而,目前已有的专用矩阵运算装置受限于寄存器堆,子矩阵数据通常具有特定的规模,不能够灵活地支持不同长度的子矩阵运算。
综上所述,现有的不管是片上多核通用处理器、片间互联通用处理器(单核或多核)、还是片间互联,图形处理器都无法进行高效的子矩阵运算,并且这些现有技术在处理子矩阵运算问题时存在着代码量大,受限于片间通讯,片上缓存不够,支持的子矩阵规模不够灵活等问题。
发明内容
基于此,本发明提供一种子矩阵运算装置及方法,能配合子矩阵运算指令集,能够满足不同规模子矩阵数据的运算过程,高效地实现张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令及子矩阵加减乘除等运算。
一种子矩阵运算方法,所述方法包括:
获取子矩阵运算指令,其中,所述子矩阵运算指令包括张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令中的至少一种;
根据所述子矩阵运算指令分别从寄存器单元中获取第一子矩阵信息和第二子矩阵信息;
根据所述第一子矩阵信息从存储单元中获取第一子矩阵数据,根据所述第二子矩阵信息从所述存储单元中获取第二子矩阵数据;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果。
在其中一个实施例中,所述第一子矩阵信息包括所述第一子矩阵数据在所述存储单元中的起始地址、所述第一子矩阵数据的行宽、所述第一子矩阵数据的列宽以及所述第一子矩阵数据的行间隔,其中,所述第一子矩阵数据的行间隔是指所述第一子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;所述第二子矩阵信息包括向量地址及向量长度;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
将所述第一子矩阵数据作为被乘数,将所述第二子矩阵数据作为乘数进行子矩阵乘向量运算,获得子矩阵乘向量运算结果;
或者,将所述第一子矩阵数据作为乘数,将所述第二子矩阵数据作为被乘数进行向量乘子矩阵运算,获得向量乘子矩阵运算结果。
在其中一个实施例中,所述第一子矩阵信息和所述第二子矩阵信息分别包括对应子矩阵数据在所述存储单元中的起始地址、对应子矩阵数据的行宽、对应子矩阵数据的列宽以及对应子矩阵数据的行间隔,其中,子矩阵数据的行间隔是指所述子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
根据所述第一子矩阵数据和所述第二子矩阵数据进行矩阵加法运算或减法运算。
在其中一个实施例中,所述第一子矩阵信息和所述第二子矩阵信息分别包括对应子矩阵数据在所述存储单元中的起始地址、对应子矩阵数据的行宽、对应子矩阵数据的列宽及对应子矩阵数据的行间隔,其中,所述子矩阵数据的行间隔是指所述子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
根据所述第一子矩阵数据和所述第二子矩阵数据进行对位乘法运算,获得子矩阵乘法运算结果。
在其中一个实施例中,所述第一子矩阵信息和所述第二子矩阵信息分别包括对应子矩阵数据在所述存储单元中的起始地址、对应子矩阵数据的行宽、对应子矩阵数据的列宽及对应子矩阵数据的行间隔,其中,所述子矩阵数据的行间隔是指所述子矩阵数据相邻两行之间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
根据所述第一子矩阵数据和所述第二子矩阵数据进行张量运算,获得张量运算结果。
在其中一个实施例中,所述子矩阵运算指令包括操作码和至少一个操作域,其中,所述操作码用于指示所述子矩阵运算指令的功能,操作域用于指示所述子矩阵运算指令的数据信息;
所述子矩阵运算指令的数据信息包括所述寄存器单元的编号,从而能够根据寄存器单元的编号访问对应的寄存器单元,获取所述第一子矩阵信息和所述第二子矩阵信息。
在其中一个实施例中,所述方法还包括如下步骤:
对获取的子矩阵运算指令进行译码;
判断所述子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将所述子矩阵运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再执行根据所述子矩阵运算指令分别从寄存器单元中获取第一子矩阵信息和所述第二子矩阵信息步骤。
本发明还提供了一种子矩阵运算装置,用于根据子矩阵运算指令从矩阵数据中获取子矩阵数据,并根据所述子矩阵数据执行子矩阵运算,所述装置包括:
存储单元,用于存储矩阵数据;
寄存器单元,用于存储子矩阵信息;
子矩阵运算单元,用于获取子矩阵运算指令,根据所述子矩阵运算指令分别从所述寄存器单元中获取第一子矩阵信息和第二子矩阵信息;根据所述第一子矩阵信息从所述存储单元中获取第一子矩阵数据,根据所述第二子矩阵信息从所述存储单元中获取第二子矩阵数据;并根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果;
其中,所述子矩阵运算指令包括张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令。
在其中一个实施例中,所述子矩阵运算指令为子矩阵乘向量指令或向量乘子矩阵运算指令;所述第一子矩阵信息包括第一子矩阵数据在所述存储单元中的起始地址、第一子矩阵数据的行宽、第一子矩阵数据的列宽及第一子矩阵数据的行间隔,其中,所述第一子矩阵数据的行间隔是指第一子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;所述第二子矩阵信息包括向量地址及向量长度。
在其中一个实施例中,所述子矩阵运算指令为张量运算指令、子矩阵加法指令、子矩阵减法指令或子矩阵对位乘法指令;
所述第一子矩阵信息和所述第二子矩阵信息分别包括对应子矩阵数据在所述存储单元中的起始地址、子矩阵数据的行宽、子矩阵数据的列宽、子矩阵数据的行间隔,其中,所述子矩阵数据的行间隔是指子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔。
在其中一个实施例中,所述装置还包括用于获取所述子矩阵运算指令,并将所述子矩阵运算指令进行处理的指令处理单元;所述指令处理单元包括:
取址模块,用于获取所述子矩阵运算指令;
译码模块,用于对获取的所述子矩阵运算指令进行译码;
指令队列,用于对译码后的所述子矩阵运算指令进行顺序存储;
依赖关系处理单元,用于在所述子矩阵运算单元获取所述子矩阵运算指令之前,判断所述子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将所述子矩阵运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再根据所述子矩阵运算指令分别获取第一子矩阵信息和第二子矩阵信息。
在其中一个实施例中,所述存储单元还用于存储子矩阵运算结果;
所述装置还包括输入输出单元,所述输入输出单元用于将矩阵数据存储至所述存储单元,所述输入输出单元还用于从所述存储单元中获取所述子矩阵运算结果。
在其中一个实施例中,所述存储单元为高速暂存存储器。
在其中一个实施例中,所述子矩阵运算单元包括子矩阵加法部件、子矩阵乘法部件、大小比较部件、非线性运算部件和子矩阵标量乘法部件,所述子矩阵加法部件、子矩阵乘法部件、大小比较部件、非线性运算部件和子矩阵标量乘法部件形成多流水级结构;
所述多流水级结构包括第一流水级、第二流水级和第三流水级,其中,所述子矩阵加法部件和子矩阵乘法部件处于第一流水级,大小比较部件处于第二流水级,非线性运算部件和子矩阵标量乘法部件处于第三流水级。
本发明提供的子矩阵运算方法及装置,可以根据子矩阵运算指令从寄存器单元中获取两个子矩阵信息,并分别根据两个子矩阵信息从存储单元中获取将参与子矩阵运算的两个子矩阵数据,且两个子矩阵数据可以具有不同的数据规模,然后可以根据获取的两个子矩阵数据进行子矩阵运算,获得子矩阵运算的结果,该子矩阵运算方法能够支持不同规模的子矩阵数据,提升包含大量矩阵计算任务的执行性能,同时提高了张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令及子矩阵加减乘除等运算的运算效率。进一步地,本发明中的卷积指令能够支持不同矩阵长度,使用灵活方便。
附图说明
图1是本申请一实施例提供的子矩阵运算装置的示意图;
图2是本申请一实施例提供的指令集格式示意图;
图3是本申请中一个子矩阵的示意图;
图4是本申请另一实施例提供的子矩阵运算装置的示意图;
图5是本申请实施例提供的子矩阵运算方法执行子矩阵乘子矩阵指令时的流程图;
图6是本申请实施例中矩阵数据和子矩阵数据的示意图;
图7是本申请实施例提供的子矩阵运算装置执行卷积神经网络运算的流程图。
具体实施方式
本申请实施例提供了一种子矩阵运算装置及方法,包括存储单元、寄存器单元和子矩阵运算单元,存储单元中存储有子矩阵数据,寄存器单元中存储有子矩阵信息,子矩阵运算单元可以根据子矩阵运算指令在寄存器单元中获取子矩阵信息,然后,根据该子矩阵信息在存储单元中获取相应的子矩阵数据,接着,根据获取的子矩阵数据进行子矩阵运算,得到子矩阵运算结果。本申请实施例的存储单元可以为高速暂存存储器,通过将参与计算的子矩阵数据暂存在高速暂存存储器上,使得子矩阵运算过程中可以更加灵活有效地支持不同宽度的数据,提升包含大量子矩阵计算任务的执行性能。其中高速暂存存储器可以通过各种不同存储器件,如静态RAM(SRAM)、动态RAM(DRAM)、增强动态RAM(EDRAM)、忆阻器、3D-DRAM和非易失存储等实现。
图1是本申请实施例提供的子矩阵运算装置的示意图,如图1所示,该子矩阵运算装置包括存储单元、寄存器单元和子矩阵运算单元。其中,存储单元用于存储矩阵数据;寄存器单元用于存储子矩阵信息,在具体应用中,可以由多个寄存器单元组成一个寄存器堆,每个寄存器单元存储有不同的子矩阵信息,需要说明书的是,子矩阵信息均为标量数据。可选地,子矩阵信息可以包括子矩阵数据在存储单元中的起始地址(start_addr)、子矩阵数据的行宽(iter1)、子矩阵数据的列宽(iter2)以及行间隔(stride1),其中,行间隔是指子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔。
如图3所示,矩阵数据实际在存储单元中是以一维的方式存储的,子矩阵的起始地址即图3中子矩阵左上角元素的地址,子矩阵的行宽即图3中子矩阵每一行元素的个数,子矩阵的列宽即图3中子矩阵每一列元素的个数,子矩阵的行间距即图3中子矩阵上一行最后一个元素到下一行第一个元素之间的地址间距。该子矩阵运算装置在实际读取子矩阵数据时,只需要从子矩阵数据在存储单元中的起始位置start_addr开始,每读取iter1个数据后跳过stride1个数据再读取iter1个数据,重复iter2次即可获得完整的子矩阵数据。这样,通过上述方式获得的子矩阵数据可以是规模不定的矩阵数据,即子矩阵数据的行宽、列宽以及行间隔中的一个或多个可以是不固定的。相对于现有技术中,子矩阵规模固定的运算装置,本申请实施例的装置获取的子矩阵运算装置,能够支持不同规模的子矩阵数据,提升了包含大量矩阵计算任务的执行性能。
子矩阵运算单元用于获取子矩阵运算指令,并根据该子矩阵运算指令从寄存器单元中获取子矩阵信息,然后,根据该子矩阵信息从存储单元中的矩阵数据中获取子矩阵数据,接着,根据获取的子矩阵数据进行子矩阵运算,得到子矩阵运算结果。可选地,该子矩阵运算可以包括卷积运算、张量运算、子矩阵乘向量运算、向量乘子矩阵运算、子矩阵对位乘法运算、子矩阵加法运算及子矩阵减法运算等以及子矩阵搬运运算等等。本申请实施例中,每个子矩阵运算可以通过子矩阵运算指令实现,且子矩阵运算指令具有特定的指令格式。
图2是本申请实施例提供的指令集格式示意图,如图2所示,指令集采用Load/Store结构,子矩阵运算单元不会对内存中的数据进行操作。子矩阵指令集采用超长指令集架构(Very Long Instruction Word),同时,指令集采用定长指令,使得子矩阵运算装置在上一条子矩阵运算指令的译码阶段就可以对下一条子矩阵运算指令进行取值。可选地,子矩阵运算指令可以包括操作码和多个操作域,其中,操作码用于指示该子矩阵运算指令的功能,操作域用于指示该子矩阵运算指令的数据信息,数据信息为寄存器单元的编号或者立即数,子矩阵运算单元可以根据寄存器单元的编号访问对应的寄存器单元,从而获取子矩阵信息。或者,子矩阵运算单元也可以直接将立即数作为子矩阵数据进行相应的子矩阵运算。
需要说明的是,针对不同功能的运算指令,子矩阵运算指令的操作码也不同,具体地,在本申请实施例提供的一套指令集中,包含有不同功能的子矩阵运算指令:
子矩阵乘向量指令(SMMV),根据该指令,装置从高速暂存存储器的指定起始地址,根据指令中子矩阵的行宽、列宽和行间距取出指定的子矩阵数据,同时取出向量数据,在子矩阵运算单元中进行矩阵乘向量的乘法运算,并将结果写回至高速暂存存储器的指定地址;值得说明的是,向量可以作为特殊形式的矩阵(只有一行元素的矩阵)存储于高速暂存存储器中。
向量乘子矩阵指令(VMSM),根据该指令,装置从高速暂存存储器的指定地址取出向量数据,同时根据指令中的子矩阵起始地址、子矩阵的行宽和列宽以及子矩阵的行间距取出指定的子矩阵,在矩阵单元中进行向量乘子矩阵的乘法运算,并将结果写回至高速暂存存储器的指定地址;值得说明的是,向量可以作为特殊形式的矩阵(只有一行元素的矩阵)存储于高速暂存存储器中。
子矩阵乘标量指令(SMMS),根据该指令,装置从高速暂存存储器的指定地址,根据指令中的子矩阵的行宽和列宽以及子矩阵的行间距,取出指定的子矩阵数据,从标量寄存器堆的指定地址中取出指定的标量数据,在子矩阵运算单元中进行子矩阵乘标量的运算,并将结果写回至高速暂存存储器的指定地址,需要说明的是,标量寄存器堆不仅存储有子矩阵的各种数据信息(包括起始地址、行宽、列宽和行间距),还存有标量数据本身。
张量运算指令(TENS),根据该指令,装置从高速暂存存储器取出指定的两块子矩阵数据,在子矩阵运算单元中对两子矩阵数据进行张量运算,并将计算结果写回至高速暂存存储器的指定地址。本领域技术人员可以理解的是,在一个坐标系下,张量是由若干个分量来表示,而在不同坐标系下的分量之间应满足一定的变换规则,如矩阵、多变量线性形式等。张量可以包括一阶张量、二阶张量及m阶张量(m表示张量的维度),各阶张量均可以采用矩阵进行表示。例如,一阶张量又称矢量或向量,可以采用1×n的行向量表示,其中,n表示向量的长度;二阶张量是有m2个数组组成,其中,m表示张量的维度。张量的基本运算可以包括张量的加减运算、张量的乘法运算及张量函数的求导运算等等。
子矩阵加法指令(SMA),根据该指令,装置从高速暂存存储器取出指定的两块子矩阵数据,在子矩阵运算单元中对两子矩阵数据进行加法运算,并将计算结果写回至高速暂存存储器的指定地址。
子矩阵减法指令(SMS),根据该指令,装置从高速暂存存储器取出指定的两块子矩阵数据,在子矩阵运算单元中对两子矩阵数据进行减法运算,并将计算结果写回至高速暂存存储器的指定地址。
子矩阵乘法指令(SMM),根据该指令,装置从高速暂存存储器取出指定的两块子矩阵数据,在子矩阵运算单元中对两子矩阵数据进行对位乘法运算,并将计算结果写回至高速暂存存储器的指定地址。本领域技术人员可以理解的是,也可以通过子矩阵乘法指令实现子矩阵对位相除运算,因此,该子矩阵运算装置还可以执行子矩阵除法运算。
卷积指令(CONV),根据该指令,实现用卷积核对矩阵进行卷积滤波。装置从高速暂存存储器取出指定的卷积核矩阵,从待卷积矩阵存储的起始地址开始,对当前位置下卷积核覆盖的子矩阵数据进行滤波,即在子矩阵运算单元中对卷积核和子矩阵进行对位乘法运算,并对得到的矩阵进行元素求和,得到当前位置的滤波结果,将结果写回至高速暂存存储器的指定地址。然后根据指令中给定的位移参数,在待卷积矩阵上移动至下一位置,重复上面的运算,直到移动至结束位置。
子矩阵搬运指令(SMMOVE),根据该指令,装置将高速暂存存储器中存储的指定子矩阵存至高速暂存存储器的另一处地址。
进一步,子矩阵运算装置还包括指令处理单元,用于获取子矩阵运算指令,并对该子矩阵运算指令进行处理后,提供给子矩阵运算单元。具体地,如图4所示,指令处理单元可以包括取指模块、译码模块、指令队列及依赖关系处理单元,其中,取指模块用于获取子矩阵运算指令,译码模块用于对获取的子矩阵运算指令进行译码,指令队列用于对译码后的子矩阵运算指令进行顺序存储,依赖关系处理单元用于在子矩阵运算单元获取子矩阵运算指令前,判断该子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将该子矩阵运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再将所述指令队列中的该子矩阵运算指令提供给所述子矩阵运算单元,否则,直接将该子矩阵运算指令提供给所述子矩阵运算单元。
进一步,存储单元还用于存储子矩阵运算结果,优选地,可采用高速暂存存储器作为存储单元。另外,本发明还包括输入输出单元,其与存储单元直接连接,输入输出单元用于将矩阵数据存储于存储单元,或者,从存储单元中获取子矩阵运算结果。
进一步,子矩阵运算单元还可以包括子矩阵加法部件、子矩阵乘法部件、大小比较部件、非线性运算部件和子矩阵标量乘法部件。进一步地,子矩阵运算单元为多流水级结构,多流水级结构包括第一流水级、第二流水级和第三流水级,其中,子矩阵加法部件和子矩阵乘法部件处于第一流水级,大小比较部件处于第二流水级,非线性运算部件和子矩阵标量乘法部件处于第三流水级。
本申请实施例还提供一种子矩阵运算方法,包括:
S1,存储矩阵数据;
S2,存储子矩阵信息;
S3,获取子矩阵运算指令,并根据该子矩阵运算指令获取子矩阵信息,然后,根据该子矩阵信息从存储的矩阵数据中获取子矩阵数据,接着,根据获取的子矩阵数据进行子矩阵运算,得到子矩阵运算结果。
进一步,在步骤S3之前,还包括:
获取子矩阵运算指令;
对获取的子矩阵运算指令进行译码;
判断该子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将该子矩阵运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再将执行所述步骤S3,否则,直接执行步骤S3。
进一步,步骤S3还包括,存储子矩阵运算结果。
进一步,上述方法还包括:步骤S4,获取存储的子矩阵运算结果。
进一步,子矩阵运算包括子矩阵加法运算、子矩阵乘法运算、大小比较运算、非线性运算和子矩阵标量乘法运算。进一步地,采用多流水级结构进行子矩阵运算,多流水级结构包括第一流水级、第二流水级和第三流水级,其中,在第一流水级进行子矩阵加法运算和子矩阵乘法运算,在第二流水级进行大小比较运算,在第三流水级进行非线性运算和子矩阵标量乘法运算。
例如,图4是本发明实施例提供的子矩阵运算装置的示意图,如图4所示,装置包括取指模块、译码模块、指令队列、标量寄存器堆(即寄存器单元)、依赖关系处理单元、指令队列、子矩阵运算单元、高速暂存器(即存储单元)、IO内存存取模块(即输入输出单元),其中:
取指模块用于从指令序列中取出下一条将要执行的指令,并将该指令传给译码模块;
译码模块用于对获取的指令进行译码,并将译码后指令传给指令队列;
考虑到不同指令在包含的标量寄存器上有可能存在依赖关系,指令队列用于缓存译码后的指令,当依赖关系被满足之后发送指令;
标量寄存器堆能够提供装置在运算过程中所需的多个标量寄存器;
依赖关系处理单元用于处理指令与前一条指令可能存在的存储依赖关系。子矩阵运算指令会访问高速暂存存储器,前后指令可能会访问同一块存储空间。为了保证指令执行结果的正确性,该指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在指令队列内等待至依赖关系被消除。
指令队列是一个有序队列,与之前指令在数据上有依赖关系的指令被存储在该队列内直至存储关系被消除;
子矩阵运算单元,该模块负责装置的所有子矩阵运算,包括但不限于子矩阵加法操作、子矩阵加标量操作、子矩阵减法操作、子矩阵减标量操作、子矩阵乘法操作、子矩阵乘标量操作、子矩阵除法(对位相除)操作、子矩阵与操作和子矩阵或操作,子矩阵运算指令被送往该运算单元执行。
高速暂存存储器,该模块是矩阵数据专用的暂存存储装置,能够支持不同大小的矩阵数据;
IO内存存取模块,该模块用于直接访问高速暂存存储器,负责从高速暂存存储器中读取数据或写入数据。
本领域的技术人员根据上文的记载可以毫无疑义地获知,当上述子矩阵运算装置在执行张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令等指令,需要从存储单元中获得两块子矩阵数据,并根据获取的两块子矩阵数据进行子矩阵运算。
在一个实施例中,上述子矩阵运算方法可以包括如下步骤:
获取子矩阵运算指令,具体地,子矩阵运算单元可以获取子矩阵运算指令。其中,子矩阵运算指令包括张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令。当然,在其他实施例中,该子矩阵运算指令还可以包括卷积指令、子矩阵搬运指令及子矩阵乘标量指令等等。进一步地,还可以对获取的子矩阵运算指令进行指令预处理操作。即上述方法还可以包括如下步骤:译码模块对获取的子矩阵运算指令进行译码;依赖关系处理单元判断获取的子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将子张量运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再执行根据张量运算指令分别获取第一子矩阵信息和第二子矩阵信息步骤。
根据子矩阵运算指令分别从寄存器单元中获取两个子矩阵信息,两个子矩阵信息可以分别表示为第一子矩阵信息和第二子矩阵信息。具体地,子矩阵运算单元可以根据子矩阵运算指令分别从寄存器单元中获取两个子矩阵信息,两个子矩阵信息可以分别表示为第一子矩阵信息和第二子矩阵信息。可选地,第一子矩阵信息和第二子矩阵信息可以包括相应的子矩阵数据在存储单元中的起始地址(start_addr)、子矩阵数据的行宽(iter1)、子矩阵数据的列宽(iter2)以及行间隔(stride1),其中,行间隔是指子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔。当然,第一子矩阵信息或第二子矩阵信息还可以仅包括相应子矩阵数据在存储单元中的向量地址及向量长度,该向量地址可以是子矩阵数据在存储单元中的起始地址、向量长度可以包括子矩阵数据的行宽及子矩阵数据的列宽,其中,行宽或列宽的取值可以为1。
根据第一子矩阵信息从存储单元中获取第一子矩阵数据,根据第二子矩阵信息从存储单元中获取第二子矩阵数据;具体地,子矩阵运算单元可以根据第一子矩阵信息从存储单元中获取第一子矩阵数据,根据第二子矩阵信息从存储单元中获取第二子矩阵数据。本申请实施例中,根据第一子矩阵信息获取第一子矩阵数据的过程可参见图3及上文的描述,根据第二子矩阵信息获取第二子矩阵数据的过程也可参见图3及上文的描述。
根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果。具体地,子矩阵运算单元可以根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果。该子矩阵运算可以包括张量运算、子矩阵乘向量运算、向量乘子矩阵运算、子矩阵加减运算、子矩阵对位乘法运算(子矩阵对位除法运算)及卷积运算等运算。
可选地,该子矩阵指令可以为子矩阵乘向量指令或向量乘子矩阵指令。此时,第一子矩阵信息包括第一子矩阵数据在存储单元中的起始地址、第一子矩阵数据的行宽、第一子矩阵数据的列宽以及第一子矩阵数据的行间隔,其中,第一子矩阵数据的行间隔是指第一子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;第二子矩阵信息包括向量地址及向量长度;
子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
子矩阵运算单元将第一子矩阵数据作为被乘数,将第二子矩阵数据作为乘数进行子矩阵乘向量运算,获得子矩阵乘向量运算结果;
或者,子矩阵运算单元将第一子矩阵数据作为乘数,将第二子矩阵数据作为被乘数进行向量乘子矩阵运算,获得向量乘子矩阵运算结果。
例如,图5是本发明实施例提供的子矩阵运算装置执行子矩阵乘向量执行的流程图,如图5所示,执行子矩阵乘向量指令的过程包括:
S1,取指模块取出该条子矩阵乘向量指令,并将该指令送往译码模块。
S2,译码模块对指令译码,并将指令送往指令队列。
S3,在指令队列中,该子矩阵乘向量指令需要从标量寄存器堆中获取指令中操作域所对应的标量寄存器里的数据,包括输入向量地址、输入向量长度、输入子矩阵地址、输入子矩阵行宽、输入子矩阵列宽、输入子矩阵行间距、输出向量地址、输出向量长度。
S4,在取得需要的标量数据后,该指令被送往依赖关系处理单元。依赖关系处理单元分析该指令与前面的尚未执行结束的指令在数据上是否存在依赖关系。该条指令需要在指令队列中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止。
S5,依赖关系不存在后,该条子矩阵乘向量指令被送往矩子阵运算单元。子矩阵运算单元根据所需数据的位置信息从高速暂存器中取出需要的子矩阵和向量数据,然后在子矩阵运算单元中完成乘法运算。
S6,运算完成后,将结果写回至高速暂存存储器的指定地址。
本领域的技术人员可以理解的是,向量乘子矩阵指令的执行过程与上述子矩阵乘向量指令的流程类似,其不同之处仅在于乘数与被乘数的位置变化。
可选地,第一子矩阵信息和第二子矩阵信息分别包括对应子矩阵数据在存储单元中的起始地址、对应子矩阵数据的行宽、对应子矩阵数据的列宽以及对应子矩阵数据的行间隔,其中,子矩阵数据的行间隔是指对应的子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔。具体地,第一子矩阵信息可以包括第一子矩阵数据在存储单元中的起始地址、第一子矩阵数据的行宽、第一子矩阵数据的列宽以及行间隔等。第二子矩阵信息可以包括第二子矩阵数据在存储单元中的起始地址、第二子矩阵数据的行宽、第二子矩阵数据的列宽以及行间隔等。此时,子矩阵运算指令可以是张量运算指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令。
若子矩阵运算指令是子矩阵加减运算指令,此时,子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算的步骤还可以包括:
子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行矩阵加法运算或减法运算。
若子矩阵运算指令是子矩阵乘法指令或子矩阵除法指令,此时子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算的步骤还可以包括:
子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行对位乘法运算,获得子矩阵乘法运算结果。
若子矩阵运算指令为张量运算指令,此时,子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行子矩阵运算的步骤还可以包括:
子矩阵运算单元根据第一子矩阵数据和第二子矩阵数据进行张量运算,获得张量运算结果。本领域技术人员可以理解的是,张量的基本运算可以包括张量的加减运算、张量的乘法运算及张量函数的求导运算等等。
可选地,该子矩阵运算方法还可以用于根据卷积运算指令从待卷积矩阵数据中获取子矩阵数据,并根据子矩阵数据执行卷积运算。具体地,上述子矩阵运算方法可以包括如下步骤:
获取卷积指令;具体地,子矩阵运算单元可以获取卷积指令。进一步地,指令处理单元的取指模块可以读取卷积指令,指令处理单元的译码模块可以对获取的卷积指令进行译码,指令处理单元的依赖关系处理单元可以判断该卷积指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将该卷积指令存储在指令队列中,等待前一子矩阵运算指令执行完毕,之后,指令处理单元可以将该卷积指令传送至子矩阵运算单元。
根据卷积指令从存储单元中获取卷积核矩阵数据;本申请实施例中,可以通过IO指令将待卷积的矩阵数据和卷积核矩阵数据存储在存储单元的指定地址。当子矩阵运算单元获取到卷积指令后,其可以根据该卷积指令从存储单元中获取卷积核矩阵数据。
从待卷积矩阵的起始位置开始,获取卷积核矩阵数据在当前位置的子矩阵数据;可选地,子矩阵运算单元可以从待卷积矩阵的起始位置开始,根据卷积指令从寄存器单元中获取所述卷积核矩阵数据在所述当前位置对应的子矩阵信息,之后,子矩阵运算单元可以根据当前位置对应的子矩阵信息从存储单元中获取卷积核矩阵数据在当前位置的子矩阵数据。其中,子矩阵信息包括子矩阵数据在存储单元中的起始地址、子矩阵数据的行宽、子矩阵数据的列宽、以及行间隔,其中,行间隔是指子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔。
执行卷积计算操作,该卷积计算操作包括:对卷积核矩阵数据和卷积核矩阵数据在当前位置的子矩阵数据进行对位相乘运算获得多个元素,并对多个元素进行累加求和运算,获得当前位置的卷积结果。也就是说,本申请实施例中,子矩阵运算单元采用对位相乘求和法进行卷积运算。
根据卷积指令中给定的位移参数,将卷积核矩阵数据从当前位置移动至下一位置,并获取下一位置对应的子矩阵数据,之后返回执行卷积计算操作的步骤,直至完成待卷积矩阵数据的卷积计算,获得结果矩阵。子矩阵运算单元可以重复上述的位移步骤及卷积计算操作,直至获得结果矩阵,之后,可以将该结果矩阵存储至片外。
具体地,图6为本发明实施例提供的子矩阵运算单元进行卷积神经网络运算的方法的流程图,该方法主要由子矩阵运算指令实现。卷积神经网络的运算特征是:对于n×y×x规模的特征图像输入(其中n是输入特征图像数,y是特征图像长,x是特征图像宽),有n×h×w规模的卷积核,卷积核在输入图像上不断移动,在每个位置卷积核与自己所覆盖的输入图像的数据进行卷积运算,得到输出图像上对应的一个点的值。针对这种运算特征,卷积神经网络可以由一条子矩阵卷积指令循环实现。在实际的存储中,如图6所示,数据存储时在图像个数的维度上展开,输入数据图像由n×y×x的三维数组变成y×(x×n)的二维矩阵,相同地,卷积核数据变成h×(w×n)的二维矩阵。如图7所示,实现卷积神经网络的过程包括:
S1,通过IO指令将待卷积的矩阵数据和卷积核矩阵数据存至矩阵专用高速暂存存储器的指定地址;
S2,译码器取出CONV运算指令,根据该指令,子矩阵运算单元从高速暂存存储器中读取卷积核矩阵数据和该卷积核在输入图像起始位置的子矩阵数据。
S3,两矩阵数据在子矩阵运算单元中进行对位相乘和元素累加求和的运算,并写回结果。然后子矩阵运算单元继续读入卷积核,同时根据指令中位移参数得到的下一个待卷积的子矩阵的起始地址,读取数据。
S4,在CONV指令执行过程中,上面过程不断循环,直到完成卷积核在待卷积矩阵最后一个位置上的卷积运算。
S5,通过IO指令将卷积后的结果矩阵存至片外。
需声明,本实施例采用了一种更加高效的方法实现卷积运算,即将三维的输入图像和卷积核均展开成二维形式,实际上,这不是本发明的装置和方法实现卷积运算的唯一方式,一种更通用的方法是对输入的每一张二维图像,与对应的卷积核中的一个面通过子矩阵指令执行卷积运算,得到输出结果的一个部分和,最终的卷积结果是所有的二维图像和与之相对应的卷积核中的面进行卷积运算得到的部分和的累加。故,子矩阵运算指令可以以多种方式实现卷积操作。
综上所述,本申请提供子矩阵运算装置,并配合相应的子矩阵运算指令集,能够很好地解决当前计算机领域越来越多的算法包含大量子矩阵运算的问题,相比于已有的传统解决方案,本申请可以使用方便、支持的子矩阵规模灵活、片上缓存充足等优点。本发明可以用于多种包含大量子矩阵运算的计算任务,包括目前表现十分出色的人工神经网络算法的反向训练和正向预测。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (14)
1.一种子矩阵运算方法,其特征在于,所述方法包括如下步骤:
获取子矩阵运算指令,其中,所述子矩阵运算指令包括张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令中的至少一种;
根据所述子矩阵运算指令分别从寄存器单元中获取第一子矩阵信息和第二子矩阵信息,所述第一子矩阵信息包括所述第一子矩阵数据在存储单元中的起始地址、所述第一子矩阵数据的行宽、所述第一子矩阵数据的列宽以及所述第一子矩阵数据的行间隔,其中,所述第一子矩阵数据的行间隔是指所述第一子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵信息从存储单元中获取第一子矩阵数据,根据所述第二子矩阵信息从所述存储单元中获取第二子矩阵数据,第一子矩阵为二维矩阵的二维子矩阵,所述根据所述第一子矩阵信息从存储单元中获取第一子矩阵数据,包括:从所述第一子矩阵数据在存储单元中的起始地址开始,每读取所述第一子矩阵数据的行宽个数据后跳过所述第一子矩阵数据的行间隔个数据再读取所述第一子矩阵数据的行宽个数据,重复所述第一子矩阵数据的列宽次,得到所述第一子矩阵数据;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果。
2.根据权利要求1所述的方法,其特征在于,所述第二子矩阵信息包括向量地址及向量长度;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
将所述第一子矩阵数据作为被乘数,将所述第二子矩阵数据作为乘数进行子矩阵乘向量运算,获得子矩阵乘向量运算结果;
或者,将所述第一子矩阵数据作为乘数,将所述第二子矩阵数据作为被乘数进行向量乘子矩阵运算,获得向量乘子矩阵运算结果。
3.根据权利要求1所述的方法,其特征在于,所述第二子矩阵信息包括所述第二子矩阵数据在所述存储单元中的起始地址、所述第二子矩阵数据的行宽、所述第二子矩阵数据的列宽以及所述第二子矩阵数据的行间隔,其中,所述第二子矩阵数据的行间隔是指所述第二子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
根据所述第一子矩阵数据和所述第二子矩阵数据进行矩阵加法运算或减法运算。
4.根据权利要求1所述的方法,其特征在于,所述第二子矩阵信息包括所述第二子矩阵数据在所述存储单元中的起始地址、所述第二子矩阵数据的行宽、所述第二子矩阵数据的列宽及所述第二子矩阵数据的行间隔,其中,所述第二子矩阵数据的行间隔是指所述第二子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
根据所述第一子矩阵数据和所述第二子矩阵数据进行对位乘法运算,获得子矩阵乘法运算结果。
5.根据权利要求1所述的方法,其特征在于,所述第二子矩阵信息包括所述第二子矩阵数据在所述存储单元中的起始地址、所述第二子矩阵数据的行宽、所述第二子矩阵数据的列宽及所述第二子矩阵数据的行间隔,其中,所述第二子矩阵数据的行间隔是指所述第二子矩阵数据相邻两行之间,上一行的行末数据到下一行的行首数据的数据间隔;
根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果的步骤包括:
根据所述第一子矩阵数据和所述第二子矩阵数据进行张量运算,获得张量运算结果。
6.根据权利要求1-5任一项所述的子矩阵运算方法,其特征在于,所述子矩阵运算指令包括操作码和至少一个操作域,其中,所述操作码用于指示所述子矩阵运算指令的功能,操作域用于指示所述子矩阵运算指令的数据信息;
所述子矩阵运算指令的数据信息包括所述寄存器单元的编号,从而能够根据寄存器单元的编号访问对应的寄存器单元,获取所述第一子矩阵信息和所述第二子矩阵信息。
7.根据权利要求1-5任一项所述的子矩阵运算方法,其特征在于,所述方法还包括如下步骤:
对获取的子矩阵运算指令进行译码;
判断所述子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将所述子矩阵运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再执行根据所述子矩阵运算指令分别从寄存器单元中获取第一子矩阵信息和所述第二子矩阵信息步骤。
8.一种子矩阵运算装置,其特征在于,用于根据子矩阵运算指令从矩阵数据中获取子矩阵数据,并根据所述子矩阵数据执行子矩阵运算,所述装置包括:
存储单元,用于存储矩阵数据;
寄存器单元,用于存储子矩阵信息;
子矩阵运算单元,用于获取子矩阵运算指令,根据所述子矩阵运算指令分别从所述寄存器单元中获取第一子矩阵信息和第二子矩阵信息;根据所述第一子矩阵信息从所述存储单元中获取第一子矩阵数据,根据所述第二子矩阵信息从所述存储单元中获取第二子矩阵数据;并根据所述第一子矩阵数据和所述第二子矩阵数据进行子矩阵运算,获得子矩阵运算结果,所述第一子矩阵信息包括第一子矩阵数据在所述存储单元中的起始地址、第一子矩阵数据的行宽、第一子矩阵数据的列宽及第一子矩阵数据的行间隔,其中,所述第一子矩阵数据的行间隔是指第一子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔,第一子矩阵为二维矩阵的二维子矩阵,所述子矩阵运算单元,具体用于:从所述第一子矩阵数据在存储单元中的起始地址开始,每读取所述第一子矩阵数据的行宽个数据后跳过所述第一子矩阵数据的行间隔个数据再读取所述第一子矩阵数据的行宽个数据,重复所述第一子矩阵数据的列宽次,得到所述第一子矩阵数据;
其中,所述子矩阵运算指令包括张量运算指令、子矩阵乘向量指令、向量乘子矩阵指令、子矩阵加法指令、子矩阵减法指令以及子矩阵乘法指令。
9.根据权利要求8所述的子矩阵运算装置,其特征在于,所述子矩阵运算指令为子矩阵乘向量指令或向量乘子矩阵运算指令;所述第二子矩阵信息包括向量地址及向量长度。
10.根据权利要求8所述的子矩阵运算装置,其特征在于,所述子矩阵运算指令为张量运算指令、子矩阵加法指令、子矩阵减法指令或子矩阵对位乘法指令;
所述第二子矩阵信息包括所述第二子矩阵数据在所述存储单元中的起始地址、所述第二子矩阵数据的行宽、所述第二子矩阵数据的列宽、所述第二子矩阵数据的行间隔,其中,所述第二子矩阵数据的行间隔是指所述第二子矩阵数据相邻两行间,上一行的行末数据到下一行的行首数据的数据间隔。
11.根据权利要求8-10任一项所述的子矩阵运算装置,其特征在于,所述装置还包括用于获取所述子矩阵运算指令,并将所述子矩阵运算指令进行处理的指令处理单元;所述指令处理单元包括:
取址模块,用于获取所述子矩阵运算指令;
译码模块,用于对获取的所述子矩阵运算指令进行译码;
指令队列,用于对译码后的所述子矩阵运算指令进行顺序存储;
依赖关系处理单元,用于在所述子矩阵运算单元获取所述子矩阵运算指令之前,判断所述子矩阵运算指令与前一子矩阵运算指令是否访问相同的子矩阵数据,若是,则将所述子矩阵运算指令存储在指令队列中,等待前一子矩阵运算指令执行完毕后,再根据所述子矩阵运算指令分别获取第一子矩阵信息和第二子矩阵信息。
12.根据权利要求8-10任一项所述的子矩阵运算装置,其特征在于,所述存储单元还用于存储子矩阵运算结果;
所述装置还包括输入输出单元,所述输入输出单元用于将矩阵数据存储至所述存储单元,所述输入输出单元还用于从所述存储单元中获取所述子矩阵运算结果。
13.根据权利要求8-10任一项所述的子矩阵运算装置,其特征在于,所述存储单元为高速暂存存储器。
14.根据权利要求8-10任一项所述的子矩阵运算装置,其特征在于,所述子矩阵运算单元包括子矩阵加法部件、子矩阵乘法部件、大小比较部件、非线性运算部件和子矩阵标量乘法部件,所述子矩阵加法部件、子矩阵乘法部件、大小比较部件、非线性运算部件和子矩阵标量乘法部件形成多流水级结构;
所述多流水级结构包括第一流水级、第二流水级和第三流水级,其中,所述子矩阵加法部件和子矩阵乘法部件处于第一流水级,大小比较部件处于第二流水级,非线性运算部件和子矩阵标量乘法部件处于第三流水级。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810236769.1A CN108491359B (zh) | 2016-04-22 | 2016-04-22 | 子矩阵运算装置及方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810236769.1A CN108491359B (zh) | 2016-04-22 | 2016-04-22 | 子矩阵运算装置及方法 |
CN201610258546.6A CN107305538B (zh) | 2016-04-22 | 2016-04-22 | 一种子矩阵运算装置及方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610258546.6A Division CN107305538B (zh) | 2016-04-22 | 2016-04-22 | 一种子矩阵运算装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108491359A CN108491359A (zh) | 2018-09-04 |
CN108491359B true CN108491359B (zh) | 2019-12-24 |
Family
ID=60150790
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610258546.6A Active CN107305538B (zh) | 2016-04-22 | 2016-04-22 | 一种子矩阵运算装置及方法 |
CN201810236769.1A Active CN108491359B (zh) | 2016-04-22 | 2016-04-22 | 子矩阵运算装置及方法 |
CN201810236767.2A Active CN108388541B (zh) | 2016-04-22 | 2016-04-22 | 卷积运算装置及方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610258546.6A Active CN107305538B (zh) | 2016-04-22 | 2016-04-22 | 一种子矩阵运算装置及方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810236767.2A Active CN108388541B (zh) | 2016-04-22 | 2016-04-22 | 卷积运算装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (3) | CN107305538B (zh) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109754061B (zh) * | 2017-11-07 | 2023-11-24 | 上海寒武纪信息科技有限公司 | 卷积扩展指令的执行方法以及相关产品 |
CN109754062B (zh) * | 2017-11-07 | 2024-05-14 | 上海寒武纪信息科技有限公司 | 卷积扩展指令的执行方法以及相关产品 |
CN108121688B (zh) * | 2017-12-15 | 2020-06-23 | 中科寒武纪科技股份有限公司 | 一种计算方法及相关产品 |
CN107943756B (zh) * | 2017-12-15 | 2021-03-23 | 中科寒武纪科技股份有限公司 | 一种计算方法及相关产品 |
CN112230994A (zh) * | 2017-12-15 | 2021-01-15 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
CN108037908B (zh) * | 2017-12-15 | 2021-02-09 | 中科寒武纪科技股份有限公司 | 一种计算方法及相关产品 |
CN108021393B (zh) * | 2017-12-15 | 2020-10-27 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
CN112463115A (zh) * | 2017-12-15 | 2021-03-09 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
CN108108190B (zh) * | 2017-12-15 | 2020-01-24 | 中科寒武纪科技股份有限公司 | 一种计算方法及相关产品 |
EP3651077B1 (en) * | 2018-02-13 | 2021-10-27 | Shanghai Cambricon Information Technology Co., Ltd | Computation device and method |
US11397579B2 (en) | 2018-02-13 | 2022-07-26 | Shanghai Cambricon Information Technology Co., Ltd | Computing device and method |
KR102065672B1 (ko) * | 2018-03-27 | 2020-01-13 | 에스케이텔레콤 주식회사 | 합성곱 연산을 위한 장치 및 방법 |
CN110727911B (zh) * | 2018-07-17 | 2022-09-02 | 展讯通信(上海)有限公司 | 一种矩阵的运算方法及装置、存储介质、终端 |
US11093580B2 (en) * | 2018-10-31 | 2021-08-17 | Advanced Micro Devices, Inc. | Matrix multiplier with submatrix sequencing |
CN109858261A (zh) * | 2019-01-18 | 2019-06-07 | 芜湖智久机器人有限公司 | 一种数据存储介质、加密方法 |
CN111523652B (zh) * | 2019-02-01 | 2023-05-02 | 阿里巴巴集团控股有限公司 | 处理器及其数据处理方法、摄像装置 |
CN110018851A (zh) * | 2019-04-01 | 2019-07-16 | 北京中科寒武纪科技有限公司 | 数据处理方法、相关设备及计算机可读介质 |
CN110008440B (zh) * | 2019-04-15 | 2021-07-27 | 恒烁半导体(合肥)股份有限公司 | 一种基于模拟矩阵运算单元的卷积运算及其应用 |
US11010202B2 (en) * | 2019-08-06 | 2021-05-18 | Facebook, Inc. | Distributed physical processing of matrix sum operation |
WO2021035397A1 (en) * | 2019-08-23 | 2021-03-04 | Alibaba Group Holding Limited | Method and apparatus for data-move task optimizing |
CN112446007A (zh) * | 2019-08-29 | 2021-03-05 | 上海华为技术有限公司 | 一种矩阵运算方法、运算装置以及处理器 |
CN110780849B (zh) * | 2019-10-29 | 2021-11-30 | 中昊芯英(杭州)科技有限公司 | 矩阵处理方法、装置、设备及计算机可读存储介质 |
CN112784973B (zh) * | 2019-11-04 | 2024-09-13 | 广州希姆半导体科技有限公司 | 卷积运算电路、装置以及方法 |
CN111008040B (zh) * | 2019-11-27 | 2022-06-14 | 星宸科技股份有限公司 | 缓存装置及缓存方法、计算装置及计算方法 |
CN110728367B (zh) * | 2019-12-18 | 2020-05-05 | 深圳鲲云信息科技有限公司 | 用于神经网络的数据存储方法及装置 |
CN113050988A (zh) * | 2019-12-27 | 2021-06-29 | 上海商汤智能科技有限公司 | 数据处理方法和装置 |
CN111160570A (zh) * | 2019-12-31 | 2020-05-15 | 山东浪潮人工智能研究院有限公司 | 用于预测性维护的基于卷积算子的特征构造方法及系统 |
CN111340680B (zh) * | 2020-03-20 | 2023-06-02 | 光子算数(北京)科技有限责任公司 | 一种卷积计算方法及卷积运算电路 |
CN114692075A (zh) * | 2020-12-30 | 2022-07-01 | 中科寒武纪科技股份有限公司 | 用于矩阵乘操作的集成电路装置、计算设备、系统和方法 |
CN114764615A (zh) * | 2021-01-13 | 2022-07-19 | 华为技术有限公司 | 卷积运算的实现方法、数据处理方法及装置 |
CN113077829B (zh) * | 2021-04-20 | 2023-04-28 | 清华大学 | 基于忆阻器阵列的数据处理方法、电子装置 |
CN113724127B (zh) * | 2021-08-02 | 2023-05-05 | 成都统信软件技术有限公司 | 一种图像矩阵卷积的实现方法、计算设备及储存介质 |
CN113435586B (zh) * | 2021-08-03 | 2021-11-30 | 北京大学深圳研究生院 | 用于卷积神经网络的卷积运算装置、系统和图像处理装置 |
CN115658146B (zh) * | 2022-12-14 | 2023-03-31 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
CN116795432B (zh) * | 2023-08-18 | 2023-12-05 | 腾讯科技(深圳)有限公司 | 运算指令的执行方法、装置、电路、处理器及设备 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3157740B2 (ja) * | 1997-03-13 | 2001-04-16 | 甲府日本電気株式会社 | ベクトルデータ処理装置 |
EP2309382B1 (en) * | 1998-08-24 | 2014-12-03 | MicroUnity Systems Engineering, Inc. | System with wide operand architecture and method |
US6477555B1 (en) * | 1999-07-07 | 2002-11-05 | Lucent Technologies Inc. | Method and apparatus for performing rapid convolution |
CN101299185B (zh) * | 2003-08-18 | 2010-10-06 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微处理器结构 |
US7275148B2 (en) * | 2003-09-08 | 2007-09-25 | Freescale Semiconductor, Inc. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
CN100424654C (zh) * | 2005-11-25 | 2008-10-08 | 杭州中天微系统有限公司 | 一种矩阵数据存取方法及其矩阵数据存储装置 |
US8327115B2 (en) * | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
CN101620524B (zh) * | 2009-07-03 | 2011-08-10 | 中国人民解放军国防科学技术大学 | 支持矩阵整体读写操作的矩阵寄存器文件 |
WO2011044398A2 (en) * | 2009-10-07 | 2011-04-14 | Qsigma, Inc. | Computer for amdahl-compliant algorithms like matrix inversion |
US9495513B2 (en) * | 2010-09-17 | 2016-11-15 | William Marsh Rice University | GPU-based fast dose calculator for cancer therapy |
CN102207692A (zh) * | 2011-07-06 | 2011-10-05 | 清华大学 | 一种确定掩膜版经光刻系统后所成像光照强度分布的方法 |
CN102214160B (zh) * | 2011-07-08 | 2013-04-17 | 中国科学技术大学 | 一种基于龙芯3a的单精度矩阵乘法优化方法 |
CN102360344B (zh) * | 2011-10-10 | 2014-03-12 | 西安交通大学 | 矩阵处理器及其指令集和嵌入式系统 |
CN103699360B (zh) * | 2012-09-27 | 2016-09-21 | 北京中科晶上科技有限公司 | 一种向量处理器及其进行向量数据存取、交互的方法 |
JP6003744B2 (ja) * | 2013-03-22 | 2016-10-05 | 富士通株式会社 | 演算処理装置及び演算処理方法 |
CN104216866B (zh) * | 2013-05-31 | 2018-01-23 | 深圳市海思半导体有限公司 | 一种数据处理装置 |
US9384168B2 (en) * | 2013-06-11 | 2016-07-05 | Analog Devices Global | Vector matrix product accelerator for microprocessor integration |
CN103530276B (zh) * | 2013-09-25 | 2016-06-22 | 中国科学技术大学 | 一种基于龙芯3b的自适应矩阵乘法优化方法 |
CN104899182B (zh) * | 2015-06-09 | 2017-10-31 | 中国人民解放军国防科学技术大学 | 一种支持可变分块的矩阵乘加速方法 |
-
2016
- 2016-04-22 CN CN201610258546.6A patent/CN107305538B/zh active Active
- 2016-04-22 CN CN201810236769.1A patent/CN108491359B/zh active Active
- 2016-04-22 CN CN201810236767.2A patent/CN108388541B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108388541B (zh) | 2020-12-11 |
CN107305538B (zh) | 2020-07-31 |
CN108388541A (zh) | 2018-08-10 |
CN108491359A (zh) | 2018-09-04 |
CN107305538A (zh) | 2017-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108491359B (zh) | 子矩阵运算装置及方法 | |
EP3447653A1 (en) | Submatrix operation device and method | |
CN107315574B (zh) | 一种用于执行矩阵乘运算的装置和方法 | |
CN109522254B (zh) | 运算装置及方法 | |
EP3832499B1 (en) | Matrix computing device | |
CN110073329B (zh) | 访存设备、计算设备和应用于卷积神经网络运算的设备 | |
US10338925B2 (en) | Tensor register files | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
EP3676700B1 (en) | Efficient direct convolution using simd instructions | |
US10372456B2 (en) | Tensor processor instruction set architecture | |
KR102166775B1 (ko) | 스파스 연결용 인공 신경망 계산 장치와 방법 | |
KR102203746B1 (ko) | 인공 신경망 정방향 연산 실행용 장치와 방법 | |
KR102486029B1 (ko) | 비트폭이 다른 연산 데이터를 지원하는 연산 유닛, 연산 방법 및 연산 장치 | |
US20190197656A1 (en) | Processor, information processing apparatus, and operation method of processor | |
CN111580866A (zh) | 一种向量运算装置及运算方法 | |
CN107315717B (zh) | 一种用于执行向量四则运算的装置和方法 | |
CN112348182B (zh) | 一种神经网络maxout层计算装置 | |
EP3447690A1 (en) | Maxout layer operation apparatus and method | |
TWI508023B (zh) | 平行及向量式吉伯特-詹森-科西(gilbert-johnson-keerthi)圖形處理技術 | |
CN111931937B (zh) | 图像处理模型的梯度更新方法、装置及系统 | |
CN112927125B (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN116415100A (zh) | 业务处理方法、装置、处理器及计算设备 | |
CN109471612B (zh) | 运算装置及方法 | |
WO2022067510A1 (zh) | 一种处理器、处理方法及相关设备 | |
CN110147222B (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 | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100191 room 644, research complex, 6 South Road, Haidian District Science Academy, Beijing. Patentee after: Zhongke Cambrian Technology Co., Ltd Address before: 100191 room 644, research complex, 6 South Road, Haidian District Science Academy, Beijing. Patentee before: Beijing Zhongke Cambrian Technology Co., Ltd. |
|
CP01 | Change in the name or title of a patent holder |