CN110073329B - 访存设备、计算设备和应用于卷积神经网络运算的设备 - Google Patents
访存设备、计算设备和应用于卷积神经网络运算的设备 Download PDFInfo
- Publication number
- CN110073329B CN110073329B CN201680091648.1A CN201680091648A CN110073329B CN 110073329 B CN110073329 B CN 110073329B CN 201680091648 A CN201680091648 A CN 201680091648A CN 110073329 B CN110073329 B CN 110073329B
- Authority
- CN
- China
- Prior art keywords
- multiply
- data block
- unit
- accumulate
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种访存设备、计算设备和应用于卷积神经网络运算的设备,以提高访存效率和计算运算吞吐量,同时降低计算功耗。包括:输入缓存单元,用于缓存待计算的数据块;级联单元,与输入缓存单元相连,级联单元从输入缓存单元中读取待计算的数据块,待计算的数据块包括第一数据块和第二数据块;将第一数据块和第二数据块首尾相连,得到级联数据块;从级联数据块中截取第三数据块,第三数据块包含级联数据块中的一段连续的数据,且第三数据块的长度与输入缓存单元中的数据块的长度相等。
Description
技术领域
本申请涉及计算机领域,尤其涉及计算机领域中的访存设备、计算设备和应用于卷积神经网络运算的设备。
背景技术
卷积神经网络(convolutional neural network,CNN)是深度学习中使用最广泛的算法,它广泛应用于图像分类、语音识别、视频理解、人脸检测等多种应用中。针对神经网络数据密集性的计算特点,卷积神经网络运算通常采用定制的神经网络处理器。近年来,神经网络处理器成为学术界和工业界的研究热点。
对于当前的神经网络处理器,概括而言,其研究方向主要包含计算和存储两方面。其中在计算方面,卷积运算的核心是乘累加运算。卷积运算中通常包含大量的-1,0,2n等特殊数据,这些数据占用了很大一部分的计算资源。但是-1,0,2n等特殊数据是在运行时产生的,而编译器只能进行静态优化,不能对运行中的数据进行优化。导致计算的速率和吞吐量较低。
在存储方面,由于卷积算法的数据局部性强,所以存在频繁地址非对齐访存。而在对缓存进行地址非对齐访问时,缓存需要同时访问连续的两个访存块,且经过复杂的地址译码、数据选通、旋转移位等多个操作,功耗较高,同时难以在一个时钟周期内产生所需要的访问数据。
发明内容
本申请提供了一种访存设备、计算设备和应用于卷积神经网络运算的设备,以提高访存效率和计算运算吞吐量,同时降低计算功耗。
第一方面,提供了一种访存设备,包括:输入缓存单元,用于缓存待计算的数据块;级联单元,与所述输入缓存单元相连,所述级联单元用于从所述输入缓存单元中读取所述待计算的数据块,所述待计算的数据块包括第一数据块和第二数据块;将所述第一数据块和所述第二数据块首尾相连,得到级联数据块;从所述级联数据块中截取第三数据块,所述第三数据块包含所述级联数据块中的一段连续的数据,且所述第三数据块的长度与所述输入缓存单元中的数据块的长度相等。
级联单元可以将从输入缓存单元中读取的第一数据块和第二数据块首尾相连,得到级联数据块。并从级联数据中截取任意起始位置的一个数据块长度的第三数据块。从而能够通过任意截取级联数据块中数据的方法实现快速的地址非对齐访问,提高了地址非对齐访问的效率。
在一种可能的实现方式中,所述访存设备还包括:控制单元,所述控制单元与所述级联单元相连,用于向所述级联单元发送第一控制指令,所述第一控制指令用于指示所述级联数据块的截取方式;所述级联单元根据所述第一控制指令,从所述级联数据块中截取所述第三数据块。
在本申请实施例中,可以根据第一控制指令从输入缓存单元的两个数据块中按照任意起始地址快速取得一个向量长度数据,即通过一条指令支持任意地址非对齐访问,能够精简地址非对齐访问的指令,提高访存效率。
在一种可能的实现方式中,所述第一控制指令包含第一指示信息,所述第一指示信息用于指示所述第三数据块在所述级联数据块中的起始位置。
在一种可能的实现方式中,所述第一指示信息包含所述第三数据块的起始位置的数据序号,所述第一控制指令还包括第二指示信息,所述第二指示信息用于指示所述待计算的数据块的数据格式;所述级联设备根据所述数据序号以及所述数据格式,确定所述第三数据块在所述级联数据块中的起始位置。
在一种可能的实现方式中,所述输入缓存单元包括读端口,所述读端口与第一控制寄存器相连,所述第一控制寄存器存储有第一配置信息,所述第一配置信息用于指示所述输入缓存单元中的待读取数据块的地址范围、在所述地址范围内的起始地址和步长,所述读端口从所述起始地址开始,以所述步长为相邻两次读操作的地址增长步长,循环读取所述地址范围内的数据块。
在一种可能的实现方式中,所述输入缓存单元包括写端口,所述写端口与第二控制寄存器相连,所述第二控制寄存器存储有第二配置信息,所述第二配置信息用于指示所述输入缓存单元中的存储新的数据块的地址范围、在所述地址范围的起始地址和步长,所述写端口从所述起始地址开始,以所述步长为相邻两次写操作的地址增长步长,将新的数据块循环写入所述地址范围中。
在本申请实施例中,读端口或写端口对应的控制寄存器只需存储待读取数据块的地址范围、在所述地址范围的起始地址和步长,便可以访问相应的数据。从而能够精简写端口或读端口的指令。进一步地,在循环自索引的访问方式下,可以配置访问数据的地址范围和步长,提高了访问输入缓存单元的数据的灵活性。
第二方面,提供了在一种计算设备,所述计算设备包括乘法缓存单元、乘法调度单元和加法单元,所述乘法缓存单元用于缓存待处理的乘累加指令;所述乘法调度单元用于从所述乘法缓存单元获取第一乘累加指令,当所述第一乘累加指令中的乘法运算的源操作数包括可优化操作数时,通过优化操作确定所述乘法运算的运算结果,并将所述第一乘累加指令中的乘法运算的运算结果直接发送至所述加法单元,n为大于等于0的整数,所述可优化操作数包括-1或2n,所述优化操作包括符号取反操作或移位操作;所述加法单元根据所述第一乘累加指令中的乘法运算的运算结果,执行所述第一乘累加指令中的加法运算,得到所述第一乘累加指令对应的乘累加运算的运算结果。
在本申请实施例中,计算设备在第一乘累加指令中的乘法运算的源操作数包含-1或2n时,在通过符号取反操作或移位操作确定所述乘法运算的运算结果,直接发送给加法单元,而无需通过乘法器进行乘法运算,从而提高乘累加运算的速率和吞吐量以及降低乘累加运算的功耗。
在一种可能的实现方式中,所述乘法调度单元用于在一个时钟周期内调度从所述乘法缓存单元获取的多个乘累加指令,所述多个乘累加指令包含一个第一类型乘累加指令和至少一个第二类型乘累加指令,所述第一类型乘累加指令中的乘法运算的源操作数不包括-1,0和2n中的任一项,所述第二类型乘累加指令中的乘法运算的源操作数包括-1,0或2n。
本申请实施例中的计算设备可以在一个时钟周期内处理多条乘累加指令,从而提高了乘累加运算的速度和吞吐量。
在一种可能的实现方式中,所述加法单元还包括加法缓存单元,加法调度单元、加法器和至少一个累加寄存器,所述加法缓存单元用于缓存用于加法运算的源操作数,所述源操作数包括所述待处理的乘累加指令中的乘法运算的运算结果;所述加法调度单元确定所述第一乘累加指令的加法运算的第一源操作数和第二源操作数,其中,所述第一源操作数与所述第二源操作数对应相同的目标累加寄存器,所述第二源操作数来自所述加法缓存单元或所述目标累加寄存器;所述加法调度单元对所述第一源操作数和第二源操作数进行求和,得到求和结果;所述加法调度单元将所述求和结果写入所述加法缓存单元或所述目标累加寄存器。
在本申请实施例中,加法调度单元利用加法器对加法缓存单元中的对应相同累加寄存器的乘累加指令的乘法运算的运算求和,从而能够减少了访问累加寄存器次数,减少访问累加寄存器产生的流水线停顿,提高了处理乘累加运算的速率和吞吐量。
在一种可能的实现方式中,当所述加法缓存单元存储有对应于所述目标累加寄存器的目标数据时,所述加法调度单元将所述目标数据确定为所述第二源操作数,并将所述求和结果写入所述加法缓存单元;当所述加法缓存单元未存储所述目标数据时,所述加法调度单元将所述目标累加寄存器存储的乘累加结果作为所述第二源操作数,并将所述求和结果写入所述目标累加寄存器。
在本申请实施例中,加法调度单元利用加法器首先对加法缓存单元中的对应相同累加寄存器的乘累加指令的乘法运算的运算求和,从而能够减少了访问累加寄存器次数,减少访问累加寄存器产生的流水线停顿,提高了处理乘累加运算的速率和吞吐量。
在一种可能的实现方式中,当所述第一乘累加指令是第一组乘累加指令中的第一个乘累加指令时,所述乘法调度单元用于为所述第一组乘累加指令标识新的目标累加寄存器,所述第一组乘累加指令中的乘累加指令中的乘法运算的运算结果对应相同的累加寄存器。
第三方面,提供了一种应用于卷积神经网络运算的设备,包括如第一方面或第一方面中任一种可能的实现方式中的访存设备以及包括如第二方面或第二方面中任一种可能的实现方式中的计算设备。
附图说明
图1是本申请实施例的卷积神经网络运算的过程示意图。
图2是本申请实施例的访存设备的结构示意图。
图3是本申请实施例的级联单元进行级联运算的过程示意图。
图4是本申请实施例的级联单元应用于卷积运算的示意图。
图5是本申请实施例的输入缓存单元的结构示意图。
图6是本申请实施例的访问输入缓存单元的方法的示意图。
图7是本申请实施例的输入缓存单元相邻两次卷积运算写数据的示意图。
图8是本申请实施例的计算设备的示意性结构图。
图9是本申请又一实施例的计算设备的示意性结构图。
图10是本申请实施例的乘累加运算的流程示意图。
图11是本申请另一实施例的乘累加运算的流程示意图。
图12是本申请实施例的应用于卷积神经网络的设备的示意图。
图13是本申请又一实施例的应用于卷积神经网络的设备的结构示意图。
图14是本申请实施例中的权值缓冲区的工作示意图。
图15是本申请实施例中的广播单元应用于卷积运算的示意图。
图16是本申请实施例中的乘累加阵列与级联单元、广播单元的关系结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
针对上述提出的神经网络设备访问地址非对齐数据操作复杂、效率较低的问题,本申请实施例提出了一种访存设备,其中心思想在于能通过设置输入缓存单元和级联单元实现快速地址非对齐的数据块访问。
本申请实施例还提出了一种计算设备,其中心思想在于通过在计算设备中引入乘法调度单元,其用于对运行中产生的-1,0,2n等特殊数据进行快速乘累加运算,能够提高乘累加运算的速率和吞吐率。进一步地,通过在计算设备中引入加法调度单元,实现计算设备同时对多条乘累加指令进行操作,以及自行处理多条乘累加指令之间的数据相关,这里的数据相关是指指令间的数据存在依赖性,例如需要B指令需要依赖于A指令的运算结果。其中,乘累加运算应用于卷积算法、二维滤波算法或有限脉冲响应(Finite impulseresponse,FIR)算法等。
本申请实施例还提出了一种应用于卷积神经网络运算的设备,该设备包含上述的访存设备和计算设备。该设备能够从计算和存储两方面对卷积运算的过程进行优化,在计算方面,其通过设置计算设备对运行中产生的-1,0,2n等特殊数据进行快速乘累加运算,能够提高乘累加运算的速率和吞吐率。在存储方面,其通过设置访存设备,针对卷积运算数据重叠,即数据局部性强的特点,设置输入缓存单元以及级联单元,实现数据缓存和快速的地址非对齐访问的功能。从而减少了访问缓存的次数,以及提高了地址非对齐访存效率。
可选地,本申请实施例中的各设备可以应用于卷积神经网络运算。为了便于理解,下文首先介绍卷积神经网络和应用于卷积神经网络运算的设备。卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者其他形式的变形具有高度不变性。
为了便于理解,首先结合图1对卷积计算的过程进行简要介绍。卷积运算,其实就是加权求和的过程,例如,使用到的图像区域中的每个元素分别与卷积核中的每个元素对应相乘,所有乘积之和作为区域中心像素的新值。卷积核即一个大小固定、由数值参数构成的矩阵,矩阵的参考点通常位于矩阵的中心,矩阵的大小为核尺寸。如图1所示,卷积核矩阵G与输入矩阵R中相同大小的数据块进行点积运算,得到输出矩阵O中的一个的计算结果;然后卷积核以指定的移动步长在输入矩阵中不断移动,遍历所有的数据,得到输出矩阵O。其中,卷积核尺寸为3*3,卷积核移动步长为1,
G5=R1*G1+R2*G2+R3*G3+R4*G4+R5*G5+R6*G6+R7*G7+R8*G8+R9*G9,如果对一幅图像进行卷积运算,可利用以数组为核的参考点的3*3卷积核。首先将核的参考点定位于图像的第一个像素点,核的其余元素覆盖图像中其对应的局部像素点。对于每一个核点,我们可以得到这个点的值以及图像中对应图像点的值。将这些值相乘并求和,并将这个结果放在与输入图像参考点所对应的位置。通过在整个图像上扫描卷积核,对图像的每个点重复此操作。最终可以得到图像的卷积图像。
在CNN网络中,卷积计算占整个运算90%以上的运算量,是整个CNN运算的主要组成部分。
对于当前应用于卷积神经网络运算的神经网络处理器,概括而言,其研究方向主要包含计算和存储两方面。其中在计算方面,主要是针对应用算法计算密集型且包含大量稀疏数据的特点,设计专用并行计算通路(如快速乘累加电路),提高卷积运算的速率和计算吞吐量。在存储方面,则针对应用算法数据局部性强、存在频繁地址非对齐访存等特点,设计专用存储通路,减少数据传输,增加数据传输带宽。
下文结合图2,首先介绍本申请实施例的访存设备。图2示出了本申请实施例的访存设备100的结构示意图。如图2所示,访存设备100包括:
输入缓存单元110,用于缓存待计算的数据块。
例如,在应用于卷积神经网络运算时,输入缓存单元可以用于缓存卷积运算的输入数据。
级联单元120,与所述输入缓存单元110相连,所述级联单元120从所述输入缓存单元110中读取所述待计算的数据块,所述待计算的数据块包括第一数据块和第二数据块;将所述第一数据块和所述第二数据块首尾相连,得到级联数据块;从所述级联数据块中截取第三数据块,所述第三数据块包含所述级联数据块中的一段连续的数据,且所述第三数据块的长度与所述输入缓存单元110中的任意一个数据块的长度相等。
可选地,上述第一数据块和第二数据块可以是属于输入缓存单元中不同存储行的数据块,或者,上述第一数据块和第二数据块也可以是输入缓存单元中相同存储行的数据块。上述第一数据块和第二数据块的长度可以是一个向量数据的长度。即级联单元可以从级联数据块中按照任意起始地址快速取得一个向量长度数据。或者说级联单元可以根据一条指令支持任意的地址非对齐访问。
其中,上述第一数据块和第二数据块首尾相连,可以指将第一数据块作为高位,第二数据块作为低位,连接在一起,得到级联数据块。
在本申请实施例中,级联单元可以将从输入缓存单元中读取的第一数据块和第二数据块首尾相连,得到级联数据块。并从级联数据中截取任意起始位置的一个数据块长度的第三数据块。从而能够通过任意截取级联数据块中数据的方法实现快速的地址非对齐访问,提高了地址非对齐访问的效率。
本申请实施例中,对于需要多次访问输入缓存单元相同的两个数据块中的不同数据时,可以首先获取两个数据块,然后将两个数据块进行级联后得到级联数据块,并直接从级联后的级联数据块中截取所需的第三数据块,无需多次访问输入缓存单元,减少了访问数据缓存单元的次数,从而减少了访问数据缓存单元的功耗,以及减少了地址非对齐访问的时间,提高了地址非对齐访问的效率。
例如,在本申请实施例中,可以在一个时钟周期内产生地址非对齐访问所需的数据。
可选地,访存设备100还包括控制单元130,所述控制单元130与所述级联单元120相连,用于向所述级联单元120发送第一控制指令,所述第一控制指令用于指示所述级联数据块的截取方式;所述级联单元120根据所述第一控制指令,从所述级联数据块中截取所述第三数据块。
其中,上述控制单元130可以用于接收译码电路信号,并根据译码电路信号产生相应的控制逻辑控制访存设备中的单元。
上述第一控制指令可以用于指示截取级联数据块的方式。例如,第一控制指令可以包含第一指示信息,该第一指示信息可以用于指示第三数据块在级联数据块中的起始位置。级联单元可以根据第一指示信息,从该起始位置开始截取所述第三数据块。
在本申请实施例中,可以根据第一控制指令从输入缓存单元的两个数据块中按照任意起始地址快速取得一个向量长度数据,即通过一条指令支持任意地址非对齐访问,能够精简地址非对齐访问的指令,提高访存效率。
又例如,所述第一指示信息可以包含所述第三数据块的起始位置的数据序号,所述第一控制指令还可以包括第二指示信息,所述第二指示信息用于确定所述待计算的数据块的数据格式,所述级联设备根据所述起始位置的数据序号以及所述待计算的数据块的数据格式,确定所述第三数据块在所述级联数据块中的起始位置。其中,上述数据格式可以指示数据块中的每个元素的宽度。上述数据序号用于指示数据块中的元素的序号。
作为一个示例,该指令可以表示为“VRt=CAS.TYPE(VRm,VRn),Rs”。其中,其中,CAS表示为指令操作码,TYPE表示级联运算的数据格式,例如,TYPE可以是8、16、32、64、比特(英文:bits)。或者,TYPE可以表示向量中一个元素的宽度。VRm、VRn分别表示级联前的两个向量寄存器。Rs表示对级联后的数据块截取的初始位置,Rs可以配合TYPE,确定截取数据块的起始位置和截取长度。
图3示出了级联单元进行级联运算的过程。级联单元可以从输入缓存单元读取数据,并将数据读入向量寄存器中。在本申请实施例中,一个数据块的单位长度可以等于向量寄存器的长度。数据块也可以称为向量数据。根据该指令,级联单元需要对VRm和VRn这两个向量寄存器进行级联,得到一个两倍向量长度的向量数据。其中,VRm和VRn储存的向量数据分别对应第一数据块和第二数据块。接下来,级联单元可以根据第一指示信息,确定截取第三数据块的起始位置和长度。例如,当RS=4时,表示从级联数据块的第4个单位长度的元素开始截取一个向量长度的第三数据块。具体地,假定向量长度是256bits,TYPE是32bits的。定义处理器并行粒度PS(Parallelism Size),表示共享局部存储单元的同类运算单元的数量。例如,可以是单指令多数据流(Single Instruction Multiple Data,SIMD)或向量处理器中算数逻辑单元(arithmetic and logic unit,ALU)运算单元数量,或者图像处理器(Graphics Processing Unit,GPU)中的多流处理器(streaming multiprocessor,SM)中流处理器(streaming processor,SP)的数量。可以根据TYPE确定PS的大小,用公式表示为:PS=256/32=8。即一个向量数据包括8个单位长度的元素。或者说一个向量寄存器包含8个单位长度。则级联后的数据块包括16个单位长度。当Rs=4时,表示级联单元把级联产生的16个单位的向量从地址4开始截取8个单位的元素,以得到新的向量,即得到第三数据块。
作为一个示例,图4示出了级联单元应用于卷积运算的示意图。对于3*3的卷积核,需要在列方向上连续访问这个跨存储行的向量数据时,只需把Rs分别设置成0、1、2。其中Rs=0为地址对齐访问,Rs=1或2为地址非对齐访问。
在本申请实施例中,可以根据第一控制指令从输入缓存单元的两个数据块中按照任意起始地址快速取得一个向量长度数据,即通过一条指令支持任意地址非对齐访问,能够精简地址非对齐访问的指令,提高访存效率。
本申请实施例的访问设备可以应用于卷积运算,尤其对于多次跨行访问相同的两个存储行时,可以通过多条级联指令,设置不同的Rs即可以完成上述功能,而不需要多次访问输入缓存单元。
可选地,输入缓存单元可以通过控制寄存器(Control Register,CR)对读写有效区域进行配置。输入缓存单元可以包括读端口和写端口。写端口用于根据指令将数据写入输入缓存单元。读端口用于根据指令将数据从输入缓存单元中读取出来。上述读端口和写端口可以分别是一个或多个端口。每个读端口或写端口可以对应一个用于存储指令的控制寄存器。读端口或写端口根据对应的控制寄存器的配置进行读操作或写操作。
输入缓存单元可以支持多种读写方式。例如,输入缓存单元可以支持循环自索引或立即数索引。其中,循环自索引可以通过硬件自动维护指针I,确定访问输入缓存单元的位置。例如,循环自索引可以根据地址范围、在所述地址范围的起始地址和步长确定访问输入缓存单元的具体地址。
例如,以读端口为例,所述输入缓存单元包括读端口,所述读端口与第一控制寄存器相连,所述第一控制寄存器存储有第一配置信息,所述第一配置信息用于指示所述输入缓存单元中的待读取数据块地址范围、在所述地址范围内的起始地址和步长,所述读端口从所述起始地址开始,以所述步长为相邻两次读操作的地址增长步长,循环读取所述地址范围内的数据块。
其中,上述起始地址也可以称为通过循环起始地址(例如,用start表示),上述地址范围可以指输入缓存单元中的部分地址范围。地址范围也可以称为循环窗口长度(例如,用Winlen表示)。上述步长可以指读端口每次读取的地址增长步长。例如,上述步长也可以称为循环地址增长步长(例如,用step表示)。
例如,图5示出了本申请实施例的输入缓存单元的结构示意图。如图5所示,假设输入缓存单元包括读端口0和读端口1两个读端口。循环窗口长度为6个缓存行。循环自索引起始地址为1,读端口0需要读数据d0/d2/d4,读端口1需要读数据d1/d3/d5,那么对读端口0和1分别配置为“start=1,WinLen=6,Step=2”,“start=2,WinLen=6,Step=2”。这样在连续的时钟周期内,读端口0访问输入缓存单元的地址为“IB[1]-IB[3]-IB[5]-IB[1]-IB[3]...”,对应访问的数据为“d0-d2-d4-d0-d2...”;读端口1访问输入缓存单元的地址为“IB[2]-IB[4]-IB[6]-IB[2]-IB[4]...”,对应访问的数据为“d1-d3-d5-d1-d3...”。
图6示出了本申请实施例的访问输入缓存单元的方法的示意图。如图6所示,访问输入缓存单元的方式可以表示为Addr=Start+I%WinLen,其中I=I+step,%表示取余。Addr表示读端口访问输入缓存器的具体地址,Start表示起始地址,I表示内部指针,Winlen表示循环窗口的长度,step表示步长。循环窗口可以是输入缓存单元内部的任一部分连续的地址范围。读端口根据步长依次循环读取循环窗口内的数据。
又例如,以写端口为例,所述输入缓存单元包括写端口,所述写端口与第二控制寄存器相连,所述第二控制寄存器存储有第二配置信息,所述第二配置信息用于指示所述输入缓存单元中的存储新的数据块的地址范围、在所述地址范围的起始地址和步长,所述写端口从所述起始地址,以所述步长为相邻两次写操作的地址增长步长,将新的数据块循环写入所述地址范围中。其中,写端口写入数据的具体方式与读端口读取数据的方式相似,此处不再赘述。
作为一个示例,循环自索引读操作的指令格式可以表示为:MOV IB[I++],Dest,表示从输入缓存单元的内部自索引地址处读出数据到目的寄存器(可以称为Dest),同时更新自索引指针I=I+step,其中,MOV表示数据搬运,数据方向是数据缓存单元→寄存器。IB表示输入缓存单元。
循环自索引写操作的指令格式可以表示为LD Addr,IB[I++],表示从存储器的Addr地址处加载数据,写往输入缓存单元内部自索引地址处,同时更新自索引指针I=I+Step,其中,LD表示数据搬运,数据方向是存储器→输入缓存单元,IB表示输入缓存单元。
作为一个示例,立即数索引的读操作的指令格式可以表示为MOV IB[imm],Dest,表示从IB[imm]处读取数据到dest。
立即数索引的写操作的指令格式可以表示为LD Addr,IB[imm],表示从存储器Addr地址处加载数据,写往IB[imm]处。
在本申请实施例中,输入缓存单元支持循环自索引的访问方式,在该访问方式下,读端口或写端口对应的控制寄存器只需存储待读取数据块的地址范围、在所述地址范围的起始地址和步长,便可以访问相应的数据。从而能够精简写端口或读端口的指令。进一步地,在循环自索引的访问方式下,可以配置访问数据的地址范围和步长,提高了访问输入缓存单元的数据的灵活性。
可选地,如图7所示,图7中的上下两部分别示出了输入缓存单元在行方向上相邻两次卷积运算写数据的示意图。从图7中可以看出,当卷积核在输入行数据行方向上移动时,相邻两次卷积运算输入数据具有重叠部分。可以对输入缓存单元的写操作分成初始化和更新两个阶段。对于k*k的卷积核,在初始化阶段加载2*k个向量;由于数据的重叠特性,更新阶段则只需要加载2个向量,重复利用之前的2k-2个向量,由此可以减少输入缓冲区访问***内存的次数。***内存例如可以是动态随机存储器(Dynamic Random AccessMemory,DRAM)。
例如,在图7中,在第一次卷积运算时,输入数据为d0~d5。第二次卷积运算时,随着卷积核沿着行方向移动,输入数据为d2~d7。两次相邻的卷积运算的输入数据d3~d5是重叠的。因此,在第二次卷积运算时,只需写入数据d6和d7,并覆盖数据d0和d1。
上文结合图1至图7介绍了本申请实施例的访存设备,下文将结合图8至图11介绍本申请实施例的计算设备。
图8示出了本申请实施例的计算设备300的示意性结构图。计算设备300可以用于乘累加运算。例如,计算设备300可以是乘累加阵列或包含乘累加阵列的设备。如图8所示,计算设备300包括乘法缓存单元310、乘法调度单元320和加法单元330,
所述乘法缓存单元310用于缓存待处理的乘累加指令。
可选地,乘法缓存单元310也可以称为乘法缓存单元(英文:Mul_Buffer)。乘法缓存单元可以缓存译码之后操作数准备好的乘累加指令。可选地,乘法缓存单元中的每个表项可以包括3个域。3个域分别为“指令类型(英文:opcode)”,“源操作数0值(英文:src0)”,“源操作数1值(src1)”。乘法缓存单元的深度可以根据指令发射的宽度设置。
所述乘法调度单元320用于从所述乘法缓存单元310获取第一乘累加指令,当所述第一乘累加指令中的乘法运算的源操作数包括可优化操作数时,通过优化操作确定所述乘法运算的运算结果,并将所述第一乘累加指令中的乘法运算的运算结果直接发送至所述加法单元,n为大于等于0的整数,所述可优化操作数包括-1、0或2n,所述优化操作包括符号取反操作、移位操作或取消操作。
所述加法单元330根据所述第一乘累加指令中的乘法运算的运算结果,执行所述第一乘累加指令中的加法运算,得到所述第一乘累加指令对应的乘累加运算的运算结果。
上述乘法调度单元320也可以称作乘法调度器(英文:Mul_Scheduler),乘法调度单元320可以根据乘法缓存单元310中的指令类型和源操作数对乘累加指令中的乘法运算-1,0,2n(n≥0)等运行中产生的特殊数据进行调度。例如,在具体调度过程中,对于源操作数包含0的情况,可以取消乘法结果。对于源操作数包含-1的情况,可以通过修改符号位取反获得乘法结果。对于源操作数包含2n的情况下,可以通过移位操作获得乘法运算的结果,并将上述乘法运算的运算结果直接发送至加法单元330,以便于加法单元执行加法操作。
在本申请实施例中,计算设备在第一乘累加指令中的乘法运算的源操作数包含-1或2n时,在通过符号取反操作或移位操作确定所述乘法运算的运算结果,直接发送给加法单元,而无需通过乘法器进行乘法运算,从而提高乘累加运算的速率和吞吐量以及降低乘累加运算的功耗。
可选地,所述乘法调度单元用于在一个时钟周期内调度从所述乘法缓存单元获取的多个乘累加指令,所述多个乘累加指令包含一个第一类型乘累加指令和至少一个第二类型乘累加指令,所述第一类型乘累加指令中的乘法运算的源操作数不包括-1,0和2n中的任一项,所述第二类型乘累加指令中的乘法运算的源操作数包括-1,0或2n。
可选地,上述计算设备还可以包括乘法器,乘法器与乘法调度单元320以及加法单元330相连。当第一乘累加指令中的乘法运算的源操作数中不包含-1,0,或2n时,乘法调度单元320将源操作数发送至乘法器,乘法器根据源操作数获得乘法运算的运算结果,并将该运算结果输送至加法单元330。
应理解,乘法器在一个时钟周期内可以处理一条第一类型乘累加指令,而乘法调度单元在一个时钟周期内可以不利用乘法器处理多条第二类型乘累加指令。
本申请实施例中的计算设备可以在一个时钟周期内处理多条乘累加指令,从而提高了乘累加运算的速度和吞吐量。
可选地,当乘累加调度指令的源操作数包含-1,0或2n(n≥0)时,乘法调度单元320在对-1,0或2n(n≥0)进行上述调度处理的时候,可以继续从乘法缓存单元310读取下一条指令,并继续进行上述调度。直至乘累加指令的源操作数不包含-1,0或2n(n≥0),或者直至乘法缓存单元310中不包含待处理的乘累加指令。在乘累加指令的源操作数不包含-1,0或2n(n≥0)时,乘法调度单元320可以将该乘累加指令发送给乘法器,由乘法器进行乘法运算的处理之后,将获取的乘法运算的运算结果发送给加法单元。因此,本申请实施例中,计算设备300可以同时处理多条乘累加指令,提高了乘累加运算的速率和吞吐量。
可选地,在一个时钟周期内,乘法调度单元可以顺序从乘法缓存单元获取乘累加指令,并根据上述调度方法对乘累加指令进行调度。例如,在一个时钟周期内,乘法调度单元在获取到第一类型乘累加指令后,可以将该第一类型乘累加指令发送至乘法器,乘法调度单元获取的下一条指令为第二类型乘累加指令时,可以将该第二类型乘累加指令进行移位、取反操作或取消操作之后,将运算结果直接发送至加法单元。若乘法调度单元获取的下一条指令还是第一类型乘累加指令时,由于乘法器已经在处理第一类型乘累加指令,则乘法调度单元可以停止从乘法缓存单元获取乘累加指令。直至下一个时钟周期,再开始处理乘累加指令。
可选地,上述加法单元330还包括加法缓存单元,加法调度单元、加法器和至少一个累加寄存器。所述加法缓存单元用于缓存用于加法运算的源操作数,所述源操作数包括所述待处理的乘累加指令中的乘法运算的运算结果;所述加法调度单元确定所述第一乘累加指令的加法运算的第一源操作数和第二源操作数,其中,所述第一源操作数与所述第二源操作数对应相同的目标累加寄存器,所述第二源操作数来自所述加法缓存单元或所述目标累加寄存器;所述加法调度单元利用所述加法器对所述第一源操作数和第二源操作数进行求和,得到求和结果;所述加法调度单元将所述求和结果写入所述加法缓存单元或所述目标累加寄存器。
可选地,乘法调度单元可以对乘累加指令分配对应的累加寄存器标签(英文;tag)。一组乘累加指令对应于相同的累加寄存器。该组乘累加指令中的乘法运算的运算结果需要进行求和,并将求和结果写入该组乘累加指令对应的累加寄存器中。
可选地,第一源操作数可以是加法缓存单元最底部的数据(即进入加法缓冲单元最早的数据)。第二源操作数的选择包括两种方式。第一种方式中,若加法缓存单元中还存储有与第一源操作数对应相同累加寄存器的目标数据,则可以将该目标数据作为加法运算的第二源操作数,并将加法运算的运算结果写往加法缓存单元。第二种方式中,若加法缓存单元不包含与第一源操作数对应相同累加寄存器的数据,则将第一源操作数对应的累加寄存器存储的数据作为加法运算的第二源操作数,并将加法运算的运算结果写往累加寄存器。
可选地,在第一种方式中,当把加法运算的运算结果写回加法缓存单元时,可以保留该运算结果对应的累加寄存器的标签,以便于该运算结果再次作为加法运算的源操作数时,确定其对应的累加寄存器,即该加法运算的运算结果与第一源操作数、第二源操作数对应相同的累加寄存器。并且第二源操作数可以是乘累加指令中乘法运算的运算结果,也可以是乘累加指令中的乘法运算的运算结果求和后的求和结果。
在第二种方式中,存储于累加寄存器中的数据可以是与第一乘累加指令属于同一组乘累加指令中的乘累加指令的乘累加运算结果。
在本申请实施例中,由于加法缓存单元可以同时缓存多个乘累加指令的乘法运算的结果,并且加法调度单元利用加法器首先对加法缓存单元中的对应相同累加寄存器的乘累加指令的乘法运算的运算求和,从而能够减少了访问累加寄存器次数,减少访问累加寄存器产生的流水线停顿,提高了处理乘累加运算的速率和吞吐量。
可选地,当所述第一乘累加指令是第一组乘累加指令中的第一个乘累加指令时,所述乘法调度单元用于为所述第一乘累加指令标识新的目标累加寄存器,所述第一组乘累加指令中的乘累加指令中的乘法运算的运算结果对应相同的累加寄存器。其中,上述标识新的目标累加寄存器,可以是为第一组乘累加指令分配新的累加寄存器标签。
作为一个示例,上述加法缓存单元也可以称为加法缓冲器(英文:ArithmeticLogic Unit Buffer,ALU_Buffer)。加法缓存单元可以用于缓存乘累加指令的乘法结果。加法缓存单元的数据可以来源于乘法调度单元或乘法器。加法缓存单元的深度可以根据指令发射的宽度确定。
作为一个示例,上述加法调度单元可以称为加法调度器(英文:ALU_scheduler)对乘累加指令的加法运算进行调度。加法调度单元通过对多条乘累加指令进行调度,以避免多条连续乘累加指令之间数据相关引起的流水线停顿。
作为一个示例,上述至少一个累加寄存器可以是多个累加寄存器,上述多个乘累加寄存器可以保证在该计算设备中同时运行多组乘累加指令。累加寄存器的数目可以根据指令发射宽度设置。
可选地,上述加法缓存单元缓存待处理的乘累加指令的乘法运算的运算结果。待处理的乘累加指令可以包括多个乘累加指令。该多个乘累加指令可以包含至少一组乘累加指令。其中,至少一组乘累加指令中的每组乘累加指令的乘法运算的结果用于求和,每组乘累加指令对应于至少一个累加寄存器中的一个累加寄存器。每组乘累加指令的求和结果用于写入对应的累加寄存器。
可选地,在累加寄存器存储的数据充当加法运算的第二源操作数进入加法运算流水线时,在累加寄存器未完成写回操作之前,该累加寄存器不再作为第二源操作数进入加法运算的流水线,以保证同一组内部的多条乘累加指令之间不发生数据相关。
应理解,在现有技术中,当乘累加运算设备在乘累加指令存在数据相关时,需要流水线停顿。且现有技术中的加法单元中在求和时,每处理一个目标乘累加指令的乘累加运算,都需要将对应的累加寄存器内的乘累加运算结果读取到加法器中,与该条目标乘累加指令的乘法运算的结果进行求和,并将得到的求和结果作为更新的乘累加运算的运算结果存入乘累加寄存器中。该乘累加寄存器在没有完成写回操作之前,不能再次充当第二源操作数进入加法器的流水线,从而导致乘累加运算的速率和吞吐量较低。
在本申请实施例中,由于加法缓存单元可以同时缓存多个乘累加指令的乘法运算的结果,并且加法调度单元利用加法器首先对加法缓存单元中的对应同一累加寄存器的乘累加指令的乘法运算的运算求和,在对加法缓存单元中的对应同一累加寄存器的所有乘累加指令进行求和,并在获得求和结果之后,再与累加寄存器中的乘累加结果求和,并将结果写回累加寄存器,从而能够减少访问累加寄存器的次数,提高了处理乘累加运算的速率和吞吐量。
作为一个具体示例,图9示出了本申请实施例的计算设备500。计算设备500也可以称为乘累加器。如图9所示,计算设备500以乘法器(用Mul表示)和加法器(用ALU表示)为基础,还可以包括以下各单元:
乘法缓存单元(用Mul_Buffer表示):可以是图8中的乘法缓存单元。乘法缓存单元中缓存了译码之后操作数准备好的乘累加指令,乘法缓存单元的每个表项包含{“指令类型opcode”,“源操作数0值src0”,“源操作数1值src1”}3个域,乘法缓存单元的深度可以根据指令发射的宽度自行设置。
乘法调度器(用Mul_Scheduler表示):可以是图8中的乘法调度单元。根据Mul_Buffer中的指令类型和源操作数数据对乘累加指令中乘法运算-1/0/2n(n>=0)等特殊值进行调度,调度完成的指令可以发往Mul和Mul流水线后面的加法缓存单元(用ALU_Buffer表示)。
加法缓存单元(用ALU_Buffer表示):ALU_Buffer中缓存乘累加指令中的乘法结果,ALU_Buffer的数据可以来自Mul_Scheduler和Mul。同Mul_Buffer类似,ALU_Buffer的深度可以根据指令发射的宽度自行设定。
加法调度器(用ALU_Scheduler表示):ALU_Scheduler对乘累加指令的加法运算进行调度,避免多条连续乘累加指令之间数据相关引起的流水线停顿。
累加寄存器组(用ACC表示):多个乘累加寄存器保证在该乘累加器中同时运行多组乘累加指令。其中,一组乘累加指令定义为包含1个MACC指令的指令序列,关于MACC指令请参见后文的详细介绍,累加寄存器的数目可以根据指令发射宽度自行设定。
通过增加以上硬件逻辑,该计算设备500可以支持两种乘累加指令,它们分别为:
1)正常乘累加指令,定义为“MAC X,Y”。其功能为把输入数据X和Y进行乘法运算,并把该乘法结果与当前的累加寄存器进行相加,最后把加法结果写回至乘累加寄存器,即ACC+=X*Y.
2)设置乘累加寄存器初值为零的乘累加指令,定义为“MACC X,Y”。其功能为把输入数据X和Y进行乘法运算,把乘法结果写回至累加寄存器(相当于先设定乘累加寄存器初值为0,然后进行乘累加运算),即ACC=X*Y。
计算设备500的工作可以分为三个步骤:
1)译码且读操作数完成之后的乘累加指令进入Mul_Buffer;
2)Mul_Scheduler对乘法运算进行调度;
3)ALU_Scheduler对加法运算进行调度。
图10和图11分别示出了本申请实施例的乘累加运算的流程示意图。其中图10是本申请实施例的乘累加运算中乘法运算的流程图。图11是本申请实施例的乘累加运算的加法运算的流程图。下文将结合图9至图11,详细介绍利用计算设备500执行乘累加指令的具体流程。
a.译码且读操作数完成之后的乘累加指令进入Mul_Buffer
如图10所示,乘累加指令经译码、读操作数之后由指令缓冲区进入Mul_Scheduler。指令在进入Mul_Scheduler时,只要指令缓冲区存在乘累加指令,且这些乘累加指令都准备好了除累加寄存器外的两个源操作数,这些指令就发往Mul_Buffer。Mul_Bufffer停止接受乘累加指令的条件为:1)Mul_Buffer已满;2)当前没有译码完成的乘累加指令。
可选地,指令在进入Mul_Scheduler时,可以考虑乘累加指令与其他指令之间的数据相关,并进行相应的调度。
经过本步骤之后,Mul_Buffer中缓存了多条操作数准备好、译码完成的乘累加指令。
b.Mul_Scheduler对乘法运算进行调度。
如图10所示,Mul_Scheduler对Mul_Buffer中乘累加指令的乘法运算进行调度。其用于对乘累加指令的源操作数进行判断,并根据判断结果确定调度方式。其主要包括两种情况:第一种情况是乘累加指令的源操作数含有-1/0/2n(n>=0);第二种情况是是乘累加指令的源操作数不含有-1/0/2n(n>=0)。这两种情况的调度方式分别如下所述。
1.若乘累加指令的源操作数含有-1/0/2n(n>=0)时,对该指令进行如下处理,并继续从Mul_Buffer中取下一条指令进行判断。
1)若源操作数含有0,直接把该指令取消掉。
2)若源操作数含有-1//2n(n>=0),通过修改符号位或移位操作直接得到乘法结果,并把该乘法结果发往ALU_Buffer。同时标记需要写往的累加寄存器标签(英文:Tag),如Tag(ACC0),表示该条乘累加指令最终需要把结果写往累加寄存器ACC0。
2.若指令源操作数不含-1/0/2n(n>=0)时,该指令正常发往Mul,标记需要写往的累加寄存器Tag。继续从Mul_Buffer中取指令进行判断,如源操作数含有-1/0/2n(n>=0)则重复步骤1,直到乘累加指令的乘法源操作数不含有-1/0/2n(n>=0)为止。
正常的进入Mul流水线的MAC/MACC指令,经过乘法器的流水线延时,最终把乘法运算结果写往ALU_Buffer,并标记需要写往的累加寄存器Tag。对于MACC指令,设定相应Tag的累加寄存器值为0。
经过该步骤之后,ALU_Buffer中缓存了多条乘累加指令中乘法运算的结果,这些乘法结果需要与累加寄存器进行加法运算。
c.ALU_Scheduler对加法运算进行调度
如图11所示,ALU_Scheduler对加法运算进行调度。具体调度方法如下所示:
以ALU_Buffer最底部(进入ALU_Buffer最早)的数据作为ALU加法运算第一源操作数,ALU加法运算第二源操作数按照如下方法选择:
1.若ALU_Buffer中含有与第一源操作数具有相同累加寄存器Tag的数据,则把该数据作为ALU第二源操作数,ALU加法运算结果写回ALU_Buffer,保留累加寄存器Tag。
2.若ALU_Buffer中不含有与第一源操作数具有相同累加寄存器Tag的数据,则把与第一源操作数相同标示Tag的累加寄存器作为ALU第二源操作数,ALU加法运算结果写回到对应的累加寄存器。
当累加寄存器充当ALU第二源操作数进入ALU流水线时,由于产生数据相关,在该累加寄存器没有完成写回操作之前,该累加寄存器不能再次充当第二源操作数而进入ALU流水线,这保证了同一组内部的多条乘累加指令之间不会发生数据相关。
在本申请实施例中,计算设备500可以对乘法运算中的-1、0、2n等数值值进行优化处理,对加法运算中的操作时,首先将加法缓存单元的具有相同累加寄存器标签的数据求和,然后再与累加寄存器中的乘累加结果求和,从而能够减少访问累加寄存器的次数,进而减少了流水线卡顿,提高了处理乘累加运算的效率和吞吐量。
可选地,上文结合图1至图11介绍了本申请实施例的访存设备和计算设备,下文将结合图12至图15,介绍本申请实施例的应用于卷积神经网络运算的设备。
图12是本申请实施例的应用于卷积神经网络的设备700的示意图。如图12所示,应用于卷积神经网络运算的设备700包括本申请实施例中访存设备710和计算设备720。其中,访存设备710可以是本申请实施例中的任一访存设备,计算设备720可以是本申请实施例中的任一计算设备。
在本申请实施例中,应用于卷积神经网络运算的设备包括访存单元,访存单元可以。从而能够通过截取级联数据块中数据的方法实现快速的地址非对齐访问,提高了地址非对齐访问的效率。并且卷积神经网络运算设备包含的计算设备在第一乘累加指令中的乘法运算的源操作数包含-1或2n时,在通过符号取反操作或移位操作确定所述乘法运算的运算结果,直接发送给加法单元,而无需通过乘法器进行乘法运算,从而提高乘累加运算的速率和吞吐量以及降低乘累加运算的功耗。
作为一个具体实施例,图13示出了本申请实施例的设备800的结构示意图。设备800可以应用于卷积神经网络运算。其中图7中的访存设备710可以包括图13中的输入缓存区830,级联单元850。进一步地,访存设备710还可以包括控制单元810,权值缓冲区840,广播单元860。图7中的计算设备720可以包括图13中的快速乘累加阵列870。具体地,如图13所示,设备800包括:
控制单元(CU,Control Unit)810:接收译码电路信号,并产生相应的控制逻辑控制整个***。
存储器(Memory)820:存储输入数据、权值数据以及最终的卷积结果。其中,存储器820可以是***内存,例如,存储器820可以是DRAM。
输入缓冲区(Input Buffer,IB)830:与控制单元810、存储器820、级联单元850相连,按照卷积的并行计算方向,对卷积运算的输入数据进行缓冲,可以支持循环自索引或立即数索引两种访问方式。其中,输入缓冲区可以是图2至图7中所述的输入缓存单元。例如,输入缓冲区可以是缓存。
权值缓冲区(Weight Buffer,WB)840:与控制单元810、存储器820、广播单元820相连,按照卷积的并行计算方向,对卷积运算的权值数据进行缓冲。例如,权值缓冲区可以是缓存。
级联单元(Cascading Unit,CaU)850:对两个向量进行级联,并从两个向量中截取合适的位段,产生新的向量数据,用于卷积(乘累加)运算,以减少多次访问相同的跨存储行时对输入缓冲区的访问次数。其中,级联单元可以是图2至图7中所述的级联单元。
广播单元(Broadcasting Unit,BU)860:对卷积核的单个权值数据进行广播,产生向量数据。
乘累加阵列(MAC Array,MACA)870:采用算法和控制调度方法,对输入数据和卷积权值进行乘累加运算。其中,乘累加阵列870可以是上述计算设备。例如,乘累加阵列可以是上述计算设备500或计算设备700。
部分和缓冲区(Partial-Sum Buffer,PB,)880:缓存快速乘累加阵列870产生的乘累加结果,根据控制单元810产生的译码控制信号,把部分和缓冲区880中的数据输出至快速乘累加阵列,以用于与新的乘法结果进行累加操作;或输出至存储器820,以作为最终的卷积结果。
可选地,输入缓存区830可以用于读取每次卷次运算时的输入数据。输入缓存830的结构示意图可以参考图5所示的输入缓存单元的结构示意图。如图5所示,假设卷积核大小为3*3,处理器并行度PS=4。图5中的阴影部分表示一个列方向上卷积并行运算(在列方向上同时执行4个卷积操作)所有相关的数据,其中虚线框内表示的第一个卷积运算卷积核的位置。可以看出,一个卷积运算与6个向量相关,在列方向表示为d0~d5,分别把这6个向量存放在输入缓存单元(即相当于输入缓存区830)中。
图14示出了本申请实施例中的权值缓冲区的工作示意图。如图14所示,可选地,权值缓冲区根据卷积运算的并行方向,对卷积核权值进行缓存。如果在行方向并行,则按照行序列进行存储;如果在行方向并行,则按照列序列进行存储。权值缓冲区设置为1个写端口,1个读端口,缓冲区的深度可以灵活设置。
可选地,级联单元850可以把两个向量寄存器首尾相连拼接,并在拼接后的2x长度向量寄存器中截取连续的一个单位的向量值。级联单元850应用于卷积运算的示意图可以参考图4的相关内容的描述,此处不再赘述。
图15示出了广播单元应用于卷积运算的示意图。如图15所示,广播单元把向量寄存器中的单个元素广播乘向量的形式,对于卷积运算,则把卷积核中的每个权值元素广播成向量形式。其指令格式可以为“VRt=BRO.TYPE VRm,Rs”,其中BRO表示为操作码,TYPE表示级联运算的数据格式,例如,TYPE可以是8、16、32、64、比特(英文:bits)。或者,TYPE可以表示向量中一个元素的宽度。VRm表示向量寄存器。在图15中,作为一个示例,广播单元把向量寄存器中的4号元素进行广播,形成向量数据。
可选地,乘累加阵列870可以包括PS个乘累加器。PS表示处理器并行粒度。图16示出了乘累加阵列870与级联单元、广播单元的关系结构图。如图16所示,乘累加阵列870接收级联单元850产生的输入数据,以及广播单元860产生的卷积核权值数据进行乘累加运算。它对乘法运算中的-1/0/2n等特殊值进行优化处理,由于卷积运算中通常包含大量的-1/0/2n特殊值,因此能提高乘累加运算的速度。同时,它可以通过硬件自行处理数据相关,并通过专用的指令读出累加寄存器的值。乘累加阵列870包括的乘累加器的具体结构可以参考图7至图11中的计算设备的相关内容,此处不再赘述。
本申请实施例提供的设备800,能够提高卷积运算速度和吞吐量,其输入缓冲区可以缓存重复使用的输入数据,减少访问慢速存储器的次数;级联单元可以产生跨存储行的向量数据,避免频繁访问输入缓冲区;乘累加器对乘法运算器中-1、0、2n等特殊值进行快速乘法运算,并能自动处理数据相关。
另外,本文中术语“***”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
该作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例该方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上某一实施例中的技术特征和描述,为了使申请文件简洁清楚,可以理解应用于其他实施例,在其他实施例不再一一赘述。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种访存设备,其特征在于,包括:
输入缓存单元,用于缓存待计算的数据块;
级联单元,与所述输入缓存单元相连,所述级联单元用于从所述输入缓存单元中读取所述待计算的数据块,所述待计算的数据块包括第一数据块和第二数据块;将所述第一数据块尾部和所述第二数据块首部相连,得到级联数据块;从所述级联数据块中截取第三数据块,所述第三数据块包含所述级联数据块中的一段连续的数据,且所述第三数据块的长度与所述输入缓存单元中的所述第一数据块或所述第二数据块的长度相等。
2.如权利要求1所述的访存设备,其特征在于,
所述访存设备还包括:
控制单元,所述控制单元与所述级联单元相连,用于向所述级联单元发送第一控制指令,所述第一控制指令用于指示所述级联数据块的截取方式;
所述级联单元根据所述第一控制指令,从所述级联数据块中截取所述第三数据块。
3.如权利要求2所述的访存设备,其特征在于,所述第一控制指令包含第一指示信息,所述第一指示信息用于指示所述第三数据块在所述级联数据块中的起始位置。
4.如权利要求3所述的访存设备,其特征在于,所述第一指示信息包含所述第三数据块的起始位置的数据序号,所述第一控制指令还包括第二指示信息,所述第二指示信息用于指示所述待计算的数据块的数据格式;
所述级联单元根据所述数据序号以及所述数据格式,确定所述第三数据块在所述级联数据块中的起始位置。
5.如权利要求1-4中任一项所述的访存设备,其特征在于,所述输入缓存单元包括读端口,所述读端口与第一控制寄存器相连,所述第一控制寄存器存储有第一配置信息,所述第一配置信息用于指示所述输入缓存单元中的待读取数据块的地址范围、在所述地址范围内的起始地址和步长,所述读端口从所述起始地址开始,以所述步长为相邻两次读操作的地址增长步长,循环读取所述地址范围内的数据块。
6.如权利要求1-4中任一项所述的访存设备,其特征在于,所述输入缓存单元包括写端口,所述写端口与第二控制寄存器相连,所述第二控制寄存器存储有第二配置信息,所述第二配置信息用于指示所述输入缓存单元中的存储新的数据块的地址范围、在所述地址范围的起始地址和步长,所述写端口从所述起始地址开始,以所述步长为相邻两次写操作的地址增长步长,将新的数据块循环写入所述地址范围中。
7.一种计算设备,其特征在于,所述计算设备与权利要求1至6任意一项所述的访存设备连接,所述计算设备用于对所述的访存设备中缓存的数据块进行计算,所述计算设备包括乘法缓存单元、乘法调度单元和加法单元,
所述乘法缓存单元用于缓存待处理的乘累加指令;
所述乘法调度单元用于从所述乘法缓存单元获取第一乘累加指令,当所述第一乘累加指令中的乘法运算的源操作数包括可优化操作数时,通过优化操作确定所述乘法运算的运算结果,并将所述第一乘累加指令中的乘法运算的运算结果直接发送至所述加法单元,n为大于等于0的整数,所述可优化操作数包括-1或2n,所述优化操作包括符号取反操作或移位操作;
所述加法单元根据所述第一乘累加指令中的乘法运算的运算结果,执行所述第一乘累加指令中的加法运算,得到所述第一乘累加指令对应的乘累加运算的运算结果。
8.如权利要求7所述的计算设备,其特征在于,所述乘法调度单元用于在一个时钟周期内调度从所述乘法缓存单元获取的多个乘累加指令,所述多个乘累加指令包含一个第一类型乘累加指令和至少一个第二类型乘累加指令,所述第一类型乘累加指令中的乘法运算的源操作数不包括-1,0和2n中的任一项,所述第二类型乘累加指令中的乘法运算的源操作数包括-1,0或2n。
9.如权利要求7或8所述的计算设备,其特征在于,所述加法单元还包括加法缓存单元,加法调度单元、加法器和至少一个累加寄存器,
所述加法缓存单元用于缓存用于加法运算的源操作数,所述源操作数包括所述待处理的乘累加指令中的乘法运算的运算结果;
所述加法调度单元确定所述第一乘累加指令的加法运算的第一源操作数和第二源操作数,其中,所述第一源操作数与所述第二源操作数对应相同的目标累加寄存器,所述第二源操作数来自所述加法缓存单元或所述目标累加寄存器;
所述加法调度单元对所述第一源操作数和第二源操作数进行求和,得到求和结果;
所述加法调度单元将所述求和结果写入所述加法缓存单元或所述目标累加寄存器。
10.如权利要求9所述的计算设备,其特征在于,当所述加法缓存单元存储有对应于所述目标累加寄存器的目标数据时,所述加法调度单元将所述目标数据确定为所述第二源操作数,并将所述求和结果写入所述加法缓存单元;当所述加法缓存单元未存储所述目标数据时,所述加法调度单元将所述目标累加寄存器存储的乘累加结果作为所述第二源操作数,并将所述求和结果写入所述目标累加寄存器。
11.如权利要求9所述的计算设备,其特征在于,当所述第一乘累加指令是第一组乘累加指令中的第一个乘累加指令时,所述乘法调度单元用于为所述第一组乘累加指令标识新的目标累加寄存器,所述第一组乘累加指令中的乘累加指令中的乘法运算的运算结果对应相同的累加寄存器。
12.一种应用于卷积神经网络运算的设备,包括如权利要求1至权利要求6中任一项所述的访存设备,以及如权利要求7至权利要求11中任一项所述的计算设备。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/110436 WO2018107476A1 (zh) | 2016-12-16 | 2016-12-16 | 访存设备、计算设备和应用于卷积神经网络运算的设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110073329A CN110073329A (zh) | 2019-07-30 |
CN110073329B true CN110073329B (zh) | 2021-06-22 |
Family
ID=62557794
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680091648.1A Active CN110073329B (zh) | 2016-12-16 | 2016-12-16 | 访存设备、计算设备和应用于卷积神经网络运算的设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110073329B (zh) |
WO (1) | WO2018107476A1 (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388446A (zh) * | 2018-02-05 | 2018-08-10 | 上海寒武纪信息科技有限公司 | 运算模块以及方法 |
US11429850B2 (en) * | 2018-07-19 | 2022-08-30 | Xilinx, Inc. | Performing consecutive mac operations on a set of data using different kernels in a MAC circuit |
CN111290698B (zh) * | 2018-12-07 | 2022-05-03 | 上海寒武纪信息科技有限公司 | 数据存取方法、数据处理方法、数据存取电路和运算装置 |
CN110780921B (zh) * | 2019-08-30 | 2023-09-26 | 腾讯科技(深圳)有限公司 | 数据处理方法和装置、存储介质及电子装置 |
CN112445525A (zh) * | 2019-09-02 | 2021-03-05 | 中科寒武纪科技股份有限公司 | 数据处理方法、相关设备及计算机可读介质 |
CN111008040B (zh) * | 2019-11-27 | 2022-06-14 | 星宸科技股份有限公司 | 缓存装置及缓存方法、计算装置及计算方法 |
CN110991619A (zh) * | 2019-12-09 | 2020-04-10 | Oppo广东移动通信有限公司 | 神经网络处理器、芯片和电子设备 |
CN111242293B (zh) * | 2020-01-13 | 2023-07-18 | 腾讯科技(深圳)有限公司 | 一种处理部件、数据处理的方法以及电子设备 |
US11398086B2 (en) | 2020-06-01 | 2022-07-26 | Hcl Technologies Limited | System and method for performing a convolution operation with functional safety mechanism |
CN111782580B (zh) * | 2020-06-30 | 2024-03-01 | 北京百度网讯科技有限公司 | 复杂计算装置、方法、人工智能芯片和电子设备 |
CN111814972B (zh) * | 2020-07-08 | 2024-02-02 | 上海雪湖科技有限公司 | 一种基于fpga的神经网络卷积运算加速方法 |
CN112329910B (zh) * | 2020-10-09 | 2024-06-04 | 东南大学 | 一种面向结构剪枝结合量化的深度卷积神经网络压缩方法 |
CN114581280A (zh) * | 2020-11-30 | 2022-06-03 | 北京君正集成电路股份有限公司 | 一种基于4bit普通卷积计算的优化方法 |
CN114581281A (zh) * | 2020-11-30 | 2022-06-03 | 北京君正集成电路股份有限公司 | 一种基于第一层4bit卷积计算的优化方法 |
CN112559046A (zh) * | 2020-12-09 | 2021-03-26 | 清华大学 | 数据处理装置及人工智能处理器 |
CN112631955B (zh) * | 2020-12-18 | 2024-01-19 | 北京地平线机器人技术研发有限公司 | 数据处理方法、装置、电子设备以及介质 |
CN112613053B (zh) * | 2020-12-25 | 2024-04-23 | 北京天融信网络安全技术有限公司 | 一种数据加解密方法及装置 |
CN113448624B (zh) * | 2021-07-15 | 2023-06-27 | 安徽聆思智能科技有限公司 | 数据存取方法及装置、***、ai加速器 |
CN117057403B (zh) * | 2023-10-10 | 2024-02-13 | 苏州元脑智能科技有限公司 | 一种运算模块、基于脉冲神经网络的加速器及方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6917933B2 (en) * | 1999-07-26 | 2005-07-12 | Microsoft Corporation | Catalog management system architecture having data table objects and logic table objects |
CN101069169A (zh) * | 2004-11-23 | 2007-11-07 | 思科技术公司 | 在网络元件处缓存内容和状态数据 |
CN101216753A (zh) * | 2008-01-04 | 2008-07-09 | 清华大学 | 一种用于浮点除法和平方根运算的预处理电路结构 |
CN101404555A (zh) * | 2008-08-07 | 2009-04-08 | 北京九方中实电子科技有限责任公司 | 数字传输中的一种卷积交织解交织的方法 |
CN101547019A (zh) * | 2008-03-25 | 2009-09-30 | 卓胜微电子(上海)有限公司 | Dtmb***中信道估计方法及实现该方法的装置 |
CN101605116A (zh) * | 2008-06-10 | 2009-12-16 | 卓胜微电子(上海)有限公司 | 帧结构保护间隔的构成方法、循环卷积重构方法及装置 |
CN102388385A (zh) * | 2011-09-28 | 2012-03-21 | 华为技术有限公司 | 数据处理的方法和装置 |
CN102629189A (zh) * | 2012-03-15 | 2012-08-08 | 湖南大学 | 基于fpga的流水浮点乘累加方法 |
CN103944535A (zh) * | 2014-04-22 | 2014-07-23 | 天津大学 | 一种利用频响特性配置的全相位滤波器组的方法及其装置 |
CN104077233A (zh) * | 2014-06-18 | 2014-10-01 | 百度在线网络技术(北京)有限公司 | 单通道卷积层及多通道卷积层处理方法和装置 |
CN106203621A (zh) * | 2016-07-11 | 2016-12-07 | 姚颂 | 用于卷积神经网络计算的处理器 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6757705B1 (en) * | 1998-08-14 | 2004-06-29 | Microsoft Corporation | Method and system for client-side caching |
US20030105837A1 (en) * | 2001-11-30 | 2003-06-05 | Yury Kamen | Interception for optimal caching of distributed applications |
CN1964227B (zh) * | 2005-11-11 | 2012-03-07 | 华为技术有限公司 | 一种数据交互方法及数据收发模块 |
CN101150358B (zh) * | 2006-09-21 | 2012-04-18 | 电信科学技术研究院 | 增强上行控制信道的处理和复用方法 |
CN100525709C (zh) * | 2007-11-15 | 2009-08-12 | 上海交通大学 | 多源马鞍线轨迹锥形束ct近似重建方法 |
CN101610141B (zh) * | 2008-06-18 | 2013-06-05 | 中兴通讯股份有限公司 | 多天线多用户数据的联合检测方法及其处理装置 |
CN101882216B (zh) * | 2009-05-08 | 2012-11-21 | 成都市华为赛门铁克科技有限公司 | 构建数据指纹的方法、装置及电子设备 |
-
2016
- 2016-12-16 CN CN201680091648.1A patent/CN110073329B/zh active Active
- 2016-12-16 WO PCT/CN2016/110436 patent/WO2018107476A1/zh active Application Filing
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6917933B2 (en) * | 1999-07-26 | 2005-07-12 | Microsoft Corporation | Catalog management system architecture having data table objects and logic table objects |
CN101069169A (zh) * | 2004-11-23 | 2007-11-07 | 思科技术公司 | 在网络元件处缓存内容和状态数据 |
CN101216753A (zh) * | 2008-01-04 | 2008-07-09 | 清华大学 | 一种用于浮点除法和平方根运算的预处理电路结构 |
CN101547019A (zh) * | 2008-03-25 | 2009-09-30 | 卓胜微电子(上海)有限公司 | Dtmb***中信道估计方法及实现该方法的装置 |
CN101605116A (zh) * | 2008-06-10 | 2009-12-16 | 卓胜微电子(上海)有限公司 | 帧结构保护间隔的构成方法、循环卷积重构方法及装置 |
CN101404555A (zh) * | 2008-08-07 | 2009-04-08 | 北京九方中实电子科技有限责任公司 | 数字传输中的一种卷积交织解交织的方法 |
CN102388385A (zh) * | 2011-09-28 | 2012-03-21 | 华为技术有限公司 | 数据处理的方法和装置 |
CN102629189A (zh) * | 2012-03-15 | 2012-08-08 | 湖南大学 | 基于fpga的流水浮点乘累加方法 |
CN103944535A (zh) * | 2014-04-22 | 2014-07-23 | 天津大学 | 一种利用频响特性配置的全相位滤波器组的方法及其装置 |
CN104077233A (zh) * | 2014-06-18 | 2014-10-01 | 百度在线网络技术(北京)有限公司 | 单通道卷积层及多通道卷积层处理方法和装置 |
CN106203621A (zh) * | 2016-07-11 | 2016-12-07 | 姚颂 | 用于卷积神经网络计算的处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN110073329A (zh) | 2019-07-30 |
WO2018107476A1 (zh) | 2018-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110073329B (zh) | 访存设备、计算设备和应用于卷积神经网络运算的设备 | |
US11175920B2 (en) | Efficient work execution in a parallel computing system | |
CN109522254B (zh) | 运算装置及方法 | |
EP3451162B1 (en) | Device and method for use in executing matrix multiplication operations | |
US20180341495A1 (en) | Hardware Accelerator for Convolutional Neural Networks and Method of Operation Thereof | |
CN108491359B (zh) | 子矩阵运算装置及方法 | |
CN111213125B (zh) | 使用simd指令进行高效的直接卷积 | |
GB2497698B (en) | Performing a multiply-multiply-accumulate instruction | |
CN106990940B (zh) | 一种向量计算装置及运算方法 | |
US8122078B2 (en) | Processor with enhanced combined-arithmetic capability | |
US8984043B2 (en) | Multiplying and adding matrices | |
JP2020529070A (ja) | ベクトル計算ユニット | |
US20180121386A1 (en) | Super single instruction multiple data (super-simd) for graphics processing unit (gpu) computing | |
CN107315717B (zh) | 一种用于执行向量四则运算的装置和方法 | |
GB2553783A (en) | Vector multiply-add instruction | |
US9898286B2 (en) | Packed finite impulse response (FIR) filter processors, methods, systems, and instructions | |
KR102556033B1 (ko) | 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템 | |
CN111506520B (zh) | 一种地址生成的方法、相关装置以及存储介质 | |
WO2015114305A1 (en) | A data processing apparatus and method for executing a vector scan instruction | |
JP7495194B2 (ja) | 積和演算用のプロセッサ・ユニット | |
US10754652B2 (en) | Processor and control method of processor for address generating and address displacement | |
US9569218B2 (en) | Decomposing operations in more than one dimension into one dimensional point operations | |
US20140160135A1 (en) | Memory Cell Array with Dedicated Nanoprocessors | |
WO2022220835A1 (en) | Shared register for vector register file and scalar register file | |
GB2617828A (en) | Technique for handling data elements stored in an array storage |
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 |