CN110325988A - 关联存储器设备中的稀疏矩阵乘法 - Google Patents
关联存储器设备中的稀疏矩阵乘法 Download PDFInfo
- Publication number
- CN110325988A CN110325988A CN201880013079.8A CN201880013079A CN110325988A CN 110325988 A CN110325988 A CN 110325988A CN 201880013079 A CN201880013079 A CN 201880013079A CN 110325988 A CN110325988 A CN 110325988A
- Authority
- CN
- China
- Prior art keywords
- column
- matrix
- calculating
- value
- multiplier
- 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.)
- Granted
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 142
- 238000000034 method Methods 0.000 claims abstract description 49
- 239000013598 vector Substances 0.000 claims description 64
- 238000007792 addition Methods 0.000 claims description 7
- 230000004913 activation Effects 0.000 claims description 2
- 239000000284 extract Substances 0.000 claims description 2
- 101100328884 Caenorhabditis elegans sqt-3 gene Proteins 0.000 description 20
- 238000010586 diagram Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 11
- 101100328886 Caenorhabditis elegans col-2 gene Proteins 0.000 description 7
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 229940050561 matrix product Drugs 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 238000011017 operating method Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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
- 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/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
一种用于在关联存储器设备中将第一稀疏矩阵与第二稀疏矩阵相乘的方法包括将同第二稀疏矩阵中的每个非零元素相关的被乘数信息存储在关联存储器设备的计算列中;被乘数信息至少包括被乘数值。根据第一线性代数规则,该方法将同第一稀疏矩阵中的非零元素相关的乘数信息与第一稀疏矩阵中的非零元素的相关联的被乘数中的每一个进行关联,乘数信息至少包括乘数值。该方法同时地将乘数信息存储在每个相关联的被乘数的计算列中。该方法在所有的计算列上,同时地将乘数值与该乘数值的相关联的被乘数值相乘,以在计算列中提供乘积;并且将根据第二线性代数规则关联的来自计算列的乘积相加在一起以提供结果矩阵。
Description
相关申请的交叉引用
本申请要求享有于2017年1月22日提交的美国临时专利申请62/449,036的优先权和权益,其通过引用方式合并于此。
技术领域
本发明总体上涉及关联存储器设备,并且特别涉及将稀疏矩阵相乘的总体高效的方法。
背景技术
矩阵乘法(矩阵乘积)根据两个矩阵A和B产生矩阵C。如果A是n×m矩阵并且B是m×p矩阵,则它们的矩阵乘积AB是n×p矩阵,其中将跨A的行的m个条目与沿着B的列向下的m个条目相乘并求和以产生AB的条目,即,乘积矩阵C中的每个i、j条目通过将条目Aik(跨A的行i)与条目Bkj(沿着B的列j向下)相乘给出,其中k=1,2,……,m,并且根据等式1在k上对结果求和:
计算矩阵乘积是许多算法中的中心运算,并且可能是耗时的。已经开发了用于计算乘法的各种算法,尤其是对于提供复杂度O(mnp)的大矩阵。
在整个申请中,用粗体大写字母表示矩阵,例如,A;用粗体小写字母表示向量,例如,a;以及用斜体字体表示向量和矩阵的条目,例如,A和a。因此,矩阵A的i、j条目由Aij表示,以及向量a的条目i由ai表示。
另外,在整个申请中,乘法的操作数可以称为“乘数”和“被乘数”,并且每个操作数的值可以源自矩阵或向量。
发明内容
根据本发明的优选实施例,提供了一种用于在关联存储器设备中将第一稀疏矩阵与第二稀疏矩阵相乘的方法。该方法包括将同第二稀疏矩阵中的每个非零元素相关的被乘数信息存储在关联存储器设备的计算列中;被乘数信息至少包括被乘数值。根据第一线性代数规则,该方法将同第一稀疏矩阵中的非零元素相关的乘数信息与第一稀疏矩阵中的非零元素的相关联的被乘数中的每一个进行关联,乘数信息至少包括乘数值。该方法同时地将乘数信息存储在每个相关联的被乘数的计算列中。该方法在所有的计算列上,同时地将乘数值与该乘数值的相关联的被乘数值相乘,以在计算列中提供乘积,并且将根据第二线性代数规则关联的来自计算列的乘积相加在一起以提供结果矩阵。
进一步地,根据本发明的优选实施例,信息还包括行索引和列索引。
更进一步地,根据本发明的优选实施例,第一线性代数规则包括乘数的行索引等于被乘数的列索引。
此外,根据本发明的优选实施例,第二线性代数规则包括根据在计算列中的被乘数的列索引。
此外,根据本发明的优选实施例,第一稀疏矩阵是密集向量,并且结果矩阵是向量。
更进一步地,根据本发明的优选实施例,第一稀疏矩阵中的每一行是向量,并且每个向量是分开计算的,并且第二线性代数规则还包括根据在计算列中的乘数的相等的行索引。
另外,根据本发明的优选实施例,关联包括同时地搜索与第一稀疏矩阵中的每个乘数相关联的所有计算列。
此外,根据本发明的优选实施例,同时地搜索还包括针对第一稀疏矩阵中的每一行,该方法同时地将乘数的列索引与所有计算列的行索引进行比较,并且对具有与列索引相同的行索引的所有计算列进行标记。
此外,根据本发明的优选实施例,相加还包括同时地搜索具有相同列索引的所有计算列,并且计算具有相同列索引的计算列中的所有乘积的总和。
根据本公开的优选实施例,提供了一种用于将第一稀疏矩阵与第二稀疏矩阵相乘的系统。该系统包括以行和计算列布置的关联存储器阵列、数据组织器、乘法单元和加法器。数据组织器将关于乘数和被乘数的每个对的数据存储在计算列中,该数据至少包括值以及根据第一线性代数规则关联的乘数和被乘数。乘法单元同时地激活所有的计算列,其中激活在每个计算列中提供在乘数的值与被乘数的值之间的乘法运算的乘积。加法器在相关联的计算列中同时地对乘积进行相加。
此外,根据本发明的优选实施例,数据还包括行索引和列索引。
更进一步地,相关联的计算列共享第二稀疏矩阵的列。
根据本发明的优选实施例,提供了一种用于在关联存储器设备中将向量与稀疏矩阵相乘的方法。该方法针对稀疏矩阵中的每个非零矩阵元素,在关联存储器设备的计算列中存储矩阵元素的矩阵值、矩阵元素的矩阵行索引以及矩阵元素的矩阵列索引。该方法还将来自向量中的向量索引的向量值存储在具有与向量位置相同的矩阵行索引的计算列中。在所有计算列中,该方法同时地将矩阵值与向量值相乘以创建乘积,并且将计算列中具有相同矩阵列索引的所有乘积相加在一起以提供结果向量。
此外,根据本发明的优选实施例,在存储向量值时,该方法同时地对具有与每个向量索引相同的矩阵行索引的所有计算列进行搜索,并且同时地将来自向量索引的向量值存储在通过搜索找到的所有计算列中。
根据本发明的优选实施例,提供了一种在存储器内与稀疏矩阵进行相乘的方法。该方法包括将稀疏矩阵中的每个非零元素表示为值和至少一个索引。该方法还包括从非零元素中选择乘数并且提取所选定的乘数的乘数索引。该方法包括对具有匹配的被乘数索引的被乘数进行搜索。该方法并行地将该乘数分配给被乘数的列,并且该方法并行地将乘数与被乘数相乘,并且将来自所有列的乘法结果相加。
附图说明
在说明书的结论部分中特别指出并清楚地要求保护被视为本发明的主题。然而,当结合附图阅读时,通过参考以下详细描述,可以关于组织和操作方法以及其目的、特征和优点两者最好地理解本发明,在附图中:
图1是根据本发明的优选实施例构造并操作的矩阵乘法器系统的示意图;
图2是由图1的矩阵乘法器系统计算出的示例性稀疏矩阵、示例性密集向量和示例性结果向量的示意图;
图3是在存储器阵列中与稀疏矩阵相关的数据的布置的示意图:
图4、图5和图6是在存储器阵列中与密集向量相关的数据的布置的示意图;
图7是在存储器阵列内执行的乘法运算的示意图;
图8是在存储器阵列内执行的求和运算的示意图;
图9是描述图1的矩阵乘法器系统将稀疏矩阵与密集向量相乘的操作的示意流程;
图10是具有其存储器表示的两个示例性稀疏矩阵和具有其存储器表示的预期的结果矩阵的示意图;
图11是描述用于将两个稀疏矩阵相乘所执行的步骤的流程的示意图;
图12-38是在根据图11的流程将两个示例性稀疏矩阵相乘时由图1的矩阵乘法器系统执行的步骤的示意图;
图39是具有其存储器表示的示例性稀疏向量和示例性密集矩阵的示意图;以及
图40、图41和图42是在将图39的稀疏向量和密集矩阵相乘时由图1的矩阵乘法器系统执行的步骤的示意图。
应该认识到的是,为了说明的简洁和清楚,附图中所示的元素不一定按比例绘制。例如,为了清楚起见,元素中的一些的尺寸可能相对于其他元素被夸大。此外,在认为适当的情况下,可以在附图中重复附图标记以指示对应的或类似的元素。
具体实施方式
在以下详细描述中,阐述了许多具体细节以便于提供对本发明的透彻理解。然而,本领域技术人员将理解的是,可以在没有这些具体细节的情况下实践本发明。在其他实例中,没有详细描述公知的方法、过程和组件,以免模糊本发明。
申请人已经认识到,密集向量与稀疏矩阵(即,其中许多条目值为0的矩阵)的乘法可以在关联存储器中以O(n+logβ)的复杂度来完成,其中β是稀疏矩阵中非零元素的数量,以及n是密集向量的大小。当维度n远远小于维度m(n<<m)时,由于n可以忽略不计并且复杂度不依赖于大的维度m,所以计算的复杂度可以近似为O(logβ)。
申请人还已经认识到,两个稀疏矩阵(这两个矩阵中的许多条目等于0)的乘法可以以O(β+logβ)的复杂度来完成,其中β是稀疏矩阵中非零元素的数量,并且可以同样高效地执行稀疏向量与密集向量的相乘。
申请人已经认识到,由于只有矩阵或向量中的非零元素对乘法的结果有影响,所以只需要将这些元素存储在关联阵列中同时仍然提供乘法的正确结果。申请人还已经认识到,矩阵中的非零元素可以根据线性代数规则存储在计算列中,使得每个乘法运算中的被乘数和乘数可以存储在相同的计算列中。可以认识到的是,当来自矩阵的值在多于一个乘法运算中使用时,其可以存储在多个计算列中。
现在参考的图1是根据本发明的优选实施例构造并操作的矩阵乘法器系统100的示意图。矩阵乘法器系统100包括稀疏矩阵处置器110和关联存储器阵列120。稀疏矩阵处置器110可以包括用于执行等式1中定义的计算的数据组织器114、乘法单元116和加法器118。
关联存储器阵列120可以存储执行乘法所需要的信息并且可以是多用途关联存储器设备,例如,在以下专利中描述的那些:美国专利第8,238,173号(题为“USING STORAGECELLS TO PERFORM COMPUTATION”);美国专利公开第US-2015-0131383号(题为“NON-VOLATILE IN-MEMORY COMPUTING DEVICE”);美国专利第9,418,719号(题为“IN-MEMORYCOMPUTATIONAL DEVICE”);美国专利第9,558,812号(题为“SRAM MULTI-CELLOPERATIONS”)和美国专利申请15/650,935(题为“IN-MEMORY COMPUTATIONAL DEVICE WITHBIT LINE PROCESSORS”),这些专利都转让给本发明的共同受让人并通过引用方式合并于此。
数据组织器114可以将任何稀疏矩阵存储在关联存储器阵列120的若干行中,使得仅存储非零元素,这些非零元素具有其在原始稀疏矩阵中的位置的指示。存储的一个示例可以利用关联存储器阵列120中的三行,使得一行可以用于存储矩阵的非零值,一行可以用于存储非零值的列索引,以及一行可以用于存储非零值的行索引。使用该架构,矩阵中的每个非零元素可以存储在关联存储器阵列120的一列中,该列也可以称为计算列;然而,还可以利用以计算列表示稀疏矩阵的其他方式,例如,经由列基和与基表示的偏移,以及提供元素在矩阵中的原始位置的任何其他表示。
现在参考的图2是示例性稀疏矩阵200、示例性密集向量220以及存储稀疏矩阵200与密集向量220相乘的结果的示例性结果向量240的示意图。
稀疏矩阵200具有四个非零元素:元素202,其具有存储在矩阵200的行2、列1中的值3;元素204,其具有存储在矩阵200的行3、列2中的值5;元素206,其具有存储在矩阵200的行4、列2中的值9;以及元素208,其具有存储在矩阵200的行4、列4中的值17。密集向量220包含在第一位置中的值4、在第二位置中的值-2、在第三位置中的值3以及在第四位置中的值-1。可以认识到的是,密集向量220与稀疏矩阵200的乘法可以通过对下面的等式1应用矩阵和向量的值来表示:
4*0+-2*3+3*0+-1*0=-6
4*0+-2*0+3*5+-1*9=15–9=6
4*0+-2*0+3*0+-1*0=0
4*0+-2*0+3*0+-1*17=-17
结果向量240可以包含在第一位置中的值-6、在第二位置中的值6、在第三位置中的值0以及在第四位置中的-17。
现在参考的图3是存储器阵列120用于执行图2的密集向量与稀疏矩阵的乘法的示例性用法的示意图。
数据组织器114可以在以下3行中将稀疏矩阵200中的每个元素存储在存储器阵列120A的计算列中:M-val行352可以存储矩阵200中的非零元素的值,C-indx行354可以存储非零元素的列索引,以及R-indx行356可以存储非零元素的行索引。例如,矩阵200中的元素202存储在存储器阵列120A的计算列Col-1中。元素202的值(其为3)存储在M-val行352中的Col-1中。元素202的列索引(其为1)存储在C-indx行354中的Col-1中,以及元素202的行索引(其为2)存储在R-indx行356中。
数据组织器114可以如现在参考的图4所示进一步地将密集向量存储在存储器阵列120B的行V-val 402中。图4示出了具有附加行V-val的图3的所有值。数据组织器114可以将密集向量220的每行i的数据值分配给存储器阵列120B中的在其R-indx行中具有相同行值i的所有计算列。
首先,数据组织器114可以在行R-indx的每个计算列Col-k中查找为1的行值。在该示例中,在行R-indx中没有值为1的计算列Col-k。接下来,数据组织器114可以在行R-indx的每个计算列Col-k中查找为2的行值。数据组织器114可以将Col-1识别为具有值2,如由虚线410所指示的,并且可以将数据值(其为-2)写入计算列Col-1的行V-val中,如由箭头420所指示的。
在图5中,数据组织器114可以在计算列Col-2中找到下一行值3,如由虚线510所指示的,并且可以将存储在密集向量220的第三位置中的数据值写入行V-val的Col-2中,如由箭头520所指示的。最后,在图6中,数据组织器114可以在计算列Col-3和Col-4中找到下一行值4,如由虚线610和611分别指示的,并且可以将存储在密集向量220的第四位置中的数据值写入行V-val的计算列Col-3和Col-4中,如由箭头620和621分别指示的。
将要认识到的是,一些数据值没有存在于所有附图的图示中,以免模糊操作的细节;然而,这些值存在于存储器阵列120中。
现在参考的图7是乘法运算的示意图。可以认识到的是,针对向量矩阵乘法运算的每个步骤的乘数和被乘数存储在存储器阵列120C的同一计算列中。(图1中的)乘法单元116可以在所有的计算列中同时地将存储在M-val中的值与存储在V-val中的值相乘,并且将结果存储在Prod行中。存储在Col-1的M-val中的值是3,存储在Col-1的V-val中的值是-2,并且乘法结果3*(-2)=(-6)存储在Col-1的Prod行中。类似地,在Col-2的Prod行中,存储值5*3=15,在Col-3的Prod行中,存储值9*(-1)=(-9),以及在Col-4的Prod行中,存储值17*(-1)=(-17)。
现在参考的图8是在等式1中所描述的矩阵向量乘法运算期间由加法器118完成的求和运算的示意图。加法器118可以对Prod行中的对其而言在行C-indx行中的列值相同的所有元素求和,并且可以将和存储在对应列的Out行中,即,加法器118可以在行C-indx中查找具有相同列值j的所有计算列Col-k,可以将存储在对应列的行Res中的值相加,并且可以将结果存储在Col-j的行Out中。
加法器118可以使用对属于同一列(即,具有相同的C-indx)的对应值进行的移位和加法运算来计算和。
例如,存储在Col-2和Col-3两者的行C-indx中的列值为2(用圆圈标记),其指示存储在关联存储器阵列120C的这些计算列的M-val行中的值源自原始稀疏矩阵200的同一列。根据等式1,应该对相同列中的乘法结果相加;因此,加法器118可以在列Col-2的Out行802中写入相关列中的Res值的和。
加法器118可以将源自稀疏矩阵200的每列中的所有项的和写入Out行中的适当列。在图2的示例中,稀疏矩阵200的列1中仅存在一个值,该值存储在关联存储器阵列120C的Col-1中。因此,存储在Col-1的Prod行中的值-6将按原样复制到Out行。因此,加法器118可以将在那些对其而言在C-indx行中只有一个列值的计算列(例如,列1和列4)中将值从Prod行复制到Out行。否则,加法器118可以针对在其C-indx行中具有相同列值的计算列将结果值相加。
可以认识到的是,Out行是稀疏矩阵与密集向量相乘的结果。
现在参考的图9是描述系统100将稀疏矩阵与密集向量相乘的操作的示意流程900。在910中,对于稀疏矩阵中的每个非零元素,数据组织器114可以在同一列中存储以下值:将非零值存储在M-Val行中,将值在原始矩阵中的列索引存储在C-indx行中,以及将在原始矩阵中的行索引存储在R-indx行中。
在步骤920中,数据组织器114可以将密集向量的第k个元素的数据值写入存储来自稀疏矩阵的第k行的元素的所有列的行V-val中。在步骤930中,乘法单元116可以在所有计算列中同时地将被乘数M-val的值与乘数V-val的值相乘,并且可以将结果存储在Prod行中。在步骤940中,加法器118可以将存储在Prod行中的源自稀疏矩阵中同一列的值(即,在行C-indx中具有相同列值的项)加在一起。
本领域技术人员可以认识到的是,流程900中示出的步骤不旨在是限制性的,并且可以这样实践该流程:利用更多或更少的步骤,或者利用步骤的不同序列,或者每个步骤具有更多或更少的功能或其任何组合。
还可以认识到的是,当稀疏矩阵与密集向量相乘时,如上文所描述的存储单个稀疏矩阵的技术可以用于将两个稀疏矩阵相乘。现在参考的图10是具有其存储器表示Mem-M1和Mem-M2的两个示例性矩阵M1和M2以及作为乘法的预期结果M3=M2*M1的矩阵M3的示意图。Mem-M1和Mem-M2占据图1的存储器阵列120的行和计算列。
现在参考的图11是流程1100的示意图,其中执行用于将在存储器阵列120中存储在位置Mem-M1和Mem-M2中的两个稀疏矩阵M1和M2相乘的步骤。
在步骤1110中,数据组织器114可以在Mem-M1中定位下一个未标记的计算列。在步骤1120中,数据组织器114可以对Mem-M1中具有与在所定位的计算列中的值相同的R-indx值的所有项目进行标记。在步骤1130中,数据组织器114可以选择新标记的计算列中的一个作为当前的计算列。在步骤1140中,数据组织器114可以将Val-M1的值从Mem-M1中的当前的计算列复制到Mem-M2的在R-indx中具有与Mem-M1中的当前项的C-indx的值相等的值的所有计算列中的Val-M1。
在步骤1150中,数据组织器114可以检查是否已经处理了所有新选定的项。如果仍然有未处理的项,则数据组织器114可以返回到步骤1130。在步骤1160中,乘法单元116可以并行地将Val-M1的值与Mem M2中的Val-M2的值相乘,从而提供M1的行和M2的列的M1ik×M2kj的结果。在步骤1170中,加法器118可以将所有乘法结果相加从而提供等式1的求和;并且在步骤1180中,加法器118可以将结果复制到输出表Mem-M3。在步骤1190中,数据组织器114可以检查是否已经处理了所有计算列。如果Mem-M1中存在未被标记为已处理的计算列,则数据组织器114可以返回到步骤1110,否则,可以在步骤1195中完成操作,并且可以根据存储在Mem-M3中的信息以关于图3(其描述如何存储矩阵)所描述的操作的反向操作来创建结果矩阵M3。
下面提供与图11的流程相关的伪代码:
对流程1100以及伪代码的描述是出于示例性目的的,并且本领域技术人员可以认识到的是,可以在具有变型的情况下来实践该流程。这些变型可以包括更多步骤、更少步骤、改变步骤序列、跳过步骤以及对于本领域技术人员显而易见的其他变型。
现在参考的图12-36示意性示出了根据流程1100将两个示例性稀疏矩阵相乘的步骤。在图12中,数据组织器114可以在Mem-M1中找到下一个未标记的计算列(其为Col-1)。接下来,在图13中,数据组织器114可以读取找到的计算列的R-indx的值(其为1)。接下来,在图14中,数据组织器114可以找到Mem-M1的具有与找到的计算列的R-indx的值相同的R-indx的值的所有计算列,并且将所有这些计算列(包括找到的计算列)标记为新选定的。
在图15中,数据组织器114可以选择被标记的计算列中的一个(Col-1)作为当前的,并且可以读取存储在Mem-M1的Col-1的C-indx中的值(其为2)。在图16中,数据组织器114可以在Mem-M2中找到在R-indx中具有与Mem-M1的Col-1中的C-indx的值相同的值的所有计算列(其仅为Col-1),并且在图17中,数据组织器114可以将该值(其为1)从Mem-M1的计算列Col-1的Val-M1复制到Mem-M2的Col-1的Val-M1,并且将当前计算列(Mem-M1中的Col-1)标记为已处理。
重复在图13-17中描述的操作,直到处理完所有被标记的项,在该示例中,这些操作仅重复一次(因为仅有两个被标记的计算列)。在图18中,数据组织器114可以找到下一个被标记的计算列(其为Col-4),并且从C-indx读取该值(其为4)。在图19中,数据组织器114可以找到Mem-M2中具有R-index=4的所有计算列,并且在图20中,数据组织器114可以将Val-M1从Mem-M1的Col-4复制到Mem-M2的Col-3和Col-4的Val-M1,并且将Mem-M1的Col-4标记为已处理。
在图21中,乘法单元116可以同时地将Val-M1的值与Mem-M2的计算列Col-1、Col-3和Col-4的Val-M2的值相乘,并且可以存储在Mem-M2的Prod行中。可以认识到的是,如果Mem-M2包含具有相同C-indx值的多个计算列,则加法器118可以对相关计算列的值求和并且将结果存储在Mem-M2的Out行中。在该示例中,每个相乘的计算列可以在C-indx中具有另一值,因此Prod行中的值被按原样复制到Out行。
在图22中,乘法单元116可以将C-indx的值以及相乘的所有计算列(即,Mem-M2的Col-1、Col-3和Col-4)的Out行中的结果以及R-indx的值从Mem-M1(对于所有处理的计算列来说是相同的)复制到Mem-M3。
在图23-38中,重复相同的过程,直到在图38中处理了Mem-M1的所有计算列,并且最终结果存储在Mem-M3中。可以认识到的是,结果矩阵是图10的预期矩阵M3。
可以认识到的是,类似的概念可以用于将密集矩阵与稀疏向量相乘,如现在参考的图39所示出的。数据组织器114可以将密集矩阵M4中的所有值存储在类似于其矩阵表示的关联存储器120的Mem-M4中。数据组织器114可以将向量V1的非零元素的值存储在关联存储器120中的行Val-V1中,并且将非零元素在向量V1中的相关联的位置存储在关联存储器120中的行indx中。
在图40中,数据组织器114可以将Mem-V1的第一值(其为1)复制到Mem-M4的所有计算列(col-1和col-2)中。在图41中,乘法单元116可以读取Mem-v1的所选定的计算列的indx行的值(其为2),并且可以将存储在Mem-M4的相关行(Row-2)中的值与存储在行Val-V1中的值相乘,并且可以将结果写入Mem-M4的行Prod-1中。
在图42中,数据组织器114可以将下一值(其为3)从Mem-V1复制到Mem-M4的Val-V1中,并且在图43中,乘法单元116可以读取Mem-v1的所选定的计算列的indx行的值(其为4),并且可以将存储在Mem-M4的相关行(Row-4)中的值与存储在行Val-V1中的值相乘,并且加法器118可以将乘法的结果与先前步骤的结果相加,因此,在Mem-M4的行Prod中的值在Col-1中为4+(3×-1)=1,以及在Col-2中为-2+(3×2)=4,其提供了Mem-M4的行Prod中的预期结果向量。
可以认识到的是,在本发明的替代实施例中,乘法单元116和加法器118是相同的组件,从而同时执行乘法运算和加法运算。
虽然本文已经说明并描述了本发明的某些特征,但是本领域普通技术人员现在将想到许多修改、替换、改变和等效物。因此,应该理解的是,所附权利要求书旨在覆盖落入本发明的真正精神内的所有这些修改和改变。
Claims (15)
1.一种用于在关联存储器设备中将第一稀疏矩阵与第二稀疏矩阵相乘的方法,所述方法包括:
将同所述第二稀疏矩阵中的每个非零元素相关的被乘数信息存储在所述关联存储器设备的计算列中,所述被乘数信息至少包括被乘数值;
根据第一线性代数规则,将同所述第一稀疏矩阵中的非零元素相关的乘数信息与所述第一稀疏矩阵中的非零元素的相关联的被乘数中的每一个进行关联,所述乘数信息至少包括乘数值;
同时地将所述乘数信息存储在每个所述相关联的被乘数的所述计算列中;
在所有的计算列中,同时地将乘数值与所述乘数值的相关联的被乘数值相乘,以在所述计算列中提供乘积;以及
将根据第二线性代数规则关联的来自计算列的乘积相加在一起以提供结果矩阵。
2.根据权利要求1所述的方法,其中所述信息还包括行索引和列索引。
3.根据权利要求2所述的方法,其中所述第一线性代数规则包括所述乘数的行索引等于所述被乘数的列索引。
4.根据权利要求2所述的方法,其中所述第二线性代数规则包括根据在所述计算列中的被乘数的列索引。
5.根据权利要求2所述的方法,其中所述第一稀疏矩阵是密集向量,并且所述结果矩阵是向量。
6.根据权利要求4所述的方法,其中:
所述第一稀疏矩阵中的每一行是向量,并且每个向量是分开计算的;以及
所述第二线性代数规则还包括根据在所述计算列中的乘数的相等的行索引。
7.根据权利要求2所述的方法,其中所述关联包括:
同时地搜索与所述第一稀疏矩阵中的每个乘数相关联的所有计算列。
8.根据权利要求7所述的方法,其中所述同时地搜索还包括:
针对所述第一稀疏矩阵中的每一行,同时地将所述乘数的列索引与所有所述计算列的行索引进行比较,并且对具有与所述列索引相同的行索引的所有计算列进行标记。
9.根据权利要求2所述的方法,其中所述相加还包括同时地搜索具有相同列索引的所有计算列,并且计算具有相同列索引的计算列中的所有乘积的总和。
10.一种用于将第一稀疏矩阵与第二稀疏矩阵相乘的系统,所述系统包括:
以行和计算列布置的关联存储器阵列;
数据组织器,其用于将关于乘数和被乘数的每个对的数据存储在所述计算列中,所述数据至少包括值以及根据第一线性代数规则关联的所述乘数和所述被乘数;
乘法单元,其用于同时地激活所有的计算列,其中所述激活在每个计算列中提供在所述乘数的值与所述被乘数的值之间的乘法运算的乘积;以及
加法器,其用于在相关联的计算列中同时地对乘积进行相加。
11.根据权利要求10所述的系统,其中所述数据还包括行索引和列索引。
12.根据权利要求10所述的系统,其中所述相关联的计算列共享所述第二稀疏矩阵的列。
13.一种用于在关联存储器设备中将向量与稀疏矩阵相乘的方法,所述方法包括:
针对所述稀疏矩阵中的每个非零矩阵元素,在所述关联存储器设备的计算列中存储所述矩阵元素的矩阵值、所述矩阵元素的矩阵行索引以及所述矩阵元素的矩阵列索引;
将来自所述向量中的向量索引的向量值存储在具有与所述向量位置相同的矩阵行索引的计算列中;
在所有的计算列中,同时地将矩阵值与向量值相乘以创建乘积;以及
将计算列中具有相同矩阵列索引的所有乘积相加在一起以提供结果向量。
14.根据权利要求13所述的方法,其中所述存储向量值还包括:
同时地对具有与每个向量索引相同的矩阵行索引的所有计算列进行搜索,并且同时地将来自所述向量索引的向量值存储在通过所述搜索找到的所有计算列中。
15.一种在存储器内与稀疏矩阵进行相乘的方法,所述方法包括:
将所述稀疏矩阵中的每个非零元素表示为值和至少一个索引;
从所述非零元素中选择乘数并且提取所选定的乘数的乘数索引;
对具有匹配的被乘数索引的被乘数进行搜索;
并行地将所述乘数分配给所述被乘数的列;以及
并行地将所述乘数与所述被乘数相乘,并且将来自所有所述列的乘法结果相加。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111221644.XA CN113961876B (zh) | 2017-01-22 | 2018-01-17 | 关联存储器设备中的稀疏矩阵乘法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762449036P | 2017-01-22 | 2017-01-22 | |
US62/449,036 | 2017-01-22 | ||
PCT/IB2018/050279 WO2018134740A2 (en) | 2017-01-22 | 2018-01-17 | Sparse matrix multiplication in associative memory device |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111221644.XA Division CN113961876B (zh) | 2017-01-22 | 2018-01-17 | 关联存储器设备中的稀疏矩阵乘法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110325988A true CN110325988A (zh) | 2019-10-11 |
CN110325988B CN110325988B (zh) | 2021-10-29 |
Family
ID=62907052
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880013079.8A Active CN110325988B (zh) | 2017-01-22 | 2018-01-17 | 关联存储器设备中的稀疏矩阵乘法 |
CN202111221644.XA Active CN113961876B (zh) | 2017-01-22 | 2018-01-17 | 关联存储器设备中的稀疏矩阵乘法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111221644.XA Active CN113961876B (zh) | 2017-01-22 | 2018-01-17 | 关联存储器设备中的稀疏矩阵乘法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10489480B2 (zh) |
KR (1) | KR102333638B1 (zh) |
CN (2) | CN110325988B (zh) |
WO (1) | WO2018134740A2 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799635A (zh) * | 2021-02-08 | 2021-05-14 | 算筹信息科技有限公司 | 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法 |
CN113378115A (zh) * | 2021-06-22 | 2021-09-10 | 东南大学 | 一种基于磁性随机存储器的近存稀疏向量乘法器 |
CN114003196A (zh) * | 2021-09-02 | 2022-02-01 | 上海壁仞智能科技有限公司 | 矩阵运算装置与矩阵运算方法 |
WO2022205197A1 (zh) * | 2021-03-31 | 2022-10-06 | 华为技术有限公司 | 一种矩阵乘法器、矩阵计算方法及相关设备 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108351974A (zh) * | 2016-07-17 | 2018-07-31 | Gsi 科技公司 | 在恒定的处理时间内查找k个极值 |
US10489480B2 (en) * | 2017-01-22 | 2019-11-26 | Gsi Technology Inc. | Sparse matrix multiplication in associative memory device |
US10366322B2 (en) * | 2017-10-06 | 2019-07-30 | DeepCube LTD. | System and method for compact and efficient sparse neural networks |
US10509846B2 (en) * | 2017-12-13 | 2019-12-17 | Intel Corporation | Accelerator for processing data |
US11216732B2 (en) * | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
WO2020029018A1 (zh) * | 2018-08-06 | 2020-02-13 | 华为技术有限公司 | 矩阵的处理方法、装置及逻辑电路 |
US11163528B2 (en) * | 2018-11-29 | 2021-11-02 | International Business Machines Corporation | Reformatting matrices to improve computing efficiency |
CN111339490B (zh) * | 2020-02-18 | 2024-04-19 | 三星(中国)半导体有限公司 | 矩阵乘法计算方法和装置 |
CN112015472B (zh) * | 2020-07-16 | 2023-12-12 | 中国科学院计算技术研究所 | 基于数据流架构的稀疏卷积神经网络加速方法及系统 |
CN113506589B (zh) * | 2021-06-28 | 2022-04-26 | 华中科技大学 | 一种稀疏矩阵存算系统及方法 |
CN117931131A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 一种稀疏矩阵乘指令实现方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130086012A1 (en) * | 2009-06-02 | 2013-04-04 | Saffron Technology Inc. | Methods, Systems and Computer Program Products for Providing a Distributed Associative Memory Base |
CN103106183A (zh) * | 2013-01-29 | 2013-05-15 | 福建天晴数码有限公司 | 基于mapreduce的大规模稀疏矩阵乘法运算的方法 |
US20140108481A1 (en) * | 2012-10-14 | 2014-04-17 | Microsoft Corporation | Universal fpga/asic matrix-vector multiplication architecture |
US20160179750A1 (en) * | 2014-12-22 | 2016-06-23 | Palo Alto Research Center Incorporated | Computer-Implemented System And Method For Efficient Sparse Matrix Representation And Processing |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5014327A (en) | 1987-06-15 | 1991-05-07 | Digital Equipment Corporation | Parallel associative memory having improved selection and decision mechanisms for recognizing and sorting relevant patterns |
US5206822A (en) | 1991-11-15 | 1993-04-27 | Regents Of The University Of California | Method and apparatus for optimized processing of sparse matrices |
US5216822A (en) * | 1992-05-05 | 1993-06-08 | Silvia Madiedo | Blow dryer air filter |
US20040122887A1 (en) * | 2002-12-20 | 2004-06-24 | Macy William W. | Efficient multiplication of small matrices using SIMD registers |
GB2447428A (en) * | 2007-03-15 | 2008-09-17 | Linear Algebra Technologies Lt | Processor having a trivial operand register |
US8238173B2 (en) | 2009-07-16 | 2012-08-07 | Zikbit Ltd | Using storage cells to perform computation |
US10832746B2 (en) | 2009-07-16 | 2020-11-10 | Gsi Technology Inc. | Non-volatile in-memory computing device |
CN102033854A (zh) * | 2010-12-17 | 2011-04-27 | 中国科学院软件研究所 | 针对稀疏矩阵的数据存储方法及基于该方法的SpMV实现方法 |
CN102141976B (zh) * | 2011-01-10 | 2013-08-14 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
KR101400577B1 (ko) * | 2013-03-11 | 2014-06-19 | 한양대학교 산학협력단 | Gpu를 이용한 희소행렬 곱셈 방법 |
US9367519B2 (en) * | 2013-08-30 | 2016-06-14 | Microsoft Technology Licensing, Llc | Sparse matrix data structure |
US9418719B2 (en) | 2013-11-28 | 2016-08-16 | Gsi Technology Israel Ltd. | In-memory computational device |
US10153042B2 (en) | 2013-11-28 | 2018-12-11 | Gsi Technology Inc. | In-memory computational device with bit line processors |
US9286216B2 (en) * | 2014-01-16 | 2016-03-15 | Carnegie Mellon University | 3DIC memory chips including computational logic-in-memory for performing accelerated data processing |
US9697176B2 (en) * | 2014-11-14 | 2017-07-04 | Advanced Micro Devices, Inc. | Efficient sparse matrix-vector multiplication on parallel processors |
US10996959B2 (en) * | 2015-01-08 | 2021-05-04 | Technion Research And Development Foundation Ltd. | Hybrid processor |
US9558812B2 (en) | 2015-05-05 | 2017-01-31 | Gsi Technology Inc. | SRAM multi-cell operations |
US9558156B1 (en) * | 2015-11-24 | 2017-01-31 | International Business Machines Corporation | Sparse matrix multiplication using a single field programmable gate array module |
US10489480B2 (en) * | 2017-01-22 | 2019-11-26 | Gsi Technology Inc. | Sparse matrix multiplication in associative memory device |
US10452744B2 (en) * | 2017-03-27 | 2019-10-22 | Oracle International Corporation | Memory management for sparse matrix multiplication |
KR101929847B1 (ko) * | 2018-05-15 | 2018-12-17 | 주식회사 퓨쳐디자인시스템 | 희소행렬 연산 방법과 장치 |
US10620951B2 (en) * | 2018-06-22 | 2020-04-14 | Intel Corporation | Matrix multiplication acceleration of sparse matrices using column folding and squeezing |
-
2018
- 2018-01-17 US US15/873,002 patent/US10489480B2/en active Active
- 2018-01-17 WO PCT/IB2018/050279 patent/WO2018134740A2/en active Application Filing
- 2018-01-17 CN CN201880013079.8A patent/CN110325988B/zh active Active
- 2018-01-17 KR KR1020197024553A patent/KR102333638B1/ko active IP Right Grant
- 2018-01-17 CN CN202111221644.XA patent/CN113961876B/zh active Active
-
2019
- 2019-11-25 US US16/693,458 patent/US10846365B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130086012A1 (en) * | 2009-06-02 | 2013-04-04 | Saffron Technology Inc. | Methods, Systems and Computer Program Products for Providing a Distributed Associative Memory Base |
US20140108481A1 (en) * | 2012-10-14 | 2014-04-17 | Microsoft Corporation | Universal fpga/asic matrix-vector multiplication architecture |
CN103106183A (zh) * | 2013-01-29 | 2013-05-15 | 福建天晴数码有限公司 | 基于mapreduce的大规模稀疏矩阵乘法运算的方法 |
US20160179750A1 (en) * | 2014-12-22 | 2016-06-23 | Palo Alto Research Center Incorporated | Computer-Implemented System And Method For Efficient Sparse Matrix Representation And Processing |
Non-Patent Citations (1)
Title |
---|
YAVITS L. 等: ""Sparse Matrix Multiplication On An Associative Processor"", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799635A (zh) * | 2021-02-08 | 2021-05-14 | 算筹信息科技有限公司 | 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法 |
CN112799635B (zh) * | 2021-02-08 | 2022-11-15 | 算筹(深圳)信息科技有限公司 | 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法 |
WO2022205197A1 (zh) * | 2021-03-31 | 2022-10-06 | 华为技术有限公司 | 一种矩阵乘法器、矩阵计算方法及相关设备 |
CN113378115A (zh) * | 2021-06-22 | 2021-09-10 | 东南大学 | 一种基于磁性随机存储器的近存稀疏向量乘法器 |
CN113378115B (zh) * | 2021-06-22 | 2024-04-09 | 东南大学 | 一种基于磁性随机存储器的近存稀疏向量乘法器 |
CN114003196A (zh) * | 2021-09-02 | 2022-02-01 | 上海壁仞智能科技有限公司 | 矩阵运算装置与矩阵运算方法 |
CN114003196B (zh) * | 2021-09-02 | 2024-04-09 | 上海壁仞智能科技有限公司 | 矩阵运算装置与矩阵运算方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2018134740A2 (en) | 2018-07-26 |
KR20190104223A (ko) | 2019-09-06 |
US10489480B2 (en) | 2019-11-26 |
CN113961876A (zh) | 2022-01-21 |
WO2018134740A3 (en) | 2018-09-27 |
CN113961876B (zh) | 2024-01-30 |
KR102333638B1 (ko) | 2021-12-01 |
CN110325988B (zh) | 2021-10-29 |
US10846365B2 (en) | 2020-11-24 |
US20200097521A1 (en) | 2020-03-26 |
US20180210862A1 (en) | 2018-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110325988A (zh) | 关联存储器设备中的稀疏矩阵乘法 | |
KR102458885B1 (ko) | 인메모리 행렬 곱셈 및 뉴럴 네트워크에서 그것의 사용 | |
Hersche et al. | A neuro-vector-symbolic architecture for solving Raven’s progressive matrices | |
Li et al. | Strassen's matrix multiplication on GPUs | |
Polizzi et al. | SPIKE: A parallel environment for solving banded linear systems | |
US6766342B2 (en) | System and method for computing and unordered Hadamard transform | |
Maurer et al. | A parallel block LU decomposition method for distributed finite element matrices | |
CN113419705A (zh) | 存内乘加计算电路、芯片、计算装置 | |
George et al. | On row and column orderings for sparse least squares problems | |
CN110244932A (zh) | 用于关联存储器中的长加法和长乘法的系统和方法 | |
Jamal et al. | A hybrid CPU/GPU approach for the parallel algebraic recursive multilevel solver pARMS | |
CN115485656A (zh) | 用于卷积运算的存储器内处理方法 | |
Afshani et al. | Sorting and permuting without bank conflicts on GPUs | |
US11631002B2 (en) | Information processing device and information processing method | |
US20220057993A1 (en) | Martix multiplication engines | |
CN114072778A (zh) | 存储器处理单元架构 | |
Jha et al. | Fast parallel prefix on multi-mesh of trees | |
Chang et al. | A variation of cover-free families and its applications | |
Hedayat et al. | Crossover designs based on type I orthogonal arrays for a self and simple mixed carryover effects model with correlated errors | |
JPH0748207B2 (ja) | 行列演算装置 | |
CN110989971B (zh) | 用于节能数据处理的系统和方法 | |
US20230418600A1 (en) | Non-volatile memory die with latch-based multiply-accumulate components | |
Matysiak et al. | Matrices of infinite dimensions and their applications | |
Hu et al. | Add–sub pivoting triangular factorization for symmetric matrix | |
Yavits et al. | AIDA: Associative DNN inference accelerator |
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 |