CN110674462B - 一种矩阵运算装置、方法、处理器和计算机可读存储介质 - Google Patents

一种矩阵运算装置、方法、处理器和计算机可读存储介质 Download PDF

Info

Publication number
CN110674462B
CN110674462B CN201911223959.0A CN201911223959A CN110674462B CN 110674462 B CN110674462 B CN 110674462B CN 201911223959 A CN201911223959 A CN 201911223959A CN 110674462 B CN110674462 B CN 110674462B
Authority
CN
China
Prior art keywords
columns
row
rows
operated
matrix
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
Application number
CN201911223959.0A
Other languages
English (en)
Other versions
CN110674462A (zh
Inventor
郑瀚寻
杨龚轶凡
闯小明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhonghao Xinying (Hangzhou) Technology Co.,Ltd.
Original Assignee
Shenzhen Xinying Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Xinying Technology Co ltd filed Critical Shenzhen Xinying Technology Co ltd
Priority to CN201911223959.0A priority Critical patent/CN110674462B/zh
Publication of CN110674462A publication Critical patent/CN110674462A/zh
Application granted granted Critical
Publication of CN110674462B publication Critical patent/CN110674462B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix 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)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Static Random-Access Memory (AREA)

Abstract

本发明实施例公开了一种矩阵运算装置、方法、处理器和计算机可读存储介质。所述一种矩阵运算装置包括:存储器,用于存储待运算矩阵,包括M行*N列存储单元;M行*K条字线,每条字线沿行方向与M行*N列存储单元连接,其中,每一行中的每个存储单元连接K条字线;M行*K条字线中的任意K1条字线用于使能相应的K2行*N列存储单元,以将待运算矩阵内对应的至少一行元素写入K2行*N列存储单元中的对应位置;与存储器连接的运算电路,用于接收外部输入的待运算向量,并基于待运算向量和待运算矩阵进行向量‑矩阵运算,得到运算结果。该装置可以用于在实现存算一体的前提下,将待运算矩阵的多行元素同时写入对应的存储单元,从而大大提高了数据写入的效率。

Description

一种矩阵运算装置、方法、处理器和计算机可读存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种矩阵运算装置、方法、处理器和计算机可读存储介质。
背景技术
随着工艺节点的发展和进步,计算机基于数字逻辑的运算速度不断提高,但是数据基于传输介质(例如铜导线)的传输速度并没有相对应的提升,反而由于传输介质的尺寸越来越小而变得更加缓慢。现有的冯·诺依曼运算体系依靠不同的装置存储数据和执行运算,随着数据量的增加以及算法复杂程度的提升,数据在存储装置和运算装置之间存取传输所消耗的大量时间和电力能源,是进一步提升运算性能的瓶颈。
针对这一问题,诸多的芯片公司和科学家们投入了大量的时间和资金,来研究如何将计算机中的运算从中央处理器转入内存中进行,从而减少数据的移动,提升运算效率,这种方法也被称为存算一体化。现有的存算一体方法在一方面确实可以达到一定程度的提升运算速度、节约电路资源和减少运算功耗的效果。但在另一方面,即存储数据方面,尤其是在有大量数据需要进行运算的情况下,采用现有的技术方案仍需消耗较多的时间将大量数据逐行写入存算一体装置内,从而难以提高存算一体在实际应用中的整体工作效率。
发明内容
本发明实施例提供了一种矩阵运算装置和方法,可以在实现存算一体的同时,进一步提高运算效率,并且实现将待运算矩阵内的多行元素同时写入对应的存储单元,提高将矩阵写入内存的效率,从而节约时间和电路资源。
一方面,本发明实施例提供了一种矩阵运算装置,该装置包括:
存储器,用于存储待运算矩阵,所述存储器包括M行*N列存储单元,每个所述存储单元在行方向和列方向上与相邻的存储单元连接;
字线,所述字线共M行*K条,所述字线沿行方向与所述M行*N列存储单元连接,其中,每一行中的每个所述存储单元连接K条所述字线;所述M行*K条字线中的任意K1条字线用于同时使能相应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素同时写入所述K2行*N列存储单元中的对应位置,K、K1和K2为大于1的整数;
运算电路,所述运算电路包括X行*Y列运算单元,所述M行*N列存储单元与所述X行*Y列运算单元交叉排列,所述M行*N列存储单元中的每一个存储单元均对应连接有一个运算单元,所述运算电路用于接收外部输入的待运算向量,并基于所述待运算向量、所述M行*N列存储单元存储的所述待运算矩阵进行向量-矩阵运算,得到运算结果。
本发明实施例提供了一种矩阵运算装置,在M行*N列存储单元的结构中,可以通过与每行每个存储单元连接的多条字线,同时使能多行多个存储单元,从而实现将待运算矩阵内的多行数据同时写入对应的存储单元。对比于现有技术中将数据逐行写入内存而言,本发明大大缩短了将数据写入内存所消耗的时间,提高了写入效率。除此之外,本发明实施例还可以通过该装置内与M行*N列存储单元交叉排列的X行*Y列运算单元,实现向量-矩阵运算的内存内计算。对比现有的存算一体方案中将一整片独立的M行*N列存储单元和一整片独立的X行*Y列运算单元简单连接的结构而言,本发明是将装置中的存储单元和运算单元交叉排列,并耦合(例如一行四个存储单元下排列一行四个运算单元,紧接着再排列一行四个存储单元,如此循环,每个存储单元都分别与在其下方相邻的运算单元耦合;又例如,一行四个存储单元下排列两行四个运算单元,紧接着再排列一行四个存储单元,如此四行为一组的循环排列,每个存储单元都分别与其在列方向上相邻的运算单元耦合,等等)。其中,每一个存储单元均对应连接有一个运算单元,如此,在对存储单元执行写入操作时,运算单元可以直接获取写入该存储单元内的数据,而不需要对存储单元进行选通和读取操作,再将读出的数据传输至运算单元。从而减少运算过程中数据的传输开销,大大提高了数据的运算效率,同时减小了电路面积。
在一种可能的实施方式中,所述X行*Y列运算单元中的每一个运算单元均包括输入端口;
所述运算单元通过所述输入端口与对应的所述存储单元连接,用于获取所述存储单元中存储的元素;
所述运算单元还用于获取待运算元素,并将所述对应存储单元内存储的元素与所述待运算元素相乘,得到相乘结果,所述待运算元素来自所述待运算向量。
在一种可能的实施方式中,所述运算电路还包括与所述X行*Y列运算单元连接的加法电路;
所述加法电路,用于将所述X行*Y列运算单元中每一列所述运算单元得到的相乘结果分别进行相加,得到所述待运算向量与所述待运算矩阵的运算结果。
在一种可能的实施方式中,所述装置还包括:
清零线,所述清零线共N条,所述清零线沿列方向与所述M行*N列存储单元连接,其中,每一列中的每个所述存储单元连接同一条所述清零线;每条所述清零线用于在执行清零所述存储单元操作时,向其连接的每个所述存储单元传递高电平。
在一种可能的实施方式中,所述装置还包括:
位线,每组所述位线包括第一位线以及与所述第一位线互补的第二位线;在所述M行*N列存储单元内,每一列中的每个所述存储单元与S组所述位线沿列方向连接,从而构成N列*S组所述位线;
当所述N列*S组位线中的N列*S1组位线对应的S2行*N列存储单元使能时,所述N列*S1组位线用于将所述待运算矩阵内的至少一行元素写入所述S2行*N列存储单元中的对应位置。
在一种可能的实施方式中,每个所述存储单元包括:
第一反相器和第二反相器,所述第一反相器和所述第二反相器首尾相连并构成存储空间,所述存储空间用于存储一项数据,所述一项数据包括所述待运算矩阵内对应的元素;
第一传输晶体管,Q1个所述第一传输晶体管的漏极分别与同一个所述第一反相器的输出端连接,Q1个所述第一传输晶体管的栅极分别与K条所述字线中对应的字线连接,Q1个所述第一传输晶体管的源极分别与S组所述位线中对应的第一位线连接;
第二传输晶体管,Q2个所述第二传输晶体管的漏极分别与同一个所述第二反相器的输出端连接,Q2个所述第二传输晶体管的栅极分别与K条所述字线中对应的字线连接,Q2个所述第二传输晶体管的源极分别与S组所述位线中对应的第二位线连接;
当K条所述字线中的任意一条字线处于高电势时,与此条字线连接的第一传输晶体管和第二传输晶体管用于导通电路,以将所述待运算矩阵内对应的元素写入所述存储单元。
在一种可能的实施方式中,每个所述存储单元还包括:
第一清零晶体管,所述第一清零晶体管的漏极与所述第一反相器的输出端连接,所述第一清零晶体管的栅极与所述清零线连接;
第二清零晶体管,所述第二清零晶体管的漏极与所述第二反相器的输出端连接,所述第二清零晶体管的栅极与所述清零线连接;
所述第一清零晶体管和所述第二清零晶体管用于在所述清零线处于高电势时将所述存储单元清零。
另一方面,本发明实施例提供了一种矩阵运算方法,该方法包括:
根据待运算矩阵,确定字线中的K1条所述字线,所述字线共M行*K条,所述字线沿行方向与存储器中的M行*N列存储单元连接,其中,每一行中的每个所述存储单元连接K条所述字线;
通过K1条所述字线,同时使能对应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素同时写入所述K2行*N列存储单元的对应位置;在所述M行*N列存储单元内,每个所述存储单元在行方向和列方向上与相邻的存储单元连接,K、K1和K2为大于1的整数;
通过与所述存储器连接的运算电路接收外部输入的待运算向量,并基于所述待运算向量、所述M行*N列存储单元存储的所述待运算矩阵进行向量-矩阵运算,得到运算结果;其中,所述运算电路包括X行*Y列运算单元,所述M行*N列存储单元与所述X行*Y列运算单元交叉排列,所述M行*N列存储单元中的每一个存储单元均对应连接有一个运算单元。
在一种可能的实施方式中,该方法还包括:
当所述待运算矩阵中包括P列全零元素列时,从共计N条清零线中确定P条对应的所述清零线,所述N条清零线沿列方向与所述M行*N列存储单元连接,其中,每一列中的每个所述存储单元连接同一条所述清零线;
通过P条所述清零线,向与其连接的P列存储单元传递高电平,以将所述P列存储单元清零。
再一方面,本发明实施例提供了一种处理器,该处理器包括上述一方面任意一种可能的实施方式中包括的装置。该处理器可由芯片构成,也可以包含芯片和其他分立器件。
再一方面,本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,可以实现上述另一方面任意一种可能的实施方式中包括的方法。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中的一种存储单元的结构示意图。
图2是现有技术中的一种数据存储及运算的整体架构示意图。
图3是现有技术中的一种将矩阵写入存储器的时钟周期示意图。
图4是现有技术中的一种进行向量-矩阵运算的时钟周期示意图。
图5是本发明实施例提供的一种存储单元的排列以及连接示意图。
图6是本发明实施例提供的一种将矩阵写入存储单元的过程示意图。
图7是本发明实施例提供的另一种将矩阵写入存储单元的过程示意图。
图8是本发明实施例提供的一种存储单元的结构示意图。
图9是本发明实施例提供的一种矩阵运算装置示意图。
图10是本发明实施例提供的一种向量-矩阵的数学运算示意图。
图11是本发明实施例提供的一种向量-矩阵运算的电路连接示意图。
图12是本发明实施例提供的一种存算一体的整体架构示意图。
图13是本发明实施例提供的一种将矩阵写入存储器的时钟周期示意图。
图14是本发明实施例提供的一种进行向量-矩阵运算的时钟周期示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及所述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。术语“至少一个”的含义是一个或一个以上,术语“多个”的含义是两个或两个以上,除非另有明确具体的限定。并且,本发明的说明书和权利要求书及所述附图提及的“行”与“列”均为相对概念,而非绝对的“行”与“列”。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。需要说明的是,当一个元件被称作与另一个或多个元件“耦合”、“连接”时,它可以是一个元件直接连接到另一个或多个元件,也可以是间接连接至该另一个或多个元件。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
下面对本发明涉及的背景技术进行具体阐述,以进一步说明本发明实施例一种矩阵运算装置和方法所解决的技术问题。
请参见图1,图1是现有技术中的一种存储单元的结构示意图。如图1所示,该6T结构的静态随机存储器(Static Random-Access Memory,SRAM)单元包括:第一反相器和第二反相器。其中,第一反相器包括第一上拉晶体管PU1和第一下拉晶体管PD1,第一上拉晶体管PU1的漏极和第一下拉晶体管PD1的源极电连接,如图1所示,第一上拉晶体管PU1的漏极和第一下拉晶体管PD1的源极的连接点为第一存储节点11。第一上拉晶体管PU1的栅极和第一下拉晶体管PD1的栅极电连接,如图1所示,第一上拉晶体管PU1的栅极和第一下拉晶体管PD1的栅极的连接点为第一读写节点12。其中,第二反相器包括第二上拉晶体管PU2和第二下拉晶体管PD2,第二上拉晶体管PU2的漏极和第二下拉晶体管PD2的源极电连接,如图1所示,所述第二上拉晶体管PU2的漏极和第二下拉晶体管PD2的源极的连接点为第二存储节点21。第二上拉晶体管PU2的栅极和第二下拉晶体管PD2的栅极电连接,如图1所示,第二上拉晶体管PU2的栅极和第二下拉晶体管PD2栅极的连接点为第二读写节点22。
此外,第一上拉晶体管PU1的源极和第二上拉晶体管PU2的源极与工作电压电源(VoltageDevice Device,VDD)电连接;第一下拉晶体管PD1的源极和第二下拉晶体管PD2的漏极与公共电压电源(Voltage SeriesSeries,VSS)电连接,工作电压电源VDD提供的电压高于公共电压电源VSS提供的电压。进一步的,如图1所示,第一存储节点11与第二读写节点22电连接,第二存储节点21与第一读写节点12电连接,此结构表明,该第一反相器与第二反相器首尾相连。
需要说明的是,通常情况下,6T结构的存储单元中,第一上拉晶体管PU1和第二上拉晶体管PU2一般为P型金属氧化物半导体场效应晶体管(Metal-Oxide-SemiconductorField-Effect Transistor,MOSFET),第一下拉晶体管PD1和第二下拉晶体管PD2为N型MOSFET。
如图1所示的6T结构的存储单元进一步还可以包括传输晶体管,其中包括:第一传输栅晶体管PG1和第二传输栅晶体管PG2,第一传输栅晶体管PG1和第二传输栅晶体管PG2的栅极均与字线wl电连接;第一传输栅晶体管PG1的源极与第一位线bl电连接,漏极与第一存储节点11电连接;第二传输栅晶体管PG2的源极与第二位线(互补位线)bl_b电连接,漏极与第二存储点21电连接。如图1所示,其中,字线wl与第一位线bl及第二位线bl_b为正交关系,通常情况下,字线wl沿行分布,第一位线bl和第二位线bl_b沿列分布。
通常情况下,6T结构的存储单元存储信息“0”和信息“1”的方式为:在第一存储节点11为低电平,第二存储节点21为高电平时,表示6T结构的存储单元存储的信息为“0”;在第一存储节点11为高电平,第二存储节点21为低电平时,表示6T结构的存储单元存储的信息为“1”。具体的,在对存储单元执行写入操作时,以将信息“1”写入存储单元为例,首先选中字线wl,并对其施加高电平,使得该存储单元处于使能状态,即使第一传输栅晶体管PG1和第二传输晶体管PG2打开;并且对第一位线bl施加高电平,对第二位线bl_b施加低电平,使第一存储节点11处于高电平,第二存储节点21为低电平。如此,即在存储单元中写入了信息“1”。以将信息“0”写入存储单元为例,首先选中字线wl,并对其施加高电平,使得该存储单元处于使能状态,即使第一传输栅晶体管PG1和第二传输晶体管PG2打开;并且对第一位线bl施加低电平,对第二位线bl_b施加高电平,使第一存储节点11处于低电平,第二存储节点21为高电平。如此,即在存储单元中写入了信息“0”
在对存储单元进行读取操作时,对字线wl施加高电平,第一传输栅晶体管PG1和第二传输栅晶体管PG2打开,对第一位线bl和第二位线bl_b同时施加高电平,从而使所述第一传输栅晶体管PG1和第二传输栅晶体管PG2的源极均为高电平,通过测量第一位线bl和第二位线bl_b之间的电位差能够判断存储单元存储的信息。具体的,当存储单元存储信息为“0”时,第一存储节点11为低电平,第二存储节点21为高电平,因此第一传输栅晶体管PG1的漏极为低电平,第一传输栅晶体管PG1源极和漏极之间形成电压差,电流流过第一传输栅晶体管PG1。第二存储节点21为高电平,相应地,第二传输栅晶体管PG2漏极为高电平,第二传输栅晶体管PG2的源极和漏极之间不会形成电压差,因此,所以第二存储节点21电平不会变化,由于第二存储节点21与所述第一读写节点12相连,因此第一读写节点12高电平,第一下拉晶体管PD1打开,电流可以从第一位线bl、第一传输栅晶体管PG1、第一下拉晶体管PD1流过,使第一位线bl的电平下降,如果检测到第一位线bl与第二位线bl_b之间电压差的变化超过一阈值,即可得到6T结构的存储单元存储的信息为“0”。
基于上述现有技术中的一种6T结构存储单元的内部结构以及其数据信息写入和读取的操作,请参见图2,图2是现有技术中的一种数据存储及运算的整体架构示意图。如图2所示,SRAM和逻辑运算单元((Arithmetic and Logic Unit,ALU)为两个独立的功能模块,通过I/O接口建立连接。具体的,在该架构中,提供了一个写入口,即如图1所示的与每个存储单元连接的一条字线wl,在一个时钟周期内只能使其中任意一条字线处于高电势,以将待运算矩阵中的一行数据写入如图2所示的内存阵列memory tile中的对应位置。其中,该待运算矩阵可以为某外部存储装置中存储的矩阵,也可以是某采样装置中采集的矩阵,还可以是一个矩阵集合等等,本发明实施例对此不作具体限定。例如,请参见图3,图3是现有技术中的一种将矩阵写入存储器的时钟周期示意图。如图3所示,若待运算矩阵为4行*4列的矩阵,则需要四个时钟周期将整个待运算矩阵完整的写入SRAM,消耗时间长,效率较低。其中,时钟周期也称为振荡周期,定义为时钟频率的倒数,时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,中央处理器(Central Processing Unit/Processor,CPU)仅完成一个最基本的动作。时钟周期表示了同步动态随机存取内存(synchronousdynamic random-access memory,SDRAM)所能运行的最高频率,更小的时钟周期就意味着更高的工作频率。除此之外,如图2所示,由于SRAM和ALU互相独立,因此,在进行运算前需要将SRAM中存储的矩阵matrix通过感应放大器sense amplifier读出SRAM,并通过I/O接口传输至ALU(例如为图2所示的data_output(matrix));其次ALU接收外部输入的向量vector,并通过乘法累加器(Multiply Accumulator,MAC)等一系列步骤进行向量-矩阵运算,得到并输出运算结果。如上所述,请参见图4,图4是现有技术中的一种进行向量-矩阵运算的时钟周期示意图。如图4所示,整个运算过程总共要消耗5个时钟周期,耗时长,效率低。尤其是在现今数据处理量日益庞大的情况下,这种存储与运算的方式极大的制约了数据处理效率。
基于此,本发明实施例提供了一种矩阵运算装置,可以通过多个写口实现将待运算矩阵内的多行元素同时写入对应的存储单元,提高写入效率,同时,在实现存算一体的前提下,通过存储单元与运算单元的交叉排列并耦合,紧密连接,进一步提高运算效率,从而节约时间和电路资源。
具体的,该矩阵运算装置包括存储器,用于存储待运算矩阵,所述存储器包括M行*N列存储单元bit cell,每个存储单元在行方向和列方向上与相邻的存储单元连接。其中,M为大于1的整数,N为大于1的整数。例如,请参见图5,图5是本发明实施例提供的一种存储单元的排列以及连接示意图。如图5所示,该M行*N列存储单元中的每一个存储单元在行方向和列方向上都与相邻的存储单元连接。
具体的,请一并参见图5,该矩阵运算装置还可以包括字线,所述字线共M行*K条,所述字线沿行方向与所述M行*N列存储单元连接,其中,每一行中的每个所述存储单元连接K条所述字线。其中,K为大于1的整数。本发明实施例对K的上限不作具体限定,但通常情况下K为小于等于M的整数。如图5所示,其中wl[0][K-1:0]可以表示为与第一行每个存储单元连接的K条字线,具体可以包括字线wl[0][0]、wl[0][1]、wl[0][2]……wl[0][K-1]。其中wl[M-1][K-1:0]可以表示为与第M行每个存储单元连接的K条字线,具体可以包括字线wl[M-1][0]、wl[M-1][1]、wl[M-1][2]……wl[M-1][K-1],等等,此处不再赘述。其中的[K-1:0]可以表示本发明实施例提供的K个写入口,例如字线wl[0][0]具体可以表示为与第一行每个存储单元连接的第一写入口,字线wl[0][1]具体可以表示为与第一行每个存储单元连接的第二写入口,字线wl[1][0]具体可以表示为与第二行每个存储单元连接的第一写入口,字线wl[1][1]具体可以表示为与第二行每个存储单元连接的第二写入口,等等,此处不再赘述。如图5所示,每行每个存储单元都可对应有K个写入口,并且通过K个写入口中的任意一个写入口都可对存储单元执行写入操作。可以理解的是,基于本发明已提供例如4个写入口的前提下,若每行每个存储单元只连接有一条字线,则每行中的每个存储单元只对应其中一个写入口。例如第一行每个存储单元对应第一写入口,第二行每个存储单元对应第二写入口,第三行每个存储单元对应第三写入口,第四行每个存储单元对应第四写入口,其次第五行每个存储单元对应第一写入口,等等。例如在第一写入口失效的情况下,该第一行、第五行等等每个存储单元则不能被写入数据,即在原本可以通过该M行*N列存储单元最多写入M行*N列的待运算矩阵并进行运算,此时只能写入3/4个M行*N列的待运算矩阵并进行运算,这大大影响了写入效率和运算效率,与本发明实施例的初衷相矛盾。又例如,在第二、三和四行存储单元可以不写的情况下(例如对应待运算矩阵中的第二、三和四行均为全零元素行,可跳过不写以提高写入效率的情况下)要对第一行和第五行存储单元等执行写入操作,由于第一行和第五行存储单元均对应第一写入口,而第一写入口在一个时钟周期内对应的数据仅为该待运算矩阵内的某一行元素,从而无法仅通过第一写入口将相应的两行元素同时写入第一行和第五行存储单元,该操作显然要分别在至少两个时钟周期内完成。即在当前时钟周期内,通过第一写入口将对应的一行元素写入第一行存储单元,而在下一时钟周期内,再通过第一写入口将对应的另一行元素写入第五行存储单元,这大大降低了写入效率。又或者,基于本发明实施例提供的多个写入口,例如在通过第一写入口写入了一个长延时指令相关的数据(例如可以为一个长达十几个时钟周期的多次更新数据并执行多次运算的命令),但是可能只使用到了第三、第四和第五行存储单元的情况下。此时,便可以通过第二、第三和第四写入口向第一、第二行存储单元选择性写入数据以并行执行其他指令,从而达到并行计算和充分节能的效果。可以理解的是,在该矩阵运算装置正在执行存算任务的情况下,该装置内的所有运算单元均处于电路导通状态,在仅有部分存储单元被现有指令占用的情况下,通过其他写入口写入数据并执行相应的其他指令,既不会覆盖上一指令指向的正在计算中的数据,又可以充分利用空转的运算单元。
如上所述,与每行每个存储单元连接的沿行方向的K条字线中的每一条字线均可用于使能与其连接的存储单元,以将所述待运算矩阵内对应的一行元素写入此条字线连接的存储单元。所述M行*K条字线中的任意K1条字线可用于使能相应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素写入所述K2行*N列存储单元中的对应位置。其中,K1为大于1且小于等于K的整数,K2为大于1且小于等于K1的整数,通常情况下,K1等于K2。显然,每行每个存储单元都可以被与其连接的任意一条字线使能,并基于该条字线对应的写入口将该写入口对应的数据写入对应的存储单元。如图5所示,例如,通过字线wl[0][0]可以使能与其连接的第一行每个存储单元,以将第一写入口对应的数据(例如该待运算矩阵内的第一行元素)写入第一行存储单元。同时,还可以通过多条字线(例如为字线wl[0][0]和字线wl[1][1])同时使能多行存储单元(例如为第一行和第二行存储单元),以将多行数据(例如该待运算矩阵内的第一行元素和第二行元素)同时写入该多行存储单元内的对应位置,极大的提高了将数据写入存储单元的效率。
在一种可能的实施方式中,请参见图6,图6是本发明实施例提供的一种将矩阵写入存储单元的过程示意图。其中,该待运算矩阵可以为某外部存储装置中存储的矩阵,也可以是某采样装置中采集的矩阵,该待运算矩阵可以是一个矩阵,也可以是一个矩阵集合等等,本发明实施例对此不作具体限定。如图6所示,该M行*N列存储单元可以具体为4行*4列存储单元,K可以等于4,即每行每个存储单元都连接有4条字线,其中包括四个不同的写入口。例如,第一行每一个存储单元连接有字线wl[0][0]、wl[0][1]、wl[0][2]和wl[0][3];又例如,第二行每一个存储单元连接有字线wl[1][0]、wl[1][1]、wl[1][2]和wl[1][3],等等,此处不再赘述。如图6所示,在将图6的待运算矩阵写入存储单元时,首先可以同时选中四条字线令其处于高电势(即K1等于4),例如选中图6所示的字线wl[0][0](对应第一写入口)、wl[1][1](对应第二写入口)、wl[2][2](对应第三写入口)和wl[3][3](对应第四写入口)。使得该四条字线连接的如图6所示的4行*4列存储单元处于使能状态(即K2等于4),以将这四个写入口对应的数据写入对应的存储单元(例如图6所示,将第一写入口对应的矩阵第一行元素写入第一行存储单元,将第二写入口对应的矩阵第二行元素写入第二行存储单元,等等)。即可以在一个时钟周期内,将该待运算矩阵中的4行*4列元素写入对应的4行*4列存储单元,大大的提高了将数据写入存储单元的效率。需要说明的是,通常情况下,在一个时钟周期内,由于不同写入口对应写入的数据不同(例如字线wl[0][0]对应的第一写入口可以为写入该待运算矩阵的第一行元素[1 0 1 0],又例如字线wl[1][1]对应的第二写入口可以为写入该待运算矩阵的第二行元素[1 11 0],等等),因此针对每一行存储单元,只需选中与其连接的一条字线,并且每一行选中的字线其所对应的写入口也会不同。例如,若同时选中与第一行存储单元连接的字线wl[0][0]和wl[0][1],即相当于将第一写入口和第二写入口分别对应的该待运算矩阵中的第一行元素和第二行元素同时写入第一行存储单元,显然这是没有意义的。或者同时选中与第一行存储单元连接的字线wl[0][0]和与第二行存储单元连接的字线wl[1][0],即相当于将第一写入口对应的该待运算矩阵中的第一行元素同时写入第一行存储单元和第二行存储单元,显然这也是没有意义的。
可选的,请一并参见图5,该矩阵运算装置还可以包括位线,每组所述位线包括第一位线以及与所述第一位线互补的第二位线;在所述M行*N列存储单元内,每一列中的每个所述存储单元与S组所述位线沿列方向连接,从而构成N列*S组所述位线。当所述N列*S组位线中的N列*S1组位线对应的S2行*N列存储单元使能时,所述N列*S1组位线用于将所述待运算矩阵内的至少一行元素写入所述S2行*N列存储单元中的对应位置。其中,S为大于1的整数,S1为大于1且小于等于S的整数,S2为大于1且小于等于S1的整数。本发明实施例对S和S1的数值不作具体限定,但通常情况下S等于K,S1等于K1,S2等于K2,且通常情况下S1等于S2。如图5所示,其中bl[0][S-1:0]可以表示与第一列每个存储单元连接的S条第一位线,具体可以包括第一位线bl[0][0]、bl[0][1]、bl[0][2]……bl[0][S-1]。其中bl_b[0][S-1:0]可以表示与第一列每个存储单元连接的S条第二位线,具体可以包括第二位线bl_b[0][0]、bl_b[0][1]、bl_b[0][2]……bl_b[0][S-1]。其中,bl[1][S-1:0]可以表示与第二列每个存储单元连接的S条第一位线,具体可以包括第一位线bl[1][0]、bl[1][1]、bl[1][2]……bl[1][S-1],等等,此处不再赘述。
请一并参见图6,在一种可能的实施方式中,S、S1和S2可以均等于4。以将如图6所示的待运算矩阵的第一行元素[1 0 1 0]写入该4行*4列存储单元中的第一行存储单元为例。具体的,当第一行每个存储单元处于使能状态时,通过对第一位线bl[0][0]施加高电平,对第二位线bl_b[0][0]施加低电平,将第一行第一列的元素“1”写入第一行第一列存储单元;同时,通过对第一位线bl[1][0]施加低电平,对第二位线bl_b[1][0]施加高电平,将第一行第二列的元素“0”写入第一行第二列存储单元;同时,通过对第一位线bl[2][0]施加高电平,对第二位线bl_b[2][0]施加低电平,将第一行第三列的元素“1”写入第一行第三列存储单元;同时,通过对第一位线bl[3][0]施加低电平,对第二位线bl_b[3][0]施加高电平,将第一行第四列的元素“0”写入第一行第四列存储单元。同理可得其余第二、三和四行元素的写入过程,此处不再赘述。
可选的,请一并参见图5,该矩阵运算装置还可以包括清零线,所述清零线共N条,所述清零线沿列方向与所述M行*N列存储单元连接,其中,每一列中的每个所述存储单元连接同一条所述清零线。具体可以包括如图5所示的清零线clr[0]、clr[1]、clr[2]……clr[N-1]。每条所述清零线用于在执行清零所述存储单元操作时,向其连接的每个所述存储单元传递高电平,以将该存储单元清零。例如,当选中如图5所示的清零线clr[0]、clr[1]和clr[2]时,可以通过清零线clr[0]、clr[1]和clr[2]分别向其连接的第一列、第二列和第三列存储单元传递高电平,以将该第一列、第二列和第三列存储单元清零。可选的,清零的优先级高于写入,即在同一时钟周期内,当通过清零线将与其连接的存储单元清零时,该存储单元无法同时被写入“1”。例如,在将一个前三列均为零元素的稀疏矩阵(稀疏矩阵为零元素数目远大于非零元素数目,且零元素分布无规律的矩阵)写入对应的存储单元时,可以通过控制器选中该前三列全零元素列对应的清零线(例如为清零线clr[0]、clr[1]和clr[2]),使其处于高电势,则可以将该对应的清零线连接的三列存储单元清零(例如将第一列、第二列和第三列存储单元清零),而无需通过字线使能,以及通过位线写入零。因此通过清零线可以大大提高将稀疏矩阵写入存储单元的效率。并且,由于清零线与数据输入输出的端口在同一侧,数据流方向一致,数据流更加顺畅,有利于布局布线。
在一种可能的实施方式中,请参见图7,图7是本发明实施例提供的另一种将矩阵写入存储单元的过程示意图。如图7所示,该待运算矩阵内的第二行与第三行均为全零元素行,因此在进行写入操作时,可以首先通过与每列每个存储单元连接的清零线(例如为图7所示的清零线clr[0]、clr[1]、clr[2]和clr[3])将该4行*4列存储单元全部清零。其次,可以选中字线wl[0][0]和wl[3][1],以将该待运算矩阵内的第一行和第四行元素分别写入第一行和第四行存储单元。而第二行和第三行存储单元则可跳过不写,因此可以大大提高将稀疏矩阵写入存储单元的效率。
基于上述实施例的描述,该M行*N列存储单元中的每个存储单元具体可以包括第一反相器和第二反相器,其中,所述第一反相器和所述第二反相器首尾相连并构成存储空间,所述存储空间用于存储一项数据,所述一项数据包括所述待运算矩阵内对应的元素(例如为“1”或“0”)。其中,每个存储单元还可以包括第一传输晶体管和第二传输晶体管。具体的,Q1个所述第一传输晶体管的漏极分别与同一个所述第一反相器的输出端连接,Q1个所述第一传输晶体管的栅极分别与K条所述字线中对应的字线连接,Q1个所述第一传输晶体管的源极分别与S组所述位线中对应的第一位线连接。具体的,Q2个所述第二传输晶体管的漏极分别与同一个所述第二反相器的输出端连接,Q2个所述第二传输晶体管的栅极分别与K条所述字线中对应的字线连接,Q2个所述第二传输晶体管的源极分别与S组所述位线中对应的第二位线连接。当K条所述字线中的任意一条字线处于高电势时,与此条字线连接的第一传输晶体管和第二传输晶体管用于导通电路,以将所述待运算矩阵内对应的元素写入所述存储单元。其中,Q1为大于1的整数,Q2为大于1的整数,通常情况下,Q1等于Q2等于K。可选的,每个存储单元还可以包括第一清零晶体管和第二清零晶体管。其中,第一清零晶体管的漏极与第一反相器的输出端连接,第一清零晶体管的栅极与清零线连接;第二清零晶体管的漏极与第二反相器的输出端连接,第二清零晶体管的栅极与清零线连接。第一清零晶体管和第二清零晶体管可以用于在清零线处于高电势时,将存储单元清零。
在一种可能的实施方式中,请参见图8,图8是本发明实施例提供的一种存储单元的结构示意图。如图8所示,该存储单元包括第一反相器和第二反相器,其中第一反相器包括第一上拉晶体管PU1’和第一下拉晶体管PD1’,第二反相器包括第二上拉晶体管PU2’和第二下拉晶体管PD2’。其中,第一上拉晶体管PU1’和第二上拉晶体管PU2’的源极与工作电压电源VDD’连接,栅极分别与第一下拉晶体管PD1’和第二下拉晶体管PD2’的栅极连接,其连接点分别为如图8所示的第一读写节点12’和第二读写节点22’。其中,第一上拉晶体管PU1’和第二上拉晶体管PU2’的漏极分别与第一下拉晶体管PD1’和第二下拉晶体管PD2’的源极连接,其连接点分别为如图8所示的第一存储节点11’和第二存储节点21’。其中,第一存储节点11’可以为第一反相器的输出端,第二存储节点21’可以为第二反相器的输出端。第一下拉晶体管PD1’和第二下拉晶体管PD2’的源极与公共电压电源VSS’连接。如图8所示,第一存储节点11’与第二读写节点22’连接,第二存储节点21’与第一读写节点12’连接,即第一反相器与第二反相器首尾相连,此结构可用于存储一位二值数据。如上所述,当第一存储节点11’为高电平,第二存储节点21’为低电平时,则该存储单元内存储的数据为“1”;当第一存储节点11’为低电平,第二存储节点21’为高电平时,则该存储单元内存储的数据为“0”。
可选的,该存储单元还包括第一传输晶体管PG1[0]、PG1[1]、PG1[2]和PG1[3](即Q1等于4)和第二传输晶体管PG2[0]、PG2[1]、PG2[2]和PG2[3](即Q2等于4)。如图8所示,该存储单元连接有四条字线(即K等于4),其中具体可以包括字线wl[0]、wl[1]、wl[2]和wl[3]。如图8所示,该存储单元还连接有四组位线(即S等于4),其中具体可以包括四条第一位线bl[0]、bl[1]、bl[2]和bl[3]以及四条第二位线bl_b[0]、bl_b[1]、bl_b[2]和bl_b[3]。其中,第一传输晶体管PG1[0]和第二传输晶体管PG2[0]的栅极与字线wl[0]连接;第一传输晶体管PG1[1]和第二传输晶体管PG2[1]的栅极与字线wl[1]连接;第一传输晶体管PG1[2]和第二传输晶体管PG2[2]的栅极与字线wl[2]连接;第一传输晶体管PG1[3]和第二传输晶体管PG2[3]的栅极与字线wl[3]连接。第一传输晶体管PG1[0]、PG1[1]、PG1[2]和PG1[3]的源极分别与第一位线bl[0]、bl[1]、bl[2]和bl[3]连接,漏极与第一存储节点11’(即第一反相器的输出端)连接。第二传输晶体管PG2[0]、PG2[1]、PG2[2]和PG2[3]的源极分别与第二位线bl_b[0]、bl_b[1]、bl_b[2]和bl_b[3]连接,漏极与第二存储节点21’(即第二反相器的输出端)连接。在此结构下,以将“1”写入该存储单元为例,对执行写入操作的具体过程进行阐述。首先选中与该存储单元连接的任意一条字线,例如为字线wl[2],并使其处于高电势,此时与字线wl[2]连接的第一传输晶体管PG1[2]和第二传输晶体管PG2[2]打开,即该存储单元处于使能状态。同时,对第一传输晶体管PG1[2]连接的第一位线bl[2]施加高电平,对第二传输晶体管PG2[2]连接的第二位线bl_b[2]施加低电平,完成将“1”写入该存储单元。
请一并参见图8,如图8所示,该存储单元还可以包括第一清零晶体管和第二清零晶体管,该第一清零晶体管的栅极和第二清零晶体管的栅极与清零线clr连接。其中,第一清零晶体管的源极与公共电压电源VSS’连接,漏极与第一存储节点11’(即第一反相器的输出端)连接,第二清零晶体管的源极与工作电压电源VDD’连接,漏极与第二存储节点21’(即第二反相器的输出端)连接。当执行清零操作时,选中清零线clr使其处于高电势,则与其连接的第一清零晶体管和第二清零晶体管接收到高电平,通过所述第一清零晶体管和第二清零晶体管可以将该存储单元清零。
需要说明的是,本发明实施例对上述晶体管的类型不作具体限定,但通常情况下,第一传输晶体管PG1[0]、PG1[1]、PG1[2]和PG1[3],第二传输晶体管PG2[0]、PG2[1]、PG2[2]和PG2[3],第一下拉晶体管PD1’和第二下拉晶体管PD2’,以及第一清零晶体管和第二清零晶体管一般为N型MOSFET。第一上拉晶体管PU1’和第二上拉晶体管PU2’一般为P型MOSFET。
可选的,该矩阵运算装置还可以包括与所述存储器连接的运算电路,用于接收外部输入的待运算向量,并基于所述待运算向量、所述M行*N列存储单元存储的所述待运算矩阵进行向量-矩阵运算,得到运算结果。该运算电路可以包括与M行*N列存储单元耦合的X行*Y列运算单元。其中,X为大于1的整数,Y为大于1的整数。请参见图9,图9是本发明实施例提供的一种矩阵运算装置示意图。如图9所示,所述耦合方式可以具体为一行存储单元与一行运算单元的交叉重复排列,其中,每个存储单元都可以分别与其下方的一个运算单元连接。又或者,所述耦合方式还可以具体为一行存储单元、两行运算单元、一行存储单元,如此四行为一组的循环排列方式,其中,每个存储单元都分别与其在列方向上相邻的运算单元连接。又或者还可以是其他等等耦合方式,本发明实施例对此不作具体限定。需要说明的是,本发明实施例旨在将实现存储和运算功能的模块分别细分为最小的存储单元和运算单元,并通过上述等等耦合方式使得每个存储单元与对应的运算单元在较短的距离连接。如此,对比现有技术中将一整片存储阵列与一整片运算阵列相邻排布并连接的方式而言,本发明实施例采用的耦合方式使得存储单元与运算单元的连接更加紧密,数据移动距离更短,电路面积更小,从而节省时间和电路资源。
请参见图10,图10是本发明实施例提供的一种向量-矩阵的数学运算示意图。如图10所示,待运算向量A可以为包括Z个元素(即Z列)的行向量,待运算矩阵B可以为Z行*T列的矩阵,其中,Z为大于1的整数,T为大于1的整数。如图10所示,待运算向量A与待运算矩阵B相乘后得到的运算结果为包括T个元素(即T列)的结果向量C。显然,根据向量-矩阵的数学运算法则,以该结果向量C中的元素C11为例,C11为根据待运算向量A中的每个元素分别与待运算矩阵B中第一列的对位元素相乘,并将相乘结果相加得到的元素(即
Figure GDA0002455336830000171
)。
基于上述向量-矩阵运算的数学运算法则,可选的,该X行*Y列运算单元中的每个运算单元可以包括输入端口。运算单元可以通过所述输入端口与对应的存储单元连接,具体的,可以与对应的存储单元的存储节点连接(由于存在第一存储节点和第二存储节点,且两者存储信息相反,一般情况下取第一存储节点,即正相信息,本发明实施例对此不作具体限定),用于获取所述对应存储单元内存储的元素。例如第一行第一列运算单元的输入端口与第一行第一列存储单元的第一存储节点11’连接,当该第一行第一列存储单元被写入信息“1”时,相应的,该第一行第一列的运算单元便可以同时获取到信息“1”,从而节省了传统意义上数据读取所消耗的时间,提高了运算效率。运算单元还可以用于获取外部输入的待运算向量中的待运算元素,并将所述对应的存储单元内存储的元素与所述待运算元素相乘,得到相乘结果。其中,待运算向量可以是从与该矩阵运算装置连接的外部设备输入的向量,该外部设备例如可以为计算机等等。
可选的,所述运算电路还可以包括与所述X行*Y列运算单元中连接的加法电路。该加法电路可以用于将所述X行*Y列运算单元中每一列所述运算单元得到的相乘结果分别进行相加,得到所述待运算向量与所述待运算矩阵的运算结果,并输出所述运算结果。该加法电路可以包括具备上述加法运算功能的多个加法器,该加法器可以为二输入加法器,也可以为四输入加法器,还可以为各种类型的加法器的组合等等,本发明实施例对此不作具体限定。
在一种可能的实施方式中,请参见图11,图11是本发明实施例提供的一种向量-矩阵运算的电路连接示意图。如图11所示,其中包括4行*4列存储单元,4行*4列运算单元,以及由四列加法子电路组构成的加法电路,其中,每列加法子电路组包括3个二输入的加法器。每个运算单元与对应存储单元的第一存储节点11’连接,可以直接获取该对应存储单元内存储的待运算矩阵中的元素(例如第一行第一列运算单元与第一行第一列存储单元的第一存储节点11’连接,可以直接获取该第一行第一列存储单元内存储的待运算矩阵B内的第一行第一列元素B11)。此外,例如图11所示,第一行每个运算单元可以通过待运算向量输入口a[0]接收外部输入的待运算向量A内的第一元素A11;第二行每个运算单元可以通过待运算向量输入口a[1]接收外部输入的待运算向量A内的第二元素A12;第三行每个运算单元可以通过待运算向量输入口a[2]接收外部输入的待运算向量A内的第二元素A13;第四行每个运算单元可以通过待运算向量输入口a[3]接收外部输入的待运算向量A内的第二元素A14。每个运算单元接收到待运算向量中相应的元素后便将该元素与获取到的对应存储单元内的元素相乘,得到相乘结果。其次,可以通过每列中如图11所示的的3个二输入加法器将每列得到的四个相乘结果逐级相加,得到相加结果,即得到结果向量中的各个元素。最终可以通过如图11所示的输出口z[0]、z[1]、z[2]和z[3]分别输出结果向量C的第一元素C11、第二元素C12、第三元素C13和第四元素C14,即输出完整的结果向量。在此运算过程中,随着运算的进行,数据从存储单元逐渐搬移运算结果输出口。通过本发明实施例提供的一种矩阵运算装置可以实现输入一个待运算向量,经过向量-矩阵运算后,输出一个结果向量。
在一种可能的实施方式中,请参见图12,图12是本发明实施例提供的一种存算一体的整体架构示意图。如图12所示,该架构中包括了四个写入口,相应的包括了与之分别对应的四个x-decoder解码器和四个y-decoder解码器。其中,四个x-decoder解码器和四个y-decoder解码器可以分别用于将输入的二进制代码转换为相应的逻辑电平,从而分别控制四个写入口的高低电平,当四个写入口均为高电平时,可以实现将四行数据同时写入对应的四行存储单元。同时,存储单元与运算电路直接连接,实现内存内计算,此处不再赘述。
在一种可能的实施方式中,请参见图13,图13是本发明实施例提供的一种将矩阵写入存储器的时钟周期示意图。如图13所示,可以基于图12所示的字线驱动器wl_driver和位线bl_driver驱动器在一个时钟周期内通过4个写入口同时使能四行存储单元,并将待运算矩阵内对应的四行元素写入该四行存储单元中,耗时短,效率高。此外,请参见图14,图14是本发明实施例提供的一种进行向量-矩阵运算的时钟周期示意图,如图14所示,可以在一个时钟周期内将待运算向量输入该矩阵运算装置。并且,可以在下一个时钟周期输出该待运算向量与该待运算矩阵的运算结果。无需将运算矩阵读出存储单元,再传输至运算单元进行运算,从而大大提高了运算效率。
基于上述矩阵运算装置实施例的描述,本发明实施例还公开了一种矩阵运算方法,所述方法可以包括以下步骤S11-S13:
步骤S11,根据待运算矩阵,确定字线中的K1条所述字线。
具体的,在第一时钟周期内,根据待运算矩阵,确定字线中的K1条字线。其中,所述字线共M行*K条,所述字线沿行方向与存储器中的M行*N列存储单元连接,其中,每一行中的每个所述存储单元连接K条所述字线,其中,第一时钟周期可以是一个时钟周期,也可以是多个时钟周期。
步骤S12,通过K1条所述字线,使能对应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素写入所述K2行*N列存储单元的对应位置。
具体的,在第一时钟周期内,通过K1条所述字线,使能对应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素写入所述K2行*N列存储单元的对应位置。其中,在所述M行*N列存储单元内,每个所述存储单元在行方向和列方向上与相邻的存储单元连接。
可选的,在所述第一时钟周期内,基于与所述M行*N列存储单元连接的沿列方向的N列*S组位线,确定与所述K1行*N列存储单元连接的N列*S1组位线,通过所述N列*S1组位线将所述待运算矩阵内对应的至少一行元素写入所述K1行*N列存储单元的对应位置。其中,N列*S组位线中的每组位线包括第一位线以及与所述第一位线互补的第二位线。具体可参考上述图6对应实施例的描述,此处不再赘述。
例如,在所述待运算矩阵为8行*4列的待运算矩阵,所述存储器包括8行*4列存储单元,且K等于4的情况下,可以通过在两个时钟周期内分别选择对应的4条字线使其处于高电势,从而分别使能前四行每个存储单元和后四行每个存储单元,以将该待运算矩阵的前四行元素和后四行元素分别在两个时钟周期内写入对应的前四行存储单元和后四行存储单元。即可以在两个时钟周期内将该8行*4列待运算矩阵完整的写入8行*4列存储单元,此处的两个时钟周期可以为连续的两个时钟周期。
可选的,当所述待运算矩阵中包括P列全零元素列时,从共计N条清零线中确定P条对应的所述清零线,所述N条清零线沿列方向与所述M行*N列存储单元连接,其中,每一列中的每个所述存储单元连接同一条所述清零线。通过P条所述清零线,向与其连接的P列存储单元传递高电平,以将所述P列存储单元清零,其中,P为大于等1且小于N的整数。
可选的,若该待运算矩阵中包括至少一行全零元素行,则可在执行写入操作前通过所述N条清零线,将该M行*N列存储单元清零。具体可参考上述图7对应实施例的描述,此处不再赘述。
步骤S13,通过运算电路接收外部输入的待运算向量,并基于所述待运算向量、所述待运算矩阵进行向量-矩阵运算,得到运算结果。
具体的,在第二时钟周期内,通过与所述存储器连接的运算电路接收外部输入的待运算向量,并基于所述待运算向量、所述M行*N列存储单元存储的所述待运算矩阵进行向量-矩阵运算,得到运算结果。其中,第二时钟周期可以是一个时钟周期,也可以是多个时钟周期。
可选的,所述运算电路可以包括X行*Y列运算单元,所述X行*Y列运算单元与所述M行*N列存储单元耦合,每个运算单元均包括输入端口,所述运算单元通过所述输入端口与对应的所述存储单元连接,以获取所述存储单元中存储的元素。此外,该运算电路还可以包括与所述X行*Y列运算单元连接的加法电路。可选的,步骤S13具体可包括以下步骤s21-s22:
步骤s21,获取对应存储单元中存储的元素,所述对应存储单元与运算单元的输入端口接口连接;获取待运算元素,并将所述对应存储单元内存储的元素与所述待运算元素相乘,得到相乘结果。
步骤s22,通过所述加法电路将所述X行*Y列运算单元中每一列所述运算单元得到的相乘结果分别进行相加,得到所述待运算向量与所述待运算矩阵的运算结果。具体可参考上述图11对应实施例的描述,此处不再赘述。
本发明实施例提供了一种矩阵运算装置,在M行*N列存储单元的结构中,可以通过与每行每个存储单元连接的多条字线,同时使能多行多个存储单元,从而实现将待运算矩阵内的多行数据同时写入对应的存储单元。对比于现有技术中将数据逐行写入内存而言,本发明大大缩短了将数据写入内存所消耗的时间,提高了写入效率。除此之外,还可以通过该装置内与M行*N列存储单元交叉耦合的X行*Y列运算单元,实现内存内计算。同时,对比现有的存算一体方案中将一整片独立的M行*N列存储单元和一整片独立的X行*Y列运算单元简单连接的结构而言,本发明是将装置中的存储单元和运算单元交叉排列,并耦合(例如一行四个存储单元下排列一行四个运算单元,紧接着再排列一行四个存储单元,如此循环,一个存储单元紧贴一个运算单元,等等)。使得存储与运算的连接更加紧密,数据移动距离更短,从而电路延迟和电路面积更小,运算效率更高。
基于上述矩阵运算装置和方法实施例的描述,本发明实施例还公开了一种处理器,所述处理器包括上述装置实施例描述的所有内容,可以实现上述方法实施例所描述的方法。该处理器可以由芯片构成,也可以包括芯片和其他分立器件。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,简称DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,简称SSD))等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
尽管在此结合各实施例对本发明进行了描述,然而,在实施所要求保护的本发明过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本发明的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本发明的示例性说明,且视为已覆盖本发明范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (11)

1.一种矩阵运算装置,其特征在于,包括:
存储器,用于存储待运算矩阵,所述存储器包括M行*N列存储单元,每个所述存储单元在行方向和列方向上与相邻的存储单元连接;
字线,所述字线共M行*K条,所述字线沿行方向与所述M行*N列存储单元连接,其中,每一行中的每个所述存储单元连接K条所述字线;所述M行*K条字线中的任意K1条字线用于同时使能相应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素同时写入所述K2行*N列存储单元中的对应位置,K、K1和K2为大于1的整数;
运算电路,所述运算电路包括X行*Y列运算单元,所述M行*N列存储单元与所述X行*Y列运算单元交叉排列,所述M行*N列存储单元中的每一个存储单元均对应连接有一个运算单元,所述运算电路用于接收外部输入的待运算向量,并基于所述待运算向量、所述M行*N列存储单元存储的所述待运算矩阵进行向量-矩阵运算,得到运算结果。
2.根据权利要求1所述的装置,其特征在于,所述X行*Y列运算单元中的每一个运算单元均包括输入端口;
所述运算单元通过所述输入端口与对应的所述存储单元连接,用于获取所述存储单元中存储的元素;
所述运算单元还用于获取待运算元素,并将所述对应存储单元内存储的元素与所述待运算元素相乘,得到相乘结果,所述待运算元素来自所述待运算向量。
3.根据权利要求2所述的装置,其特征在于,所述运算电路还包括与所述X行*Y列运算单元连接的加法电路;
所述加法电路,用于将所述X行*Y列运算单元中每一列所述运算单元得到的相乘结果分别进行相加,得到所述待运算向量与所述待运算矩阵的运算结果。
4.根据权利要求3所述的装置,其特征在于,所述装置还包括:
清零线,所述清零线共N条,所述清零线沿列方向与所述M行*N列存储单元连接,其中,每一列中的每个所述存储单元连接同一条所述清零线;每条所述清零线用于在执行清零所述存储单元操作时,向其连接的每个所述存储单元传递高电平。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括:
位线,每组所述位线包括第一位线以及与所述第一位线互补的第二位线;在所述M行*N列存储单元内,每一列中的每个所述存储单元与S组所述位线沿列方向连接,从而构成N列*S组所述位线;
当所述N列*S组位线中的N列*S1组位线对应的S2行*N列存储单元使能时,所述N列*S1组位线用于将所述待运算矩阵内的至少一行元素写入所述S2行*N列存储单元中的对应位置。
6.根据权利要求5所述的装置,其特征在于,每个所述存储单元包括:
第一反相器和第二反相器,所述第一反相器和所述第二反相器首尾相连并构成存储空间,所述存储空间用于存储一项数据,所述一项数据包括所述待运算矩阵内对应的元素;
第一传输晶体管,Q1个所述第一传输晶体管的漏极分别与同一个所述第一反相器的输出端连接,Q1个所述第一传输晶体管的栅极分别与K条所述字线中对应的字线连接,Q1个所述第一传输晶体管的源极分别与S组所述位线中对应的第一位线连接;
第二传输晶体管,Q2个所述第二传输晶体管的漏极分别与同一个所述第二反相器的输出端连接,Q2个所述第二传输晶体管的栅极分别与K条所述字线中对应的字线连接,Q2个所述第二传输晶体管的源极分别与S组所述位线中对应的第二位线连接;
当K条所述字线中的任意一条字线处于高电势时,与此条字线连接的第一传输晶体管和第二传输晶体管用于导通电路,以将所述待运算矩阵内对应的元素写入所述存储单元。
7.根据权利要求6所述的装置,其特征在于,每个所述存储单元还包括:
第一清零晶体管,所述第一清零晶体管的漏极与所述第一反相器的输出端连接,所述第一清零晶体管的栅极与所述清零线连接;
第二清零晶体管,所述第二清零晶体管的漏极与所述第二反相器的输出端连接,所述第二清零晶体管的栅极与所述清零线连接;
所述第一清零晶体管和所述第二清零晶体管用于在所述清零线处于高电势时将所述存储单元清零。
8.一种处理器,其特征在于,所述处理器包括如权利要求1-7任一项所述的装置。
9.一种矩阵运算方法,其特征在于,包括:
根据待运算矩阵,确定字线中的K1条所述字线,所述字线共M行*K条,所述字线沿行方向与存储器中的M行*N列存储单元连接,其中,每一行中的每个所述存储单元连接K条所述字线;
通过K1条所述字线,同时使能对应的K2行*N列存储单元,以将所述待运算矩阵内对应的至少一行元素同时写入所述K2行*N列存储单元的对应位置;在所述M行*N列存储单元内,每个所述存储单元在行方向和列方向上与相邻的存储单元连接,K、K1和K2为大于1的整数;
通过与所述存储器连接的运算电路接收外部输入的待运算向量,并基于所述待运算向量、所述M行*N列存储单元存储的所述待运算矩阵进行向量-矩阵运算,得到运算结果;其中,所述运算电路包括X行*Y列运算单元,所述M行*N列存储单元与所述X行*Y列运算单元交叉排列,所述M行*N列存储单元中的每一个存储单元均对应连接有一个运算单元。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
当所述待运算矩阵中包括P列全零元素列时,从共计N条清零线中确定P条对应的所述清零线,所述N条清零线沿列方向与所述M行*N列存储单元连接,其中,每一列中的每个所述存储单元连接同一条所述清零线;
通过P条所述清零线,向与其连接的P列存储单元传递高电平,以将所述P列存储单元清零。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,实现如权利要求9-10任一项所述的方法。
CN201911223959.0A 2019-12-04 2019-12-04 一种矩阵运算装置、方法、处理器和计算机可读存储介质 Active CN110674462B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911223959.0A CN110674462B (zh) 2019-12-04 2019-12-04 一种矩阵运算装置、方法、处理器和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911223959.0A CN110674462B (zh) 2019-12-04 2019-12-04 一种矩阵运算装置、方法、处理器和计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN110674462A CN110674462A (zh) 2020-01-10
CN110674462B true CN110674462B (zh) 2020-06-02

Family

ID=69088303

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911223959.0A Active CN110674462B (zh) 2019-12-04 2019-12-04 一种矩阵运算装置、方法、处理器和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN110674462B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111459552B (zh) * 2020-06-16 2020-10-13 之江实验室 一种内存中并行化计算的方法及装置
CN111883191B (zh) * 2020-07-14 2023-02-03 安徽大学 10t sram单元、及基于10t sram单元的存内逻辑运算及bcam电路
CN112259137B (zh) * 2020-11-02 2023-05-23 海光信息技术股份有限公司 内存运算电路及芯片结构
CN113506589B (zh) * 2021-06-28 2022-04-26 华中科技大学 一种稀疏矩阵存算***及方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003263890A (ja) * 2002-03-06 2003-09-19 Ricoh Co Ltd 半導体記憶装置
US9152827B2 (en) * 2012-12-19 2015-10-06 The United States Of America As Represented By The Secretary Of The Air Force Apparatus for performing matrix vector multiplication approximation using crossbar arrays of resistive memory devices
CN109859786B (zh) * 2019-01-28 2020-10-02 北京航空航天大学 一种基于自旋磁存储器的数据运算方法
CN110276048B (zh) * 2019-05-25 2023-06-09 南京惟心光电***有限公司 一种矩阵向量乘阵列的控制方法
CN110364203B (zh) * 2019-06-20 2021-01-05 中山大学 一种支撑存储内计算的存储***及计算方法

Also Published As

Publication number Publication date
CN110674462A (zh) 2020-01-10

Similar Documents

Publication Publication Date Title
CN110674462B (zh) 一种矩阵运算装置、方法、处理器和计算机可读存储介质
Zabihi et al. In-memory processing on the spintronic CRAM: From hardware design to application mapping
Haj-Ali et al. Efficient algorithms for in-memory fixed point multiplication using magic
US10831446B2 (en) Digital bit-serial multi-multiply-and-accumulate compute in memory
CN109766309B (zh) 自旋存算一体芯片
Wang et al. An energy-efficient nonvolatile in-memory computing architecture for extreme learning machine by domain-wall nanowire devices
CN110597484B (zh) 基于存内计算的多比特全加器、多比特全加运算控制方法
CN108182959B (zh) 基于阻变器件交叉阵列结构实现逻辑计算的方法
US11211115B2 (en) Associativity-agnostic in-cache computing memory architecture optimized for multiplication
CN116126779A (zh) 一种9t存算电路、乘累加运算电路、存内运算电路及芯片
CN115588446A (zh) 一种存储运算电路、存内计算电路及其芯片
US10580481B1 (en) Methods, circuits, systems, and articles of manufacture for state machine interconnect architecture using embedded DRAM
CN111158635A (zh) 一种基于FeFET的非易失性低功耗乘法器及其运行方法
CN112233712B (zh) 一种6t sram存算装置、存算***及存算方法
Rajput et al. Energy efficient 9T SRAM with R/W margin enhanced for beyond Von-Neumann computation
US11094355B1 (en) Memory chip or memory array for wide-voltage range in-memory computing using bitline technology
CN111045727A (zh) 一种基于非易失性内存计算的处理单元阵列及其计算方法
Wang et al. Efficient time-domain in-memory computing based on TST-MRAM
Monga et al. A Novel Decoder Design for Logic Computation in SRAM: CiM-SRAM
Li et al. Toward energy-efficient sparse matrix-vector multiplication with near STT-MRAM computing architecture
CN112951290B (zh) 一种基于非易失性随机存储器的内存计算电路及装置
CN116204490A (zh) 一种基于低电压技术的7t存算电路、乘累加运算电路
US20220019407A1 (en) In-memory computation circuit and method
Coluccio et al. Hybrid-SIMD: A modular and reconfigurable approach to beyond von Neumann computing
Chen et al. FAST: A fully-concurrent access SRAM topology for high row-wise parallelism applications based on dynamic shift operations

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210210

Address after: 311201 No. 602-11, complex building, 1099 Qingxi 2nd Road, Hezhuang street, Qiantang New District, Hangzhou City, Zhejiang Province

Patentee after: Zhonghao Xinying (Hangzhou) Technology Co.,Ltd.

Address before: 518 000 514, building 10, Shenzhen Bay science and technology ecological park, No.10, Gaoxin South 9th Road, high tech Zone community, Yuehai street, Nanshan District, Shenzhen City, Guangdong Province

Patentee before: Shenzhen Xinying Technology Co.,Ltd.