CN114298296A - 基于存算一体阵列的卷积神经网络处理方法和装置 - Google Patents
基于存算一体阵列的卷积神经网络处理方法和装置 Download PDFInfo
- Publication number
- CN114298296A CN114298296A CN202111653640.9A CN202111653640A CN114298296A CN 114298296 A CN114298296 A CN 114298296A CN 202111653640 A CN202111653640 A CN 202111653640A CN 114298296 A CN114298296 A CN 114298296A
- Authority
- CN
- China
- Prior art keywords
- sub
- convolution
- input feature
- array
- columns
- 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
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
一种基于存算一体阵列的卷积神经网络处理方法和卷积神经网络处理装置。该方法包括:基于输入特征图的宽度x_in、高度y_in和通道数C_in及卷积核的宽度x_k、高度y_k、通道数C_in,设置输入特征图的子输入特征图的宽度为x、高度为y、通道数为z,并且设置卷积核的子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,且x×y×z的结果小于或等于存算一体阵列行数;基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中;将子输入特征图以行输入信号输入到至少一个存算一体阵列中,得到计算结果。该方法提高了阵列的利用率。
Description
技术领域
本公开的实施例涉及一种基于存算一体阵列的卷积神经网络处理方法和卷积神经网络处理装置。
背景技术
随着信息科学的飞速发展,越来越多的人工智能算法和技术应用在社会生活的各个领域。其中人工神经网络算法由于其结构多样、网络大小深度可调、有学习和处理能力,对误差有一定容忍度等优势,近些年来被广泛研究,是当今人工智能技术的核心。而卷积神经网络作为人工神经网络的一种,由于其拥有权值共享、多重采样等特征,被广泛应用于计算机视觉领域,包括图像分类、目标检测、语义分割等众多场景。
目前神经网络主要是部署在中央处理器、图形处理器上,但是由于算力需求的不断提升,冯诺依曼体系结构的问题凸显,面临着“存储墙”和“功耗墙”等问题。而基于忆阻器的存算一体阵列,可以利用欧姆定律和基尔霍夫电路电流定律原位地完成乘累加运算,消除了传统冯诺依曼架构中数据在存储单元和运算单元之间的频繁的搬移操作,特别适合完成神经网络中的大量向量矩阵乘法操作,极大地提升了计算的能效。
发明内容
本公开至少一实施例提供一种基于存算一体阵列的卷积神经网络处理方法,存算一体阵列包括多行多列运算单元,该方法包括:基于输入特征图的宽度x_in、高度y_in和通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置输入特征图的子输入特征图的宽度为x、高度为y、通道数为z,并且设置卷积核的子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于存算一体阵列的行数;基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中;将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果。
例如,在本公开至少一实施例提供的卷积神经网络处理方法中,基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中,包括:根据基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核相对于子输入特征图的位置分为第一卷积位置、第二卷积位置和第三卷积位置;以及根据第一卷积位置、第二卷积位置和第三卷积位置,将子卷积核依次部署到至少一个存算一体阵列的N列中,其中,第一卷积位置对应于子卷积核在滑动过程中完全在子输入特征图内的情形,第二卷积位置对应于子卷积核在滑动过程中处于两个子输入特征图之间的情形,第三卷积位置对应于子卷积核在滑动过程中处于四个子输入特征图之间的情形。
例如,在本公开至少一实施例提供的卷积神经网络处理方法中,根据第一卷积位置、第二卷积位置和第三卷积位置,将子卷积核依次部署到至少一个存算一体阵列的N列中,包括:根据第一卷积位置,将子卷积核部署到至少一个存算一体阵列的n1列中,根据第二卷积位置,将子卷积核部署到至少一个存算一体阵列的n2列中,根据第三卷积位置,将子卷积核部署到至少一个存算一体阵列的n3列中,其中,存算一体阵列的每列部署1个子卷积核,且n1+n2+n3=N。
例如,在本公开至少一实施例提供的卷积神经网络处理方法中,在子卷积核的x_k与y_k相同的情形,子卷积核在第一卷积位置对应的权重元素的数量为x_k×y_k×z,子卷积核在第二卷积位置对应的权重元素的数量为x_k×z,子卷积核在第三卷积位置对应的权重元素的数量为z;或者在子卷积核的x_k与y_k不相同的情形,子卷积核在第一卷积位置对应的权重元素的数量为x_k×y_k×z,子卷积核在第三卷积位置对应的权重元素的数量为z,在n2列的一半列上,子卷积核在第二卷积位置对应的权重元素的数量为x_k×z,在n2列的另一半列上,子卷积核在第二卷积位置对应的权重元素的数量为y_k×z。
例如,在本公开至少一实施例提供的卷积神经网络处理方法中,将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果,包括:以在宽度维度上以x为滑动步长、在高度维度上以y为滑动步长的滑动方式从输入特征图逐步滑动得到子输入特征图,每步中将子输入特征图以行输入信号输入到至少一个存算一体阵列中,并从至少一个存算一体阵列的N列的列输出信号得到该步对应的计算结果。
例如,在本公开至少一实施例提供的卷积神经网络处理方法中,卷积神经网络涉及K个子卷积核,K等于输出通道数C_out;基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中,包括:基于子卷积核在子输入特征图中以步长S滑动的情形,将K个子卷积核中的每个子卷积核依次部署到至少一个存算一体阵列的N列中,由此将K个子卷积核依次部署到至少一个存算一体阵列的N列中。
本公开至少一实施例提供一种基于存算一体阵列的卷积神经网络处理装置,包括:至少一个存算一体阵列,包括多行多列运算单元;设置单元,被配置为,基于输入特征图的宽度x_in、高度y_in和通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置子输入特征图的宽度为x、高度为y、通道数为z,并且设置子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于存算一体阵列的行数;部署单元,被配置为,基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中;以及控制单元,被配置为,将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果。
例如,在本公开至少一实施例提供的卷积神经网络处理装置中,部署单元还被配置为:根据基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核相对于子输入特征图的位置分为第一卷积位置、第二卷积位置和第三卷积位置;以及根据第一卷积位置、第二卷积位置和第三卷积位置,将子卷积核依次部署到至少一个存算一体阵列的N列中,其中,第一卷积位置对应于子卷积核在滑动过程中完全在子输入特征图内的情形,第二卷积位置对应于子卷积核在滑动过程中处于两个子输入特征图之间的情形,第三卷积位置对应于子卷积核在滑动过程中处于四个子输入特征图之间的情形。
例如,在本公开至少一实施例提供的卷积神经网络处理装置中,部署单元还被配置为:根据第一卷积位置,将子卷积核部署到至少一个存算一体阵列的n1列中,根据第二卷积位置,将子卷积核部署到至少一个存算一体阵列的n2列中,根据第三卷积位置,将子卷积核部署到至少一个存算一体阵列的n3列中,其中,存算一体阵列的每列部署1个子卷积核,且n1+n2+n3=N。
例如,在本公开至少一实施例提供的卷积神经网络处理装置中,控制单元还被配置为:以在宽度维度上以x为滑动步长、在高度维度上以y为滑动步长的滑动方式从输入特征图逐步滑动得到子输入特征图,每步中将子输入特征图以行输入信号输入到至少一个存算一体阵列中,并从至少一个存算一体阵列的N列的列输出信号得到该步对应的计算结果。
例如,在本公开至少一实施例提供的卷积神经网络处理装置中,卷积神经网络涉及K个子卷积核,K等于输出通道数C_out;部署单元还被配置为:基于子卷积核在子输入特征图中以步长S滑动的情形,将K个子卷积核中的每个子卷积核依次部署到至少一个存算一体阵列的N列中,由此将K个子卷积核依次部署到至少一个存算一体阵列的N列中。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了一种卷积神经网络的映射方式的示意图;
图2A示出了一种忆阻器阵列的示意性结构;
图2B为1T1R结构的忆阻器单元的示意图;
图2C为2T2R结构的忆阻器单元的示意图;
图3示出了本公开至少一实施例提供的一种卷积神经网络处理方法的示意性流程图;
图4示出了对子输入特征图和子卷积核的三维尺寸进行动态调整的示意图;
图5示出了子卷积核在子输入特征图内进行滑动步长为S的卷积操作时的三种情形;
图6A示出了本公开至少一实施例提供的卷积神经网络处理方法的一个示例;
图6B示出了在图6A的示例中设置子输入特征图和子卷积核的三维尺寸的示意图;
图7示出了本公开至少一实施例提供的一种基于存算一体阵列的卷积神经网络处理装置的示意框图;
图8A为本公开至少一实施例提供的一种存算一体阵列的示意性结构图;
图8B为本公开至少一实施例提供的另一种存算一体阵列的示意图;
图8C示出了一种采用2T2R结构的忆阻器单元构造的存算一体阵列;
图8D示出了另一种采用2T2R结构的忆阻器单元构造的存算一体阵列;
图9示出了本公开至少一实施例的卷积神经网络处理装置的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
卷积网络的基本操作是乘累加运算,而不是直接的向量矩阵乘法,因此当将软件权重映射(Mapping)到硬件的存算一体阵列上时,还需要做一些元素位置和顺序的变化。
图1示出了一种卷积神经网络的映射方式的示意图。对于该映射方式,将软件权重映射到基于忆阻器的存算一体阵列上的过程的基本思想是将整个卷积操作转换成向量矩阵乘法。
忆阻器(例如阻变存储器、相变存储器、导电桥存储器等)是一种新型的微纳电子器件,可以通过施加外部激励,调节其电导状态。忆阻器作为一种二端器件,具有电阻可调节且非挥发的特性。根据基尔霍夫电流定律和欧姆定律,由这类器件构成的存算一体阵列可以并行的完成模拟乘加计算,从而直接对输入的模拟信号进行处理,且存储和计算都发生在该阵列的忆阻器中。该存算一体阵列包括多行多列运算单元,每个运算单元为忆阻器单元。图1中行和列的交叉位置为运算单元。
如图1所示,输入特征图(Input Feature Map,IFM)中的子输入特征图(Sub-IFM)的三维尺寸与卷积核(Kernel)的三维尺寸相同。将输入特征图中的子输入特征图以行输入电压信号的方式输入到存算一体阵列中,存算一体阵列的每一列部署一个卷积核(即用存算一体阵列中的忆阻器的电导值来表征卷积核中的权重元素(Weight),卷积的输出通道数(C_out)等于存算一体阵列的使用列数。该存算一体阵列通过行输入电压和忆阻器的电导值来实施计算,从存算一体阵列的列输出电流得到计算结果。
然而,由于忆阻器本身的物理特性,其高阻态阻值仅有兆欧量级,所以电流和线阻限制了基于忆阻器的存算一体阵列的规模。因此,在处理具有较大规模的输入特征图,上述映射方法会存在如下问题:
由于存算一体阵列的规模有限,因此存算一体阵列的行数有限,这导致阵列的一列无法完整存算一个卷积核的所有权重元素,需要多个存算一体阵列拼接。另外,由于存算一体阵列的使用列数等于卷积的输出通道数,因此如果输出通道数较少,则只使用了存算一体阵列中的部分列,而其余列无法使用,从而造成了极大的资源浪费。另外,在存算一体阵列上部署卷积神经网络时,往往为了加速计算且减少延时,需要复制多个权重副本,这样存算一体阵列的数量也需要成倍复制,极大地增加了忆阻器阵列的数量和功耗开销。
本公开至少一实施例提供一种基于存算一体阵列的卷积神经网络处理方法,存算一体阵列包括多行多列运算单元,该方法包括:基于输入特征图的宽度x_in、高度y_in和通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置输入特征图的子输入特征图的宽度为x、高度为y、通道数为z,并且设置卷积核的子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于存算一体阵列的行数;基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中;将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果。
该卷积神经网络处理方法针对不同的神经网络层参数以及不同的存算一体阵列规模,可以灵活调整子卷积核(Sub-Kernel)的三维尺寸,提高了方法的通用性,也提升了存算一体阵列的面积利用率和计算效率,并且在至少一个实施例中,该方法可以借助软件角度进行的优化,无需对硬件进行更改,可以在原有的存算一体阵列上进行部署,具有良好的兼容性和适用性。
本公开至少一实施例还提供对应于上述卷积神经网络处理方法的卷积神经网络处理装置。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图2A示出了一种存算一体阵列的示意性结构,该存算一体阵列由多个运算单元(例如忆阻器单元)构成,该多个运算单元构成一个M行N列的阵列,M和N均为正整数。每个运算单元包括开关元件和一个或多个忆阻器。在图2A中,WL<1>、WL<2>……WL<M>分别表示第一行、第二行……第M行的字线,每一行的运算单元电路中的开关元件的控制极(例如晶体管的栅极)和该行对应的字线连接;BL<1>、BL<2>……BL<N>分别表示第一列、第二列……第N列的位线,每列的运算单元电路中的忆阻器和该列对应的位线连接;SL<1>、SL<2>……SL<M>分别表示第一行、第二行……第M行的源线,每一行的运算单元电路中的晶体管的源极和该行对应的源线连接。根据基尔霍夫定律,通过设置运算单元的状态(例如阻值)并且在字线与位线施加相应的字线信号与位线信号,上述存算一体阵列可以并行地完成乘累加计算。
图2A的存算一体阵列中的运算单元例如可以具有1T1R结构或者2T2R结构,其中,1T1R结构的运算单元包括一个晶体管和一个忆阻器,2T2R结构的运算单元包括两个晶体管和两个忆阻器,例如,忆阻器包括但不限于RRAM、PCRAM、ECRAM、Flash等。需要说明的是,本公开对忆阻器单元的结构不作限制,也可以采用可以实现乘累加运算的其他结构形式的忆阻器单元,例如1S1F、0T1R等结构。
需要说明的是,本公开的实施例中采用的晶体管均可以为薄膜晶体管或场效应晶体管(例如MOS场效应晶体管)或其他特性相同的开关器件。这里采用的晶体管的源极、漏极在结构上可以是对称的,所以其源极、漏极在结构上可以是没有区别的。在本公开的实施例中,为了区分晶体管除栅极之外的两极,直接描述了其中一极为第一极,而另一极为第二极。
图2B为1T1R结构的运算单元的示意图。如图2B所示,1T1R结构的运算单元包括一个晶体管M1和一个忆阻器R1。
本公开的实施例对采用的晶体管的类型不作限定,例如当晶体管M1采用N型晶体管时,其栅极和字线WL连接,例如字线WL输入高电平时晶体管M1导通;晶体管M1的第一极可以是源极并配置为和源线SL连接,例如晶体管M1可以通过源线SL接收复位电压;晶体管M1的第二极可以是漏极并配置为和忆阻器R1的第二极(例如负极)连接,忆阻器R1的第一极(例如正极)和位线BL连接,例如忆阻器R1可以通过位线BL接收置位电压。例如当晶体管M1采用P型晶体管时,其栅极和字线WL连接,例如字线WL输入低电平时晶体管M1导通;晶体管M1的第一极可以是漏极并配置为和源线SL连接,例如晶体管M1可以通过源线SL接收复位电压;晶体管M1的第二极可以是源极并配置为和忆阻器R1的第二极(例如负极)连接,忆阻器R1的第一极(例如正极)和位线BL连接,例如忆阻器R1可以通过位线BL接收置位电压。需要说明的是,忆阻器结构还可以实现为其他结构,例如忆阻器R1的第二极与源线SL连接的结构,本公开的实施例对此不作限制。
下面各实施例均以晶体管M1采用N型晶体管为例进行说明。
字线端WL的作用是对晶体管M1的栅极施加相应电压,从而控制晶体管M1导通或关闭。在对忆阻器R1进行操作时,例如进行置位操作或复位操作,均需要先开启晶体管M1,即需要通过字线端WL对晶体管M1的栅极施加导通电压。在晶体管M1导通后,例如,可以通过在源线端SL和位线端BL向忆阻器R1施加电压,以改变忆阻器R1的阻态。例如,可以通过位线端BL施加置位电压,以使得该忆阻器R1处于低阻态;又例如,可以通过源线端SL施加复位电压,以使得该忆阻器R1处于高阻态。例如,高阻态的电阻值为低阻态的电阻值100倍以上,例如1000倍以上。
需要说明的是,在本公开的实施例中,通过字线端WL和位线端BL同时施加电压,可以使得忆阻器R1的电阻值越来越小,即忆阻器R1从高阻态变为低阻态,将使得忆阻器R1从高阻态变为低阻态的操作称为置位操作;通过字线端WL和源线端SL同时施加电压,可以使得忆阻器R1的电阻值越来越大,即忆阻器R1从低阻态变为高阻态,将使得忆阻器R1从低阻态变为高阻态的操作称为复位操作。例如,忆阻器R1具有阈值电压,在输入电压幅度小于忆阻器R1的阈值电压时,不会改变忆阻R1的电阻值(或电导值)。在这种情况下,可以通过输入小于阈值电压的电压,利用忆阻器R1的电阻值(或电导值)进行计算;可以通过输入大于阈值电压的电压,改变忆阻器R1的电阻值(或电导值)。
图2C为2T2R结构的运算单元的示意图。如图2C所示,2T2R结构的运算单元包括两个晶体管M1和M2以及两个忆阻器R1和R2。下面以晶体管M1和M2均采用N型晶体管为例进行说明。
晶体管M1的栅极和字线端WL1相连,例如M1的字线端WL1输入高电平时晶体管M1导通,晶体管M2的栅极和字线端WL2相连,例如M2的字线端WL2输入高电平时晶体管M2导通;晶体管M1的第一极可以是源极并被配置为和源线端SL连接,例如晶体管M1可以通过源线端SL接收复位电压,晶体管M2的第一极可以是源极并被配置为和源线端SL连接,例如晶体管M2可以通过源线端SL接收复位电压,晶体管M1的第一极与晶体管M2的第一极相连,并一起连接至源线端SL。晶体管M1的第二极可以是漏极并被配置为和忆阻器R1的第二极(例如负极)连接,忆阻器R1的第一极(例如正极)和位线端BL1连接,例如忆阻器R1可以通过位线端BL1接收置位电压;晶体管M2的第二极可以是漏极并被配置为和忆阻器R2的第二极(例如负极)连接,忆阻器R2的第一极(例如正极)和位线端BL2连接,例如忆阻器R2可以通过位线端BL2接收置位电压。
需要说明的是,2T2R结构的运算单元中的晶体管M1和M2也可以均采用P型晶体管,这里不再赘述。
图3示出了本公开至少一实施例提供的一种基于存算一体阵列的卷积神经网络处理方法的示意性流程图。例如,存算一体阵列为图2A所示的存算一体阵列。存算一体阵列包括多行多列运算单元,例如,运算单元的结构如图2B或2C所示。
如图3所示,该卷积神经网络处理方法包括如下的步骤S301~S303。
步骤S301:基于输入特征图的宽度x_in、高度y_in和通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置输入特征图的子输入特征图的宽度为x、高度为y、通道数为z,并且设置卷积核的子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于存算一体阵列的行数。
例如,在本公开的一些实施例中,输入特征图的宽度、高度和通道数以及卷积核的宽度、高度和通道数对子输入特征图和子卷积核的三维尺寸根据训练或推理采用的卷积神经网络得到,然后可以基于输入特征图的宽度、高度和通道数以及卷积核的宽度、高度和通道度对子输入特征图和子卷积核的三维尺寸进行一定范围内的调整。对子输入特征图和子卷积核的三维尺寸进行调整的过程中,例如,子输入特征图的宽度小于或等于输入特征图的宽度,或者子输入特征图的高度小于或等于输入特征图的高度,或者子输入特征图的通道数小于或等于输入特征图的通道数,或者子卷积核的宽度等于卷积核的宽度且小于子输入特征图的宽度,或者子卷积核的高度等于卷积核的高度且小于子输入特征图的高度,或者子卷积核的通道数等于子输入特征图的通道数,或者子输入特征图的宽度乘高度乘通道数的结果小于或等于存算一体阵列的行数。
在至少一个实施例中,对子输入特征图和子卷积核的三维尺寸进行动态调整可以参见图4。图4示出了对子输入特征图和子卷积核的三维尺寸进行动态调整的示意图。
如图4所示,输入特征图的宽度为x_in、高度为y_in、通道数为C_in。卷积核的宽度为x_k、高度为y_k、通道数为C_in。在此实施例中,子输入特征图的三维尺寸可以在一定范围内进行调整,不再受卷积核的三维尺寸的限制(和卷积核具有相同的三维尺寸)。子输入特征图的三维尺寸满足如下条件:宽度x小于或等于x_in,高度y小于或等于y_in,通道数z小于或等于C_in,并且x×y×z的结果小于或等于存算一体阵列的行数。基于上述条件设置子输入特征图的三维尺寸后,可以确定子卷积核的三维尺寸。子卷积核的宽度和卷积核的宽度相等均为x_k,子卷积核的高度和卷积核的高度相等均为y_k,并且子卷积核的通道数与子输入特征图的通道数保持一致均为z。
现在回到图3,步骤S302:基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中。例如,该N列可以是存算一体阵列中的部分列或全部列。将子卷积核依次部署到至少一个存算一体阵列中,即采用存算一体阵列所要求的方式,将子卷积核的各个元素的权重值转换(映射)为存算一体阵列对应的运算单元的电导值。
在卷积运算中,卷积核以步长S(正整数)在输入特征图中逐步滑动,并进行卷积运算,从而得到输出特征图中的输出项。同样地,子卷积核在子输入特征图中以步长S逐步滑动并进行卷积运算。
在本公开的一些实施例中,步骤S302可以包括:根据基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核相对于子输入特征图的位置分为第一卷积位置、第二卷积位置和第三卷积位置;以及根据第一卷积位置、第二卷积位置和第三卷积位置,将子卷积核依次部署到至少一个存算一体阵列的N列中。这里,第一卷积位置对应于子卷积核在滑动过程中完全在子输入特征图内的情形,第二卷积位置对应于子卷积核在滑动过程中处于两个子输入特征图之间的情形,第三卷积位置对应于子卷积核在滑动过程中处于四个子输入特征图之间的情形。
图5示出了子卷积核在子输入特征图内进行滑动步长为S的卷积操作时的三种情形,即第一卷积位置、第二卷积位置和第三卷积位置的情形。
如图5所示,子卷积核在子输入特征图内滑动时相对于子输入特征图的位置分为三种情形:第一卷积位置、第二卷积位置和第三卷积位置。第一卷积位置用字母a表示,此时子卷积核完全在子输入特征图内,第二卷积位置用字母b表示,此时子卷积核处于两个子输入特征图之间,第三卷积位置用字母c表示,此时子卷积核处于四个子输入特征图之间。
再次回到图3,在本公开的一些实施例中,根据第一卷积位置、第二卷积位置和第三卷积位置,将子卷积核依次部署到至少一个存算一体阵列的N列中可以包括:根据第一卷积位置,将子卷积核部署到至少一个存算一体阵列的n1列中,根据第二卷积位置,将子卷积核部署到至少一个存算一体阵列的n2列中,根据第三卷积位置,将子卷积核部署到至少一个存算一体阵列的n3列中,其中,存算一体阵列的每列部署1个子卷积核,且n1+n2+n3=N。
在子卷积核在子输入特征图内滑动时,位于第一卷积位置的卷积总数量为n1,位于第二卷积位置的卷积总数量为n2,位于第三卷积位置的卷积总数量为n3。
在步骤S301中设置的子卷积核的宽度和高度可能相同也可能不同,对于宽度和高度相同的情况和宽度和高度不同的情况分别用不同的公式计算n1、n2和n3。
例如,在本公开的一些实施例中,在子卷积核的x_k与y_k相同的情形,n1的计算如公式(1)所示,n2的计算如公式(2)所示,n3的计算如公式(3)所示。
n3=C_out×4×(x_k-1)2 (3)
或者,在子卷积核的x_k与y_k不相同的情形,n1的计算如公式(4)所示,n2的计算如公式(5)所示,n3的计算如公式(6)所示。
n3=Cout×4×(x_k-1)×(y_k-1) (6)
由于每个卷积位置(对应1个子卷积核)需要部署在存算一体阵列的一列上,因此通过公式(1)~公式(6)可以计算需要的存算一体阵列的总列数N,N=n1+n2+n3。
子卷积核在不同的卷积位置对应的权重元素的数量是不一样的,具体的权重元素的数量的计算如下。
例如,在本公开的一些实施例中,在子卷积核的x_k与y_k相同的情形,子卷积核在第一卷积位置对应的权重元素的数量为x_k×y_k×z,子卷积核在第二卷积位置对应的权重元素的数量为x_k×z,子卷积核在第三卷积位置对应的权重元素的数量为z。或者,在子卷积核的x_k与y_k不相同的情形,子卷积核在第一卷积位置对应的权重元素的数量为x_k×y_k×z,子卷积核在第三卷积位置对应的权重元素的数量为z,在n2列的一半列上,子卷积核在第二卷积位置对应的权重元素的数量为x_k×z,在n2列的另一半列上,子卷积核在第二卷积位置对应的权重元素的数量为y_k×z。
由于子卷积核的权重元素的数量少于子输入特征图的元素数量,因此在存算一体阵列的一列上部署的权重元素是稀疏的,该列的其余行位置的等效电导可以被置为0。
由于在此实施例中,存算一体阵列的每一列部署的权重元素是稀疏的,因此可以降低同一列上的电流大小,可以抑制在存算一体阵列中很严重的IR压降(IRdrop)问题,进一步提升存算一体阵列计算的准确度和可靠性。
步骤S303:将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果。
例如,在本公开的一些实施例中,步骤S303可以包括:以在宽度维度上以x为滑动步长、在高度维度上以y为滑动步长的滑动方式从输入特征图逐步滑动得到子输入特征图,每步中将子输入特征图以行输入信号输入到至少一个存算一体阵列中,并从至少一个存算一体阵列的N列的列输出信号得到该步对应的计算结果。
在此实施例中,以子输入特征图为一个单位在整个输入特征图上进行滑动计算,每次滑动步长就是子输入特征图在宽度和高度两个维度上的尺寸。每滑动一次得到一个子输入特征图,该子输入特征图的元素作为行输入信号输入到一个存算一体阵列中。
例如,行输入信号为电压信号,卷积核的值映射为忆阻器的电导值,因此,根据存算一体阵列被输入的电压信号和存算一体阵列中的忆阻器的电导值,可以得到存算一体阵列的N列的列输出信号(列输出电流),这些列输出信号为某一次滑动计算的计算结果。
以子输入特征图为一个单位在整个输入特征图上进行滑动计算,使得相邻的子输入特征图之间不会有重合的部分,避免了不同子输入特征图可能存在部分重合的问题,最大化利用了输入数据,减少了滑动次数,极大地提升了阵列计算效率。
例如,在本公开的一些实施例中,卷积神经网络涉及K个子卷积核,K等于输出通道数C_out;基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中,包括:基于子卷积核在子输入特征图中以步长S滑动的情形,将K个子卷积核中的每个子卷积核依次部署到至少一个存算一体阵列的N列中,由此将K个子卷积核依次部署到至少一个存算一体阵列的N列中。
在卷积神经网络中,卷积的输出通道数等于卷积核的个数。因此,如果卷积神经网络涉及K个子卷积核,则输出通道数C_out等于K。假设1个子卷积核在子输入特征图中以步长S滑动的情形,需要使用存算一体阵列的N列,则将K个子卷积核在子输入特征图中以步长S滑动的情形,需要使用存算一体阵列的K×N列。
下面以卷积神经网络中的一个卷积层部署到一个规模为400行×150列的存算一体阵列上为例,说明本公开至少一实施例提供的卷积神经网络处理方法。
图6A示出了本公开至少一实施例提供的卷积神经网络处理方法的一个示例。此示例中的卷积层的相关参数如下表1所示。
表1
首先,针对卷积神经网络和存算一体阵列的规模进行分析和参数选择。如果采用现有的映射方法,1个卷积核有3×3×64=576个元素,而存算一体阵列只有400行,小于576,因此无法用一个存算一体阵列部署卷积核的全部元素。另外,由于输出通道C_out=3,因此只能利用存算一体的3列,其余147列都被浪费了。
图6B示出了本示例中子输入特征图和子卷积核的三维尺寸设置的示意图,如图6B所示,基于输入特征图的宽度3840(x_in)、高度2160(y_in)和通道数64(C_in)以及卷积核的宽度3(x_k)、高度3(y_k)、通道数64(C_in),设置输入特征图的子输入特征图的宽度为5(x)、高度为5(y)、通道数为16(z),并且设置卷积核的子卷积核的宽度为3(x_k)、高度为3(y_k)、通道数为16(z)。由于输入特征图与卷积核的输入通道有C_in=64个,因此不考虑复制的情况下需要个存算一体阵列来完成计算。
接着,基于子卷积核在子输入特征图中以步长S(这里S=1)滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中。根据公式(1)计算可得,位于第一卷积位置的卷积数量为n1=27,可以用存算一体阵列中的27列来放置27个子卷积核,根据公式(7)计算可得这27列中的每列部署的权重元素的数量为3×3×16=144,所以每列上部署的权重元素是稀疏的,只需将权重元素按照不同卷积计算的位置部署到对应的行即可;同理,根据公式(2)计算可得,位于第二卷积位置的卷积数量n2=72,可以用存算一体阵列中的72列来放置72个子卷积核,根据公式(8)计算可得每列部署的权重元素的个数为3×16=48,每列上部署的权重元素也是稀疏的;根据公式(3)计算可得,位于第三卷积位置的卷积数量n3=48,可以用存算一体阵列中的48列来放置48个子卷积核,根据公式(9)计算可得每列部署的权重元素的个数为16个,每列上部署的权重元素也是稀疏的。综上,存算一体阵列一共利用了N=n1+n2+n3=147列(少于150)。需要说明的是,由于一个卷积位置会有C_out=3个不同输出通道的卷积,所以会有三列权重元素部署的位置相同,但是权重数值不同。例如,如图6A所示,对于卷积位置1,有三列权重元素部署的位置相同,但是这三列权重元素的数值不同;当然,对于不同输出通道的卷积对应的不同列权重元素,也可以不彼此相邻。
接着,将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果。以子输入特征图为一个单位在整个输入特征图上进行滑动计算,总共得到4个子输入特征图,这4个子输入特征图分别作为行输入信号输入到4个存算一体阵列中。1个子输入特征图中有5×5×16=400个元素,这些元素根据权重值的大小线性映射到输入电压范围内的值,通过数模转换器转换成输入电压信号并分别输入到1个存算一体阵列的400行上。通过输入电压信号和表征权重元素的电导值,从至少一个存算一体阵列的N列的列输出信号得到计算结果。
下面结合表2对本公开至少一实施例提供的卷积神经网络处理方法的性能与其他的映射方法的性能进行对比,这些对比的映射方法包括映射方式1、新映射方式2、映射方式3等,其中,不同方法的性能参数如下表2所示。
表2
映射方式1可参见:W.Zhang et al.,“Design Guidelines of RRAM basedNeural-Processing-Unit:A Joint Device-Circuit-Algorithm Analysis,”in 201956th ACM/IEEE Design Automation Conference(DAC),Jun.2019,pp.1–6.
映射方式2可参见:X.Peng,R.Liu,and S.Yu,“Optimizing Weight Mapping andData Flow for Convolutional Neural Networks on Processing-in-MemoryArchitectures,”IEEE Transactions on Circuits and Systems I:Regular Papers,vol.67,no.4,pp.1333–1343,Apr.2020.
映射方式3可参见:W.Li,P.Xu,Y.Zhao,H.Li,Y.Xie,and Y.Lin,“Timely:PushingData Movements And Interfaces In Pim Accelerators Towards Local And In TimeDomain,”in 2020 ACM/IEEE 47th Annual International Symposium on ComputerArchitecture(ISCA),May 2020,pp.832–845.
如表2所示,本公开至少一实施例提供的卷积神经网络处理方法可以极大地提升阵列的面积利用率,减少完成卷积所需的滑动次数,提升计算效率。
图7示出了本公开至少一实施例提供的一种基于存算一体阵列的卷积神经网络处理装置700的示意框图,该卷积神经网络处理装置可以用于执行图3所示的卷积神经网络处理方法。
如图7所示,卷积神经网络处理装置700包括存算一体阵列701、设置单元702、部署单元703以及控制单元704。
存算一体阵列701包括多行多列运算单元。例如,存算一体阵列701的结构如图2A所示,运算单元的结构如图2B或2C所示。
设置单元702被配置为,基于输入特征图的宽度x_in、高度y_in和通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置子输入特征图的宽度为x、高度为y、通道数为z,并且设置子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于存算一体阵列的行数。
部署单元703被配置为,基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核依次部署到至少一个存算一体阵列的N列中。
控制单元704被配置为,将子输入特征图以行输入信号输入到至少一个存算一体阵列中,从至少一个存算一体阵列的N列的列输出信号得到计算结果。
例如,在至少一个实施例中,部署单元703还被配置为:根据基于子卷积核在子输入特征图中以步长S滑动的情形,将子卷积核相对于子输入特征图的位置分为第一卷积位置、第二卷积位置和第三卷积位置;以及根据第一卷积位置、第二卷积位置和第三卷积位置,将子卷积核依次部署到至少一个存算一体阵列的N列中,其中,第一卷积位置对应于子卷积核在滑动过程中完全在子输入特征图内的情形,第二卷积位置对应于子卷积核在滑动过程中处于两个子输入特征图之间的情形,第三卷积位置对应于子卷积核在滑动过程中处于四个子输入特征图之间的情形。
例如,在至少一个实施例中,部署单元703还被配置为:根据第一卷积位置,将子卷积核部署到至少一个存算一体阵列的n1列中,根据第二卷积位置,将子卷积核部署到至少一个存算一体阵列的n2列中,根据第三卷积位置,将子卷积核部署到至少一个存算一体阵列的n3列中,其中,存算一体阵列的每列部署1个子卷积核,且n1+n2+n3=N。
例如,在至少一个实施例中,控制单元704还被配置为:以在宽度维度上以x为滑动步长、在高度维度上以y为滑动步长的滑动方式从输入特征图逐步滑动得到子输入特征图,每步中将子输入特征图以行输入信号输入到至少一个存算一体阵列中,并从至少一个存算一体阵列的N列的列输出信号得到该步对应的计算结果。
例如,在至少一个实施例中,卷积神经网络涉及K个子卷积核,K等于输出通道数C_out;部署单元703还被配置为:基于子卷积核在子输入特征图中以步长S滑动的情形,将K个子卷积核中的每个子卷积核依次部署到至少一个存算一体阵列的N列中,由此将K个子卷积核依次部署到至少一个存算一体阵列的N列中。
在本公开的一些实施例中,进行部署的过程中,在将权重元素映射到存算一体阵列上时,由于权重元素的值有正负之分,因此可以利用两个忆阻器构成的忆阻器对来对应一个权重元素。
例如,一个权重元素可以由两个忆阻器实现。例如,可以采用两个忆阻器阵列形成多个忆阻器对,每个忆阻器对包括两个忆阻器。例如,该两个忆阻器在忆阻器阵列中彼此直接相邻设置;又例如,每个忆阻器对中的一个忆阻器用于接收一个输入电压信号,忆阻器对中的另一个忆阻器用于接收上述输入电压信号对应的反相输入电压信号。
下面通过图8A、图8B来具体说明能够实现负值元素的存算一体阵列的示例。
图8A为本公开至少一实施例提供的一种存算一体阵列的示意性结构图。
如图8A所示,忆阻器801和忆阻器802可以组成一个忆阻器对,忆阻器801的电导值表示为G11,忆阻器802的电导值表示为G12。由于忆阻器802和一个反相器相连,因此当忆阻器801接收正极性的输入电压信号时,该反相器可以翻转输入的电压信号的极性,从而使得忆阻器802接收负极性的输入电压信号。例如,忆阻器801接收的输入电压信号用v(t)表示,忆阻器802接收的输入电压信号用-v(t)表示。忆阻器801和忆阻器802连接到两条不同的SL,输入电压信号经过忆阻器生成输出电流。在SL末端将经过忆阻器801的输出电流和经过忆阻器802的输出电流进行叠加。因此,忆阻器801和忆阻器802乘累加计算的结果为v(t)G11+(-v(t))G12,也即v(t)(G11-G12)。由此,忆阻器801和忆阻器802组成的忆阻器对可以对应一个权重元素,并且,该权重元素为G11-G12,通过配置G11-G12的数值关系可以实现负值元素。例如,如需表征0权重元素,则将表示正负权重的忆阻器设为相同的电导状态即可。
图8B为本公开至少一实施例提供的另一种存算一体阵列的示意图。
如图8B所示,例如,忆阻器801和忆阻器802可以组成一个忆阻器对,忆阻器801的电导值表示为G11,忆阻器802的电导值表示为G12。与图8A不同的是,忆阻器802没有和反相器相连,因此当忆阻器801接收正极性的输入电压信号时,忆阻器802也接收正极性的输入电压信号。例如,忆阻器801接收的输入电压信号用v(t)表示,忆阻器802接收的输入电压信号也用v(t)表示。忆阻器801和忆阻器802连接到两条不同的SL,在SL末端将经过忆阻器801的输出电流和经过忆阻器802的输出电流相减。因此,忆阻器801和忆阻器802乘累加计算的结果为v(t)G11-v(t)G12,也即v0(t)(G11-G12)。因此,忆阻器801和忆阻器802组成的忆阻器对可以一个权重元素,并且,该权重元素为G11-G12,通过配置G11-G12的数值关系可以实现负值元素。
此外,还可以利用图2C所示的2T2R结构的忆阻器单元来对应一个权重元素。下面通过图8C、图8D来说明利用2T2R结构的忆阻器单元构造存算一体阵列的示例。
图8C示出了一种采用2T2R结构的忆阻器单元构造的存算一体阵列。
如图8C所示,例如,一个2T2R结构的忆阻器单元包括两个忆阻器,分别为忆阻器801和忆阻器802,忆阻器801的电导值表示为G11,忆阻器802的电导值表示为G12,忆阻器801可以为图2C中的R1,忆阻器802可以为图2C中的R2。例如,由于忆阻器802和一个反相器相连,因此当忆阻器801接收正极性的输入电压信号时,该反相器可以翻转输入的电压信号的极性,从而使得忆阻器802接收负极性的输入电压信号。例如,忆阻器801接收的输入电压信号用v(t)表示,忆阻器802接收v(t)的反相输入电压信号,即-v(t)。忆阻器801和忆阻器802连接到相同的SL,在该SL末端将经过忆阻器801的输出电流和经过忆阻器802的输出电流进行叠加。因此,忆阻器801和忆阻器802乘累加计算的结果为v(t)G11+(-v(t))G12,也即v(t)(G11-G12)。因此,包含忆阻器801和忆阻器802的2T2R结构的忆阻器单元可以对应一个权重元素,并且,该权重元素为G11-G12,通过配置G11-G12的数值关系可以实现负值元素。
图8D示出了另一种采用2T2R结构的忆阻器单元构造的存算一体阵列。
如图8D所示,例如,一个2T2R结构的忆阻器单元包括两个忆阻器,分别为忆阻器801和忆阻器802,忆阻器801的电导值表示为G11,忆阻器802的电导值表示为G12。与图8C不同的是,忆阻器802没有和反相器相连,因此当忆阻器801接收正极性的输入电压信号时,忆阻器802也接收正极性的输入电压信号。例如,忆阻器801接收的输入电压信号用v(t)表示,忆阻器802接收的输入电压信号也用v(t)表示。忆阻器801和忆阻器802连接到不同的SL,在SL末端将经过忆阻器801的输出电流和经过忆阻器802的输出电流相减。因此,忆阻器801和忆阻器802乘累加计算的结果为v(t)G11-v(t)G12,也即v(t)(G11-G12)。因此,包含忆阻器801和忆阻器802的2T2R结构的忆阻器单元可以对应一个权重元素,并且,该权重元素为G11-G12,通过配置G11-G12的数值关系可以实现负值元素。
例如,本公开至少一实施例提供的卷积神经网络处理装置中的存算一体阵列可以采用如8A至8D提供的任意一种结构,以实现权重元素负值,本公开对此不作限制。
例如,上述卷积神经网络处理装置700可以采用硬件、软件、固件以及它们的任意可行的组合实现,本公开对此不作限制。
该卷积神经网络处理装置700的技术效果与图3所示的卷积神经网络处理方法的技术效果相同,在此不再赘述。
图9示出了本公开至少一实施例的卷积神经网络处理装置的示意图。
如图9所示,卷积神经网络处理装置用于实施根据本公开至少一实施例的卷积神经网络处理方法。该卷积神经网络处理装置包括存算一体阵列以及周围电路装置,周围电路装置包括数模转换器(DAC)、多路选择器(MUX)。
该存算一体阵列包括M行N列的2T2R结构的忆阻器。2T2R结构的忆阻器包括两个晶体管以及两个忆阻器GP和GN。P型晶体管的栅极和字线端WLP相连,N型晶体管的栅极和字线端WLN相连;P型晶体管的第一极可以是源极并被配置为和源线端SL连接,N型晶体管的第一极可以是源极并被配置为和源线端SL连接,P型晶体管的第一极与N型晶体管的第一极相连,并一起连接至源线端SL。P型晶体管的第二极可以是漏极并被配置为和忆阻器GP的第二极(例如负极)连接,忆阻器GP的第一极(例如正极)和位线端BLP连接,例如忆阻器GP可以通过位线端GP接收置位电压;N型晶体管的第二极可以是漏极并被配置为和忆阻器GN的第二极(例如负极)连接,忆阻器GN的第一极(例如正极)和位线端BLN连接,例如忆阻器R2可以通过位线端BL2接收置位电压。
该存算一体阵列还包括2M条字线、2M条源线和2N条位线。每条字线、每条源线以及每条位线都分别与对应的多路选择器连接,2M条字线、2N条位线的多路选择器分别由信号WL_sw[1:2M]、BL_sw[1:2N]控制。与2M条字线连接的2M个多路选择器的输入端连接输入电压信号V_WL[1:2M]。例如,当电压信号V_WL[1:2M]通过多路选择器施加到字线上时,被施加电压信号的字线所对应的忆阻器被打开。与2N条位线连接的2N个多路选择器的一个输入端连接地线(GND),另一个输入端连接DAC,DAC将数字信号转换为位线电压,位线电压通过多路选择器施加到位线上。与2M条源线连接的2M个多路选择器的输入端连接DAC,DAC将数字信号转换为源线电压,源线电压通过多路选择器施加到源线上。对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种基于存算一体阵列的卷积神经网络处理方法,所述存算一体阵列包括多行多列运算单元,所述方法包括:
基于输入特征图的宽度x_in、高度y_in和输入通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置所述输入特征图的子输入特征图的宽度为x、高度为y、通道数为z,并且设置所述卷积核的子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于所述存算一体阵列的行数;
基于所述子卷积核在所述子输入特征图中以步长S滑动的情形,将所述子卷积核依次部署到至少一个存算一体阵列的N列中;
将所述子输入特征图以行输入信号输入到所述至少一个存算一体阵列中,从所述至少一个存算一体阵列的N列的列输出信号得到计算结果。
3.根据权利要求1所述的卷积神经网络处理方法,其中,所述基于所述子卷积核在所述子输入特征图中以步长S滑动的情形,将所述子卷积核依次部署到至少一个存算一体阵列的N列中,包括:
根据基于所述子卷积核在所述子输入特征图中以所述步长S滑动的情形,将所述子卷积核相对于所述子输入特征图的位置分为第一卷积位置、第二卷积位置和第三卷积位置;以及
根据所述第一卷积位置、所述第二卷积位置和所述第三卷积位置,将所述子卷积核依次部署到所述至少一个存算一体阵列的所述N列中,
其中,所述第一卷积位置对应于所述子卷积核在滑动过程中完全在所述子输入特征图内的情形,
所述第二卷积位置对应于所述子卷积核在滑动过程中处于两个所述子输入特征图之间的情形,
所述第三卷积位置对应于所述子卷积核在滑动过程中处于四个所述子输入特征图之间的情形。
4.根据权利要求3所述的卷积神经网络处理方法,其中,所述根据所述第一卷积位置、所述第二卷积位置和所述第三卷积位置,将所述子卷积核依次部署到所述至少一个存算一体阵列的所述N列中,包括:
根据所述第一卷积位置,将所述子卷积核部署到所述至少一个存算一体阵列的n1列中,
根据所述第二卷积位置,将所述子卷积核部署到所述至少一个存算一体阵列的n2列中,
根据所述第三卷积位置,将所述子卷积核部署到所述至少一个存算一体阵列的n3列中,
其中,所述存算一体阵列的每列部署1个所述子卷积核,且n1+n2+n3=N。
6.根据权利要求5所述的卷积神经网络处理方法,其中,在所述子卷积核的x_k与y_k相同的情形,
所述子卷积核在所述第一卷积位置对应的权重元素的数量为x_k×y_k×z,
所述子卷积核在所述第二卷积位置对应的权重元素的数量为x_k×z,
所述子卷积核在所述第三卷积位置对应的权重元素的数量为z;或者
在所述子卷积核的x_k与y_k不相同的情形,
所述子卷积核在所述第一卷积位置对应的权重元素的数量为x_k×y_k×z,
所述子卷积核在所述第三卷积位置对应的权重元素的数量为z,
在n2列中的一半列上,所述子卷积核在所述第二卷积位置对应的权重元素的数量为x_k×z,
在n2列中的另一半列上,所述子卷积核在所述第二卷积位置对应的权重元素的数量为y_k×z。
7.根据权利要求1所述的卷积神经网络处理方法,其中,所述将所述子输入特征图以行输入信号输入到所述至少一个存算一体阵列中,从所述至少一个存算一体阵列的N列的列输出信号得到计算结果,包括:
以在宽度维度上以x为滑动步长、在高度维度上以y为滑动步长的滑动方式从所述输入特征图逐步滑动得到所述子输入特征图,每步中将所述子输入特征图以行输入信号输入到所述至少一个存算一体阵列中,并从所述至少一个存算一体阵列的N列的列输出信号得到该步对应的计算结果。
8.根据权利要求1-7中的任一项所述的卷积神经网络处理方法,其中,所述卷积神经网络涉及K个所述卷积核,K等于输出通道数C_out;
基于所述子卷积核在所述子输入特征图中以步长S滑动的情形,将所述子卷积核依次部署到所述至少一个存算一体阵列的所述N列中,包括:
基于所述子卷积核在所述子输入特征图中以所述步长S滑动的情形,将所述K个子卷积核中的每个子卷积核依次部署到至少一个存算一体阵列的N列中,由此将所述K个子卷积核依次部署到所述至少一个存算一体阵列的N列中。
9.一种基于存算一体阵列的卷积神经网络处理装置,包括:
至少一个存算一体阵列,包括多行多列运算单元;
设置单元,被配置为,基于输入特征图的宽度x_in、高度y_in和通道数C_in以及卷积核的宽度x_k、高度y_k、通道数C_in,设置子输入特征图的宽度为x、高度为y、通道数为z,并且设置子卷积核的宽度为x_k、高度为y_k、通道数为z,其中,x_k小于或等于x,y_k小于或等于y,x小于或等于x_in,y小于或等于y_in,z小于或等于C_in,并且x×y×z的结果小于或等于所述存算一体阵列的行数;
部署单元,被配置为,基于所述子卷积核在所述子输入特征图中以步长S滑动的情形,将所述子卷积核依次部署到所述至少一个存算一体阵列的N列中;以及
控制单元,被配置为,将所述子输入特征图以行输入信号输入到所述至少一个存算一体阵列中,从所述至少一个存算一体阵列的N列的列输出信号得到计算结果。
10.根据权利要求9所述的卷积神经网络处理装置,其中,所述部署单元还被配置为:
根据基于所述子卷积核在所述子输入特征图中以步长S滑动的情形,将所述子卷积核相对于所述子输入特征图的位置分为第一卷积位置、第二卷积位置和第三卷积位置;以及
根据所述第一卷积位置、所述第二卷积位置和所述第三卷积位置,将所述子卷积核依次部署到所述至少一个存算一体阵列的所述N列中,
其中,所述第一卷积位置对应于所述子卷积核在滑动过程中完全在所述子输入特征图内的情形,
所述第二卷积位置对应于所述子卷积核在滑动过程中处于两个所述子输入特征图之间的情形,
所述第三卷积位置对应于所述子卷积核在滑动过程中处于四个所述子输入特征图之间的情形。
11.根据权利要求10所述的卷积神经网络处理装置,其中,所述部署单元还被配置为:
根据所述第一卷积位置,将所述子卷积核部署到所述至少一个存算一体阵列的n1列中,
根据所述第二卷积位置,将所述子卷积核部署到所述至少一个存算一体阵列的n2列中,
根据所述第三卷积位置,将所述子卷积核部署到所述至少一个存算一体阵列的n3列中,
其中,所述存算一体阵列的每列部署1个子卷积核,且n1+n2+n3=N。
12.根据权利要求9所述的卷积神经网络处理装置,其中,所述控制单元还被配置为:
以在宽度维度上以x为滑动步长、在高度维度上以y为滑动步长的滑动方式从所述输入特征图逐步滑动得到所述子输入特征图,每步中将所述子输入特征图以行输入信号输入到所述至少一个存算一体阵列中,并从所述至少一个存算一体阵列的N列的列输出信号得到所述步对应的计算结果。
13.根据权利要求9所述的卷积神经网络处理装置,其中,所述卷积神经网络涉及K个所述卷积核,K等于输出通道数C_out;
所述部署单元还被配置为:基于所述子卷积核在所述子输入特征图中以步长S滑动的情形,将所述K个子卷积核中的每个子卷积核依次部署到至少一个存算一体阵列的N列中,由此将所述K个子卷积核依次部署到至少一个存算一体阵列的N列中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111653640.9A CN114298296A (zh) | 2021-12-30 | 2021-12-30 | 基于存算一体阵列的卷积神经网络处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111653640.9A CN114298296A (zh) | 2021-12-30 | 2021-12-30 | 基于存算一体阵列的卷积神经网络处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114298296A true CN114298296A (zh) | 2022-04-08 |
Family
ID=80973640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111653640.9A Pending CN114298296A (zh) | 2021-12-30 | 2021-12-30 | 基于存算一体阵列的卷积神经网络处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114298296A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115019856A (zh) * | 2022-08-09 | 2022-09-06 | 之江实验室 | 一种基于rram多值存储的存内计算方法与系统 |
CN115204380A (zh) * | 2022-09-15 | 2022-10-18 | 之江实验室 | 存算一体卷积神经网络的数据存储及阵列映射方法与装置 |
CN115358380A (zh) * | 2022-10-24 | 2022-11-18 | 浙江大学杭州国际科创中心 | 一种多模态存算一体阵列结构、芯片 |
CN115906968A (zh) * | 2022-11-09 | 2023-04-04 | 南方科技大学 | 双有符号操作数非易失性存算一体单元、阵列及运算方法 |
CN116306855A (zh) * | 2023-05-17 | 2023-06-23 | 之江实验室 | 一种基于存算一体系统的数据处理方法及装置 |
WO2024015023A3 (en) * | 2022-07-15 | 2024-02-22 | Agency For Science, Technology And Research | Neural processing core for a neural network and method of operating thereof |
-
2021
- 2021-12-30 CN CN202111653640.9A patent/CN114298296A/zh active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024015023A3 (en) * | 2022-07-15 | 2024-02-22 | Agency For Science, Technology And Research | Neural processing core for a neural network and method of operating thereof |
CN115019856A (zh) * | 2022-08-09 | 2022-09-06 | 之江实验室 | 一种基于rram多值存储的存内计算方法与系统 |
CN115204380A (zh) * | 2022-09-15 | 2022-10-18 | 之江实验室 | 存算一体卷积神经网络的数据存储及阵列映射方法与装置 |
CN115358380A (zh) * | 2022-10-24 | 2022-11-18 | 浙江大学杭州国际科创中心 | 一种多模态存算一体阵列结构、芯片 |
CN115358380B (zh) * | 2022-10-24 | 2023-02-24 | 浙江大学杭州国际科创中心 | 一种多模态存算一体阵列结构、芯片 |
US11954585B2 (en) | 2022-10-24 | 2024-04-09 | Zju-hangzhou Global Scientific And Technological Innovation Center | Multi-mode array structure and chip for in-memory computing |
CN115906968A (zh) * | 2022-11-09 | 2023-04-04 | 南方科技大学 | 双有符号操作数非易失性存算一体单元、阵列及运算方法 |
CN115906968B (zh) * | 2022-11-09 | 2023-12-08 | 南方科技大学 | 双有符号操作数非易失性存算一体单元、阵列及运算方法 |
CN116306855A (zh) * | 2023-05-17 | 2023-06-23 | 之江实验室 | 一种基于存算一体系统的数据处理方法及装置 |
CN116306855B (zh) * | 2023-05-17 | 2023-09-01 | 之江实验室 | 一种基于存算一体系统的数据处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114298296A (zh) | 基于存算一体阵列的卷积神经网络处理方法和装置 | |
US10339202B2 (en) | Resistive memory arrays for performing multiply-accumulate operations | |
US11068771B2 (en) | Integrated neuro-processor comprising three-dimensional memory array | |
EP3742351A1 (en) | Control circuit for multiply accumulate circuit of neural network system | |
US11886378B2 (en) | Computer architecture with resistive processing units | |
JP6333477B2 (ja) | ドット積を求めるためのメムリスティブクロスバーアレイ | |
US10698975B2 (en) | In situ transposition | |
JP6281024B2 (ja) | ベクトル処理のためのダブルバイアスメムリスティブドット積エンジン | |
WO2021088248A1 (zh) | 基于忆阻器的神经网络的并行加速方法及处理器、装置 | |
US20180004708A1 (en) | Vector-matrix multiplications involving negative values | |
US11507761B2 (en) | Performing complex multiply-accumulate operations | |
Bavandpour et al. | 3D-aCortex: An ultra-compact energy-efficient neurocomputing platform based on commercial 3D-NAND flash memories | |
US20190237137A1 (en) | Memristive arrays with offset elements | |
CN110569962B (zh) | 一种基于1t1r存储器阵列的卷积计算加速器及其操作方法 | |
WO2024109644A1 (zh) | 忆阻器阵列的操作方法、数据处理装置 | |
US11309026B2 (en) | Convolution operation method based on NOR flash array | |
CN113806687A (zh) | 信号处理电路及信号处理方法 | |
CN113222131B (zh) | 基于1t1r的可实现带符号权重系数的突触阵列电路 | |
CN114171087A (zh) | 忆阻器阵列结构及其操作方法、神经网络稀疏化装置 | |
US12003240B1 (en) | Analog memory-based complex multiply-accumulate (MACC) compute engine | |
CN116386687B (zh) | 一种平衡电压降影响的存储器阵列 | |
CN114143412B (zh) | 图像处理方法和图像处理装置 | |
US11935590B2 (en) | Device for matrix-vector multiplications | |
WO2022189872A1 (en) | Resistive memory device for matrix-vector multiplications | |
CN117521753A (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 |