CN112684977B - 存储器装置及其存储器内计算方法 - Google Patents

存储器装置及其存储器内计算方法 Download PDF

Info

Publication number
CN112684977B
CN112684977B CN202011012617.7A CN202011012617A CN112684977B CN 112684977 B CN112684977 B CN 112684977B CN 202011012617 A CN202011012617 A CN 202011012617A CN 112684977 B CN112684977 B CN 112684977B
Authority
CN
China
Prior art keywords
cores
sub
weight
bit line
written
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
CN202011012617.7A
Other languages
English (en)
Other versions
CN112684977A (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.)
Macronix International Co Ltd
Original Assignee
Macronix International 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
Priority claimed from US17/026,347 external-priority patent/US11354123B2/en
Application filed by Macronix International Co Ltd filed Critical Macronix International Co Ltd
Publication of CN112684977A publication Critical patent/CN112684977A/zh
Application granted granted Critical
Publication of CN112684977B publication Critical patent/CN112684977B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Static Random-Access Memory (AREA)
  • Read Only Memory (AREA)

Abstract

本发明公开了一种存储器装置及其存储器内计算方法,其中,存储器内计算方法执行于一存储器装置。该存储器内计算方法包括:依据一移动参数,将一核心展开成多个子核心与多个互补子核心;根据这些子核心与这些互补子核心,将多个权重值写入至该存储器装置的一存储器阵列的多个目标存储器单元;将一输入数据输入至该存储器阵列的一被选字线;在该存储器阵列执行一移动运算;暂存多个部分总和;以及当已完成所有运算周期时,将所暂存的这些部分总和加总,以得到一移动运算结果。

Description

存储器装置及其存储器内计算方法
技术领域
本发明是有关于一种存储器装置及其存储器内计算方法。
背景技术
在执行深度学习(deep learning)训练时,数据搬移是主要的能量成本(energycost)。理想上,应用存储器内计算(computing in memory)可减少25%的能量消耗,因为减少权重值的搬移量。
图1显示以存储器内计算来执行乘积和(MAC,multiplication andaccumulation)的示意图。存储器单元C1~C3分别被写入权重值W1~W3。输入值I1~I3可以写入至字线或位线(在图1中以写入至字线WL1~WL3为例做说明)。则存储器单元C1~C3的单元电流分别为I1×W1、I2×W2与I3×W3。经由感应放大器(SA)110对单元电流感应后可以输出I1×W1+I2×W2+I3×W3。
在存储器内计算时,以卷积神经网络(Covolutional Neural Network,CNN)为例,如果遇到执行「移动(stride)」操作时,则通常需要耗费多个周期来完成。底下以3×3阵列(其为一权重阵列)的移动操作(stride=1)为例做说明。图2显示9笔权重W1~W9写入至9个存储器单元的示意图。
图3显示3×3阵列的移动操作(stride=1)。
图4显示3×3阵列的移动操作(stride=1)所需的9个周期的示意图。
于第一周期时,输入数据I1~I3、I6~I8与I11~I13分别输入至字线WL1~WL9。所进行的操作如下所示:
于第二周期时,更新3个位并进行移动,输入数据I6~I8、I11~I13与I16~I18分别输入至字线WL1~WL9。所进行的操作如下所示。
于第三周期时,更新3个位并进行移动,输入数据I11~I13、I16~I18与I21~I23分别输入至字线WL1~WL9。所进行的操作如下所示。
于第四周期时,更新3个位并进行移动,输入数据I2~I4、I7~I9与I12~I14分别输入至字线WL1~WL9。所进行的操作如下所示。
于第五周期时,更新3个位并进行移动,输入数据I7~I9、I12~I14与I17~I19分别输入至字线WL1~WL9。所进行的操作如下所示。
于第六周期时,更新3个位并进行移动,输入数据I12~I14、I17~I19与I22~I24分别输入至字线WL1~WL9。所进行的操作如下所示。
于第七周期时,更新3个位并进行移动,输入数据I3~I5、I8~I10与I13~I15分别输入至字线WL1~WL9。所进行的操作如下所示。
于第八周期时,更新3个位并进行移动,输入数据I8~I10、I13~I15与I18~I20分别输入至字线WL1~WL9。所进行的操作如下所示。
于第九周期时,更新3个位并进行移动,输入数据I13~I15、I18~I20与I23~I25分别输入至字线WL1~WL9。所进行的操作如下所示。
对于传统CIM操作,存在着输入特征图(input feature map)的重复馈入(duplicate feeding)。这是因为移动将产生大量输入数据,而这些输入数据的内容彼此重叠。传统CIM在一条位线存储一个核心(kernel),因此会造成输入重复馈入。
当输入数据量变大且移动步阶变小时,输入重复馈入变得更加严重。因此,如何减少输入重复馈入是非常重要的。如所知般,更多的输入重复馈入导致更多的数据搬移,更多的能量消耗与降低操作速度。
故而,如何能减少数据搬移,以进一步减少能量消耗且增快指令周期,乃是重要的。
发明内容
根据本发明一实例,提出一种存储器内计算方法,执行于一存储器装置。该存储器内计算方法包括:依据一移动参数,将一核心展开成多个子核心与多个互补子核心;根据这些子核心与这些互补子核心,将多个权重值写入至该存储器装置的一存储器阵列的多个目标存储器单元;将一输入数据输入至该存储器阵列的一被选字线;在该存储器阵列执行一移动运算;暂存多个部分总和;以及当已完成所有运算周期时,将所暂存的这些部分总和加总,以得到一移动运算结果。
根据本发明另一实例,提出一种存储器装置,包括:一存储器阵列;以及一控制器,耦接至该存储器阵列。该控制器架构成:依据一移动参数,将一核心展开成多个子核心与多个互补子核心;根据这些子核心与这些互补子核心,将多个权重值写入至该存储器阵列的多个目标存储器单元;将一输入数据输入至该存储器阵列的一被选字线;在该存储器阵列执行一移动运算;暂存多个部分总和;以及当已完成所有运算周期时,将所暂存的这些部分总和加总,以得到一移动运算结果。
为了对本发明的上述及其他方面有更佳的了解,下文特举实施例,并配合所附附图详细说明如下:
附图说明
图1显示以存储器内计算来执行乘积和的示意图。
图2显示9笔权重W1~W9写入至9个存储器单元的示意图。
图3显示3×3阵列的移动操作(stride=1)。
图4显示3×3阵列的移动操作(stride=1)所需的9个周期的示意图。
图5显示根据本发明一实施例的存储器内计算的流程图。
图6A与图6B显示根据本发明一实施例的将核心展开成多个子核心与多个互补子核心的示意图。
图7A至图7D显示根据本发明一实施例的乘积和操作的一示范图
图8A与图8B显示根据本发明一实施例的多个权重值写入至存储器阵列的多个存储器单元内的示意图。
图9A至图9H分别根据本发明实施例中,为完成乘积加运算所需的4个周期的示意图。
图10显示根据本发明一实施例的存储器装置的功能方块图。
图11A与图11B显示根据本发明一实施例的多个权重值写入至存储器阵列1100的多个存储器单元内的示意图。
【符号说明】
C1~C3:存储器单元
W1~W9:权重值
I1~I25:输入值
110:感应放大器(SA)
WL1~WL9:字线
BL1:位线
510~570:步骤
k:核心
SK1~SK16:子核心
CSK1~CSK16:互补子核心
800:存储器阵列
BL1~BL16:位线
WL1~WL36:字线
L1~L16:闩锁单元
1000:存储器装置
1010:控制器
1020:存储器阵列
1100:存储器阵列
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
本说明书的技术用语系参照本技术领域的习惯用语,如本说明书对部分用语有加以说明或定义,该部分用语的解释系以本说明书的说明或定义为准。本发明的各个实施例分别具有一或多个技术特征。在可能实施的前提下,本领域技术人员可选择性地实施任一实施例中部分或全部的技术特征,或者选择性地将这些实施例中部分或全部的技术特征加以组合。
图5显示根据本发明一实施例的存储器内计算方法的流程图。如图5所示,于步骤510中,以列(row)与行(column)的顺序,依据移动参数,将核心(kernel)展开(unfold)成多个子核心(sub-kernel)与多个互补子核心(complement sub-kernel),在此,核心例如是指权重矩阵。
图6A与图6B显示根据本发明一实施例的将核心展开成多个子核心与多个互补子核心的示意图。在此以移动参数等于1且核心为3×3权重矩阵为例做说明,当知本发明并不受限于此。
如图6A所示,将核心K依行方向(亦即向右移动)移动0、1、2与3,可以得到子核心SK1、SK2、SK3与SK4;将子核心SK1、SK2、SK3与SK4依列方向(亦即向下移动)移动0、1、2与3,可以得到子核心SK5、SK6、SK7与SK8;将子核心SK5、SK6、SK7与SK8依列方向(亦即向下移动)移动0、1、2与3,可以得到子核心SK9、SK10、SK11与SK12;以及,将子核心SK9、SK10、SK11与SK12依列方向(亦即向下移动)移动0、1、2与3,可以得到子核心SK13、SK14、SK15与SK16。其中,各子核心亦为3×3权重矩阵。这些子核心可为0矩阵(元素全为0),或者,这些子核心包括核心的至少一个权重。
如图6B所示,将各这些子核心SK1~SK16互补成多个互补子核心CSK1~CSK16。以子核心SK1为例,由于子核心SK1包括9个权重值W1~W9,故而,经互补后,互补子核心CSK1包括0个权重值(亦即包括9个0)。以子核心SK2为例,由于子核心SK2包括6个权重值W1~W6与3个0,故而,经互补后,互补子核心CSK2包括3个权重值W7~W9与6个0。亦即,子核心的权重个数与互补子核心的权重个数的总和为核心的权重个数。
一般而言,核心包括一原始权重矩阵。当原始权重矩阵是k×1矩阵(k与1皆为自然数)且输入数据为N×M矩阵(N与M皆为自然数),如果移动参数为1,则这些子核心的总数量为(N-k+1)×(M-l+1),且这些互补子核心的总数量为(N-k+1)×(M-l+1)。
于步骤520中,根据所展开的这些子核心与这些互补子核心,将权重值写入至多个目标存储器单元。
以图6A的子核心SK1为例,由于子核心SK1包括9个权重值W1~W9,故而,如果以位线BL1来看,权重W1写入至位线BL1与字线WL1交叉的存储器单元;权重W2写入至位线BL1与字线WL2交叉的存储器单元;权重W3写入至位线BL1与字线WL3交叉的存储器单元;权重W4写入至位线BL1与字线WL4交叉的存储器单元;权重W5写入至位线BL1与字线WL5交叉的存储器单元;权重W6写入至位线BL1与字线WL6交叉的存储器单元;权重W7写入至位线BL1与字线WL7交叉的存储器单元;权重W8写入至位线BL1与字线WL8交叉的存储器单元;以及权重W9写入至位线BL1与字线WL9交叉的存储器单元。
以图6A的子核心SK2为例,由于子核心SK2包括6个权重值W1~W6与3个0,故而,如果以位线BL2来看,权重W1写入至位线BL2与字线WL4交叉的存储器单元;权重W2写入至位线BL2与字线WL5交叉的存储器单元;权重W3写入至位线BL2与字线WL6交叉的存储器单元;权重W4写入至位线BL2与字线WL7交叉的存储器单元;权重W5写入至位线BL2与字线WL8交叉的存储器单元;权重W6写入至位线BL2与字线WL9交叉的存储器单元。其余可依此类推。
于步骤530中,将输入数据输入至被选择的字线。
于步骤540中,在存储器阵列执行乘积和运算。
于步骤550中,将个别部分总和(partial sum)存在于各闩锁单元内。
于步骤560中,判断相关的互补子核心是否已被计算(或者是,判断是否已完成所有运算周期)。如果步骤560为是,则流程接续至步骤570,将这些闩锁单元内的这些部分总和加总,以得到乘积加结果。如果步骤560为否,则流程接续至步骤530。
图7A至图7D显示根据本发明一实施例的乘积和(MAC,multiplication andaccumulation)操作的一示范图,其中,移动(stride)参数为1。当知本发明并不受限于此。如图7A至图7D所示,在进行移动操作时,如果权重核心(kernel)为3×3矩阵且移动(stride)参数为1,则将会有16种运算。以图7A中的运算(a)为例,输入数据IN1-1~IN1-9分别乘上权重W1~W9。以图7A中的运算(b)为例,输入数据IN1-4~IN1-9与IN2-1~IN2-3分别乘上权重W1~W9。其余可依此类推。
在本发明实施例中,为减少数据搬移,可以根据图7A至图7D中的16种运算来将权重值W1~W9分别写入至目标存储器单元内。
图8A与图8B显示根据本发明一实施例的多个权重值写入至存储器阵列800的多个存储器单元内的示意图。图8A与图8B皆是显示存储器阵列800的一部分。在此假设,于实际运算时,输入数据IN1-1~IN1-9系输入至字线WL1~WL9;输入数据IN2-1~IN2-9系输入至字线WL10~WL18;输入数据IN3-1~IN3-9系输入至字线WL19~WL27,以及,输入数据IN4-1~IN4-9系输入至字线WL28~WL36。
图7A中的运算(a)为例,输入数据IN1-1~IN1-9分别乘上权重W1~W9,故可以得到:
IN1-1×W1+IN1-2×W2+IN1-3×W3+IN1-4×W4+IN1-5×W5+IN1-6×W6+IN1-7×W7+IN1-8×W8+IN1-9×W9。
故而,为将权重W1~W9写入至位线BL1,权重W1写入至位线BL1与字线WL1交叉的存储器单元;权重W2写入至位线BL1与字线WL2交叉的存储器单元;权重W3写入至位线BL1与字线WL3交叉的存储器单元;权重W4写入至位线BL1与字线WL4交叉的存储器单元;权重W5写入至位线BL1与字线WL5交叉的存储器单元;权重W6写入至位线BL1与字线WL6交叉的存储器单元;权重W7写入至位线BL1与字线WL7交叉的存储器单元;权重W8写入至位线BL1与字线WL8交叉的存储器单元;以及权重W9写入至位线BL1与字线WL9交叉的存储器单元。如此一来,当输入数据IN1-1~IN1-9分别输入至字线WL1~WL9(当字线WL1~WL9被选择时),相关于位线BL1的闩锁单元L1可以存储IN1-1×W1+IN1-2×W2+IN1-3×W3+IN1-4×W4+IN1-5×W5+IN1-6×W6+IN1-7×W7+IN1-8×W8+IN1-9×W9的值。
图7A中的运算(b)为例,输入数据IN1-4~IN1-9与IN2-1~IN2-3分别乘上权重W1~W9,故可以得到:
IN1-4×W1+IN1-5×W2+IN1-6×W3+IN1-7×W4+IN1-8×W5+IN1-9×W6+IN2-1×W7+IN2-2×W8+IN2-3×W9。
故而,为将权重W1~W9写入至位线BL2,权重W1写入至位线BL2与字线WL4交叉的存储器单元;权重W2写入至位线BL2与字线WL5交叉的存储器单元;权重W3写入至位线BL2与字线WL6交叉的存储器单元;权重W4写入至位线BL2与字线WL7交叉的存储器单元;权重W5写入至位线BL2与字线WL8交叉的存储器单元;权重W6写入至位线BL2与字线WL9交叉的存储器单元;权重W7写入至位线BL2与字线WL10交叉的存储器单元;权重W8写入至位线BL2与字线WL11交叉的存储器单元;以及权重W9写入至位线BL2与字线WL12交叉的存储器单元。如此一来,当输入数据IN1-4~IN1-9与IN2-1~IN2-3分别输入至字线WL4~WL12,相关于位线BL2的闩锁单元L2可以存储IN1-4×W1+IN1-5×W2+IN1-6×W3+IN1-7×W4+IN1-8×W5+IN1-9×W6+IN2-1×W7+IN2-2×W8+IN2-3×W9的值。
图7A中的运算(c)为例,输入数据IN1-7~IN1-9与IN2-1~IN2-6分别乘上权重W1~W9,故可以得到:
IN1-7×W1+IN1-8×W2+IN1-9×W3+IN2-1×W4+IN2-2×W5+IN2-3×W6+IN2-4×W7+IN2-5×W8+IN2-6×W9。
故而,为将权重W1~W9写入至位线BL3,权重W1写入至位线BL3与字线WL7交叉的存储器单元;权重W2写入至位线BL3与字线WL8交叉的存储器单元;权重W3写入至位线BL3与字线WL9交叉的存储器单元;权重W4写入至位线BL3与字线WL10交叉的存储器单元;权重W5写入至位线BL3与字线WL11交叉的存储器单元;权重W6写入至位线BL3与字线WL12交叉的存储器单元;权重W7写入至位线BL3与字线WL13交叉的存储器单元;权重W8写入至位线BL3与字线WL14交叉的存储器单元;以及权重W9写入至位线BL3与字线WL15交叉的存储器单元。如此一来,当输入数据IN1-7~IN1-9与IN2-1~IN2-6分别输入至字线WL7~WL15,相关于位线BL3的闩锁单元L3可以存储IN1-7×W1+IN1-8×W2+IN1-9×W3+IN2-1×W4+IN2-2×W5+IN2-3×W6+IN2-4×W7+IN2-5×W8+IN2-6×W9的值。
图7A中的运算(d)为例,输入数据IN2-1~IN2-9分别乘上权重W1~W9,故可以得到:
IN2-1×W1+IN2-2×W2+IN2-3×W3+IN2-4×W4+IN2-5×W5+IN2-6×W6+IN2-7×W7+IN2-8×W8+IN2-9×W9。
故而,为将权重W1~W9写入至位线BL4,权重W1写入至位线BL4与字线WL10交叉的存储器单元;权重W2写入至位线BL4与字线WL11交叉的存储器单元;权重W3写入至位线BL4与字线WL12交叉的存储器单元;权重W4写入至位线BL4与字线WL13交叉的存储器单元;权重W5写入至位线BL4与字线WL14交叉的存储器单元;权重W6写入至位线BL4与字线WL15交叉的存储器单元;权重W7写入至位线BL4与字线WL16交叉的存储器单元;权重W8写入至位线BL4与字线WL17交叉的存储器单元;以及权重W9写入至位线BL4与字线WL18交叉的存储器单元。如此一来,当输入数据IN2-1~IN2-9分别输入至字线WL10~WL18,相关于位线BL4的闩锁单元L4可以存储IN2-1×W1+IN2-2×W2+IN2-3×W3+IN2-4×W4+IN2-5×W5+IN2-6×W6+IN2-7×W7+IN2-8×W8+IN2-9×W9的值。
图7B中的运算(e)为例,输入数据IN1-2、IN1-3、IN3-1、IN1-5、IN1-6、IN3-4、IN1-8、IN1-9与IN3-7分别乘上权重W1~W9,故可以得到:
IN1-2×W1+IN1-3×W2+IN3-1×W3+IN1-5×W4+IN1-6×W5+IN3-4×W6+IN1-8×W7+IN1-9×W8+IN3-7×W9。
故而,为将权重W1~W9写入至位线BL5,权重W1写入至位线BL5与字线WL2交叉的存储器单元;权重W2写入至位线BL5与字线WL3交叉的存储器单元;权重W3写入至位线BL5与字线WL19交叉的存储器单元;权重W4写入至位线BL5与字线WL5交叉的存储器单元;权重W5写入至位线BL5与字线WL6交叉的存储器单元;权重W6写入至位线BL5与字线WL22交叉的存储器单元;权重W7写入至位线BL5与字线WL8交叉的存储器单元;权重W8写入至位线BL5与字线WL9交叉的存储器单元;以及权重W9写入至位线BL5与字线WL25交叉的存储器单元。如此一来,当输入数据IN1-2、IN1-3、IN3-1、IN1-5、IN1-6、IN3-4、IN1-8、IN1-9与IN3-7分别输入时,相关于位线BL5的闩锁单元L5可以存储IN1-2×W1+IN1-3×W2+IN3-1×W3+IN1-5×W4+IN1-6×W5+IN3-4×W6+IN1-8×W7+IN1-9×W8+IN3-7×W9的值。
图7B中的运算(f)为例,输入数据IN1-5、IN1-6、IN3-4、IN1-8、IN1-9、IN3-7、IN2-2、IN2-3与IN4-1分别乘上权重W1~W9,故可以得到IN1-5×W1+IN1-6×W2+IN3-4×W3+IN1-8×W4+IN1-9×W5+IN3-7×W6+IN2-2×W7+IN2-3×W8+IN4-1×W9。故而,为将权重W1~W9写入至位线BL6,权重W1写入至位线BL6与字线WL5交叉的存储器单元;权重W2写入至位线BL6与字线WL6交叉的存储器单元;权重W3写入至位线BL6与字线WL22交叉的存储器单元;权重W4写入至位线BL6与字线WL8交叉的存储器单元;权重W5写入至位线BL6与字线WL9交叉的存储器单元;权重W6写入至位线BL6与字线WL25交叉的存储器单元;权重W7写入至位线BL6与字线WL11交叉的存储器单元;权重W8写入至位线BL6与字线WL12交叉的存储器单元;以及权重W9写入至位线BL6与字线WL28交叉的存储器单元。如此一来,当输入数据IN1-5、IN1-6、IN3-4、IN1-8、IN1-9、IN3-7、IN2-2、IN2-3与IN4-1分别输入时,相关于位线BL6的闩锁单元L6可以存储IN1-5×WI+IN1-6×W2+IN3-4×W3+IN1-8×W4+IN1-9×W5+IN3-7×W6+IN2-2×W7+IN2-3×W8+IN4-1×W9的值。
图7B中的运算(g)为例,输入数据IN1-8、IN1-9、IN3-7、IN2-2、IN2-3、IN4-1、IN2-5、IN2-6与IN4-4分别乘上权重W1~W9,故可以得到IN1-8×W1+IN1-9×W2+IN3-7×W3+IN2-2×W4+IN2-3×W5+IN4-1×W6+IN2-5×W7+IN2-6×W8+IN4-4×W9。故而,为将权重W1~W9写入至位线BL7,权重W1写入至位线BL7与字线WL8交叉的存储器单元;权重W2写入至位线BL7与字线WL9交叉的存储器单元;权重W3写入至位线BL7与字线WL25交叉的存储器单元;权重W4写入至位线BL7与字线WL11交叉的存储器单元;权重W5写入至位线BL7与字线WL12交叉的存储器单元;权重W6写入至位线BL7与字线WL28交叉的存储器单元;权重W7写入至位线BL7与字线WL14交叉的存储器单元;权重W8写入至位线BL7与字线WL15交叉的存储器单元;以及权重W9写入至位线BL7与字线WL31交叉的存储器单元。如此一来,当输入数据IN1-8、IN1-9、IN3-7、IN2-2、IN2-3、IN4-1、IN2-5、IN2-6与IN4-4分别输入时,相关于位线BL7的闩锁单元L7可以存储IN1-8×W1+IN1-9×W2+IN3-7×W3+IN2-2×W4+IN2-3×W5+IN4-1×W6+IN2-5×W7+IN2-6×W8+IN4-4×W9的值。
图7B中的运算(h)为例,输入数据IN2-2、IN2-3、IN4-1、IN2-5、IN2-6、IN4-4、IN2-8、IN2-9与IN4-1分别乘上权重W1~W9,故可以得到:
IN2-2×W1+IN2-3×W2+IN4-1×W3+IN2-5×W4+IN2-6×W5+IN4-4×W6+IN2-8×W7+IN2-9×W8+IN4-7×W9。
故而,为将权重W1~W9写入至位线BL8,权重W1写入至位线BL8与字线WL11交叉的存储器单元;权重W2写入至位线BL8与字线WL12交叉的存储器单元;权重W3写入至位线BL8与字线WL28交叉的存储器单元;权重W4写入至位线BL8与字线WL14交叉的存储器单元;权重W5写入至位线BL8与字线WL15交叉的存储器单元;权重W6写入至位线BL8与字线WL31交叉的存储器单元;权重W7写入至位线BL8与字线WL17交叉的存储器单元;权重W8写入至位线BL8与字线WL18交叉的存储器单元;以及权重W9写入至位线BL8与字线WL34交叉的存储器单元。如此一来,当输入数据IN2-2、IN2-3、1N4-1、IN2-5、IN2-6、IN4-4、IN2-8、IN2-9与IN4-1分别输入时,相关于位线BL8的闩锁单元L8可以存储IN2-2×W1+IN2-3×W2+IN4-1×W3+IN2-5×W4+IN2-6×W5+IN4-4×W6+IN2-8×W7+IN2-9×W8+IN4-7×W9的值。
图7C中的运算(i)为例,输入数据IN1-3、IN3-1、IN3-2、IN1-6、IN3-4、IN3-5、IN1-9、IN3-7与IN3-8分别乘上权重W1~W9,故可以得到:
IN1-3×W1+IN3-1×W2+IN3-2×W3+IN1-6×W4+IN3-4×W5+IN3-5×W6+IN1-9×W7+IN3-7×W8+IN3-8×W9。
故而,为将权重W1~W9写入至位线BL9,权重W1写入至位线BL9与字线WL3交叉的存储器单元;权重W2写入至位线BL9与字线WL19交叉的存储器单元;权重W3写入至位线BL9与字线WL20交叉的存储器单元;权重W4写入至位线BL9与字线WL6交叉的存储器单元;权重W5写入至位线BL9与字线WL22交叉的存储器单元;权重W6写入至位线BL9与字线WL23交叉的存储器单元;权重W7写入至位线BL9与字线WL9交叉的存储器单元;权重W8写入至位线BL9与字线WL25交叉的存储器单元;以及权重W9写入至位线BL9与字线WL26交叉的存储器单元。如此一来,当输入数据IN1-3、IN3-1、IN3-2、IN1-6、IN3-4、IN3-5、IN1-9、IN3-7与IN3-8分别输入时,相关于位线BL9的闩锁单元L9可以存储IN1-3×W1+IN3-1×W2+IN3-2×W3+IN1-6×W4+IN3-4×W5+IN3-5×W6+IN1-9×W7+IN3-7×W8+IN3-8×W9的值。
图7C中的运算(j)为例,输入数据IN1-6、IN3-4、IN3-5、IN1-9、IN3-7、IN3-8、IN2-3、IN4-1与IN4-2分别乘上权重W1~W9,故可以得到:
IN1-6×W1+IN3-4×W2+IN3-5×W3+IN1-9×W4+IN3-7×W5+IN3-8×W6+IN2-3×W7+IN4-1×W8+IN4-2×W9。
故而,为将权重W1~W9写入至位线BL10,权重W1写入至位线BL10与字线WL6交叉的存储器单元;权重W2写入至位线BL10与字线WL22交叉的存储器单元;权重W3写入至位线BL10与字线WL23交叉的存储器单元;权重W4写入至位线BL10与字线WL9交叉的存储器单元;权重W5写入至位线BL10与字线WL25交叉的存储器单元;权重W6写入至位线BL10与字线WL26交叉的存储器单元;权重W7写入至位线BL10与字线WL12交叉的存储器单元;权重W8写入至位线BL10与字线WL28交叉的存储器单元;以及权重W9写入至位线BL10与字线WL29交叉的存储器单元。如此一来,当输入数据IN1-6、IN3-4、IN3-5、IN1-9、IN3-7、IN3-8、IN2-3、IN4-1与IN4-2分别输入时,相关于位线BL10的闩锁单元L10可以存储IN1-6×W1+IN3-4×W2+IN3-5×W3+IN1-9×W4+IN3-7×W5+IN3-8×W6+IN2-3×W7+IN4-1×W8+IN4-2×W9的值。
图7C中的运算(k)为例,输入数据IN1-9、IN3-7、IN3-8、IN2-3、IN4-1、IN4-2、IN2-6、IN4-4与IN4-5分别乘上权重W1~W9,故可以得到:
IN1-9×W1+IN3-7×W2+IN3-8×W3+IN2-3×W4+IN4-1×W5+IN4-2×W6+IN2-3×W7+IN4-4×W8+IN4-5×W9。
故而,为将权重W1~W9写入至位线BL11,权重W1写入至位线BL11与字线WL9交叉的存储器单元;权重W2写入至位线BL11与字线WL25交叉的存储器单元;权重W3写入至位线BL11与字线WL26交叉的存储器单元;权重W4写入至位线BL11与字线WL12交叉的存储器单元;权重W5写入至位线BL11与字线WL28交叉的存储器单元;权重W6写入至位线BL11与字线WL29交叉的存储器单元;权重W7写入至位线BL11与字线WL15交叉的存储器单元;权重W8写入至位线BL11与字线WL31交叉的存储器单元;以及权重W9写入至位线BL11与字线WL32交叉的存储器单元。如此一来,当输入数据IN1-9、IN3-7、IN3-8、IN2-3、IN4-1、IN4-2、IN2-6、IN4-4与IN4-5分别输入时,相关于位线BL11的闩锁单元L11可以存储IN1-9×W1+IN3-7×W2+IN3-8×W3+IN2-3×W4+IN4-1×W5+IN4-2×W6+IN2-3×W7+IN4-4×W8+IN4-5×W9的值。
图7C中的运算(1)为例,输入数据IN2-3、IN4-1、IN4-2、IN2-6、IN4-4、IN4-5、IN2-9、IN4-7与IN4-8分别乘上权重W1~W9,故可以得到:
IN2-3×W1+IN4-1×W2+IN4-2×W3+IN2-6×W4+IN4-4×W5+IN4-5×W6+IN2-9×W7+IN4-7×W8+IN4-8×W9。
故而,为将权重W1~W9写入至位线BL12,权重W1写入至位线BL12与字线WL12交叉的存储器单元;权重W2写入至位线BL12与字线WL28交叉的存储器单元;权重W3写入至位线BL12与字线WL29交叉的存储器单元;权重W4写入至位线BL12与字线WL15交叉的存储器单元;权重W5写入至位线BL12与字线WL31交叉的存储器单元;权重W6写入至位线BL12与字线WL32交叉的存储器单元;权重W7写入至位线BL12与字线WL18交叉的存储器单元;权重W8写入至位线BL12与字线WL34交叉的存储器单元;以及权重W9写入至位线BL12与字线WL35交叉的存储器单元。如此一来,当输入数据IN2-3、IN4-1、IN4-2、IN2-6、IN4-4、IN4-5、IN2-9、IN4-7与IN4-8分别输入时,相关于位线BL12的闩锁单元L12可以存储IN2-3×W1+IN4-1×W2+IN4-2×W3+IN2-6×W4+IN4-4×W5+IN4-5×W6+IN2-9×W7+IN4-7×W8+IN4-8×W9的值。
图7D中的运算(m)为例,输入数据IN3-1~IN3-9分别乘上权重W1~W9,故可以得到:
IN3-1×W1+IN3-2×W2+IN3-3×W3+IN3-4×W4+IN3-5×W5+IN3-6×W6+IN3-7×W7+IN3-8×W8+IN3-9×W9。
故而,为将权重W1~W9写入至位线BL13,权重W1写入至位线BL13与字线WL19交叉的存储器单元;权重W2写入至位线BL13与字线WL20交叉的存储器单元;权重W3写入至位线BL13与字线WL21交叉的存储器单元;权重W4写入至位线BL13与字线WL22交叉的存储器单元;权重W5写入至位线BL13与字线WL23交叉的存储器单元;权重W6写入至位线BL13与字线WL24交叉的存储器单元;权重W7写入至位线BL13与字线WL25交叉的存储器单元;权重W8写入至位线BL13与字线WL26交叉的存储器单元;以及权重W9写入至位线BL13与字线WL27交叉的存储器单元。如此一来,当输入数据IN3-1~IN3-9分别输入时,相关于位线BL13的闩锁单元L13可以存储IN3-1×W1+IN3-2×W2+IN3-3×W3+IN3-4×W4+IN3-5×W5+IN3-6×W6+IN3-7×W7+IN3-8×W8+IN3-9×W9的值。
图7D中的运算(n)为例,输入数据IN3-4~IN3-9与IN4-1~IN4-3分别乘上权重W1~W9,故可以得到:
IN3-4×W1+IN3-5×W2+IN3-6×W3+IN3-7×W4+IN3-8×W5+IN3-9×W6+IN4-1×W7+IN4-2×W8+IN4-3×W9。
故而,为将权重W1~W9写入至位线BL14,权重W1写入至位线BL14与字线WL22交叉的存储器单元;权重W2写入至位线BL14与字线WL23交叉的存储器单元;权重W3写入至位线BL14与字线WL24交叉的存储器单元;权重W4写入至位线BL14与字线WL25交叉的存储器单元;权重W5写入至位线BL14与字线WL26交叉的存储器单元;权重W6写入至位线BL14与字线WL27交叉的存储器单元;权重W7写入至位线BL14与字线WL28交叉的存储器单元;权重W8写入至位线BL14与字线WL29交叉的存储器单元;以及权重W9写入至位线BL14与字线WL30交叉的存储器单元。如此一来,当输入数据IN3-4~IN3-9与IN4-1~IN4-3分别输入时,相关于位线BL14的闩锁单元L14可以存储IN3-4×W1+IN3-5×W2+IN3-6×W3+IN3-7×W4+IN3-8×W5+IN3-9×W6+IN4-1×W7+IN4-2×W8+IN4-3×W9的值。
图7D中的运算(o)为例,输入数据IN3-7~IN3-9与IN4-1~IN4-6分别乘上权重W1~W9,故可以得到:
IN3-7×W1+IN3-8×W2+IN3-9×W3+IN4-1×W4+IN4-2×W5+IN4-3×W6+IN4-4×W7+IN4-5×W8+IN4-6×W9。
故而,为将权重W1~W9写入至位线BL15,权重W1写入至位线BL15与字线WL28交叉的存储器单元;权重W2写入至位线BL15与字线WL26交叉的存储器单元;权重W3写入至位线BL15与字线WL27交叉的存储器单元;权重W4写入至位线BL15与字线WL28交叉的存储器单元;权重W5写入至位线BL15与字线WL29交叉的存储器单元;权重W6写入至位线BL15与字线WL30交叉的存储器单元;权重W7写入至位线BL15与字线WL31交叉的存储器单元;权重W8写入至位线BL15与字线WL32交叉的存储器单元;以及权重W9写入至位线BL15与字线WL33交叉的存储器单元。如此一来,当输入数据IN3-4~IN3-9与IN4-1~IN4-3分别输入时,相关于位线BL15的闩锁单元L15可以存储IN3-4×W1+IN3-5×W2+IN3-6×W3+IN3-7×W4+IN3-8×W5+IN3-9×W6+IN4-1×W7+IN4-2×W8+IN4-3×W9的值。
图7D中的运算(p)为例,输入数据IN4-1~IN4-9分别乘上权重W1~W9,故可以得到:
IN4-1×W1+IN4-2×W2+IN4-3×W3+IN4-4×W4+IN4-5×W5+IN4-6×W6+IN4-7×W7+IN4-8×W8+IN4-9×W9。
故而,为将权重W1~W9写入至位线BL16,权重W1写入至位线BL16与字线WL28交叉的存储器单元;权重W2写入至位线BL16与字线WL29交叉的存储器单元;权重W3写入至位线BL16与字线WL30交叉的存储器单元;权重W4写入至位线BL16与字线WL31交叉的存储器单元;权重W5写入至位线BL16与字线WL32交叉的存储器单元;权重W6写入至位线BL16与字线WL33交叉的存储器单元;权重W7写入至位线BL16与字线WL34交叉的存储器单元;权重W8写入至位线BL16与字线WL35交叉的存储器单元;以及权重W9写入至位线BL16与字线WL36交叉的存储器单元。如此一来,当输入数据IN4-1~IN4-9分别输入时,相关于位线BL16的闩锁单元L16可以存储IN4-1×W1+IN4-2×W2+IN4-3×W3+IN4-4×W4+IN4-5×W5+IN4-6×W6+IN4-7×W7+IN4-8×W8+IN4-9×W9的值。
图9A至图9H分别根据本发明实施例中,为完成乘积加运算所需的4个周期的示意图。
如图9A与图9B所示,于第一周期中,选择字线WL1~WL9以使得输入数据IN1-1~IN1-9可输入至存储器阵列中。故而,于第一周期中,闩锁单元L1~L16所存的部分总和(partial sum)可表示如下:
如图9C与图9D所示,于第二周期中,选择字线WL10~WL18以使得输入数据IN2-1~IN2-9可输入至存储器阵列中。故而,于第二周期中,闩锁单元L1~L16所存的部分总和可表示如下(为方便了解,将不同周期的部分总和分开列出):
/>
/>
如图9E与图9F所示,于第三周期中,选择字线WL19~WL27以使得输入数据IN3-1~IN3-9可输入至存储器阵列中。故而,于第三周期中,闩锁单元L1~L16所存的部分总和可表示如下(为方便了解,将不同周期的部分总和分开列出):
/>
/>
如图9G与图9H所示,于第四周期中,选择字线WL28~WL36以使得输入数据IN4-1~IN4-9可输入至存储器阵列中。故而,于第四周期中,闩锁单元L1~L16所存的部分总和可表示如下(为方便了解,将不同周期的部分总和分开列出):
/>
/>
为方便了解,将此四个周期的部分总和加总如下(即为闩锁单元L1~L16在此四个周期后的输出:
/>
/>
图10显示根据本发明一实施例的存储器装置的功能方块图。根据本发明一实施例的存储器装置1000包括:控制器1010与存储器阵列1020。控制器1010耦接至存储器阵列1020。控制器1010可控制存储器阵列1020来执行上述实施例的乘积和运算。存储器阵列1020的多个存储器单元存有上述实施例的权重。
图11A与图11B显示根据本发明另一实施例的多个权重值写入至存储器阵列1100的多个存储器单元内的示意图。相较于图8A与图8B,图11A与图11B的存储器阵列1100的存储器单元使用率较佳。
综上所述,本发明实施例之优点在于减少数据搬移量,以达到更好的运行时间(execution time)。
综上所述,本发明实施例中,根据移动操作,将深度学习模型的核心(权重矩阵)展开成多个子核心与多个互补子核心,且根据所展开的这些子核心与这些互补子核心,将权重值写入至相关位置。如此一来,输入数据可以在存储器阵列内有效重复使用,以减少运算时间与数据搬移。
本发明实施例不只可应用至人工智能(AI)领域,也可以应用至需要大量乘积和运算的任何计算领域,例如,存储器数据搜寻(memory data search),图像处理,声音侦测等。
本发明实施例可实施于不同AI模型设计(model design),例如,完全连接层(fully connection layer),卷积层(convolution layer),多层感知(Multilayerperceptron),支持向量机器(support vector machine)等。
本发明实施例可应用于任何易失性存储器(如SRAM,DRAM等)或任何的非易失性存储器(如电阻式存储器(Resistive-RAM),相变型存储器(Phase Change Memory),闪存,磁阻式存储器(Magnetoresistive RAM),铁电存储器(Ferroelectric RAM)等)。
此外,在本发明其他实施例中,字线与位线的角色可以互换,亦即,输入数据可由位线输入,此亦在本发明保护范围内。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种存储器内计算方法,执行于一存储器装置,其中,该存储器内计算方法包括:
依据一移动参数,将一核心展开成多个子核心与多个互补子核心;
根据这些子核心与这些互补子核心,将多个权重值写入至该存储器装置的一存储器阵列的多个目标存储器单元;
将一输入数据输入至该存储器阵列的一被选字线;
在该存储器阵列执行一移动运算;
暂存多个部分总和;以及
当已完成所有运算周期时,将所暂存的这些部分总和加总,以得到一移动运算结果。
2.根据权利要求1所述的存储器内计算方法,其中,该核心包括一原始权重矩阵。
3.根据权利要求2所述的存储器内计算方法,其中,于展开该核心时,依据该移动参数,将该核心依行方向移动与依列方向移动以得到这些子核心,其中,各这些子核心为一权重矩阵,且这些子核心为一0矩阵,或者,这些子核心包括该核心的至少一个权重。
4.根据权利要求2所述的存储器内计算方法,其中,将这些子核心互补成这些互补子核心,当该原始权重矩阵是k×l矩阵且该输入数据为N×M矩阵,其中k与l皆为自然数,N与M皆为自然数,如果该移动参数为1,则这些子核心的总数量为(N-k+1)×(M-l+1),且这些互补子核心的总数量为(N-k+1)×(M-l+1)。
5.根据权利要求1所述的存储器内计算方法,其中,暂存这些部分总和于该存储器阵列的至少一闩锁单元内。
6.一种存储器装置,其中,包括:
一存储器阵列;以及
一控制器,耦接至该存储器阵列,
其中,该控制器架构成:
依据一移动参数,将一核心展开成多个子核心与多个互补子核心;
根据这些子核心与这些互补子核心,将多个权重值写入至该存储器阵列的多个目标存储器单元;
将一输入数据输入至该存储器阵列的一被选字线;
在该存储器阵列执行一移动运算;
暂存多个部分总和;以及
当已完成所有运算周期时,将所暂存的这些部分总和加总,以得到一移动运算结果。
7.根据权利要求6所述的存储器装置,其中,该核心包括一原始权重矩阵。
8.根据权利要求7所述的存储器装置,其中,于展开该核心时,依据该移动参数,将该核心依行方向移动与依列方向移动以得到这些子核心,其中,各这些子核心为一权重矩阵,且这些子核心为一0矩阵,或者,这些子核心包括该核心的至少一个权重。
9.根据权利要求7所述的存储器装置,其中,将这些子核心互补成这些互补子核心,当该原始权重矩阵是k×l矩阵且该输入数据为N×M矩阵,其中k与l皆为自然数,N与M皆为自然数,如果该移动参数为1,则这些子核心的总数量为(N-k+1)×(M-l+1),且这些互补子核心的总数量为(N-k+1)×(M-l+1)。
10.根据权利要求6所述的存储器装置,其中,暂存这些部分总和于该存储器阵列的至少一闩锁单元内。
CN202011012617.7A 2019-10-18 2020-09-24 存储器装置及其存储器内计算方法 Active CN112684977B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962916797P 2019-10-18 2019-10-18
US62/916,797 2019-10-18
US17/026,347 US11354123B2 (en) 2019-10-18 2020-09-21 Memory device and computing in memory method thereof
US17/026,347 2020-09-21

Publications (2)

Publication Number Publication Date
CN112684977A CN112684977A (zh) 2021-04-20
CN112684977B true CN112684977B (zh) 2024-05-28

Family

ID=75445422

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011012617.7A Active CN112684977B (zh) 2019-10-18 2020-09-24 存储器装置及其存储器内计算方法

Country Status (1)

Country Link
CN (1) CN112684977B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1173765A (ja) * 1997-08-29 1999-03-16 Sanyo Electric Co Ltd 半導体記憶装置
CN102971754A (zh) * 2010-07-07 2013-03-13 高通股份有限公司 用于神经处理器中的可替代突触权重存储的方法和系统
CN108010551A (zh) * 2016-10-27 2018-05-08 三星电子株式会社 用于dpu运算的软件栈和编程
KR20180052063A (ko) * 2016-11-07 2018-05-17 한국전자통신연구원 컨볼루션 신경망 시스템 및 그것의 동작 방법
CN109074845A (zh) * 2016-03-23 2018-12-21 Gsi 科技公司 存储器内矩阵乘法及其在神经网络中的使用
US10340003B1 (en) * 2018-07-06 2019-07-02 National Tsing Hua University Input-pattern aware reference generation system and computing-in-memory system including the same
CN110058802A (zh) * 2017-12-15 2019-07-26 三星电子株式会社 存储装置及控制存储器装置的方法
CN110289029A (zh) * 2018-03-19 2019-09-27 旺宏电子股份有限公司 存储器装置及其操作方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017015649A1 (en) * 2015-07-23 2017-01-26 Mireplica Technology, Llc Performance enhancement for two-dimensional array processor
US10074416B2 (en) * 2016-03-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for data movement
US10699778B2 (en) * 2017-04-28 2020-06-30 Arizona Board Of Regents On Behalf Of Arizona State University Static random access memory (SRAM) cell and related SRAM array for deep neural network and machine learning applications
TWI659428B (zh) * 2018-01-12 2019-05-11 中原大學 運用非揮發性記憶體執行類神經網絡前饋與遞迴運算之方法
US10831446B2 (en) * 2018-09-28 2020-11-10 Intel Corporation Digital bit-serial multi-multiply-and-accumulate compute in memory

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1173765A (ja) * 1997-08-29 1999-03-16 Sanyo Electric Co Ltd 半導体記憶装置
CN102971754A (zh) * 2010-07-07 2013-03-13 高通股份有限公司 用于神经处理器中的可替代突触权重存储的方法和系统
CN109074845A (zh) * 2016-03-23 2018-12-21 Gsi 科技公司 存储器内矩阵乘法及其在神经网络中的使用
CN108010551A (zh) * 2016-10-27 2018-05-08 三星电子株式会社 用于dpu运算的软件栈和编程
KR20180052063A (ko) * 2016-11-07 2018-05-17 한국전자통신연구원 컨볼루션 신경망 시스템 및 그것의 동작 방법
CN110058802A (zh) * 2017-12-15 2019-07-26 三星电子株式会社 存储装置及控制存储器装置的方法
CN110289029A (zh) * 2018-03-19 2019-09-27 旺宏电子股份有限公司 存储器装置及其操作方法
US10340003B1 (en) * 2018-07-06 2019-07-02 National Tsing Hua University Input-pattern aware reference generation system and computing-in-memory system including the same

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
PRIME: A Novel Processing-in-memory Architecture for Neural Network Computation in ReRAM-based Main Memory;Ping Chi等;2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA);20160825;27-39 *

Also Published As

Publication number Publication date
CN112684977A (zh) 2021-04-20

Similar Documents

Publication Publication Date Title
US20240036820A1 (en) Semiconductor memory device employing processing in memory (pim) and method of operating the semiconductor memory device
KR20190073303A (ko) 신경망의 컨볼루션 계산을 위한 방법 및 전자 디바이스
CN107533459A (zh) 使用电阻存储器阵列的数据处理
CN108304922A (zh) 用于神经网络计算的计算设备和计算方法
CN113076521B (zh) 一种基于gpgpu可重构架构的方法及计算系统
CN108446764B (zh) 一种新型神经形态芯片架构
CN111105023B (zh) 数据流重构方法及可重构数据流处理器
JP2021140733A (ja) 深層学習処理装置、方法、デバイス及び記憶媒体
TW202121202A (zh) 資料暫存裝置、資料暫存方法以及計算方法
EP3839832A1 (en) Method and apparatus with neural network convolution operation
US20200226201A1 (en) Methods and Apparatus for Constructing Digital Circuits for Performing Matrix Operations
CN112684977B (zh) 存储器装置及其存储器内计算方法
US20210150323A1 (en) Methods and apparatus to implement a neural network
US20220147812A1 (en) Compiler with an artificial neural network to optimize instructions generated for execution on a deep learning accelerator of artificial neural networks
TW202134956A (zh) 具有平行載入儲存之共享高速暫存記憶體
TW202117561A (zh) 記憶體裝置及其記憶體內計算方法
JP7410961B2 (ja) 演算処理装置
WO2019182059A1 (ja) モデル生成装置、モデル生成方法及びプログラム
US20190164035A1 (en) Device for reorganizable neural network computing
US11488650B2 (en) Memory processing unit architecture
EP3971787A1 (en) Spatial tiling of compute arrays with shared control
CN113344183B (zh) 一种在计算系统中实现卷积运算的方法及计算系统
CN113392959A (zh) 一种在计算系统中重构架构的方法及计算系统
KR102592726B1 (ko) 데이터 이동 컨트롤러를 포함하는 신경망 시스템
CN114072778A (zh) 存储器处理单元架构

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant