一种忆阻存内矢量矩阵运算器及运算方法与流程

文档序号:23063001发布日期:2020-11-25 17:46阅读:252来源:国知局
一种忆阻存内矢量矩阵运算器及运算方法与流程

本发明属于模拟电路领域,更具体地,涉及一种忆阻存内矢量矩阵运算器及运算方法。



背景技术:

由于具有高能效、低延时、低运算时间复杂度的特点,基于忆阻器的存内矢量-矩阵运算在数据密集型任务中已经取得了广泛的应用,基于忆阻器阵列构筑的神经网络已经展示了存内计算方式相比其传统数值计算机在能效上的巨大优势。然而,同样作为一种数据密集型任务,基于忆阻器的存算一体化技术在执行数值计算加速时,面临着不小的挑战,由于忆阻器阵列执行的矢量-矩阵运算是一种模拟式运算方式,受到忆阻器件非理想效应和阵列非理想效应的影响,基于单一忆阻阵列的矢量-矩阵运算只能提供低精度运算结果,无法满足数值计算任务的苛刻需求。

现有的高精度存内矢量-矩阵运算单元采用二进制浮点格式进行运算,以浮点数0.5为例,由于可以将其进一步表示为1/2,故实现其二进制精确表示,但是像0.3的这种类型的浮点数,由于无法表示成2的幂次或者2的幂次的组合,无法用二进制精确表示;故采用二进制映射的方式事实上是不精准的。同时,对于32位的浮点数运算,由于计算机中全精度二进制计算在32位浮点表示下有一位隐藏位,而阵列映射无法体现隐藏位,故即使能够精确映射32位浮点数,也无法实现全精度的浮点运算。故现有的高精度存内矢量-矩阵运算单元无法实现对浮点数的精准映射和全精度计算。另外,这种采用二进制浮点格式进行运算的方式,为了精确的映射二进制数据,比如2,在4位二进制数表示下即为0010,那么就需要4个器件来映射一个数据,相应的,如果需要执行32bit的浮点运算,一个数据就需要32个器件,若数据需要64位扩展格式,需要的器件个数则进一步增加,电路面积开销较大。因而迫切的需要一种新的高精度存内矢量-矩阵运算单元执行高精度浮点数的矢量-矩阵乘法运算。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种忆阻存内矢量矩阵运算器及运算方法,其目的在于由此解决现有技术无法对浮点数执行高精度计算的技术问题。

为实现上述目的,第一方面,本发明提供了一种忆阻存内矢量矩阵运算器,包括:输入拆分单元、十进制乘法单元和外部累加单元;其中,十进制乘法单元有多个,且均包括忆阻器阵列;各十进制乘法单元并行连接,输入拆分单元的输出端分别与各十进制乘法单元的输入端相连,各十进制乘法单元的输出端均与外部累加单元的输入端相连;

输入拆分单元用于将输入的浮点数矢量和浮点数矩阵中的各浮点数位数分别进行统一后按位进行拆分,得到n个十进制矢量和m个十进制矩阵;将m个十进制矩阵分别写入到m个十进制乘法单元的忆阻器阵列后,将每一个十进制矢量依次并行的输入到上述m个十进制乘法单元的忆阻器阵列中;其中,m为浮点数矩阵中浮点数的位数,n为浮点数矢量中浮点数的位数,m小于或等于十进制乘法单元的个数;十进制矩阵的行数小于或等于忆阻器阵列的行数,列数小于或等于忆阻器阵列的列数;

十进制乘法单元用于基于忆阻器阵列实现十进制矢量与十进制矩阵的乘法运算,并将运算结果输入到外部累加单元中;

外部累加单元用于将所得各乘法运算结果分别与对应的补偿系数相乘后进行累加,所得结果即为浮点数矢量和浮点数矩阵的乘法运算结果。

进一步优选地,上述忆阻器阵列为十字交叉结构,忆阻器处于阵列的十字交叉点上;上述忆阻器阵列的大小为x×y,相邻两列连接到一个电压减法器上形成差分结构;其中,x为正整数,y为偶数;

对于大小为k×l的十进制矩阵,将其存入到上述忆阻器阵列的前k行和前2l列中;十进制矩阵中第k行l列的元素为忆阻器阵列中第k行2l-1列的电导值与第k行2l列的电导值之差,其中,k=1,2,…,k,l=1,2,…,l,k≤x,2l≤y。

进一步优选地,上述忆阻器阵列为十字交叉结构,忆阻器处于阵列的十字交叉点上;上述忆阻器阵列的大小为x×(y+1),其中一列作为参考列,其余列分别与该参考列连接到一个电压减法器上形成差分结构;其中,x、y为正整数;

对于大小为k×l的十进制矩阵,将其存入到上述忆阻器阵列的前k行和前l列中;参考列为忆阻器阵列的第p列;十进制矩阵中第k行l列的元素为忆阻器阵列中第k行l列的电导值与第k行p列的电导值之差,其中,k=1,2,…,k,l=1,2,…,l,k≤x,l≤y。

进一步优选地,上述忆阻器阵列中的忆阻器具有至少10个不同的电导阶态,用于映射数值0~9;上述忆阻器阵列可映射-9~+9的十进制数值。

进一步优选地,十进制乘法单元还包括控制器、数模转换器和模数转化器;

控制器用于选通上述忆阻器阵列中对应的行和列,控制忆阻器阵列的输入和输出;

在执行乘法运算时,数模转换器将输入拆分单元输入的数据转换为电压矢量,输入到忆阻器阵列中执行乘法运算,忆阻器阵列输出的电流矢量经模数转换器后转换为数据量,即为乘法运算结果,输出到外部累加单元中。

第二方面,本发明提供了一种基于第一方面所提供的忆阻存内矢量矩阵运算器的忆阻存内矢量矩阵运算方法,包括以下步骤:

s1、将输入的浮点数矩阵中的各浮点数位数进行统一后,按位进行拆分,得到m个十进制矩阵,并分别写入到m个忆阻器阵列中;

s2、将输入的浮点数矢量中的各浮点数位数进行统一后,按位进行拆分,得到n个十进制矢量,并将每一个十进制矢量依次并行的输入到上述m个忆阻器阵列中,实现十进制矢量与各十进制矩阵的乘法运算,得到m×n个乘法运算结果;

s3、将所得各乘法运算结果分别与对应的补偿系数相乘后进行累加,所得结果即为浮点数矢量和浮点数矩阵的乘法运算结果。

进一步优选地,将位数统一后的浮点数矩阵中的各浮点数按位进行拆分,得到这m个十进制矩阵,分别与浮点数的位数相对应。

进一步优选地,将位数统一后的浮点数矢量中的各浮点数按位进行拆分,得到这n个十进制矢量,分别与浮点数的位数相对应。

进一步优选地,记十进制矢量中浮点数的小数点位于第r和第r+1位之间,十进制矩阵中浮点数的小数点位于第s和第s+1位之间,则浮点数的第n位对应的十进制矢量与浮点数的第m位对应的十进制矩阵相乘后结果的补偿系数为10r-m·10s-n,其中,1≤m≤m,1≤n≤n。

进一步优选地,上述m和n的取值可调,分别对应浮点数矩阵和浮点数矢量中浮点数的有效位的个数,以满足不同的数值计算任务对精度的需求;

对浮点数矩阵中的各浮点数位数进行统一的方法为:对浮点数矩阵中的各浮点数,若小数点之前的位数小于各浮点数中小数点之前的最长位数q1,则在小数点之前的最高位进行补0,使小数点之前的位数均相等;若小数点之后的位数小于m-q1,则在小数点之后的最低位进行补0,使小数点之后的位数均相等;若小数点之后的位数大于m-q1,则从小数点之后的最低位开始删除相应的位数,使小数点之后的位数均为m-q1;

对浮点数矢量中的各浮点数位数进行统一的方法为:对浮点数矢量中的各浮点数,若小数点之前的位数小于各浮点数中小数点之前的最长位数q2,则在小数点之前的最高位进行补0,使小数点之前的位数均相等;若小数点之后的位数小于n-q2,则在小数点之后的最低位进行补0,使小数点之后的位数均相等;若小数点之后的位数大于n-q2,则从小数点之后的最低位开始删除相应的位数,使小数点之后的位数均为n-q2。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

1、本发明提供了一种忆阻存内矢量矩阵运算器及运算方法,通过对输入的浮点数矢量和浮点数矩阵中的浮点数按位进行拆分,实现对浮点数的高精度映射,有效的降低了忆阻器件非理想效应对计算结果的影响,可以在没有精度损失的前提下执行浮点数的矢量-矩阵运算,实现浮点数的高精度计算。

2、本发明所提供的一种忆阻存内矢量矩阵运算器及运算方法,可通过控制拆分位的大小,即在对浮点数矢量和浮点数矩阵中的各浮点数位数进行统一时,通过控制浮点数有效位的个数,来平衡运算精度与运算时间。本发明既可以执行高精度浮点计算也可以执行低精度浮点计算,可满足不同的数值计算任务对精度的需求。

3、本发明所提供的一种忆阻存内矢量矩阵运算器,由于采用十进制映射的方式,相比于现有的二进制映射方式,映射相同的数据所需的器件数量大大减少,因此映射所需要的阵列面积也大大较小,电路面积开销较小,使得全系统的面积效率大幅提升。

附图说明

图1是本发明实施例1所提供的一种忆阻存内矢量矩阵运算器的结构示意图;

图2是本发明实施例1所提供的忆阻器阵列的结构示意图;

图3是本发明实施例1所提供的采用图2所示忆阻器阵列实现的十进制矢量与十进制矩阵乘法运算的示意图;

图4是本发明实施例1所提供的十进制乘法单元的结构示意图;

图5是本发明实施例2所提供的一种忆阻存内矢量矩阵运算方法流程图;

图6是本发明实施例2所提供的浮点数矩阵的拆分过程示意图;

图7是本发明实施例2所提供的浮点数矢量的拆分过程示意图;

图8是本发明实施例2所提供的实现浮点数矢量与浮点数矩阵乘法运算的过程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

实施例1、

一种忆阻存内矢量矩阵运算器,如图1所示,包括:输入拆分单元、十进制乘法单元和外部累加单元;其中,十进制乘法单元有m个,且均包括忆阻器阵列;各十进制乘法单元并行连接,输入拆分单元的输出端分别与各十进制乘法单元的输入端相连,各十进制乘法单元的输出端均与外部累加单元的输入端相连;

输入拆分单元用于将输入的浮点数矢量和浮点数矩阵中的各浮点数位数分别进行统一后按位进行拆分,得到n个十进制矢量和m个十进制矩阵;将m个十进制矩阵分别写入到m个十进制乘法单元的忆阻器阵列后,将每一个十进制矢量依次并行的输入到上述m个十进制乘法单元的忆阻器阵列中;其中,m为浮点数矩阵中浮点数的位数,n为浮点数矢量中浮点数的位数;十进制矩阵的行数小于或等于忆阻器阵列的行数,列数小于或等于忆阻器阵列的列数;m和n的取值可调,分别对应浮点数矩阵和浮点数矢量中浮点数的有效位的个数,以满足不同的数值计算任务对精度的需求;这里m和n可以通过权衡运算精度与运算时间后确定,在精度要求相对较低时,可以舍弃掉浮点数的最后几位,适当的减小n的取值,降低运算延时。需要说明的是,本实施例中将浮点数矩阵和浮点数矢量中的各浮点数位数分别进行统一,并使小数点之前位数均相等,小数点之后的位数也均相等。具体的,对浮点数矩阵中的各浮点数位数进行统一的方法为:对浮点数矩阵中的各浮点数,若小数点之前的位数小于各浮点数中小数点之前的最长位数q1,则在小数点之前的最高位进行补0,使小数点之前的位数均相等;若小数点之后的位数小于m-q1,则在小数点之后的最低位进行补0,使小数点之后的位数均相等;若小数点之后的位数大于m-q1,则从小数点之后的最低位开始删除相应的位数,使小数点之后的位数均为m-q1。对浮点数矢量中的各浮点数位数进行统一的方法为:对浮点数矢量中的各浮点数,若小数点之前的位数小于各浮点数中小数点之前的最长位数q2,则在小数点之前的最高位进行补0,使小数点之前的位数均相等;若小数点之后的位数小于n-q2,则在小数点之后的最低位进行补0,使小数点之后的位数均相等;若小数点之后的位数大于n-q2,则从小数点之后的最低位开始删除相应的位数,使小数点之后的位数均为n-q2。在本实施例中,为实现高精度运算,位数m取值为浮点数矩阵各浮点数中小数点之前最长的位数与小数点之后最长的位数之和,位数n取值为浮点数矢量各浮点数中小数点之前最长的位数与小数点之后最长的位数之和。通过在最高位进行补0将各浮点数小数点之前的位数统一为小数点之前的最长位数,通过在最低位进行补0将各浮点数小数点之后的位数统一为小数点之后的最长位数。需要进一步说明的是,上述浮点数矩阵经过拆分后所得的十进制矩阵个数小于或等于十进制乘法单元的个数,本实施例中,十进制矩阵个数与十进制乘法单元的个数相等,均为m。

十进制乘法单元用于基于忆阻器阵列实现十进制矢量与十进制矩阵的乘法运算,并将运算结果输入到外部累加单元中;具体的,忆阻器阵列具有执行矢量-矩阵乘法的能力。本发明中忆阻器阵列为十字交叉结构,具有多阶可调电导特征的忆阻器处于阵列的十字交叉点上。为了同时实现对正数和负数的映射,本发明将忆阻器阵列与电压减法器进行结合形成差分结果。具体实现如下:(1)忆阻器阵列的大小为x×y,相邻两列连接到一个电压减法器上形成差分结构;其中,x为正整数,y为偶数;对于大小为k×l的十进制矩阵,将其存入到上述忆阻器阵列的前k行和前2l列中;十进制矩阵中第k行l列的元素为忆阻器阵列中第k行2l-1列的电导值与第k行2l列的电导值之差,其中,k=1,2,…,k,l=1,2,…,l,k≤x,2l≤y。(2)忆阻器阵列的大小为x×(y+1),其中一列作为参考列,其余列分别与该参考列连接到一个电压减法器上形成差分结构;其中,x、y为正整数;对于大小为k×l的十进制矩阵,将其存入到上述忆阻器阵列的前k行和前l列中;参考列为忆阻器阵列的第p列;十进制矩阵中第k行l列的元素为忆阻器阵列中第k行l列的电导值与第k行p列的电导值之差,其中,k=1,2,…,k,l=1,2,…,l,k≤x,l≤y。需要说明的是,上述忆阻器阵列中的忆阻器具有至少10个不同的电导阶态,用于映射数值0~9,故上述忆阻器阵列可映射-9~+9的十进制数值。本实施例选用第一种实现方式,如图2所示,为了能够对负数进行映射,本实施例将每相邻的两列构成一个差分对,差分对中左侧一列为“+”,与电压减法器的正输入端相连;右侧一列为“-”,与电压减法器的负输入端相连。该忆阻器阵列具有一个行输入端和一个列输出端,分别输入电压信号输出电流信号。进一步地,忆阻器阵列执行矢量-矩阵乘法的过程如图3所示,在执行矢量-矩阵乘法操作时,将数值矢量映射为电压矢量施加在忆阻器阵列的输入端,将十进制矩阵映射为电导存储在忆阻器阵列中,对于大小为k×l的十进制矩阵a,其中第k行l列的元素akl在忆阻阵列中的存储方式为l=1,2,…,l。当进行矢量矩阵乘法运算时,对于输入矢量,对应成电压后从忆阻器阵列的行进行输入,根据欧姆定律i=u·g,即对于忆阻阵列中的每一个单元都会得到一个电流量,而根据基尔霍夫电流定律,阵列的每一列的输出电流是这一列上每一个单元的电流之和,则每一列的输出电流为由此可在列线上得到一系列输出的电流,这些电流就构成了电流矢量,由此忆阻器阵列完成了一次基于模拟量的矢量矩阵乘法。进一步的,需要说明的是,上述十进制乘法单元还包括控制器、数模转换器和模数转化器,具体结构如图4所示,其中,控制器用于选通上述忆阻器阵列中对应的行和列,控制忆阻器阵列的输入和输出。在执行矢量-矩阵乘法运算时,数模转换器将输入拆分单元输入的数据转换为电压矢量,输入到忆阻器阵列中执行乘法运算,忆阻器阵列输出的电流矢量经模数转换器后转换为数据量,即为乘法运算结果,输出到外部累加单元中。

外部累加单元用于将所得各乘法运算结果分别与对应的补偿系数相乘后进行累加,所得结果即为浮点数矢量和浮点数矩阵的乘法运算结果。具体的,记十进制矢量中浮点数的小数点位于第r和第r+1位之间,十进制矩阵中浮点数的小数点位于第s和第s+1位之间,则浮点数的第n位对应的十进制矢量与浮点数的第m位对应的十进制矩阵相乘后结果的补偿系数为10r-m·10s-n,其中,1≤m≤m,1≤n≤n。

实施例2、

一种基于实施例1所提供的忆阻存内矢量矩阵运算器的忆阻存内矢量矩阵运算方法,如图5所示,包括以下步骤:

s1、将输入的浮点数矩阵中的各浮点数位数进行统一后,按位进行拆分,得到m个十进制矩阵,并分别写入到m个忆阻器阵列中;

具体的,本实施例中的忆阻器阵列与实施例1相同,这里不再赘述。按照实施例1中对应的方式将浮点数矩阵中的各浮点数位数统一为m位后按位进行拆分。以小数点之前的位数为1(即最高位为个位)为例,如图6所示,将位数统一后的浮点数矩阵中的各浮点数按位进行拆分,得到这m个十进制矩阵,分别与浮点数的位数相对应;其中,第一个十进制矩阵仅包含原浮点数矩阵的个位,第二个十进制矩阵仅包含原浮点数矩阵的十分之一位,第三个十进制矩阵仅包含原浮点数矩阵的百分之一位,以此类推,直至完成原浮点数矩阵的拆分,得到m个十进制矩阵。

s2、将输入的浮点数矢量中的各浮点数位数进行统一后,按位进行拆分,得到n个十进制矢量,并将每一个十进制矢量依次并行的输入到上述m个忆阻器阵列中,实现十进制矢量与各十进制矩阵的乘法运算,得到m×n个乘法运算结果;

具体的,同样按照实施例1中对应的方式将浮点数矢量中的各浮点数位数统一为n位后按位进行拆分。以小数点之前的位数为1(即最高位为个位)为例,如图7所示,将位数统一后的浮点数矢量中的各浮点数按位进行拆分,得到这n个十进制矢量,分别与浮点数的位数相对应;其中,第一个十进制矢量仅包含原浮点数矢量的个位,第二个十进制矢量仅包含原浮点数矢量的十分之一位,第三个十进制矢量仅包含原浮点数矢量的百分之一位,以此类推,直至完成原浮点数矢量的拆分过程,得到n个十进制矢量。

s3、将所得各乘法运算结果分别与对应的补偿系数相乘后进行累加,所得结果即为浮点数矢量和浮点数矩阵的乘法运算结果。

具体的,记十进制矢量中浮点数的小数点位于第r和第r+1位之间,十进制矩阵中浮点数的小数点位于第s和第s+1位之间,则浮点数的第n位对应的十进制矢量与浮点数的第m位对应的十进制矩阵相乘后结果的补偿系数为10r-m·10s-n,其中,1≤m≤m,1≤n≤n。具体的过程如图8所示,上述十进制矢量按照1~n的顺序依次并行输入到各忆阻器阵列中,每个十进制矢量均与m个十进制矩阵执行矢量-矩阵乘法,则共得到m×n个输出,每个输出编号为(m,n),本实施例使用的浮点数矢量与浮点数矩阵中的各浮点数小数点之前的位数为1,即最高位为100,r、s均为1,故每一个输出得到的补偿为101-m·101-n。最后将这些输出进行总和,得到浮点数矢量和浮点数矩阵的乘法运算结果。

需要说明的是,在上述过程中,可以通过控制m与n的大小兼顾高精度运算与低精度运算,即在对浮点数矢量和浮点数矩阵中的各浮点数位数进行统一时,通过控制浮点数有效位的个数,来平衡运算精度与运算时间。本发明既可以执行高精度浮点计算也可以执行低精度浮点计算,以满足不同的数值计算任务对精度的需求。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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