CN114391135A - 用于对连续分配数据执行存储器内处理操作的方法及相关存储器装置和系统 - Google Patents
用于对连续分配数据执行存储器内处理操作的方法及相关存储器装置和系统 Download PDFInfo
- Publication number
- CN114391135A CN114391135A CN202080062755.8A CN202080062755A CN114391135A CN 114391135 A CN114391135 A CN 114391135A CN 202080062755 A CN202080062755 A CN 202080062755A CN 114391135 A CN114391135 A CN 114391135A
- Authority
- CN
- China
- Prior art keywords
- bit
- bits
- group
- memory
- row
- 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
- 238000000034 method Methods 0.000 title claims abstract description 106
- 238000012545 processing Methods 0.000 title abstract description 38
- 239000013598 vector Substances 0.000 claims abstract description 194
- 239000011159 matrix material Substances 0.000 claims description 172
- 238000000638 solvent extraction Methods 0.000 claims 2
- 238000000605 extraction Methods 0.000 abstract description 2
- 238000012432 intermediate storage Methods 0.000 abstract description 2
- 238000003491 array Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 15
- 238000009825 accumulation Methods 0.000 description 13
- 238000004364 calculation method Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 12
- 238000007792 addition Methods 0.000 description 10
- 150000001875 compounds Chemical class 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 239000000047 product Substances 0.000 description 7
- 238000003860 storage Methods 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000013528 artificial neural network Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000010076 replication Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000005192 partition Methods 0.000 description 3
- 230000003213 activating effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000001351 cycling effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 1
- 102100036725 Epithelial discoidin domain-containing receptor 1 Human genes 0.000 description 1
- 101710131668 Epithelial discoidin domain-containing receptor 1 Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000005294 ferromagnetic effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000003071 parasitic effect Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/544—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 for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7821—Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/54—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using elements simulating biological cells, e.g. neuron
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/06—Sense amplifiers; Associated circuits, e.g. timing or triggering circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1006—Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1078—Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
- G11C7/1096—Write circuits, e.g. I/O line write drivers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/10—Decoders
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Molecular Biology (AREA)
- Biophysics (AREA)
- Neurology (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- Memory System (AREA)
Abstract
描述用于存储器内或附近处理的方法、设备和系统。位(例如,向量)串可被提取并在存储器装置的逻辑中处理,而不需要单独的处理单元。可在单个时钟循环序列期间对以位串行方式存储的数字执行运算(例如,算术运算)。因此,可以在单遍次中执行算术,因为数字是两个或更多个位串的位,提取不需要在中间存储所述数字。向量可以从一或多个位线提取(例如,识别、传输、接收)。所述存储器阵列的寄存器可用于写入(例如,存储或临时存储)结果或促进算术运算的辅助位(例如,进位位或进位标记)。在所述存储器阵列附近、邻近或下面的电路系统可采用XOR或AND(或其它)逻辑来提取数据、组织数据或对数据进行运算。
Description
优先权主张
本申请要求2019年9月5日提交的第62/896,216号美国临时专利申请“用于对连续分配数据执行存储器内处理操作的方法及相关存储器装置和系统(Methods forPerforming Processing-in-Memory Operations on Serially Allocated Data,andRelated Memory Devices and Systems)”及2019年12月17日提交的未决第16/717,890号美国专利申请“用于对连续分配数据执行存储器内处理操作的方法及相关存储器装置和系统(Methods for Performing Processing-in-Memory Operations on SeriallyAllocated Data,and Related Memory Devices and Systems)”的提交日的权益。
技术领域
本公开的实施例涉及存储器内处理,并且更确切地说,涉及连续分配数据上的存储器内处理融合乘加运算。再更确切地说,一些实施例涉及用于在具有存储器内处理能力的存储器装置内对连续分配数据执行融合乘加运算的方法,及相关存储器装置、存储器系统和电子系统。
背景技术
存储器装置通常提供为计算机或其它电子系统中的内部、基于半导体的集成电路。存在许多不同类型的存储器,包含易失性和非易失性存储器。非易失性存储器可在电力循环之后检索所存储信息,它可包含快闪存储器等等,所述快闪存储器包含NAND或NOR快闪存储器。易失性存储器可能需要来维持其数据(例如,主机数据、错误数据等),并且包含随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、同步动态随机存取存储器(SDRAM)、内容可寻址存储器(CAM)和晶闸管随机存取存储器(TRAM)等等。
电子系统通常包含多个处理资源(例如,一或多个处理器),它们可以检索和执行指令并将所执行指令的结果存储到合适的位置。处理器可包含多个功能单元,例如算术逻辑单元(ALU)电路系统、浮点单元(FPU)电路系统和组合逻辑块,例如这些功能单元可用于通过对数据(例如,一或多个运算数)执行运算来执行指令。如本文中所使用,运算可包含例如布尔运算,如AND、OR、NOT、NAND、NOR和XOR,和/或其它运算(例如,反转、移位、算术、统计等许多其它可能的运算)。例如,功能单元电路系统可用于经由多个运算对运算数执行算术运算,如加法、减法、乘法和除法。
向功能单元电路系统提供指令以供执行可涉及电子系统中的多个组件。例如,指令可由控制器和/或主机处理器等处理资源执行。数据(例如,可在其上执行指令的数据)可存储于可由功能单元电路系统存取的存储器阵列中。指令和/或数据可从存储器阵列检索,并在功能单元电路系统开始在数据上执行指令之前排序和/或缓冲。
发明内容
本公开的一或多个实施例包含一种操作存储器系统的方法。例如,方法可包含将输入向量加载到存储器装置中。所述方法还可包含识别所述输入向量中具有第一逻辑状态的每一位的位数字。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述方法可包含:对于存储器阵列的多个列中的每一列,从第一位数字开始,连续地从所述存储器阵列的所述列读取位;对于所述列中具有匹配所述输入向量的所识别位数字的位数字的每一位,对所述列的所述位、所述列的至少一个其它位和当前进位位执行运算,以产生相关联位结果和经更新进位位;以及存储位结果。
根据另一实施例,一种操作存储器系统的方法包含:将输入向量加载到存储器系统的定序器中,并识别所述输入向量中具有第一逻辑状态的每一位的位数字。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述方法可包含:对于所述存储器系统的存储器阵列的多个列中的每一列,从第一位数字开始,连续地从所述存储器阵列的所述列读取并在累加器中存储位;对于存储在所述累加器中且具有匹配所述输入向量的所识别位数字的位数字的每一累加器位,对所述累加器位、所述列的至少一个其它位和当前进位位执行XOR进位累加运算,以产生相关联位结果和经更新进位位;以及存储位结果。此外,所述方法可包含:基于经由多个XOR进位累加运算所产生的多个位结果,产生中间行。
在又一实施例中,一种方法可包含在定序器处接收输入向量。所述方法还可包含在融合乘加(FMA)阵列处连续地接收第一矩阵的行的多个位。此外,所述方法可包含:使所述第一矩阵的所述行的所述多个位中的每一位乘以所述输入向量,以产生中间行。此外,所述方法可包含在所述定序器处接收至少一个额外输入向量。并且,所述方法可包含在所述FMA阵列处连续地接收所述第一矩阵的至少一个额外行的多个位。另外,所述方法可包含:使所述至少一个额外行的所述多个位中的每一位乘以所述至少一个额外输入向量,以更新所述中间行。所述方法可进一步包含基于所述中间行,产生第二矩阵的输出行。
本公开的一些实施例包含一种存储器系统。所述存储器系统可包含:存储器阵列;以及耦合到所述存储器阵列的融合乘加(FMA)单元。所述FMA单元可包含配置成接收包含一或多个位的输入的定序器。所述FMA单元可进一步包含FMA阵列,其包含配置成从所述存储器阵列的行和列接收位的多个感测放大器。所述FMA单元配置成接收输入向量,连续地读取所述存储器阵列的所述列的多个位,并使所述存储器阵列的所述列的所述多个位中的每一位乘以所述输入向量的每一位并将乘法结果累加以产生中间结果。所述FMA单元还可配置成接收至少一个额外输入向量,连续地读取所述存储器阵列的所述列的额外多个位,使所述存储器阵列的所述列的所述额外多个位中的每一位乘以一个额外输入向量的至少每一位并将乘法结果累加以更新所述中间结果。此外,所述FMA单元可配置成基于所述中间结果,产生输出。
根据另一实施例,一种存储器系统可包含至少一个存储器阵列。所述存储器系统可配置成将输入向量加载到所述至少一个存储器阵列中,并识别所述输入向量中具有第一逻辑状态的每一位的位数字。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述存储器系统可配置成:对于所述至少一个存储器阵列的多个位群组中的每一位群组,从第一位数字开始,连续地从所述存储器阵列的所述位群组读取位。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述存储器系统可配置成:对于所述位群组中从匹配所述输入向量的所识别位数字的位数字开始的每一位,对所述位群组中的所述位、所述位群组中从所述第一位数字开始的至少一个其它位和当前进位位执行一或多个运算,以产生相关联位结果和经更新进位位。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述存储器系统可配置成存储位结果。
本公开的额外实施例包含一种电子系统。所述电子系统可包含至少一个输入装置、至少一个输出装置,及可操作地耦合到所述输入装置和所述输出装置的至少一个处理器装置。所述电子系统还可包含至少一个存储器装置,所述存储器装置可操作地耦合到所述至少一个处理器装置且包含存储器单元阵列和耦合到所述存储器单元阵列的融合乘加(FMA)单元。所述FMA单元可配置成接收输入向量,并连续地读取第一矩阵的行的多个位。此外,所述FMA单元可配置成使所述第一矩阵的所述行的所述多个位中的每一位乘以所述输入向量以产生中间行。并且,所述FMA单元可配置成接收至少一个额外输入向量,并连续地读取所述第一矩阵的至少一个额外行的多个位。此外,所述FMA单元可配置成使所述至少一个额外行的所述多个位中的每一位乘以所述至少一个额外输入向量以更新所述中间行。另外,所述FMA单元可配置成基于所述中间行,产生输出。
附图说明
图1是根据本公开的多个实施例的包含存储器装置的系统的框图。
图2A描绘用于实例矩阵乘法的多个实例矩阵。
图2B描绘包含累加运算的实例二进制乘法。
图3示出根据本公开的各种实施例所产生的两个实例位向量、通过所述两个位向量相乘产生的中间矩阵及中间输出位矩阵。
图4示出根据本公开的一或多个实施例的包含定序器和感测放大器阵列的融合乘加单元。
图5A和5B描绘根据本公开的一或多个实施例的实例单遍次位串行运算。
图6是根据本公开的各种实施例的操作存储器系统的实例方法的流程图。
图7是根据本公开的各种实施例的操作存储器系统的另一实例方法的流程图。
图8是根据本公开的各种实施例的操作存储器系统的又一实例方法的流程图。
图9是根据本文所述的一或多个实施例实施的实例存储器系统的简化框图。
图10是根据本文所述的一或多个实施例实施的实例电子系统的简化框图。
具体实施方式
在许多应用中,例如在机器学习、图像处理、人工智能、系统建模(例如,电力系统、机械系统等)和许多其它应用中,使用融合乘加(fused-multiply-add;FMA)和矩阵乘法运算。这些运算的逻辑可相对简单(例如,乘法和累加)。然而,基于常规计算机的计算可涉及处理器和存储器密集操作,包含在计算核心与存储器阵列之间传送大量数据。
在许多情况下,处理资源(例如,处理器和相关联功能单元电路系统)可在存储器阵列外部,且经由处理资源与存储器阵列之间的总线存取数据以执行一组指令。可在存储器内处理器(PIM)装置中改进处理性能,其中处理器可实施于存储器内部和/或附近(例如,直接在与存储器阵列相同的芯片上)。PIM装置可通过减少和消除外部通信来节省时间和/或节约电力。
本公开的各种实施例涉及存储器内处理(PIM)操作,且更确切地说,涉及执行PIM融合乘加(FMA)运算,其中待在计算中使用的数据可再用于多个计算。换句话说,数据可被读取(加载)且在多个计算中(例如,跨越多个位线)使用,而不是每当数据将在计算中使用时加载数据。更确切地说,例如,根据一些实施例,运算数可加载(例如,提取)(例如,连续地)到包含存储器装置的存储器系统的定序器中。另外,存储器装置的存储器阵列的例如一行的多个位可连续地加载(例如,提取)(例如,经由存储器阵列的一或多个位线)到存储器装置的感测放大器阵列中。并且,可将所述行的多个位中的每一位乘以运算数以产生中间行。可针对一或多个额外运算数重复相乘过程以产生一或多个额外中间行。另外,可基于多个中间行产生输出矩阵的行。因此,且如本文中更完整地描述,运算数可跨越多个位(例如,矩阵的行的所有位)再使用以产生一或多个中间行。因此,与常规系统和方法相比,可减少存储器加载和存储器存储的数目,这可减少等待时间且提高PIM操作的效率。
如本文中所使用,具有存储器内处理(PIM)能力的装置是指能够使用存储器装置内部的处理资源(例如,无需将数据传送到例如主机处理器的外部处理资源)对存储在存储器单元阵列中的数据执行逻辑运算的存储器装置。例如,具有PIM能力的装置可包含耦合到感测电路系统的存储器阵列,所述感测电路系统包括可操作为1位处理元件(例如,以在每列基础上执行并行处理)的感测组件。除了可被称为“位向量运算”的“存储器内”执行的逻辑运算之外,具有PIM能力的装置还可执行存储器操作。作为一实例,具有PIM能力的装置可包含具有存储器操作的动态随机存取存储器(DRAM)阵列,所述存储器操作包含存储器存取操作(例如,读取(例如,加载)和写入(例如,存储)),以及不涉及对数据的操作的其它操作。例如,取决于(例如,由主机)正执行的程序的类型,具有PIM能力的装置可将DRAM阵列操作为“正常”DRAM阵列和/或操作为PIM DRAM阵列,其可包含存储器操作和位向量运算两者。例如,位向量运算可包含逻辑运算,例如布尔运算(例如,AND、OR、XOR等),及转移运算,例如移位阵列中的数据值及例如对数据值求逆。
如本文所使用,PIM操作可指与利用具有PIM能力的装置来执行存储器内处理相关联的各种操作。操作层级可用以定义PIM操作。例如,操作层级中的第一(例如,最低)级可包含位向量运算(例如,基本逻辑运算,其可称为“原始”运算)。层级中的下一(例如,中间)级可包含复合运算,其包括多个位向量运算。例如,复合运算可包含加法、乘法等数学运算,所述数学运算可包括多个逻辑AND、OR、XOR、移位等。层级中的第三(例如,最高)级可包含与执行程序相关联的控制流操作(例如,循环、分支等),程序的执行涉及使用具有PIM能力的装置执行处理。
如本文中更详细地描述,PIM操作可通过包括具有PIM能力的装置的系统内的各种组件执行。例如,可定位于主机上的第一PIM控制组件(例如,控制逻辑,其可称为“标量单元”)可执行控制流操作且将复合运算提供到第二PIM控制组件(例如,定序器),所述第二PIM控制组件也可定位于所述主机上或具有PIM能力的装置上。在多个实施例中,第二控制组件可将低级位向量运算提供到定位于具有PIM能力的装置上的PIM控制组件(例如,位向量定时电路系统),其可在存储器内执行位向量运算并将结果传回到主机。如本文中进一步所描述,用于在具有PIM能力的装置与主机之间传送PIM操作的接口可包含信道,其可包含与用于传送命令、地址和/或数据的典型存储器接口(例如,DDR接口)分离的总线。另外,在多个实施例中,提供主机上的PIM控制组件可提供例如允许PIM程序使用虚拟寻址(例如,由于具有PIM能力的装置可仅对物理地址进行操作而通过解析主机上的虚拟地址)的益处。
本文中所描述的技术还可适用于存储装置中的处理(例如,NAND或NOR快闪、3DXPointTM等中的处理)。PIM还可被称作存储器中的计算或存储装置中的计算。换句话说,本公开涵盖通常与存储或组织数据相关联的装置(例如,存储器或存储装置)中的处理或计算,所述装置在一些架构中,不同于CPU、GPU、GPGPU、FPGA、ASIC等。
图1是本公开的多个实施例的包含存储器装置120的系统100的框图。存储器装置120,其在本文中也可被称作“具有PIM能力的装置”或“具有PIM能力的存储器装置”,可包含任何合适的存储器装置。例如,存储器装置120可包含易失性存储器(例如,RAM、DRAM等)和/或非易失性存储器(例如,快闪存储器、例如3D交叉点存储器装置等的交叉点存储器装置、电阻存储器、铁磁存储器等)。存储器装置120可包含耦合到感测电路系统的存储器阵列130(即,包含存储器单元),如下文更详细地描述。根据一些实施例,存储器装置120可包含以组、等级、叠组、明码或某一其它形成组织的多个存储器阵列130。
系统100进一步包含耦合到存储器装置120的主机111。主机111可包含主机系统,例如个人膝上型计算机、台式计算机、数码相机、智能手机或存储卡读取器,以及各种其它类型的主机。主机111可包含系统母板和/或底板,且可包含多个处理资源(例如,一或多个处理器、微处理器或某一其它类型的控制电路系统)。系统100可包含单独集成电路,或主机111和存储器装置120两者可为同一集成电路的部分(例如,在同一芯片上)。系统100可包含例如服务器系统和/或高性能计算(HPC)系统和/或其一部分。
主机111可包含各种组件,其包含PIM控制组件(例如,控制逻辑131、定序器132)、信道控制器143和存储器管理单元(MMU)控制器134。控制逻辑131可配置成执行与执行PIM程序相关联的控制流命令且将复合命令提供到定序器132。控制逻辑131可为或可包含RISC类型控制器,所述RISC类型控制器配置成产生及发布可扩展的复合运算PIM命令集到定序器132,所述可扩展的复合运算PIM命令集包含不同于DDR命令的命令。在一些实施例中,控制逻辑131可配置成发布复合运算命令,使得对存储器装置120执行位向量运算。在一些实施例中,可将复合运算命令从控制逻辑131传送到存储器装置120(例如,经由定序器132和总线157)。
在一些实施例中,控制逻辑131可将微码指令解码成由定序器132实施的与执行位向量运算相关联的函数调用,所述函数调用可为微码函数调用。微码函数调用可以是定序器132接收和/或执行以使存储器装置120使用例如感测电路系统150的感测电路系统执行特定位向量运算的操作。
如图1所示,控制逻辑131和MMU控制器134位于主机111上,这可允许控制逻辑131和/或MMU控制器134存取存储在主机111上的虚拟地址,并在向存储器装置120传递指令之前对存储在主机111上的物理地址执行虚拟到物理地址解析。在一些实施例中,控制逻辑131和/或定序器132位于存储器装置120中,例如,位于控制器140中或位于行解码器146中。在其它实施例中,控制逻辑131、定序器132或MMU控制器134可以是分布式的,使得它们的部分功能位于主机111上,另一部分位于存储器装置120上。
如本文中所使用,“位向量”可以指物理连续的数个位,不管是成行(例如,水平定向)还是成列(例如,竖直定向)地物理连续,还是根据特定图案或分配方案以平面、叠组、组、阵列分布。具有PIM能力的装置可配置成对虚拟地址空间的多个连续部分(例如,“分块”)执行位向量运算,例如逻辑运算和/或传递运算。例如,虚拟地址空间的分块可具有256位的位长度。在虚拟地址空间中一个分块与其它分块可以是顺序连续的也可以不是顺序连续的。此外,尽管本文所述的一些实施例提及(例如,阵列或矩阵的)“行”或“列”,但是本公开的实施例不限于在行或列上执行的运算。相反,在一些实施例(例如,交叉点存储器)中,(例如,阵列或矩阵)“列”和“行”可相同。此外,短语“位群组”和“位分配”可以指一行位或一列位。更确切地说,例如,一个位群组可包含一行位或一列位。此外,(例如,阵列或矩阵的)多个群组可包含例如(例如,阵列或矩阵的)多个列或多个行。类似地,例如,位分配可包含一行位或一列位。此外,(例如,阵列或矩阵的)多个分配可包含(例如,阵列或矩阵的)多个列或多个行。
可驻留在主机111上(如图1所示)的MMU控制器134可负责执行虚拟存储器地址(例如,与主机111相关联的地址)到物理地址(例如,与存储器装置120相关联的地址)的转换。MMU控制器134还可执行存储器保护操作、缓存控制和/或总线仲裁操作。
定时电路系统133可提供定时以协调逻辑运算的执行,并且负责提供对阵列,例如图1中的存储器阵列130的无冲突存取。在各种实施例中,控制器140和/或定时管理电路系统135可生成状态信息,所述状态信息可例如经由总线157传送到主机111或从主机111传送。总线157可独立于可用于在主机111与存储器装置120之间传送(例如,传递)DDR命令的双数据速率(DDR)存储器接口(例如,控制总线154)(例如,与所述双数据速率(DDR)存储器接口分离)。也就是说,在一些实施例中,总线157可用于将引起位向量运算的执行的命令从主机111传送到存储器装置120,而控制总线154可用于将DRAM命令从主机111传送到存储器装置120。在一些实施例中,经由控制总线154传送的DRAM命令可为用于控制DRAM,例如,DDR1 SDRAM、DDR2 SDRAM、DDR3SDRAM和/或DDR4、DDR5 SDRAM的操作的命令。在其它实施例中,存储器装置120可经由总线157关于操作就绪用信号通知主机。在一些实施例中,总线157与控制总线154和/或数据总线156组合。另外,在一些实施例中,主机111可包含具有多个信道和/或控制总线的多个存储器装置120。
在一些实施例中,定序器132可包含超大指令字(VLIW)类型控制器,其配置成对逻辑运算命令进行操作,且控制逻辑131可配置成响应于来自主机111的处理资源(例如,CPU或GPU)(未示出)的信号而将逻辑运算命令发布到定序器132。例如,定序器132可配置成对多个逻辑运算进行排序以使得复合运算命令可由定序器132发布。在一些实施例中,控制逻辑131可配置成生成VLIW作为位向量运算命令。VLIW可包括微码指令。定序器132可为或可包含配置成将VLIW解码成多个单独微码指令的VLIW类型控制器。例如,定序器132可将VLIW解码成用以引起复合运算(例如,相加、乘以等)的执行的指令。在一些实施例中,复合运算命令可提供进入VLIW指令序列的入口点,使得能够执行此类复合运算。定序器132可耦合到存储器装置120,且可经由总线157将协调位向量运算的命令传递到存储器装置120。微码指令可由定序器132自身和/或由存储器装置120中的其它组件(例如,位向量操作定时电路系统139、定时电路系统133、定时管理电路系统135和/或感测电路系统150)依序和/或并行地执行。
存储器阵列130可包含例如DRAM阵列、SRAM阵列、STT RAM阵列、PCRAM阵列、TRAM阵列、RRAM阵列、NAND快闪阵列,和/或NOR快闪阵列。存储器阵列130可包含以通过存取线(其在本文中可称为字线或选择线)耦合的行和通过感测线(其在本文中可称为数据线、数字线或位线)耦合的列布置的存储器单元。虽然在图1中示出单个存储器阵列130,但实施例不限于此。例如,存储器装置120可包含多个存储器阵列130(例如,DRAM单元、NAND快闪单元等的多个组)。
存储器装置120包含地址电路系统142以锁存通过I/O电路系统144经由总线156(例如,数据/地址总线)提供的数据的地址信号。可通过包含总线157的接口(例如,高速接口(HSI))将状态和/或异常信息从存储器装置120上的控制器140提供到信道控制器143。地址信号通过地址电路系统142接收,且由行解码器146和列解码器152解码以存取存储器阵列130。可通过使用感测电路系统150感测数字线上的存储器单元的状态而从存储器阵列130读取数据。取决于存储器单元技术,存储器单元的状态可被感测为例如电压和/或电流变化、磁性状态变化、电阻率和量子状态等。感测电路系统150可从存储器阵列130读取和锁存一页(例如,行)数据。I/O电路系统144可用于经由总线156与主机111进行双向数据通信。写入电路系统148可用于将数据写入到存储器阵列130。在一些实施例中,写入电路系统148与感测电路系统150组合。在其它实施例中,感测电路系统150可为列解码器152和/或行解码器146的一部分。在一些实施例中,总线154可充当控制和地址总线两者以用于DRAM控制及寻址(例如,根据其中总线154充当单向数据总线的DDR协议)。虽然图1中示出为单独总线,但在一些实施例中,总线154和总线156可能并不是单独总线。
控制器140(例如,存储器控制器)可对由控制总线154提供的来自主机111的信号进行解码。这些信号可包含芯片启用信号、写入启用信号和地址锁存信号,所述信号用于控制对存储器阵列130执行的DRAM操作,所述操作包含数据读取、数据写入和数据擦除操作。在各种实施例中,控制器140可负责执行来自主机111的指令且排序对存储器阵列130的存取。控制器140可包含状态机、定序器或某一其它类型的控制器,且包含呈专用集成电路(ASIC)的形式的硬件和/或固件(例如,微码指令)。在多个实施例中,控制器140可包含位向量运算定时电路系统139。控制器140可控制例如感测电路系统150。例如,控制器140可控制时钟信号的生成和时钟信号的应用以与执行位向量运算相关联地计算分量。
如图1所示,位向量运算定时电路系统139可包含定时电路系统133和定时管理电路系统135。定时电路系统133可包含FIFO缓冲器,以提供与感测电路系统150的定时协调,所述感测电路系统150与存储器单元的存储器阵列130相关联。在一些实施例中,定时电路系统133可包含例如原子状态机的状态机。
定时管理电路系统135可配置成协调逻辑运算的定时(例如,逻辑运算的序列),所述逻辑运算与位向量运算相关联,使用与存储器阵列130相关联的行地址选通(RAS)/列地址选通(CAS)组件136执行。RAS/CAS组件136可配置成将信号(例如,RAS/CAS信号)发送到存储器阵列130和/或从存储器阵列130接收信号(例如,RAS/CAS信号),以识别和/或选择存储器阵列130的行和/或列地址。在一些实施例中,存储器装置120可配置成执行DRAM操作,例如存储器阵列存取请求,其可由主机111经由总线154发布。在一些实施例中,定时管理电路系统135可配置成执行用以控制位向量运算的执行定时的指令。
在一或多个实施例中,控制器140的部分(例如,位向量运算定时电路系统139、定时电路系统133和/或定时管理电路系统135)可包含在32和/或64位长度指令上操作的精简指令集计算机(RISC)类型控制器。在各种实施例中,定时管理电路系统135可负责执行从定时电路系统133接收的指令,以使得执行涉及与感测电路系统150相关联的数据值的位向量运算。
如下文中进一步描述,在多个实施例中,感测电路系统150可包含多个感测组件,所述多个感测组件可各自包含感测放大器和计算组件。计算组件可用作累加器,且感测电路系统150可用于执行(例如,对与互补数字线相关联的数据)位向量运算。在多个实施例中,感测电路系统150可用于使用存储于存储器阵列130中的数据作为输入来执行位向量运算,和/或将运算的结果存储回到存储器阵列130而不经由数字线地址存取传送数据(例如,在不启动列解码信号的情况下)。例如,各种运算(例如,位向量运算)可使用感测电路系统150且在感测电路系统150内执行,而不是由感测电路系统150外部的处理资源(例如,由与主机111和/或定位于存储器装置120上(例如,在控制器140上或其它地方)的其它处理电路系统(例如,ALU电路系统)相关联的处理资源)执行(或与其相关联)。在多个实施例中,感测电路系统150(例如,多个感测组件)可用于按单指令多数据(SIMD)方式执行位向量运算,其中感测组件充当每列基础上的1位处理元件。在其它实施例中,相邻感测组件可在彼此之间交换数据位,因此基于多个数据源产生计算。在其它实施例中,感测组件可取决于其在感测电路系统150内的位置产生不同计算,因此,以VLIW方式提供计算。在感测电路系统150执行位向量运算的实施例中,感测电路系统150可充当和/或称为“存储器内处理器”。如下文更充分地描述,在一些实施例中,感测电路系统150可包含定序器(例如,类似于定序器132)。
在各种常规方法中,例如,可经由感测电路系统从存储器读取与运算数相关联的数据,且经由I/O线(例如,经由本地I/O线和/或全局I/O线)将所述数据提供给外部ALU电路系统。外部ALU电路系统可包含多个寄存器并将使用运算数执行位向量运算,并且结果可经由I/O线传送回到阵列。在其它实施例中,感测电路系统150配置成对存储在存储器阵列130中的数据执行位向量运算,并将结果存储回到存储器阵列130,而不启用耦合到感测电路系统150的I/O线(例如,本地I/O线)。
在多个实施例中,可能并不需要存储器阵列130外部的电路系统和感测电路系统150来执行运算,这是因为在不使用外部处理资源的情况下,感测电路系统150可执行适当的位向量运算。因此,感测电路系统150可用于至少在某一程度上补充和/或更换此外部处理资源(或至少此外部处理资源的带宽消耗)。然而,在多个实施例中,除通过外部处理资源(例如,主机111)进行逻辑运算之外,还可使用感测电路系统150来进行逻辑运算(例如,执行指令)。例如,主机111和/或感测电路系统150可限于仅进行某些逻辑运算和/或特定数目的逻辑运算。
启用I/O线可包含启用(例如,接通)具有耦合到解码信号(例如,列解码信号)的栅极和耦合到I/O线的源极/漏极的晶体管。然而,实施例不限于在不启用阵列的列解码线的情况下使用感测电路系统(例如,感测电路系统150)进行逻辑运算。无论是否与经由感测电路系统150进行逻辑运算相关联地使用本地I/O线,所述本地I/O线可经启用以便将结果传送到除了回到存储器阵列130以外的合适的位置(例如,到外部寄存器)。
本公开的各种实施例涉及融合乘加(FMA)运算,且更确切地说,涉及执行存储器内处理(PIM)FMA运算(例如,对连续分配数据执行)。根据各种实施例,待在一或多个计算中使用的数据可加载(例如,提取)(例如,到定序器中)且跨越多个位再使用(例如,经由多个位线加载(例如,提取)到感测放大器阵列)。换句话说,各种实施例可涉及跨越与多个位线相关联的多个位再使用定序器逻辑。因此,与常规方法和系统相比,可减少存储器加载和存储器存储的数目,且因此可提高存储器装置的效率和/或可减少与存储器装置相关联的等待时间。
至少出于这些原因,如本文中更完整地描述,本公开的各种实施例提供一或多个问题的技术解决方案,所述一或多个问题由可能不会合理地由个人执行的技术产生,且本文中所公开的各种实施例起因于计算机技术以便克服上文所描述的问题和/或挑战。另外,本文中所公开的至少一些实施例可通过允许先前不可由计算机执行的功能的计算机性能来改进计算机相关技术。
对于矩阵乘法,中央处理单元(CPU)及图形处理单元(GPU)两者可将输入矩阵分解为拼片,且可将拼片分配到处理器核心。对于输出矩阵的每一拼片,精确地提取输入矩阵的拼片一次,这实现O(N)计算强度(即,处理将线性地且成正比例地增加到输入数据集的大小)。可选择输出矩阵的每一拼片的大小以匹配目标处理器的L1级缓存或寄存器的容量。
对于GPU,选择拼片以使得拼片形成线程块拼片、翘曲拼片和线程拼片的分层结构。此拼片结构产生用于数据从全局存储器移动到共享存储器(即,矩阵到线程块拼片)、从共享存储器移动到寄存器文件(即,线程块拼片到翘曲拼片)及从寄存器文件移动到GPU核心以供计算(即,翘曲拼片到线程拼片)的路径。
在PIM中,除存储器阵列(例如,DRAM阵列)和一或多个寄存器(例如,感测放大器(SA)阵列内)之外,不存在存储器分层结构。然而,如本文中更完整地描述,根据各种实施例,数据可在PIM FMA运算中再使用。
图2A示出包含多个行M及多个列K的矩阵A和包含多个行K及多个列N的矩阵B。图2A进一步示出包含M个行和N个列的矩阵C。如下文更完整地描述,可基于运用矩阵A的数据和矩阵B的数据执行的运算而产生矩阵C的数据。
根据各种实施例,为了使矩阵(例如,矩阵A和矩阵B)相乘,可跨越(例如,第二存储器阵列的)矩阵B中的所有列扫描(例如,运用点积运算)(例如,第一存储器阵列的)矩阵A的每一行以计算输出矩阵C中的每一行。在扫描(例如,点积扫描)期间,可跨越矩阵B的所有列再使用矩阵A的输入行中的每一数字。因此,根据各种实施例,矩阵(例如,矩阵A和/或矩阵B)的列中的每一位可仅由例如PIM向量引擎(例如,融合乘加(FMA)单元)读取一次。
更确切地说,根据各种实施例,(例如,第一存储器阵列的)矩阵A的每一元素a_(i,k)可与(例如,第二存储器阵列的)矩阵B的行b_(k)相乘,从而产生按单个元素a_(i,k)缩放的新临时行。换句话说,矩阵A的每一元素a_(i,k)可作为共同运算数连同待乘以共同运算数的矩阵B的行b_(k)一起加载到FMA单元中。可(例如,在FMA单元的本地寄存器或存储器阵列130的指定部分中)存储相乘的结果,即按比例缩放行(例如,按比例缩放行b'_(k)=b_(k)*a_(i,k))。另外,矩阵A的不同元素a_(i,k+1)可作为共同运算数连同待乘以共同运算数的矩阵B的行b_(k+1)一起加载到FMA单元中。相乘的结果是,按比例缩放行(例如,按比例缩放行b'_(k+1)=b_(k+1)*a_(i,k+1))可经计算且添加(或累加)到预先计算的行b'_(k)。换句话说,可沿列和跨越行对(例如,中间矩阵的)按比例缩放行b'_(k)进行求和以产生行c_(i),所述行c_(i)可作为输出矩阵C的完整行存储回到存储器阵列(例如,第二存储器阵列)中。换句话说,中间矩阵b'_(k)的行可跨越行且沿列合并和累加以产生累加总和(一行),所述累加总和可存储回到存储器阵列(例如,第二存储器阵列)中(例如,作为行c_(i))。可针对矩阵A和/或矩阵B的每一行重复这些动作以产生矩阵C的其它行。
根据一些实施例,来自某一行(例如,矩阵B的行b_(k))的位可以位串行方式在存储器阵列的位线上直线式地共同分配。换句话说,所述行的每一位(例如,矩阵B的行b_(k)的每一位)可经由存储器阵列的位线加载(例如,到FMA单元中)。因此,位可以通过激活和撤销激活对应于表示行b_(k)的数字的相关位位置的存储器阵列行来一次一个位地连续存取。此外,如上文所提到,数字(例如,矩阵A的具有数字a_(i,k)的位)可以串行方式(例如,经由定序器)用作整个行(例如,矩阵B的行b_(k)的位)的公共运算数。换句话说,数字(例如,矩阵A的位a_(i,k))可以与行(例如,矩阵B的行b_(k))乘累加(例如,在感测放大器逻辑的存储器阵列中)。根据各种实施例,位串行FMA单元可接收来自所述行的位(例如,矩阵B的行b_(k)的位),其中位串行FMA单元可基于根据公共运算数的位a_(i,k)的规定或指示将行b_(k)中的数字的位排序。在一些实施例中,公共运算数的位可以理解为用于控制定序器的微码。
应注意,根据各种实施例,存储器阵列的数字(即,包含位数字)可以按照列(即,不按照矩阵中的行)排列。因此,在至少一些实施例中,存储器阵列的多个行可以基于存储器阵列的每一列连续读出,以读取每一列中的(例如,矩阵行的)数字。换句话说,在至少一些实施例中,读出存储在存储器列中的数字可包含以连续方式读取列的多个行。
如上文所提到,在至少一些实施例中,可在存储器阵列的位线本地执行累加,因此乘法过程可能不需要大量硬件。例如,在这些实施例中,FMA过程可需要M x K个存储器负载(每者具有N个元件)和通过多个位(例如,32个位)串行化的M个存储器存储区(每者具有N个元件)。
另外,根据一些实施例,矩阵B可分裂成拼片,且矩阵B可被复制(例如,以提高计算并行度)。并且,输入(即,输入向量,例如矩阵A的行)可分配给拼片,且输入可在FMA阵列(例如,感测放大器阵列)当中扩散(例如,以提高计算并发且减小通信距离)。此外,根据一些实施例,可在对数时间中执行部分结果累加(例如,以降低通信成本)。
例如,图2B描绘包含在对数时间中执行的累加运算的二进制相乘的实例,如图2B所示,在第一计算步骤中(例如,在框204中)使用框202中的中间矩阵200的非零行,其中执行并行计算以产生框206中示出的结果。另外,在第二计算步骤中(例如,在框206中),将第一计算步骤的结果计算为最终结果(即,框208中所示)。因此,计算的复杂度是对数的(即,log_w(b-s),其中w为FMA单元的宽度(即,FMA单元可接收多少运算数(例如,在此实例中为2个运算数),b为位数目(例如,位宽度),且s为跳过的次数(即,可跳过由具有值0的乘数位产生的零行))。
根据各种实施例,可根据以下选项中的一或多者进一步并行化各种操作(例如,矩阵乘法):1)跨越矩阵A的行a_(i),其可要求矩阵B的复制;2)跨越矩阵A的列a_(k),其可对存储器装置要求大的共享型XOR和进位运算或中间存储装置以执行累加;及3)跨越矩阵A的列和行两者中的拼片,其可在选项1与2之间强加一些中间要求。在这些实施例中的一些中,可需要额外的通信和/或结果(即,从跨越存储器阵列的分裂矩阵产生的结果)的集成(例如,取决于存储结果的地方)。此外,在一些实施例中,可需要对结果(其可为部分点积)一起求和以产生矩阵C中的一或多行。因为并行求和可包含数据简化运算,且可在记录时间中完成,所以在一些实施例中,可在本地(例如,在同一芯片上)发生通信,且因此可对较少较高级部分结果(例如,来自不同芯片)一起求和。
如下文更充分地描述,在至少一些实施例中,在FMA运算期间,可依据另一向量中的位的值经由一个向量中的位的移位复制而产生中间矩阵M。例如,参考图3,实例位向量‘a’(即,1 1 0 1)可加载(例如,到FMA单元的定序器中),且实例位向量‘b’(即,1 0 0 1)可连续加载(例如,到FMA的感测放大器中)。另外,如下文更充分地描述,可依据向量‘a’中的位的值经由向量‘b’的位的移位复制而产生中间矩阵M。
更确切地说,向量‘a’的第一位(其为‘1’)可乘以向量‘b’的位以产生矩阵M的第一(即,顶部)行(即,1 0 0 1)。另外,向量‘a’的第二位(其为‘0’)可乘以向量‘b’的位以产生矩阵M的第二行(即,0 0 0 0),所述第二行相对于矩阵M的顶部行向左移位一个列空间。并且,向量‘a’的第三位(其为‘1’)可乘以向量‘b’的位以产生矩阵M的第三行(即,1 0 0 1),所述第三行相对于矩阵M的第二行向左移位一个列空间。另外,向量‘a’的第四位(其为“1”)可乘以向量‘b’的位以产生矩阵M的第四(即,底部)行(即,1 0 0 1),所述第四行相对于矩阵M的第三行向左移位一个列空间。
根据各种实施例,可一次一个地使用向量‘a’的位。对于向量‘a’的每一位(即,对于每一循环),向量‘b’的值经读取、移位,且添加到或不添加到总数(例如,运行总数)。例如,在第一循环期间,当a=1(即,a的第一位)时,将“1 0 0 1”添加到总数,在第二循环期间,当a=0(即,a的第二位)时,将“0 0 0 0”添加到总数(即,跳过),在第三循环期间,当a=1(即,a的第三位)时,将b的经移位版本添加到总数,且在第四循环期间,当a=1(即,a的第四位)时,将b的另一经移位版本添加到总数。在此实施例中,每一循环要么是b的串行读取操作(即,如果来自a的位等于1),要么是跳过运算(即,如果来自a的位等于0)。
在一些实施例中,例如,定序器可执行移位-复制,并将中间矩阵M存储到与存储器阵列(例如,包含向量‘b’的存储器阵列)介接的暂存区中。在一些实施例中,暂存区可以是存储器阵列的一部分,或者是存储器阵列中紧靠感测放大器定位的特别指定部分(例如,用于减少数字线RC寄生,从而实现更快的暂存区数据传入和传出)。在其它实施例中,暂存区可包含高速存储器单元。在产生并存储矩阵M之后,矩阵M可由感测放大器连续读回。在读取期间,感测放大器可执行带本地累加的XOR和进位运算。例如,带本地累加的XOR和进位运算可通过简单的单位全加法器连续执行加法来执行。此运算基本上可将矩阵M压缩成乘法结果R。换句话说,矩阵M的列可以求和以产生R(即,1 1 1 0 1 0 1)。结果R可以是矩阵乘法的一部分,在此实例中为来自行b'_(k)=b_(k)*a_(i,k)的单个数字。
图4描绘根据本公开的各种实施例的FMA单元400。FMA单元400在本文中还可称为“位串行FMA单元”,其包含定序器402和阵列404,所述阵列可包含感测放大器阵列(例如,在图1的感测电路150内)。阵列404可包含多个本地FMA模块(例如,FMA j、FMA j+1,等等)。在一些实施例中,每一FMA模块可包含感测放大器。
根据一些实施例,定序器402可在存储器装置(例如,图1的存储器装置120)本地,且更确切地说,在一些实施例中,定序器402可为感测电路系统(例如,图1的感测电路系统150)的部分或接近感测电路系统。在这些实施例中,定序器402可配置成从存储器阵列406接收(例如,提取)数据(例如,经由位线407)。在其它实施例中,定序器402可在存储器装置外部。例如,图1的定序器132可包含定序器402。在这些实施例中,定序器402可配置成驱动一或多个存储器阵列(例如,在相同时间或不同时间)。另外,在任一实施例中,定序器402可配置成从控制逻辑接收数据和/或控制信号,所述控制逻辑可为存储器装置(例如,外部处理器)的部分或在存储器装置外部。尽管FMA单元400描绘为包含定序器402,但本公开不限于此,且在一些实施例中,定序器402可在FMA单元400外部。在其它实施例中,多个定序器402可分布在FMA单元404之间。
图4进一步示出累加器ACC,其可包含与存储器阵列(例如,图2的矩阵B的源)介接的暂存位串行累加器。例如,可包含多个专用累加器(Acc_j、Acc_j+1等)的累加器ACC可配置成存储多个位,例如一行位、一列位和/或位矩阵。如图4中所示出,每一FMA模块(即,FMAj、FMA j+1等)可与专用累加器(Acc_j、Acc_j+1等)相关联。例如,专用累加器在本文中还可以被称为“子累加器”,其可包含一或多个向量。在其它实施例中,若干FMA单元可连接到一个累加器,或若干累加器可连接到一个FMA单元。
累加器ACC和FMA单元400可各自配置成经由位线408/410(在本文中也被称为数据线(DL))的阵列接收数据。更确切地说,来自矩阵B(见图2)的数据可加载到累加器ACC和/或阵列404中(经由位线408/410)。再更确切地说,矩阵B的行可分成数字部分(例如,拼片)409_0、409_1等,可经由位线408/410加载到累加器ACC和/或阵列404中。尽管在图4中仅示出两个位线(即,408/410),但是可存在任何合适数目个位线(例如,N或K个位线)。
在一些实施例中,矩阵B的行的一部分(例如,行的32个位)可经由位线加载(例如,连续读取)到专用累加器(Acc_j、Acc_j+1等)和/或FMA模块(例如,FMA j、FMA j+1等)中。更确切地说,在一些实施例中,矩阵B的行的第一部分(例如,32位值)可经由位线408加载到累加器Acc_j和/或FMA j中,并且矩阵B的行的第二部分(例如,32位值)可经由位线410加载到累加器Acc_j+1和/或FMA j+1中,以此类推,使得矩阵B的整个行都加载到累加器ACC和/或阵列404中。在一些实施例中,矩阵B的行的至少一部分可分割成位子群组,并且子群组中的至少一些位可以加载(例如,读取),同时另一子群组中的至少一些位可以加载(例如,读取)。因此,至少在这些实施例中,位可以并行读取。
根据一些实施例,在第一序列的第一运算期间,矩阵B的行(例如,行b_(k))的每一位可以与矩阵A的第一行的数字(例如,a_(i,k))乘累加(例如,根据来自本文所述的数字a_(i,k)的位值,使用来自行b_(k)的每一数字的移位复制)以产生第一行b'_(k),其可存储(例如,在累加器ACC中)为“中间行”。此外,在第一序列的第二运算期间,矩阵B的另一行(例如,行b_(k+1))可与矩阵A的第一行的另一数字(例如,a_(i,k+1))相乘以产生第二行b'_(k+1)。在一些实施例中,第二行可与中间行相加以更新中间行(即,第二行可以与中间行求和(例如,沿着列)(例如,经由累加器ACC)以更新中间行)。换句话说,对于序列中的每一运算,中间行可以基于最新产生的行而更新(例如,经由累加器ACC)。例如,在前两个运算之后,中间行可包含一起求和(例如,沿着列)的第一行和第二行。类似地,在前三个运算之后,中间行可包含一起求和(例如,沿着列)(例如,中间行=中间行+新行)的第一行、第二行和第三行。此过程可以针对矩阵B的每一行重复,其中基于矩阵B中的最终行产生的中间行可以是输出矩阵的行(例如,矩阵C的行c[i];见图2)。例如,来自行a_(i)的位的连续串行流可被视为单个点积运算,此运算在经过来自矩阵B的所有行的相关数字的移位复制之后可产生行c[i]。
此外,上文所描述的过程可以针对矩阵A的每一行重复以产生输出矩阵的额外行。更确切地说,在第二序列的第一运算期间,矩阵B的行(例如,行b_(k))的每一位可与矩阵A的第二行的数字(例如,a_(i+1,k))相乘以产生第一行,其可存储为中间行。此外,在第二序列的第二运算期间,矩阵B的另一行(例如,行b_(k+1))可与矩阵A的第二行的另一数字(例如,a_(i+1,k+1))相乘以更新中间行。类似地,在第二序列的第三运算期间,矩阵B的另一行(例如,行b_(k+2))可与矩阵A的第二行的又一数字(例如,a_(i+1,k+2))相乘以更新中间行。此过程可以针对矩阵B的每一行重复,其中基于矩阵B中的最终行产生的中间行可以是输出矩阵的行(例如,矩阵C的行c[i+1];见图2)。在一些实施例中,如果矩阵B的副本存储在不同存储器阵列中,那么此过程(即,计算c[i+1])可与所述不同存储器阵列中的第一过程(即,计算c[i])并行完成。
如上文所提到,在其它实施例中,存储器阵列的多个列的至少一部分(例如,32位)可加载到专用累加器(Acc_j、Acc_j+1等)和/或FMA模块(例如,FMA j、FMA j+1等)中。更确切地说,第一列的至少一部分可加载(例如,连续地)到累加器Acc_j中,第二列的至少一部分可加载(例如,连续地)到累加器Acc_j中,以此类推,直到每一列的至少一部分(例如,数字)都被加载为止。
在这些实施例中,在第一序列的第一运算期间,存储器阵列的列的第一数目的位可与输入向量的数字乘累加(例如,使用移位复制)以产生第一列,其可存储(例如,在累加器ACC中)为“中间列”。此外,在第一序列的第二运算期间,所述列的第二数目的位可与输入向量的另一数字相乘以产生第二列。在一些实施例中,第二列可与中间列相加以更新中间列(即,第二列可与中间列求和(例如,沿着行)(例如,经由累加器ACC)以更新中间列)。换句话说,对于序列中的每一运算,中间列可以基于最新产生的列而更新(例如,经由累加器ACC)。例如,在前两个运算之后,中间列可包含一起求和(例如,沿着行)的第一列和第二列。类似地,在前三个运算之后,中间列可包含一起求和(例如,沿着行)(例如,中间列=中间列+新列)的第一列、第二列和第三柱。此过程可以针对存储器阵列的每一列重复,其中基于存储器阵列中的最终列产生的中间列可以是输出阵列的列。
此外,上文所描述的过程可以针对存储器阵列的每一列重复以产生输出阵列的额外列。更确切地说,在第二序列的第一运算期间,存储器阵列的列的每一位可与输入向量的第二数字相乘以产生第一列,其可存储为中间列。此外,在第二序列的第二运算期间,存储器阵列的另一列可与输入向量的另一数字相乘以更新中间列。类似地,在第二序列的第三运算期间,存储器阵列的另一列可与输入向量的又一数字相乘以更新中间列。此过程可以针对存储器阵列中的每一列重复,其中基于存储器阵列中的最终列产生的中间列可以是输出阵列的列。
根据各种实施例,多个位(例如,从存储器阵列读取)可包含神经网络权重。此外,至少在这些实施例中,位结果可以是神经网络(例如,神经网络的一个层)的输出,输入向量可以是神经网络(例如,神经网络的所述层)的输入。此外,根据一些实施例,存储器阵列可包含多个存储器阵列(例如,多个矩阵),并且经由所述多个存储器阵列中的一个存储器阵列产生的位结果可以是所述多个存储器阵列中的另一存储器阵列的输入。
参考图3和4,现将描述与加载矩阵的一行的实施例有关的更具体实例。首先,定序器402可读取输入向量(例如,a_(i,k))的第一位(例如,最低有效位(LSB))。例如,定序器402可读取a_(i,k)的位0,其具有第一逻辑状态或值‘1’(在本文中也被称为“高状态”或“高位”)。因为a_(i,k)的位0是第一逻辑状态(例如,‘1’),所以每一FMA模块(即,FMA j、FMA j+1等)可连续地逐位读取行b_(k)(例如,经由位线408/410),并将每一位存储到累加器ACC中(例如,以初始化累加器ACC)。更确切地说,例如,每一子累加器ACC_j、ACC_j+1等可接收行b_(k)的多个位。此外,定序器402可读取a_(i,k)的位1,其具有不同逻辑状态或值(例如,‘0’)(在本文中也被称为“低状态”或“低位”),因此定序器402可跳过a_(i,k)的位1(即,因为a_(i,k)的位1是‘0’,所以包含a_(i,k)的位1的乘法运算可被跳过。)
此外,a_(i,k)的额外位可由定序器402读取(例如,顺序地),直到读取到具有第一状态(即,“1”)的另一位为止。并且,可以识别具有第一状态(即,在此实例中为高状态)的位的位数字(在本文中也被称为“位位置”)(例如,位0、位1、位2、位3等)。在此实例中,定序器402读取a_(i,k)的下一个位。更确切地说,定序器402读取a_(i,k)的位2,其为‘1’。因此,在此实例中,阵列404可在累加器ACC中从位(“累加器位”)的位2开始连续地逐位读取累加器ACC。在此实例中,从累加器ACC读取位可与行b_(k)的位读取、加法运算的执行以及将此运算的位结果存储回累加器ACC中交替进行,所述加法运算包含XOR-进位-累加运算(例如,2个位的XOR和进位运算,其中这些位中的一个来自累加器ACC,另一个来自行b_(k),以及经由多个逻辑装置进行的本地累加)。更确切地说,累加器ACC的位2可经读取,行b_(k)的位0可经读取,进位位可经读取,并且XOR-进位-累加运算可在所述位(即,累加器ACC的位2、行b_(k)的位0和进位位)上执行,以产生可存储在累加器ACC中的位结果。此外,XOR-进位-累加运算可产生新的进位位,其可存储在阵列404中。在一些实施例中,进位位可在本地存储在感测放大器中。在这些实施例中,进位位可被使用并随着每个后续的位添加而更新,因此可能不需要在累加器ACC中存储所述进位位。
此运算可持续用于存储在行b_(k)中的数字的整个位长度(例如,32位)。在一些实施例中,所述运算可持续用于存储在b_(k)中的整个位长度(例如,32位),但最后Z个位累加器ACC除外,其中Z等于开始位数字(“位位置”)。更确切地说,在以上实例中(即,在FMA模块从位2开始连续地逐位读取累加器ACC时),累加器ACC的两个最终位未初始化,并因此不必读取累加器ACC的两个最终位。相反,在此实例中,定序器402可使阵列404存储行b_(k)的两个最终位。
如上文所提到,在一些实施例中,每一子累加器ACC_j、ACC_j+1可接收行b_(k)的多个位。因此,在一些实施例中,每一相关联的FMA单元(FMA j、FMA j+1等)可配置成使输入向量乘以行b_(k)的一或多个位。此外,在这些实施例中,每一子累加器ACC_j、ACC_j+1可包含相关联乘法的位结果(例如,输入向量与行b_(k)的相关联部分相乘的结果)。
随后,定序器402读取输入向量(即,a_(i,k))的下一个位。继续所述实例,定序器402读取a_(i,k)的位3,其为‘1’。因此,在此实例中,阵列404可从位3开始连续地逐位读取累加器ACC。在此实例中,从累加器ACC读取位可与行b_(k)的位读取、XOR-进位-累加运算(例如,经由多个逻辑装置进行的带本地累加的XOR和进位运算)的执行以及将此运算的位结果存储回累加器ACC中交替进行。更确切地说,累加器ACC的位3可经读取,行b_(k)的位0可经读取,进位位可经读取,并且XOR-进位-累加运算可在所述位(即,累加器ACC的位3、行b_(k)的位0和进位位)上执行,以产生可存储在累加器ACC中的位结果。此外,XOR-进位-累加运算可产生新的进位位,其可存储在阵列404中。在一些实施例中,进位位可在本地存储在感测放大器中。在这些实施例中,进位位可被使用并随着每个后续的位添加而更新,因此可能不需要在累加器ACC中存储所述进位位。
此运算可持续用于存储在行b_(k)中的数字的整个位长度(例如,32位)。在一些实施例中,所述运算可持续用于存储在b_(k)中的整个位长度(例如,32位),但最后Z个位累加器ACC除外,其中Z等于开始位数字。在以上实例中(即,在FMA模块从位3开始连续地逐位读取累加器ACC时),累加器ACC的三个最终位未初始化,并因此不必读取累加器ACC的三个最终位。相反,在此实例中,定序器402可使阵列404存储行b_(k)的三个最终位。使输入向量乘以行b_(k)的这个过程可以针对输入向量的每一位重复,从而产生存储在累加器ACC中的中间行。
此外,来自矩阵A的第二输入向量可加载到定序器402中。此外,输入向量的位可由定序器402读取(例如,顺序地),直到读取到具有高状态(即,“1”)的位为止。响应于读取到具有高状态的位,矩阵B的第二行b_(k+1)的每一位可连续地读取到累加器ACC中。此外,输入向量的额外位可由定序器402读取(例如,顺序地),直到读取到另一具有高状态(即,“1”)的位为止。并且,可以识别具有高状态的位的位数字(例如,位0、位1、位2、位3等)。
响应于读取到具有高状态的位,可以从等于“高状态”位的所识别位数字的位数字开始连续地(例如,逐位)读取累加器ACC中的位。更确切地说,累加器位和行b_(k+1)的位可以交替方式读取,并且XOR-进位-累加运算可在经读取累加器位、行b_(k+1)的经读取位和有关进位运算的位上执行。XOR-进位-累加运算的结果可存储回累加器ACC中,并且经更新进位位可存储在阵列404中。在一些实施例中,进位位可在本地存储在感测放大器中。在这些实施例中,进位位可被使用并随着每个后续的位添加而更新,因此可能不需要在累加器ACC中存储所述进位位。
使第二输入向量乘以行b_(k+1)的这个过程可以针对第二输入向量的每一位重复,从而产生可存储在累加器ACC中的中间行。此外,使输入向量(例如,来自矩阵A)乘以矩阵B的行的过程可以针对矩阵B的每一行重复,其中每一序列产生经更新中间行。通过来自矩阵A的行的最后一个输入向量和矩阵B的最后一个行(例如,a_(i,K-1)和b_(K-1)产生的中间行(其中K是矩阵A的宽度)可包含输出矩阵的输出行(例如,图2的矩阵C的行c[i])。此外,上文参考图3和4所描述的过程可以针对矩阵A的每一行重复以产生输出矩阵C的额外行。
在一些实施例中,(例如,输入向量、行、列等的)位群组中具有特定逻辑状态(例如,0或1)的位数目可以计数以确定计数(即,具有所述特定逻辑状态的位的数目)。此外,如果计数数字是偶数,那么所产生的位结果可以是第一状态(例如,0或1)。如果计数数字是奇数,那么所产生的位结果可以是不同的第二状态(例如,0或1)。此外,至少在这些实施例中,进位位可以基于计数值而更新。更确切地说,进位位可以利用计数一半的值更新。
根据一些实施例,多个位结果(例如,经由多个输入向量所产生)可以求和以产生点积。更确切地说,通过利用第一输入向量执行第一PIM操作所产生的第一位结果可以与通过利用第二输入向量执行第二PIM操作所产生的第二位结果求和以产生点积。
图5A和5B示出根据本公开的各种实施例的用于使两个数字(即,位向量)相乘的实例单遍次位串行运算。如图5A中所示,第一向量X包含二进制表示‘1101101’(十进制为109),第二向量Y包含二进制表示‘0100101’(十进制为37)。仅作为实例,向量X和向量Y中的每一个可包含存储器阵列的列、存储器阵列的行、矩阵的列或矩阵的行。
在放大视图502中,向量X(即,‘1101101’)以沿着自身复制且在对应于向量Y的高和低位的位置处对齐的竖直格式示出(例如,用于位串行运算)。更确切地说,因为向量Y的位0、2和5皆是‘1’,所以放大视图502的第一竖直行、第三竖直行和第六竖直行包含向量X(即,‘1101101’)。此外,因为向量Y的位1、3和4是零,所以放大视图502的第二竖直行、第四竖直行和第五竖直行皆包含零列。此外,包含全零的每一竖直行(即,在放大视图502中)可以移除以产生紧凑视图504,其包含来自放大视图502的第一竖直行、第三竖直行和第六竖直行。紧凑视图504还包含进位C的状态和呈二进制格式的结果R(即,X、Y的相乘结果=109x37=4033)。
在本文所述的单遍次位串行运算实施例的至少一个乘法运算期间,可为矩阵的行(例如,矩阵B的行b_(k))的至少一部分的向量X可以一次一个位地从存储器位线提取(例如,向量X的每一位可以位串行方式提取和存储)。可为输入向量(例如,a_(i,k))的至少一部分的向量Y也可一次一个位地提取。在此实施例中(例如,单遍次),X和Y都只能提取一次(即,一次一个位),而无需将部分乘法的中间结果存储到ACC。
例如,在本文中可称为“公共运算数”的向量Y可以在用于提取向量X的相同位线上提取,或者向量Y可以在并行位线上提取。在一些实施例中,向量Y可用作控制硬件的控制序列,所述硬件可包含例如两个寄存器(例如,一个用于运算数,一个用于结果)及进位计数器和组合电路(例如,用于XOR和AND运算)。
根据各种实施例,乘法运算可以在提取向量X的每一位时通过单遍次计算出。更确切地说,在循环0(例如,时钟循环)期间,提取运算数Y[0],其为‘1’,并且提取并在感测放大器本地的寄存器O[0]和结果R[0]中存储同样为‘1’的运算数X[0]。在循环0期间,进位C是‘0’。在一些实施例中,如果运算数Y[0]是‘0’,那么可以在结果R[0]中存储零。换句话说,在一些实施例中,来自向量Y的第一‘1’可触发向量X的位的提取,否则用零填充结果R,直到从向量Y提取到‘1’为止。在其它实施例中,向量X的位可在从向量Y提取‘1’之前提取(例如,为了节省时间)。
继续所述实例,在循环1期间,提取运算数X[1]和Y[1],并将运算数X[1]存储在寄存器O[1]中。运算数Y[1]是‘0’,因此结果R[1]可设置成等于寄存器O[1]。在此实例中,来自向量Y的第二‘1’可触发第一算术运算,并且在来自向量Y的第二‘1’之前,结果R设置成等于寄存器O。
在循环2期间,提取运算数X[2]和运算数Y[2],并将运算数X[2]存储在寄存器O[2]中。运算数Y[2]是‘1’,进位C是‘0’,结果R[2]=O[0]XOR O[2]XOR C。在此实例中,R[2]=‘0’。此外,进位计数器C更新成‘1’(如由进位C'指示)。在一些实施例中,进位计数器可用具有参与当前XOR序列O[0],O[2],C的位中的值‘1’的位对的当前计数更新。这可适用于所有后续循环。
在循环3期间,提取运算数X[3]和运算数Y[3],并将运算数X[3]存储在寄存器O[3]中,运算数Y[3]是‘0’,进位C是‘1’,并且结果R[3]=O[1]XOR O[3]XOR C。在此实例中,R[3]=‘0’。此外,进位计数器C更新成‘1’(如由进位C'指示)。
在循环4期间,提取运算数X[4]和运算数Y[4],并将运算数X[4]存储在寄存器O[4]中。运算数Y[4]是‘0’,进位C是‘1’,并且结果R[4]=O[2]XOR O[4]XOR C,为‘0’。此外,进位计数器C更新成‘1’(如由进位C'指示)。
在循环5期间,提取运算数X[5]和运算数Y[5],并将运算数X[5]存储在寄存器O[5]中。运算数Y[5]是‘1’,R[5]=O[0]XOR O[3]XOR O[5]XOR C。在此实例中,R[5]=‘0’。此外,进位计数器C从‘1’更新成‘2’(如由进位C'指示)。
在循环6期间,提取运算数X[6]和运算数Y[6],并将运算数X[6]存储在寄存器O[6]中。运算数Y[6]是‘0’,结果R[6]=O[1]XOR O[4]XOR O[6]XOR C。在此实例中,R[6]=‘1’。此外,进位计数器C从‘2’更新成‘1’(如由进位C'指示)。
在此乘法实例中,向量X和Y包含七个位,因此在循环7期间,可以不进行提取运算。在循环7期间,进位c是‘1’,R[7]=O[2]XOR O[5]XOR C。在此实例中,R[7]=‘1’。此外,进位C更新成‘1’(如由进位C'指示)。类似地,在循环8期间,可以不进行提取运算,进位C是‘1’,且R[8]=O[3]XOR O[6]XOR C,为‘1’。此外,进位C更新成‘1’(如由进位C'指示)。在循环9期间,R[9]=O[4]XOR C,为‘1’,并且进位C从‘1’更新成‘0’(如由进位C'指示)。
在完成循环9后,计算结束;但是,在此实例中,进位C可在完成之前一直传播。更确切地说,在第十循环(在图5A或5B中未示出)期间,R[10]=O[5]XOR C,为‘1’,并且进位c是‘0’。此外,在第十一循环(在图5A或5B中未示出)期间,R[11]=O[6]XOR C,为‘1’,并且进位C=0。在第十二循环(在图5A或5B中未示出)期间,R[12]等于进位C,为0。
最终结果R的二进制表示为‘111111000001’。如上文所提到,X十进制为109,Y十进制为37。此外,109*37=4033,等于二进制的‘111111000001’。用于需要在每一循环计算的XOR-进位运算的运算数数目取决于具有数字Y所具有的值‘1’的位的数目。在此实例中,Y仅有3个具有值‘1’的位。在其它实例中,Y运算数可有更多个具有值‘1’的位。执行乘法序列(本文已描述其实例)的硬件可适应所有可能情况。在至少一个实施例中,可以使用在上文所描述的每一循环期间多次使用的带1位累加器的单个XOR-进位单元。在另一实施例中,如果需要更快速度,那么可以使用多个并行工作的XOR-进位单元。在一些实施例中,XOR-进位单元的数量可等于B/O,其中O是每一XOR-进位单元可以并行获取的运算数(位)的数目,B是Y的位宽。例如,如果Y位宽是32且每一XOR-进位单元可获取2个运算数(各自具有1个位的大小),那么乘法硬件内可存在32/2=16个XOR-进位单元。这些XOR-进位单元能够通过log O(B)步骤计算最坏情况的XOR-进位序列。因此,对于最坏情况,在Y的所有32个位都Y值‘1’时,计算XOR-进位序列的步骤数是log_2(32)=5。
例如,在第一步骤中,每一XOR-进位单元可获取两个运算数并产生十六个XOR-进位结果。在第二步骤中,XOR-进位单元的一半(例如,八个)可根据在第一步骤中产生的结果获取两个运算数,并产生八个XOR-进位结果。在第三步骤中,XOR-进位单元的四分之一(例如,四个)可根据在第二步骤中产生的结果获取两个运算数,并产生四个XOR-进位结果。在第四步骤中,XOR-进位单元的八分之一(即,两个)可根据在第三步骤中产生的结果获取两个运算数,并产生两个XOR-进位结果。此外,在第五步骤中,单个XOR-进位单元可根据在第四步骤中产生的结果获取两个运算数,并产生XOR-进位结果。XOR-进位单元的数目可以是1和B/O之间的任何数字。XOR-进位单元越少,产生计算所需要的步骤越多,但是硬件空间和复杂性更小。
在一些实施例中,XOR-进位单元可实施为组合逻辑树。在其它实施例中,XOR-进位单元的群集可以是具有反馈和顺序逻辑的部分树。应注意,其它实施例(例如,在所描述的单遍次和多遍次实施例之间)在本公开的范围内,并且这些实施例可以提供硬件复杂性和速度之间的权衡。
图6是根据本公开的各种实施例的操作存储器系统的实例方法600的流程图。方法600可根据本公开中描述的至少一个实施例布置。在一些实施例中,方法600可由装置或系统执行,例如由图1的系统100、图4的FMA单元400、图9的存储器系统900和/或图10的电子系统1000或另一装置或系统执行。尽管示出为离散块,但是依据所需实施方案,各个块可以划分成额外块,组合成更少的块,或被去除。
方法600可开始于框602:可在定序器处接收输入向量,并且方法600可进行到框604。例如,可包含一或多个位的输入向量可在存储器装置内(例如,感测电路系统内或附近)或存储器装置外部(例如,外部控制器内)的定序器处接收。更确切地说,例如,可包含来自输入矩阵的行的具有第一数字(例如,图2的矩阵A的第i行和第k列的数字a[i,k]的一或多个位的输入向量可以经由位线(例如,图4的位线407)在图4的定序器402处连续地接收。
在框604处,可以在FMA阵列处连续地接收矩阵的行的多个位,并且方法600可进行到框606。例如,可包含多个位的行可以连续读取并存储到一或多个FMA单元(例如,图4的FMA j、FMA j+1等)中。例如,行的每一位可以加载到专用FMA单元中(经由专用位线,如图4的位线408或位线410)。
在框606处,可使矩阵的行的多个位中的每一位乘以输入向量以产生中间行,并且方法600可进行到框608。例如,阵列404(见图4)可使矩阵B(见图2)的行的多个位中的每一位乘以输入向量(例如,图2的矩阵A的第i行和第k列的具有数字a[i,k]的一或多个位)以产生中间行
在框608处,可在定序器处接收至少一个额外输入向量,并且方法600可进行到框610。更确切地说,例如,可包含来自输入矩阵的行的具有第二数字(例如,图2的矩阵A的第i行和第k+1列的数字a[i,k+1])的一或多个位的所述至少一个额外输入向量可经由位线(例如,图4的位线407)在图4的定序器402处连续接收。
在框610处,可在FMA阵列处连续地接收矩阵的至少一个额外行的多个位,并且方法600可进行到框612。例如,可包含多个位的所述至少一个额外行可以连续读取并存储到一或多个FMA单元(例如,图4的FMA j、FMA j+1等)中。例如,所述至少一个额外行的每一位可以加载到专用FMA单元中(经由专用位线,如图4的位线408或位线410)。
在框612处,可使矩阵的所述至少一个额外行的多个位中的每一位乘以所述至少一个额外输入向量以更新中间行,并且方法600可进行到框614。例如,阵列404(见图4)可使矩阵B(见图2)的第二行的多个位中的每一位乘以额外输入向量(例如,来自图2的矩阵A的行的具有第二数字的一或多个位)以更新中间行。
在框614处,可基于中间行而产生输出行。例如,输出矩阵C(见图2)的输出行(例如,行c[i])可基于中间行产生,中间行可能已经更新多次(例如,在每次矩阵的额外行乘以额外输入向量时)。
在不脱离本公开的范围的情况下,可以对方法600进行修改、添加或省略。例如,方法600的操作可按照不同次序实施。此外,概述的操作和动作仅作为实例提供,并且在不偏离所公开的实施例的本质的情况下,其中一些操作和动作可以是任选的,组合成更少的操作和动作,或扩展到额外的操作和动作中。例如,在各种实施例中,可以产生额外输出行(例如,输出矩阵C的输出行;见图2)(例如,响应于额外的乘法运算)。
图7是根据本公开的各种实施例的操作存储器系统的实例方法700的流程图。方法700可根据本公开中描述的至少一个实施例布置。在一些实施例中,方法700可由装置或系统执行,例如由图1的系统100、图4的FMA单元400、图9的存储器系统900和/或图10的电子系统1000或另一装置或系统执行。尽管示出为离散块,但是依据所需实施方案,各个块可以划分成额外块,组合成更少的块,或被去除。
方法700可开始于框702:可将输入向量加载到定序器中,并且方法700可进行到框704。更确切地说,例如,可包含输入矩阵(例如,图2的矩阵A)的行的具有第一数字的一或多个位的输入向量可经由位线(例如,图4的位线407)连续地加载到图4的定序器402中。
在框704处,可将存储器装置的存储器阵列的第一行连续地加载到累加器中,并且方法700可进行到框706。例如,可包含多个位的行可以连续读取并存储到图4的一或多个累加器Acc中。例如,行的每一位可以加载到专用子累加器中(经由专用位线,如图4的位线408或位线410)。
在框706处,可在识别出具有高状态的位之前一直读取输入向量的一或多个位,并且方法700可进行到框708。例如,输入向量的所述一或多个位可以连续读取(例如,由图2的定序器402读取),直到识别出位值‘1’为止。此外,在一些实施例中,可以识别所识别位(即,具有高值的位)的位数字。
在框708处,可以交替方式连续地读取来自累加器的累加器位和存储器阵列的行的位,并且方法700可进行到框710。更确切地说,例如,在读取存储器阵列的第一行的位时,可从等于具有高状态的所识别位(即,在框706处识别出的位)的位数字的位数字开始读取累加器位。换句话说,读取第一累加器位(即,从所需位数字开始),读取来自第一行的第一位,读取第二累加器位,读取来自第一行的第二位,以此类推。
在框710处,针对从累加器读取的每一累加器位和从第一行读取的相关联位,可对所述累加器位、存储器阵列的行的第一位和进位位(例如,存储在FMA阵列内,如图4的阵列404)执行XOR-进位-累加运算以产生相关联位结果和经更新进位位,并且方法700可进行到框712。例如,经更新进位位可以存储在FMA阵列(例如,图4的阵列404)中。
在框712处,可基于经由对每一累加器位和第一行的相关联位执行的XOR-进位-累加运算产生的多个位结果而产生第一中间行。更确切地说,例如,每一XOR-进位-累加运算(即,在累加器位、第一行的相关联位和进位位上执行)可产生位结果,其中多个位结果可用于产生第一中间行。
在不脱离本公开的范围的情况下,可以对方法700进行修改、添加或省略。例如,方法700的操作可按照不同次序实施。此外,概述的操作和动作仅作为实例提供,并且在不偏离所公开的实施例的本质的情况下,其中一些操作和动作可以是任选的,组合成更少的操作和动作,或扩展到额外的操作和动作中。例如,在各种实施例中,第二输入向量可以加载到定序器中,和/或存储器阵列的第二行可以连续地加载到累加器中,并且可以基于第二输入向量和第二行而产生第二中间行。此外,在一些实施例中,输出矩阵的行可以基于第一中间行和第二中间行而产生。此外,在一些实施例中,每一位结果(即,每一XOR-进位-累加运算的结果)和/或每一进位位(例如,经更新进位位)可以进行存储。例如,位结果可以存储在累加器(例如,图4的累加器ACC)中,并且进位位可以存储在FMA阵列(例如,图4的阵列404)中。
图8是根据本公开的各种实施例的操作存储器系统的实例方法800的流程图。方法800可根据本公开中描述的至少一个实施例布置。在一些实施例中,方法800可由装置或系统执行,例如由图1的系统100、图4的FMA单元400、图9的存储器系统900和/或图10的电子系统1000或另一装置或系统执行。尽管示出为离散块,但是依据所需实施方案,各个块可以划分成额外块,组合成更少的块,或被去除。
方法800可开始于框802:可提取多个位群组中的多个数据位,并且方法800可进行到框804。例如,可以提取第一数据位群组中的第一数据位,可以提取第二数据位群组中的第二数据位,并且在一些实施例中,可以提取第二数据位群组中的第三数据位。此外,例如,数据位可经由一或多个位线被提取到邻近存储器阵列的电路系统(例如,定序器、累加器和/或一或多个感测放大器)。
在框804处,可对多个位执行一或多个运算,并且方法800可进行到框806。例如,经由所述电路系统执行的所述一或多个运算可包含一或多个XOR-进位-累加运算。
在框806处,可存储所述一或多个运算的结果。例如,所述结果可写入到一或多个存储器阵列(例如,一或多个存储器阵列的一或多个寄存器)。
在不脱离本公开的范围的情况下,可以对方法800进行修改、添加或省略。例如,方法800的操作可按照不同次序实施。此外,概述的操作和动作仅作为实例提供,并且在不偏离所公开的实施例的本质的情况下,其中一些操作和动作可以是任选的,组合成更少的操作和动作,或扩展到额外的操作和动作中。
此外,可以向本文所描述的各种实施例应用一或多个优化。例如,输入向量(例如,a_(i,k))位读取可被隐藏(例如,与行b_(k)位读取重叠),或者,输入向量(例如,a_(i,k))位可以位并行方式存储,因此可能仅需要单个读取。如果输入向量以位并行方式存储,那么定序器(例如,图4的定序器402)可以扫描所有输入向量位,并且仅执行与位值是‘1’的输入向量位的位置有关的运算。
此外,存储器阵列行(例如,行b_(k))和相关联副本到累加器(例如,图4的累加器ACC)的第一读取可能并不需要(例如,在对应于输入向量中的第一位‘1’的循环中)。此运算可在之后与第一XOR-进位-累加一起执行(例如,对应于输入向量中的第二位‘1’的循环)。因此,读取行(例如,行b_(k))、对所述行执行XOR-进位-累加运算以及存储结果的操作可基本上同时执行。这可使每一感测放大器需要一个寄存器,其中每一寄存器的宽度可取决于针对预见性序列要存储的位数目。
此外,可以使用更快的DRAM缓存(例如,高速缓存)(例如,包含单独的在感测放大器本地的小型DRAM阵列,其具有更小的位线负载和更小更快的单元)。例如,此阵列可包含电容DRAM阵列的一或多个行(例如,假设在存取其更快的部分以减少负载时,数据线可能与电容阵列的其余部分断开)。
此外,经由与感测放大器的同一行介接的多个阵列当中的数据扩展或复制(例如,分成一个平面上的两个半部、多个叠组等的DRAM阵列),可以使用复用。具有独立数据线路径的多个阵列可允许在单独路径上同时进行数据传递。例如,在行与平面上的阵列介接时,有可能重叠到一个阵列的写回和从另一阵列的读取。这可能需要在两个阵列当中扩展行(例如,行b_(k))(例如,奇数位存储在一个阵列上,偶数位存储在另一阵列上)。扩展模式可干扰存取模式(例如,如果输入向量使得仅偶数或仅奇数位是1)。但是,行的复制可以解决这个问题。在此情况下,行的往复读取/写回可为可能的,使得写回不在关键路径上。此外,向同一阵列上的两个行写入可有助于在行的写回期间初始化累加器(例如,相同的值可能会广播到两个或更多个行)。
另外,辨识和优化常见情况可能会减少乘法器的等待时间。例如,如果输入向量位为0,那么累加器可以初始化为0。如果输入向量位是1,那么行(例如,行b_(k))可以复制到累加器中。并且,如果输入向量是“独热”值,那么行可以复制到累加器中但在累加器中移位到对应于“独热”值在输入向量中的位置的位位置。此外,如果存储器阵列长度内的所有行当中位‘1’的最大位置已被定序器(例如,图4的定序器402)获知,那么定序器可使其循环仅限于所述长度内的位。
还公开一种存储器系统。根据各种实施例,所述存储器系统可包含存储器装置(例如,图1的存储器装置120),其包含一或多个存储器单元阵列。图9是根据本文所述的一或多个实施例实施的存储器系统900的简化框图。可包含例如半导体装置的存储器系统900包含存储器阵列902和FMA单元904,所述FMA单元可包含图4的FMA阵列404。可包含多个存储器组的存储器阵列902可包含多个存储器单元。
FMA单元904可以操作方式与存储器阵列902耦合,以便从存储器阵列902内的任何或所有存储器单元读取或对其写入。FMA单元904可配置成用于实施本文所公开的一或多个实施例。例如,在一些实施例中,根据本文中所公开的各种实施例,可包含定序器和感测放大器阵列的FMA单元904可配置成执行一或多个FMA运算。
还公开一种系统。根据各种实施例,所述系统可包含存储器装置,其包含多个存储器组,每一存储器组具有存储器单元阵列。每一存储器单元可包含存取晶体管和以可操作方式与存取晶体管耦合的存储元件。
图10是根据本文所述的一或多个实施例实施的电子系统1000的简化框图。电子系统1000包含至少一个输入装置1002,其可包含例如键盘、鼠标或触摸屏。电子系统1000进一步包含至少一个输出装置1004,例如监视器、触摸屏或扬声器。输入装置1002和输出装置1004不一定彼此分离。电子系统1000进一步包含存储装置1006。输入装置1002、输出装置1004和存储装置1006可耦合到处理器1008。电子系统1000进一步包含耦合到处理器1008的存储器装置1010。可包含图9的存储器系统900的存储器装置1010可包含存储器单元阵列。电子系统1000可包含例如计算、处理、工业或消费产品。例如但不限于,电子系统1000可包含个人计算机或计算机硬件组件、服务器或其它联网硬件组件、数据库引擎、入侵防御系统、手持装置、平板计算机、电子笔记本、相机、电话、音乐播放器、无线装置、显示器、芯片组、游戏、车辆或其它已知系统。
根据本文中所公开的各种实施例,相比于一些常规装置、系统和方法,在一或多个PIM计算中使用的数据可以重复使用(例如,跨越矩阵的行中的位)。因此,从一或多个存储器阵列的读取和/或对其的写入数目可以减少,这可以提高PIM操作的效率和/或速度和/或减少与PIM操作相关联的等待时间。
本公开的一或多个实施例包含一种操作存储器系统的方法。例如,方法可包含将输入向量加载到存储器装置中。所述方法还可包含识别所述输入向量中具有第一逻辑状态的每一位的位数字。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述方法可包含:对于存储器阵列的多个列中的每一列,从第一位数字开始,连续地从所述存储器阵列的所述列读取位;对于所述列中具有匹配所述输入向量的所识别位数字的位数字的每一位,对所述列的所述位、所述列的至少一个其它位和当前进位位执行运算,以产生相关联位结果和经更新进位位;以及存储位结果。
根据另一实施例,一种操作存储器系统的方法包含:将输入向量加载到存储器系统的定序器中,并识别所述输入向量中具有第一逻辑状态的每一位的位数字。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述方法可包含:对于所述存储器系统的存储器阵列的多个列中的每一列,从第一位数字开始,连续地从所述存储器阵列的所述列读取并在累加器中存储位;对于存储在所述累加器中且具有匹配所述输入向量的所识别位数字的位数字的每一累加器位,对所述累加器位、所述列的至少一个其它位和当前进位位执行XOR进位累加运算,以产生相关联位结果和经更新进位位;以及存储位结果。此外,所述方法可包含:基于经由多个XOR进位累加运算所产生的多个位结果,产生中间行。
在又一实施例中,一种方法可包含在定序器处接收输入向量。所述方法还可包含在融合乘加(FMA)阵列处连续地接收第一矩阵的行的多个位。此外,所述方法可包含:使所述第一矩阵的所述行的所述多个位中的每一位乘以所述输入向量,以产生中间行。此外,所述方法可包含在所述定序器处接收至少一个额外输入向量。并且,所述方法可包含在所述FMA阵列处连续地接收所述第一矩阵的至少一个额外行的多个位。另外,所述方法可包含:使所述至少一个额外行的所述多个位中的每一位乘以所述至少一个额外输入向量,以更新所述中间行。所述方法可进一步包含基于所述中间行,产生第二矩阵的输出行。
本公开的一些实施例包含一种存储器系统。所述存储器系统可包含:存储器阵列;以及耦合到所述存储器阵列的融合乘加(FMA)单元。所述FMA单元可包含配置成接收包含一或多个位的输入的定序器。所述FMA单元可进一步包含FMA阵列,其包含配置成从所述存储器阵列的行和列接收位的多个感测放大器。所述FMA单元配置成接收输入向量,连续地读取所述存储器阵列的所述列的多个位,并使所述存储器阵列的所述列的所述多个位中的每一位乘以所述输入向量的每一位并将乘法结果累加以产生中间结果。所述FMA单元还可配置成接收至少一个额外输入向量,连续地读取所述存储器阵列的所述列的额外多个位,使所述存储器阵列的所述列的所述额外多个位中的每一位乘以一个额外输入向量的至少每一位并将乘法结果累加以更新所述中间结果。此外,所述FMA单元可配置成基于所述中间结果,产生输出。
根据另一实施例,一种存储器系统可包含至少一个存储器阵列。所述存储器系统可配置成将输入向量加载到所述至少一个存储器阵列中,并识别所述输入向量中具有第一逻辑状态的每一位的位数字。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述存储器系统可配置成:对于所述至少一个存储器阵列的多个位群组中的每一位群组,从第一位数字开始,连续地从所述存储器阵列的所述位群组读取位。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述存储器系统可配置成:对于所述位群组中从匹配所述输入向量的所识别位数字的位数字开始的每一位,对所述位群组中的所述位、所述位群组中从所述第一位数字开始的至少一个其它位和当前进位位执行一或多个运算,以产生相关联位结果和经更新进位位。此外,对于所述输入向量中具有所述第一逻辑状态的每一位,所述存储器系统可配置成存储位结果。
本公开的额外实施例包含一种电子系统。所述电子系统可包含至少一个输入装置、至少一个输出装置,及可操作地耦合到所述输入装置和所述输出装置的至少一个处理器装置。所述电子系统还可包含至少一个存储器装置,所述存储器装置可操作地耦合到所述至少一个处理器装置且包含存储器单元阵列和耦合到所述存储器单元阵列的融合乘加(FMA)单元。所述FMA单元可配置成接收输入向量,并连续地读取第一矩阵的行的多个位。此外,所述FMA单元可配置成使所述第一矩阵的所述行的所述多个位中的每一位乘以所述输入向量以产生中间行。并且,所述FMA单元可配置成接收至少一个额外输入向量,并连续地读取所述第一矩阵的至少一个额外行的多个位。此外,所述FMA单元可配置成使所述至少一个额外行的所述多个位中的每一位乘以所述至少一个额外输入向量以更新所述中间行。另外,所述FMA单元可配置成基于所述中间行,产生输出。
根据惯例,图式中所示出的各种特征可能未按比例绘制。本公开中所呈现的图示不打算是任何特定设备(例如,装置、系统等等)或方法的实际视图,而是仅为用于描述本公开的各种实施例的理想化表示。因此,为了清晰起见,可以任意扩大或减小各种特征的尺寸。此外,为了清楚起见,可简化一些图。因此,图式可不描绘给定设备(例如,装置)的所有组件或特定方法的所有操作。
如本文中所使用,术语“装置”或“存储器装置”可包含具有存储器的装置,但不限于只具有存储器的装置。例如,装置或存储器装置可包含存储器、处理器和/或其它组件或功能。例如,装置或存储器装置可包含芯片上系统(SOC)。在一些实施例中,本文中所描述的计算方法可适用于储存装置,例如固态驱动器。因此,本文中所使用的术语“存储器装置”可包含存储装置。
本文中且尤其在所附权利要求书(例如,所附权利要求书的主体)中所使用的术语通常意图为“开放性”术语(例如,术语“包含(including)”应被解译为“包含但不限于”,术语“具有”应被解译为“至少具有”,术语“包含(includes)”应被解译为“包含但不限于”等)。
另外,如果意图特定数目的所引入权利要求叙述,则将在所述权利要求中明确叙述这种意图,且在不存在这种叙述的情况下,不存在这种意图。例如,为辅助理解,所附权利要求书可含有使用介绍性短语“至少一个”和“一或多个”来引入权利要求叙述。然而,此类短语的使用不应解释为暗示通过不定冠词“一(a/an)”引入权利要求叙述将含有如此引入的权利要求叙述的任何特定权利要求限于仅含有一个此类叙述的实施例,即使在同一个权利要求包含介绍性短语“一或多个”或“至少一个”和例如“一”的不定冠词时也如此(例如,“一”应被解译为意味“至少一个”或“一或多个”);这同样适用于使用定冠词来引入权利要求叙述的情况。如本文中所使用,术语“和/或”包含相关联所列项目中的一或多个的任何和所有组合。
此外,即使明确叙述了特定数目的所引入权利要求叙述,仍应理解,这种叙述通常应解释为至少是指叙述的数目(例如,没有其它修饰语的“两个叙述”的简单叙述、意味着至少两个叙述,或两个或更多个叙述)。此外,在使用类似于“A、B和C等等中的至少一个”或“A、B和C等等中的一或多个”的惯例的那些情况下,一般来说,此类结构意图仅包含A、仅包含B、仅包含C、共同包含A和B、共同包含A和C、共同包含B和C或共同包含A、B和C等等。例如,意图以这种方式解释术语“和/或”的使用。
另外,如本文中所使用,包含在权利要求书中,项目的列表(例如,以例如“中的至少一者”或“中的一或多者”的短语开始的项目的列表)中所使用的“或”指示包含性列表,使得例如A、B或C中的至少一者的列表意指A或B或C或AB或AC或BC或ABC(即,A和B和C)。并且,如本文中所使用,短语“基于”不应解释为对封闭条件集的参考。例如,在不脱离本公开的范围的情况下,描述为“基于条件A”的示范性步骤可基于条件A和条件B两者。换句话说,如本文所使用,短语“基于”应以与短语“至少部分地基于”相同的方式解释。
此外,术语“第一”、“第二”、“第三”等的使用在本文中不一定用于意味着元件的具体次序或数目。一般来说,术语“第一”、“第二”、“第三”等等用于作为通用标识符区分不同元件。在不存在术语“第一”、“第二”、“第三”等等意味着特定次序的表现的情况下,这些术语不应理解为意味着特定次序。此外,在不存在术语“第一”、“第二”、“第三”等等意味着元件的特定数目的表现的情况下,这些术语不应理解为意味着元件的特定数目。
上文所描述的和附图中所示出的本公开的实施例并不限制本公开的范围,所述范围涵盖于所附权利要求书和其合法等效物的范围内。任何等效实施例都在本公开的范围内。实际上,除本文中所展示和描述的例如所描述元件的替代适用组合的内容以外,对于所属领域的技术人员来说,本公开的各种修改将根据描述变得显而易见。此类修改和实施例也落入所附权利要求书和等效物的范围内。
Claims (27)
1.一种方法,其包括:
从第一位群组向邻近存储器阵列的电路系统提取第一位;
从位于第一位线上的第二位群组向所述电路系统提取第二位,所述第二位至少部分地基于所述第一位的逻辑值而提取;
从所述第二位群组向所述电路系统提取第三位;
至少部分地基于所述第一位群组中的所述第一位的逻辑值,在所述电路系统处对所述第二位或所述第三位或这两者执行一或多个运算;以及
将所述一或多个运算的第一结果写入到所述存储器阵列的一或多个寄存器。
2.根据权利要求1所述的方法,其中执行一或多个运算包括经由融合乘加(FMA)阵列或感测放大器阵列执行XOR-进位-累加运算。
3.根据权利要求1所述的方法,其进一步包括:
一次一个位地提取所述第一位群组且仅执行一次;
在所述一或多个寄存器中存储所述第一位群组中的每一位;
一次一个位地提取所述第二位群组且仅执行一次;以及
在所述一或多个寄存器中存储所述第二位群组中的每一位。
4.根据权利要求1所述的方法,其进一步包括:
从所述第一位群组向所述电路系统提取第四位;
从所述第二位群组向所述电路系统提取第五位,所述第五位至少部分地基于所述第四位的逻辑值而提取;
在所述电路系统处,对所述第五位、所述第二位或所述第三位或所有位及进位位执行一或多个额外运算;
将所述一或多个额外运算的第二结果写入到所述一或多个寄存器;以及
基于所述第二结果,更新所述进位位。
5.根据权利要求4所述的方法,其中提取所述第四位或第五位包括在对所述第一位或所述第二位或第三位或两者执行所述一或多个运算时提取所述第四位。
6.根据权利要求4所述的方法,其进一步包括:
从所述第一位群组向所述电路系统提取第六位;
从所述第二位群组向所述电路系统提取第七位,所述第七位至少部分地基于所述第六位的逻辑值而提取;
在所述电路系统处,对所述第七位、所述第五位、所述第三位、第二位、所述进位位或其任何组合执行至少一个额外运算;
将所述至少一个额外运算的第三结果写入到所述一或多个寄存器;以及
基于所述第三结果,更新所述进位位。
7.根据权利要求1所述的方法,其进一步包括:
其中对于所述第一位群组中具有第一逻辑值的每一位:
在提取至少一个其它位群组的至少一些位时,提取所述第二位群组的位;以及
对所述第二位群组中的至少一些执行一个运算,同时对所述至少一个其它位群组的至少一些位执行另一运算。
8.根据权利要求7所述的方法,其进一步包括将所述第一位群组中具有所述第一逻辑值和相关联位数字的位分割成输入位群组,其中对于所述输入位群组中的每一输入位群组:
利用至少一些其它输入位群组执行额外运算,以产生中间总结果;以及
基于所述中间总结果,产生总结果。
9.根据权利要求1所述的方法,其进一步包括基于所述第一结果,在配置成用于融合乘加(FMA)运算的阵列或感测放大器阵列或这两者中存储进位位。
10.根据权利要求1所述的方法,其中提取所述第一位包括将所述第一位提取到定序器中。
11.根据权利要求1所述的方法,其进一步包括将所述第二位存储到累加器中。
12.根据权利要求1所述的方法,其中提取所述第一位包括从包含所述第一位群组的第一矩阵提取所述第一位,并且提取所述第二位包括从包含所述第二位群组的第二矩阵提取所述第二位。
13.根据权利要求12所述的方法,其进一步包括将所述第一结果写入到第三矩阵。
14.根据权利要求1所述的方法,其中所述第一位群组和所述第二位群组中的每一个包括所述存储器阵列的列或行。
15.根据权利要求1所述的方法,其中执行所述一或多个运算包括基于所述第一位、所述第二位和存储在所述一或多个寄存器中的进位位而执行所述一或多个运算。
16.根据权利要求1所述的方法,其中向邻近所述存储器阵列的所述电路系统提取包括向邻近快闪存储器阵列、交叉点存储器阵列、易失性存储器阵列或其组合的所述电路系统提取。
17.一种系统,其包括:
至少一个存储器阵列,其配置成:
从第一位群组向邻近所述至少一个存储器阵列的电路系统加载第一数目个位;
经由所述至少一个存储器阵列的第一位线,从第二位群组向所述电路系统加载第二数目个位;
在所述电路系统处,对所述第一数目个位或所述第二数目个位或这两者执行一或多个运算;且
将所述一或多个运算的结果存储到所述至少一个存储器阵列。
18.根据权利要求17所述的系统,其中所述一或多个运算包括至少一个XOR-进位-累加运算。
19.根据权利要求17所述的系统,其进一步配置成仅加载一次所述第一数目个位和所述第二数目个位,并且基本上同时地对所述第一位群组、所述第二位群组或这两者的至少一些先前已读取位及进位位执行至少一个运算。
20.根据权利要求17所述的系统,其进一步配置成:
将所述第二位群组分隔成位子群组;且
读取一个位子群组中的位,同时读取另一位子群组中的至少一些其它位。
21.根据权利要求17所述的系统,其中所述电路系统包括:
定序器,其配置成从所述第一位群组接收所述第一数目个位;以及
多个感测放大器,其配置成从所述第二位群组接收所述第二数目个位。
22.根据权利要求21所述的系统,其中所述电路系统进一步包括耦合到所述多个感测放大器的累加器。
23.根据权利要求17所述的系统,其中所述至少一个存储器阵列包括快闪存储器阵列、交叉点存储器阵列或易失性存储器阵列。
24.一种系统,其包括:
至少一个输入装置;
至少一个输出装置;
至少一个处理器装置,其耦合到所述输入装置和所述输出装置;以及
至少一个存储器装置,其耦合到所述至少一个处理器装置且包括:
存储器单元阵列;以及
逻辑,其耦合到所述存储器单元阵列且配置成执行融合乘加运算,包含:
接收输入向量;
连续地读取第一矩阵的位群组中的多个位;
使所述第一矩阵的所述位群组中的所述多个位乘以所述输入向量以产生中间位群组;
接收至少一个额外输入向量;
连续地读取所述第一矩阵的至少一个额外位群组中的多个位;
使所述至少一个额外位群组中的所述多个位乘以所述至少一个额外输入向量以更新所述中间位群组;以及
基于所述中间位群组,产生输出。
25.根据权利要求24所述的系统,其进一步包括配置成接收所述输入向量和所述至少一个额外输入向量的定序器。
26.根据权利要求25所述的系统,其中所述定序器包括配置成执行微码的可编程定序器,所述微码包含存储在所述输入向量中的微码。
27.根据权利要求24所述的系统,其进一步包括至少一个累加器,所述累加器与所述存储器单元阵列和所述逻辑中的至少一个介接,且配置成接收所述第一矩阵或所述第二矩阵的所述位群组及所述第一矩阵或所述第二矩阵的所述至少一个额外位群组。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962896216P | 2019-09-05 | 2019-09-05 | |
US62/896,216 | 2019-09-05 | ||
US16/717,890 US11693657B2 (en) | 2019-09-05 | 2019-12-17 | Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems |
US16/717,890 | 2019-12-17 | ||
PCT/US2020/070418 WO2021046567A1 (en) | 2019-09-05 | 2020-08-17 | Methods for performing processing-in-memory operations on serially allocated data, and related memory devices and systems |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114391135A true CN114391135A (zh) | 2022-04-22 |
Family
ID=74851176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080062755.8A Pending CN114391135A (zh) | 2019-09-05 | 2020-08-17 | 用于对连续分配数据执行存储器内处理操作的方法及相关存储器装置和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11693657B2 (zh) |
EP (1) | EP4025997A4 (zh) |
KR (1) | KR20220054357A (zh) |
CN (1) | CN114391135A (zh) |
WO (1) | WO2021046567A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11436071B2 (en) | 2019-08-28 | 2022-09-06 | Micron Technology, Inc. | Error control for content-addressable memory |
US12008460B2 (en) * | 2019-09-05 | 2024-06-11 | Micron Technology, Inc. | Performing processing-in-memory operations related to pre-synaptic spike signals, and related methods and systems |
US20220229633A1 (en) | 2020-01-07 | 2022-07-21 | SK Hynix Inc. | Multiplication and accumulation(mac) operator and processing-in-memory (pim) device including the mac operator |
US11983508B2 (en) * | 2020-01-07 | 2024-05-14 | SK Hynix Inc. | Processing-in-memory (PIM) system and operating methods of the PIM system |
US11720354B2 (en) | 2020-01-07 | 2023-08-08 | SK Hynix Inc. | Processing-in-memory (PIM) system and operating methods of the PIM system |
US11385837B2 (en) | 2020-01-07 | 2022-07-12 | SK Hynix Inc. | Memory system |
US11829760B2 (en) * | 2020-01-07 | 2023-11-28 | SK Hynix Inc. | Processing-in-memory device and processing-in-memory system including the same |
US11500629B2 (en) | 2020-01-07 | 2022-11-15 | SK Hynix Inc. | Processing-in-memory (PIM) system including multiplying-and-accumulating (MAC) circuit |
US11908541B2 (en) | 2020-01-07 | 2024-02-20 | SK Hynix Inc. | Processing-in-memory (PIM) systems |
US11663000B2 (en) | 2020-01-07 | 2023-05-30 | SK Hynix Inc. | Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator |
US11847451B2 (en) | 2020-01-07 | 2023-12-19 | SK Hynix Inc. | Processing-in-memory (PIM) device for implementing a quantization scheme |
US11635911B2 (en) | 2020-01-07 | 2023-04-25 | SK Hynix Inc. | Processing-in-memory (PIM) system and operating methods of the PIM system |
TW202141290A (zh) * | 2020-01-07 | 2021-11-01 | 韓商愛思開海力士有限公司 | 記憶體中處理(pim)系統和pim系統的操作方法 |
US11704052B2 (en) | 2020-01-07 | 2023-07-18 | SK Hynix Inc. | Processing-in-memory (PIM) systems |
US11900161B2 (en) * | 2020-03-24 | 2024-02-13 | Advanced Micro Devices, Inc. | Memory allocation for processing-in-memory operations |
US11989553B2 (en) * | 2020-05-06 | 2024-05-21 | Intel Corporation | Technologies for performing sparse lifting and procrustean orthogonal sparse hashing using column read-enabled memory |
US11244718B1 (en) * | 2020-09-08 | 2022-02-08 | Alibaba Group Holding Limited | Control of NAND flash memory for al applications |
KR20220141970A (ko) * | 2021-04-14 | 2022-10-21 | 에스케이하이닉스 주식회사 | Mac 연산 동작을 수행하는 반도체 장치 |
US12032829B2 (en) | 2021-07-21 | 2024-07-09 | Samsung Electronics Co., Ltd. | Memory device performing in-memory operation and method thereof |
KR102482728B1 (ko) * | 2022-07-06 | 2022-12-29 | 주식회사 스퀴즈비츠 | 비트 시리얼 연산 방법 및 컴퓨터 기록 매체 |
Family Cites Families (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
KR100280518B1 (ko) * | 1998-11-10 | 2001-03-02 | 김영환 | 동기 에스램 회로 |
US7852671B2 (en) | 2008-10-30 | 2010-12-14 | Micron Technology, Inc. | Data path for multi-level cell memory, methods for storing and methods for utilizing a memory array |
US8458442B2 (en) * | 2009-08-26 | 2013-06-04 | International Business Machines Corporation | Method and structure of using SIMD vector architectures to implement matrix multiplication |
US8984043B2 (en) | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
WO2013077845A1 (en) | 2011-11-21 | 2013-05-30 | Intel Corporation | Reducing power consumption in a fused multiply-add (fma) unit of a processor |
US9430735B1 (en) | 2012-02-23 | 2016-08-30 | Micron Technology, Inc. | Neural network in a memory device |
KR101975534B1 (ko) | 2012-09-11 | 2019-05-07 | 삼성전자주식회사 | 연산기능을 갖는 반도체 메모리 장치 |
US9779792B2 (en) | 2013-06-27 | 2017-10-03 | Advanced Micro Devices, Inc. | Register file with read ports clustered by entry |
US9449674B2 (en) | 2014-06-05 | 2016-09-20 | Micron Technology, Inc. | Performing logical operations using sensing circuitry |
US10074407B2 (en) | 2014-06-05 | 2018-09-11 | Micron Technology, Inc. | Apparatuses and methods for performing invert operations using sensing circuitry |
US9496023B2 (en) | 2014-06-05 | 2016-11-15 | Micron Technology, Inc. | Comparison operations on logical representations of values in memory |
US9704540B2 (en) | 2014-06-05 | 2017-07-11 | Micron Technology, Inc. | Apparatuses and methods for parity determination using sensing circuitry |
CN106406810B (zh) | 2014-07-02 | 2019-08-06 | 上海兆芯集成电路有限公司 | 微处理器及其方法 |
US9373408B2 (en) | 2014-10-07 | 2016-06-21 | SanDisk Technologies, Inc. | Highly linear analog-to-digital converter and method for nonvolatile memory |
US10192162B2 (en) | 2015-05-21 | 2019-01-29 | Google Llc | Vector computation unit in a neural network processor |
US9704541B2 (en) | 2015-06-12 | 2017-07-11 | Micron Technology, Inc. | Simulating access lines |
CN116842306A (zh) * | 2016-03-23 | 2023-10-03 | Gsi 科技公司 | 存储器内矩阵乘法及其在神经网络中的使用 |
KR102481418B1 (ko) | 2016-06-07 | 2022-12-26 | 목원대학교 산학협력단 | 단일 곱셈-누산 방법 및 장치 |
US10416896B2 (en) | 2016-10-14 | 2019-09-17 | Samsung Electronics Co., Ltd. | Memory module, memory device, and processing device having a processor mode, and memory system |
US10140092B2 (en) | 2016-11-04 | 2018-11-27 | Samsung Electronics Co., Ltd. | Closepath fast incremented sum in a three-path fused multiply-add design |
US10311191B2 (en) | 2017-01-26 | 2019-06-04 | Advanced Micro Devices, Inc. | Memory including side-car arrays with irregular sized entries |
US10482929B2 (en) | 2017-07-13 | 2019-11-19 | Qualcomm Incorporated | Non-volative (NV) memory (NVM) matrix circuits employing NVM matrix circuits for performing matrix computations |
JP2019028569A (ja) | 2017-07-26 | 2019-02-21 | 株式会社東芝 | メモリシステム、半導体記憶装置及び信号処理システム |
US10416927B2 (en) | 2017-08-31 | 2019-09-17 | Micron Technology, Inc. | Processing in memory |
US10878317B2 (en) | 2017-09-11 | 2020-12-29 | Samsung Electronics Co., Ltd. | Method and system for performing analog complex vector-matrix multiplication |
US11127460B2 (en) | 2017-09-29 | 2021-09-21 | Crossbar, Inc. | Resistive random access memory matrix multiplication structures and methods |
KR102592146B1 (ko) | 2017-11-06 | 2023-10-20 | 삼성전자주식회사 | 시냅스 가중치 학습을 위한 뉴런 회로, 시스템 및 방법 |
US10635398B2 (en) | 2018-03-15 | 2020-04-28 | Macronix International Co., Ltd. | Voltage sensing type of matrix multiplication method for neuromorphic computing system |
US10692570B2 (en) * | 2018-07-11 | 2020-06-23 | Sandisk Technologies Llc | Neural network matrix multiplication in memory cells |
US10643705B2 (en) | 2018-07-24 | 2020-05-05 | Sandisk Technologies Llc | Configurable precision neural network with differential binary non-volatile memory cell structure |
US11309334B2 (en) | 2018-09-11 | 2022-04-19 | iCometrue Company Ltd. | Logic drive using standard commodity programmable logic IC chips comprising non-volatile random access memory cells |
US10642922B2 (en) * | 2018-09-28 | 2020-05-05 | Intel Corporation | Binary, ternary and bit serial compute-in-memory circuits |
US10877752B2 (en) | 2018-09-28 | 2020-12-29 | Intel Corporation | Techniques for current-sensing circuit design for compute-in-memory |
US11061646B2 (en) | 2018-09-28 | 2021-07-13 | Intel Corporation | Compute in memory circuits with multi-Vdd arrays and/or analog multipliers |
US10748603B2 (en) * | 2018-09-28 | 2020-08-18 | Intel Corporation | In-memory multiply and accumulate with global charge-sharing |
US10497442B1 (en) * | 2018-11-15 | 2019-12-03 | Hewlett Packard Enterprise Development Lp | Memristor arrays in crossbars |
KR102703432B1 (ko) | 2018-12-31 | 2024-09-06 | 삼성전자주식회사 | 메모리 장치를 이용한 계산 방법 및 이를 수행하는 메모리 장치 |
US11423979B2 (en) | 2019-04-29 | 2022-08-23 | Silicon Storage Technology, Inc. | Decoding system and physical layout for analog neural memory in deep learning artificial neural network |
US10998037B2 (en) | 2019-05-07 | 2021-05-04 | Memryx Incorporated | Memory processing units and methods of computing dot products |
US11934824B2 (en) | 2019-09-05 | 2024-03-19 | Micron Technology, Inc. | Methods for performing processing-in-memory operations, and related memory devices and systems |
US11568200B2 (en) | 2019-10-15 | 2023-01-31 | Sandisk Technologies Llc | Accelerating sparse matrix multiplication in storage class memory-based convolutional neural network inference |
-
2019
- 2019-12-17 US US16/717,890 patent/US11693657B2/en active Active
-
2020
- 2020-08-17 WO PCT/US2020/070418 patent/WO2021046567A1/en unknown
- 2020-08-17 EP EP20861279.6A patent/EP4025997A4/en not_active Withdrawn
- 2020-08-17 CN CN202080062755.8A patent/CN114391135A/zh active Pending
- 2020-08-17 KR KR1020227010043A patent/KR20220054357A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
EP4025997A1 (en) | 2022-07-13 |
US11693657B2 (en) | 2023-07-04 |
KR20220054357A (ko) | 2022-05-02 |
US20210072986A1 (en) | 2021-03-11 |
EP4025997A4 (en) | 2023-10-11 |
WO2021046567A1 (en) | 2021-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11693657B2 (en) | Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems | |
US12019895B2 (en) | Apparatuses and methods for data movement | |
US11775313B2 (en) | Hardware accelerator for convolutional neural networks and method of operation thereof | |
US12067401B2 (en) | Stream processor with low power parallel matrix multiply pipeline | |
CN111630502B (zh) | 用于神经网络处理器的统一存储器组织 | |
JP6216878B2 (ja) | メモリ用の除算演算 | |
US20230418503A1 (en) | Apparatuses and methods for memory alignment | |
US11934824B2 (en) | Methods for performing processing-in-memory operations, and related memory devices and systems | |
US11977600B2 (en) | Machine learning architecture support for block sparsity | |
CN103810111A (zh) | 有源存储器件中的地址生成的方法及其处理元件 | |
Lee et al. | ComPEND: Computation Pruning through Early Negative Detection for ReLU in a deep neural network accelerator | |
US20230259282A1 (en) | Core group memory processsing unit architectures and configurations | |
EP4025991A1 (en) | Spatiotemporal fused-multiply-add, and related systems, methods and devices | |
US20230013611A1 (en) | Memory device for performing in-memory processing | |
US11941371B2 (en) | Bit string accumulation | |
US20230289398A1 (en) | Efficient Matrix Multiply and Add with a Group of Warps | |
US20240272821A1 (en) | Core group memory processsing chip design | |
US20240272797A1 (en) | Core group memory processing with multi-precision weight packing | |
US20240070223A1 (en) | Increased computation efficiency with multi-stage 8-bit floating point matrix multiplication with format conversion | |
US20230177106A1 (en) | Computational circuit with hierarchical accumulator | |
Makino et al. | The performance of GRAPE-DR for dense matrix operations | |
KR20240118633A (ko) | 메모리 장치 및 그 동작 방법 | |
CN116149602A (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 |