CN109597647B - 数据处理方法及设备 - Google Patents
数据处理方法及设备 Download PDFInfo
- Publication number
- CN109597647B CN109597647B CN201811440502.0A CN201811440502A CN109597647B CN 109597647 B CN109597647 B CN 109597647B CN 201811440502 A CN201811440502 A CN 201811440502A CN 109597647 B CN109597647 B CN 109597647B
- Authority
- CN
- China
- Prior art keywords
- target
- column
- vector
- calculated
- memory
- 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
Links
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/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
- 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
Abstract
本发明提供的数据处理方法及设备,通过对确定待计算向量中的非零元素;获取数据处理指令,数据处理指令携带有第一基地址与列号,第一基地址为与待计算向量相乘的稀疏矩阵在内存中存储的首地址,列号为目标列在稀疏矩阵中的位置;解码数据处理指令,并根据数据处理指令对待计算向量中的非零元素与目标列中的目标元素进行乘法计算;其中,内存中存储有稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据待计算向量中每个非零元素的乘法计算结果构造待计算向量和稀疏矩阵的乘法计算结果的方案,通过减少稀疏矩阵中零元素与另一向量相乘的次数,以提高运算资源和内存资源的利用率。
Description
技术领域
本发明涉及一种计算机技术,尤其涉及一种数据处理方法及设备。
背景技术
对数据的处理和应用涉及到各行各业,例如机器学习、科学计算以及各种信息处理。在对数据进行处理的过程中,经常会遇到需要对数据矩阵进行运算的情况。特别的,在对稀疏矩阵进行向量乘法运算时,其处理效率成为影响整个数据处理效率的重要因素。
稀疏矩阵向量乘法指的是一个m×n的稀疏矩阵乘以一个n个元素的向量,得到一个m个元素的结果向量的过程。在现有技术中,CPU对稀疏矩阵向量乘法是按照普通矩阵向量乘法的计算方法进行的,即需要将稀疏矩阵中全部零元素和非零元素均存在内存里,然后按照矩阵乘法的乘法规则针对每一元素进行计算。
但是,由于稀疏矩阵中存在大量的零元素,当该零元素与另一向量的元素进行相乘时,其得到的结果零也将作为结果向量的一部分。这就浪费了大量的内存资源和运算资源,从而使得资源的利用率和数据的处理效率低。因此需要利用稀疏矩阵的特点,提出新的方法来提高对包括有稀疏矩阵的数据进行乘法运算时的处理效率。
发明内容
针对现有的对稀疏矩阵向量乘法的运算中,需要对每一元素均进行计算,从而导致的运算资源、内存资源的浪费,进而造成的效率数据处理效率成为影响整个数据处理效率的低技术问题,本发明提供了一种数据处理方法及设备。
一方面,本发明提供了一种数据处理方法,包括:
确定待计算向量中的非零元素;
获取数据处理指令,所述数据处理指令携带有第一基地址与列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为所述目标列在所述稀疏矩阵中的位置;
解码所述数据处理指令,并根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算;其中,所述内存中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;
根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果。
在其中一种可选的实施方式中,所述根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算,包括:
根据所述第一基地址与所述列号确定与所述非零元素相乘的稀疏矩阵的目标列,在内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置;
根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算。
在其中一种可选的实施方式中,该数据处理方法还包括:
确定所述稀疏矩阵中每列中的目标元素以及该目标元素与该列前一个目标元素之间的零元素的个数;
将该目标元素与该列前一个目标元素之间的零元素的个数作为所述目标元素在该列中的位置,并将所述目标元素的值与对应的所述位置关联存储在内存中。
在其中一种可选的实施方式中,所述将所述目标元素的值与对应的所述位置关联存储在内存中,包括:
将每列中任一目标元素的值及其在该列中的位置存储在一个内存单元中,该列中的各目标元素的值按其在该列中的位置存储在连续的内存单元中。
在其中一种可选的实施方式中,所述内存中还存储有所述稀疏矩阵的索引,所述索引用于表示所述稀疏矩阵中每列中的目标元素值的个数;
所述在内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置,包括:
根据所述索引确定所述目标列中的目标元素的个数,并根据所述目标列中的目标元素的个数在所述内存中读取所述目标列中的目标元素的值及在所述目标列中的位置。
在其中一种可选的实施方式中,所述索引包括:所述稀疏矩阵中各列对应的目标元素个数,每列对应的所述目标元素个数为:从第一列逐列累加到当前列的目标元素个数。
在其中一种可选的实施方式中,所述确定待计算向量中的非零元素,包括:获取待计算向量中非零元素的值、所述非零元素在所述待计算向量中的位置以及与所述非零向量对应的索引。
在其中一种可选的实施方式中,所述数据处理指令还携带有第二基地址,所述第二基地址为所述索引在内存中存储的首地址:所述方法还包括:
根据所述数据处理指令获取所述非零向量对应的索引。
另一方面,本发明提供了一种数据处理设备,包括:内存,与所述内存连接的缓存,以及与所述内存和所述缓存分别连接的处理器;
所述内存中存储有待计算向量、与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址以及所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;
所述缓存用于从内存中读取所述待计算向量,并确定待计算向量中的非零元素;
所述处理器用于执行前述任一项所述的数据处理方法。
在其中一种可选的实施方式中,所述处理器包括:至少两个计算单元;所述缓存包括至少两个缓存区,每个缓存区与一个所述计算单元连接;
所述每个缓存区用于从内存中读取所述待计算向量中的各向量单元,并确定每个向量单元中的非零元素;其中,所述向量单元是将所述待计算向量根据行或列进行划分获得的;
各所述计算单元用于获取并解码数据处理指令,并根据所述数据处理指令对与其连接的缓存区中的向量单元的非零元素与所述目标列中的目标元素进行乘法计算;根据向量单元中每个非零元素的乘法计算结果构造所述待计算向量单元和所述稀疏矩阵的乘法计算结果;
所述内存还用于对各计算单元构造的乘法计算结果进行存储。
本发明提供的数据处理方法及设备,通过对确定待计算向量中的非零元素;获取数据处理指令,所述数据处理指令携带有第一基地址与列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为所述目标列在所述稀疏矩阵中的位置;解码所述数据处理指令,并根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算;其中,所述内存中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,从而通过减少稀疏矩阵中零元素与另一向量的元素进行相乘的次数,进而提高了运算资源和内存资源的利用率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本发明实施例一提供的一种数据处理方法的流程示意图;
图2为本发明实施例二提供的一种数据处理方法的流程示意图;
图3为本发明实施例三提供的一种数据处理设备的硬件结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
对数据的处理和应用涉及到各行各业,例如机器学习、科学计算以及各种信息处理。在对数据进行处理的过程中,经常会遇到需要对数据矩阵进行运算的情况。特别的,在对稀疏矩阵进行向量乘法运算时,其处理效率成为影响整个数据处理效率的重要因素。
稀疏矩阵向量乘法指的是一个m×n的稀疏矩阵乘以一个n个元素的一维向量,得到一个m个元素的结果向量的过程。
在现有技术中,CPU对稀疏矩阵向量乘法是按照普通矩阵向量乘法的计算方法进行的,即需要将稀疏矩阵中全部零元素和非零元素均存在内存里,然后按照矩阵乘法的乘法规则针对每一元素进行计算。但是,由于稀疏矩阵中存在大量的零元素,当该零元素与另一向量的元素进行相乘时,其得到的结果零也将作为结果向量的一部分。这就浪费了大量的资源,包括内存资源、运算资源,并且导致效率比较低。因此需要利用稀疏矩阵的特点,提出新的方法来提高对包括有稀疏矩阵的数据进行乘法运算时的处理效率。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图1为本发明实施例一提供的数据处理方法的流程示意图,如图1所示,该数据处理方法包括:
步骤101、确定待计算向量中的非零元素。
步骤102、获取数据处理指令,所述数据处理指令携带有第一基地址与列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为所述目标列在所述稀疏矩阵中的位置。
步骤103、解码所述数据处理指令,并根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算;其中,所述内存中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素。
步骤104、根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果。
需要说明的是,本发明实施例一提供的数据处理方法的执行主体为数据处理设备,该数据处理设备具体可为由内存、处理器、缓存等物理单元组成的实体设备,其可用于对包括有稀疏矩阵的数据进行运算等处理。
为了提高对稀疏矩阵的数据进行乘法运算时的处理效率,在本实施方式中,首先需要对进行运算的待计算向量和稀疏矩阵进行处理。具体来说,可在数据处理设备的内存中存储有待计算向量以及稀疏矩阵。数据处理设备首先需要确定待计算向量中的非零元素,其中可知的是,如前所述的,该待计算向量具体可为包括有n个元素的一维向量,相应的,其也包括有零元素和非零元素。
在该步骤中,可首先从待计算向量中确定并取出各非零元素,随后,获取携带有第一基地址与列号的数据处理指令,其中第一基地址是指待计算向量相乘的稀疏矩阵在内存中存储的首地址,而列号则指目标列在所述稀疏矩阵中的位置。
然后,可对该数据处理指令进行解码,并根据该第一基地址和列号,确定目标列中的目标元素,以实现对待计算向量中的非零元素与目标列中的目标元素进行乘法计算,其中可知的是,在内存中存储有稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,而上述的目标元素包括该列存在的非零元素以及符合预设条件的零元素。
具体来说,针对于每个待计算向量的非零元素,确定与之对应的稀疏矩阵的目标列,即根据所述第一基地址与所述列号确定与所述非零元素相乘的稀疏矩阵的目标列,在内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置;根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算。
在本实施方式中,为了便于理解方案中所涉及到的待计算向量的非零元素和稀疏矩阵的目标列的对应关系,举例来说:
此时,该待计算向量a的三个非零元素所在行分别为第4行、第5行和第7行,相应的,与每个非零元素对应的稀疏矩阵的目标列即为第4列、第5列和第7列。
特别说明的是,在本实施方式的该步骤中,为了进一步提高处理效率,降低内存和处理器的运行压力,在确定与待计算向量中的每个非零元素对应的稀疏矩阵的目标列的过程中,可针对各非零元素对应的目标列进行依次确定处理。可选的,以前待计算向量a为例,可首先选出该向量的第一个非零元素,即位于第4行的非零元素1,针对该非零元素确定其对应的目标列并进行后续处理,随后,可将该第4行的非零元素置0,并继续选出置0后的待计算向量的第一个非零元素,即位于第5行的非零元素5,循环前述过程直至待计算向量a中不存在非零元素。当然,在其他可选的实施方式中,还可针对每一非零元素进行并行处理,即一次性取出部分或全部的非零元素,并进行目标列的确定的处理。
在内存中读取稀疏矩阵目标列中的目标元素的值及所述目标元素在所述目标列中的位置,即前述的第4列、第5列和第7列中的目标元素的值以及各目标元素值在其目所属目标列中的位置。其中,需要说明的是,稀疏矩阵的目标列的目标元素包括了该列存在的非零元素以及符合预设条件的零元素,其中的预设条件包括但不限于:当该目标列中存在有连续的若干个零元素时,若连续零元素的数量等于预设值,则将其第预设值个零元素作为符合预设条件的零元素;或者,当该目标列中不存在非零元素时,将目标列中的最后一个零元素作为符合预设条件的零元素。当然,该预设条件还可由本领域技术人员自行设置,本实施方式对此不进行限制。此外,目标元素在所属目标列中的位置也可采用多种方式进行表示,如采用该目标元素所在行进行表示,或采用其与前一目标元素之间的零元素的数量进行表示,本实施方式对此不进行限制。
优选的,在上述实施方式的基础上,稀疏矩阵可采用预设方式存储在内存中,以进一步提高处理效率。具体来说,确定所述稀疏矩阵中每列中的目标元素以及该目标元素与该列前一个目标元素之间的零元素的个数;将该目标元素与该列前一个目标元素之间的零元素的个数作为所述目标元素在该列中的位置,并将所述目标元素的值与对应的所述位置关联存储在内存中。
更优的,将每列中任一目标元素的值及其在该列中的位置存储在一个内存单元中,该列中的各目标元素的值按其在该列中的位置存储在连续的内存单元中。
也就是说,采用上述的存储和读取元素的方式,能够使得对于数据的处理效率得到进一步提高,即可快速确定与非零元素相应的目标元素在目标列的位置,并直接各待计算向量中的非零元素与其所对应的各目标元素一一进行乘法计算,以获得的各个结果和各个目标元素在其所属目标列中的位置获得该非零元素对应的乘法计算结果。
最后,根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果。具体来说,将待计算向量中的每个非零元素对应的乘法计算结果进行加法运算,以获得该待计算向量和稀疏矩阵的乘法计算结果。
本发明提供的数据处理方法,通过对确定待计算向量中的非零元素;获取数据处理指令,所述数据处理指令携带有第一基地址与列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为所述目标列在所述稀疏矩阵中的位置;解码所述数据处理指令,并根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算;其中,所述内存中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,从而通过减少稀疏矩阵中零元素与另一向量的元素进行相乘的次数,进而提高了运算资源和内存资源的利用率。
在上述实施例一的基础上,为了进一步阐述本发明提供的数据处理方法,图2为本发明实施例二提供的一种数据处理方法的流程示意图。如图2所示,该数据处理方法包括:
步骤201、确定待计算向量中的非零元素。
步骤202、获取数据处理指令,所述数据处理指令携带有第一基地址、第二基地址与列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为所述目标列在所述稀疏矩阵中的位置;所述第二基地址为索引在内存中存储的首地址。
步骤203、解码所述数据处理指令,并根据所述第一基地址与所述列号确定与所述非零元素相乘的稀疏矩阵的目标列,还根据第二基地址获取所述非零向量对应的索引。
步骤204、根据所述索引确定所述目标列中的目标元素的个数,并根据所述目标列中的目标元素的个数在所述内存中读取所述目标列中的目标元素的值及在所述目标列中的位置。
步骤205、根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算。
步骤206、根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果。
需要说明的是,本发明实施例二提供的数据处理方法的执行主体为数据处理设备,该数据处理设备具体可为由内存、处理器、缓存等物理单元组成的实体设备,其可用于对包括有稀疏矩阵的数据进行运算等处理。
首先,数据处理设备首先需要确定待计算向量中的非零元素,其中可知的是,如前所述的,该待计算向量具体可为包括有n个元素的一维向量,其相应包括有零元素和非零元素。随后,可获取并解码数据处理指令,其中数据处理指令携带有第一基地址、第二基地址以及列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为所述目标列在所述稀疏矩阵中的位置,第二基地址为索引在内存中存储的首地址:根据所述数据处理指令获取所述非零向量对应的索引。该索引用于所述稀疏矩阵中每列中的目标元素值的个数。
即在本实施方式中,确定待计算向量中的非零元素的步骤具体包括有获取待计算向量中非零元素的值、所述非零元素在所述待计算向量中的位置以及与所述非零向量对应的索引。
具体来说,与实施例一不同的是,在获取并解码的数据处理指令中携带有第二基地址与列号,其中的第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,列号为所述目标列在所述稀疏矩阵中的位置,而第二基地址为所述索引在内存中存储的首地址。相应的,数据处理设备需要根据所述第一基地址与所述列号确定与所述非零元素相乘的稀疏矩阵的目标列,还根据第二基地址获取所述非零向量对应的索引。
进一步来说,为了快速找到存储在内存中的与每个待计算向量的非零元素对应相乘的稀疏矩阵的元素值,内存中还存储有稀疏矩阵的索引,该索引可用于表示所述稀疏矩阵中每列中的目标元素值的个数。该索引包括稀疏矩阵中各列对应的目标元素个数,每列对应的所述目标元素个数为:从第一列逐列累加到当前列的目标元素个数。
在将稀疏矩阵存储至内存的过程中,可确定一首地址,并根据首地址和目标列中的目标元素的个数,将稀疏矩阵的各目标列中的目标元素的值及在所述目标列中的位置依次进行存储。具体来说,可确定稀疏矩阵中每列中的目标元素以及该目标元素与该列前一个目标元素之间的零元素的个数;将该目标元素与该列前一个目标元素之间的零元素的个数作为所述目标元素在该列中的位置,并将所述目标元素的值与对应的所述位置关联存储在内存中。进一步来说,可将每列中任一目标元素的值及其在该列中的位置存储在一个内存单元中,该列中的各目标元素的值按其在该列中的位置存储在连续的内存单元中。
相应的,在从内存中读取稀疏矩阵时,可利用稀疏矩阵的索引和首地址,找到每个待计算向量的非零元素对应相乘的稀疏矩阵的目标元素的值和其位置所在的存储单元的地址,并从该地址中读取获得目标元素的值及所述目标元素在所述目标列中的位置。
随后,根据目标元素在所述目标列中的位置,对待计算向量中的非零元素与目标元素进行乘法计算。具体来说,根据确定的目标元素在目标列的位置,直接将待计算向量中的非零元素与其所对应的各目标元素一一进行乘法计算,并根据获得的各个结果和各个目标元素在其所属目标列中的位置获得该非零元素对应的乘法计算结果。
最后,根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果。具体来说,将待计算向量中的每个非零元素对应的乘法计算结果进行加法运算,以获得该待计算向量和稀疏矩阵的乘法计算结果。
为了更好的说明本实施例二提供的数据处理方法,本实施方式以8×1的一维向量a,以及8×8的稀疏矩阵M为例进行说明。
首先,在存储该8×8的稀疏矩阵时,如前所述的,可首先确定稀疏矩阵中每列中的目标元素以及该目标元素与该列前一个目标元素之间的零元素的个数:以稀疏矩阵的第4列为例,在该列中存在有a14=3和a44=1这两个目标元素。在存储该两个目标元素时,可知在该第4列中a14=3之前存在有一个零元素,因此,该a14=3对应的位置可表示为1,而在该第4列中a44=1与a14=3之间存在有2个零元素,该a44=1对应的位置可表示为2;以稀疏矩阵的第5列为例,在该列中不存在非零元素,而是存在有连续的若干个零元素,此时,可根据预设条件判断是否需要存储这些零元素,该预设条件可例如判断连续的零元素的数量是否大于等于2的w次方,其中w为正整数,其表示元素的比特宽,在本实施方式中,以w为3进行说明,在第5列中,存在有8个连续的零元素,因此,可将第8个零元素进行存储,即存储a75=0,其对应的位置可表示为7。将该稀疏矩阵进行变形之后,可获得如下表1所示的对应关系。
表1
列号 | 目标元素的值 | 目标元素在该列中的位置 |
0 | (1,5) | (1,2) |
1 | (1) | (3) |
2 | (2,1) | (2,3) |
3 | (3) | (5) |
4 | (3,1) | (1,2) |
5 | (0) | (7) |
6 | (1,1,1) | (0,1,3) |
7 | (1) | (4) |
而在将该稀疏矩阵进行存储时,可将该目标元素与该列前一个目标元素之间的零元素的个数作为所述目标元素在该列中的位置,并将所述目标元素的值与对应的所述位置关联存储在内存中。即,将每列中任一目标元素的值及其在该列中的位置存储在一个内存单元中,该列中的各目标元素的值按其在该列中的位置存储在连续的内存单元中,也就是说,以a14=3,其位置为1为例,在内存单元中存储的应为(1,3)。
当然,在对这些目标元素值进行存储时,应按照稀疏矩阵的列的顺序依次存储,其存储形式可如表2所示。
表2
存储内容 | 存储单元数 |
(1,1) | 内存单元0 |
(2,5) | 内存单元1 |
(3,1) | 内存单元2 |
(2,2) | 内存单元3 |
(3,1) | 内存单元4 |
…… | …… |
(4,1) | 内存单元12 |
其中,内存单元0的在内存中的地址可为默认地址,也可为预先设置的地址,在本实施方式中,可将其地址表示为首地址base_address,相应的内存单元1的地址则可表示为其中,M_width为稀疏矩阵M中每个元素的元素宽度,而w则为前述的元素的比特宽;而内存单元2的地址则可表示为
不难发现,在内存单元对各目标元素进行存储时,内存单元序号与目标元素的数量存在一定关联性,为了更好的存储稀疏矩阵,也为了更快的从内存中读取目标元素,本实施方式中的内存中还存储有稀疏矩阵的索引,该索引用于表示稀疏矩阵中每列中的目标元素值的个数,进一步来说,索引可包括稀疏矩阵中各列对应的目标元素个数,每列对应的所述目标元素个数为:从第一列逐列累加到当前列的目标元素个数。例如,针对于前述稀疏矩阵来说,其索引可如图3所示。
表3
列号 | 累加到当前列的目标元素个数 |
0 | 2 |
1 | 3 |
2 | 5 |
3 | 6 |
4 | 8 |
5 | 9 |
6 | 12 |
7 | 13 |
如表3所示,在该稀疏矩阵的第3列,该元素所对应的索引应为6,即从第0列至第3列,内存中存储有6个目标元素;在该稀疏矩阵的第4列,该元素所对应的索引应为8,即从第0列至第4列,内存中存储有8个目标元素。
因此,在本实施方式中,对于待计算向量a的每一个非零元素,均可确定与其对应的稀疏矩阵的目标列。例如前述的a4=1来说,其为第四行的非零元素,与其对应的稀疏矩阵的目标列为第4列。此时,数据处理设备可知的是需要从内存读取与a4对应的目标列为第4列的目标元素的值和位置。
但是,如前所述的,由于各目标元素的值和位置是一一存储在内存单元中的,数据处理设备无法获知从哪一个内存单元的地址中去读取所需要的目标元素的值和位置。因此,在该实施方式中,数据处理设备可根据首地址和索引,在所述内存中读取所述目标列中的目标元素的值及在所述目标列中的位置。
具体的,例如前述的a4=1来说,当获知需要从内存读取与a4对应的目标列为第4列的目标元素的值和位置之后,可根据索引中的累加到第3列的目标元素个数为6和第4列的累加到第4列的目标元素个数为8,并确定出在稀疏矩阵的第4列中有2个目标元素。
随后,利用内存单元序号与目标元素的数量存在的关联性确定该2个目标元素的地址,即存储该2个目标元素的存储单元7的地址 和存储单元8的地址数据处理设备可在该地址读取到稀疏矩阵的第4列的目标元素的值和位置,即(1,3)和(2,1)。同样的,针对于待计算向量中的其他非零元素也采用类似处理。
再后,根据目标元素在所述目标列中的位置,对待计算向量中的非零元素与目标元素进行乘法计算。具体来说,由于已经确定目标元素在目标列的位置,因此,可直接将待计算向量中的非零元素与其所对应的各目标元素一一进行乘法计算,并根据获得的各个结果和各个目标元素在其所属目标列中的位置获得该非零元素对应的乘法计算结果。由于是8×8的稀疏矩阵与8×1的待计算向量的乘法运算,其结果应为8×1的结果向量,同时,针对每一非零元素对应的乘法计算结果也应为8×1的向量,而结果向量应为各非零元素对应的乘法计算结果之和。
依旧以前述的a4=1为例,当读取到稀疏矩阵的第4列的目标元素的值和位置(1,3)和(2,1)之后,可知在该a4对应的乘法计算结果的8×1的向量中,位于第(0+1)行的值为1×3得到的3,位于第(0+1+2+1)行的值为1×1得到的1,而其余行则均为0。针对其他待计算向量a中的非零元素所对应的乘法计算结果通过类似方式获知。
最后,根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果。
特别的,在获得待计算向量和稀疏矩阵的乘法计算结果b时,为了进一步提高处理效率,在得到任一非零元素对应的乘法计算结果时,均可将其直接存储至结果向量中,当得到下一非零元素对应的乘法计算结果时,可将其与原存储的结果向量进行累加,以得到新的结果向量,重复该过程,直至获得乘法计算结果b。
优选的,需要说明的是,本实施方式提供的数据处理方法还可适用于稀疏矩阵与非一维向量的乘法计算中,其处理过程类似。
本实施例二提供的数据处理方法,通过对于每个非零元素,确定与所述待计算向量相乘的稀疏矩阵的目标列,在内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置,其中,所述内存中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,从而通过减少稀疏矩阵中零元素与另一向量的元素进行相乘的次数,进而提高了运算资源和内存资源的利用率。
图3为本发明实施例三提供的一种数据处理设备的硬件结构示意图,如图3所示,该数据处理设备包括:
内存31,与所述内存31连接的缓存32,以及与所述内存31和所述缓存32分别连接的处理器33;
所述内存31中存储有待计算向量以及稀疏矩阵的每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;
所述缓存32用于从内存31中读取所述待计算向量,并确定待计算向量中的非零元素;
所述处理器33用于从缓存32中读取所述待计算向量中的非零元素,以及从内存31中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置;所述处理器33还用于对于每个非零元素,确定与所述待计算向量相乘的稀疏矩阵的目标列,根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,以供所述内存31对所述乘法计算结果进行存储。
通过对于每个非零元素,确定与所述待计算向量相乘的稀疏矩阵的目标列,在内存31中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置,其中,所述内存31中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,从而通过减少稀疏矩阵中零元素与另一向量的元素进行相乘的次数,进而提高了运算资源和内存31资源的利用率。
在其中一种可选的实施方式中,所述处理器33还用于确定所述稀疏矩阵中每列中的目标元素以及该目标元素与该列前一个目标元素之间的零元素的个数;将该目标元素与该列前一个目标元素之间的零元素的个数作为所述目标元素在该列中的位置,以供所述内存31将所述目标元素的值与对应的所述位置进行关联存储。
在其中一种可选的实施方式中,所述内存31具体用于将每列中任一目标元素的值及其在该列中的位置存储在一个内存31单元中,该列中的各目标元素的值按其在该列中的位置存储在连续的内存31单元中。
在其中一种可选的实施方式中,所述内存31中还存储有所述稀疏矩阵的索引,所述索引用于表示所述稀疏矩阵中每列中的目标元素值的个数;
所述处理器33在从内存31中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置之前,还用于根据所述索引确定所述目标列中的目标元素的个数,并根据所述目标列中的目标元素的个数在所述内存31中读取所述目标列中的目标元素的值及在所述目标列中的位置。
在其中一种可选的实施方式中,所述内存31中还存储所述稀疏矩阵的首地址,所述处理器33还用于根据读取的所述首地址,在所述内存31中读取所述目标列中的目标元素的值及在所述目标列中的位置。
在其中一种可选的实施方式中,所述索引包括:所述稀疏矩阵中各列对应的目标元素个数,每列对应的所述目标元素个数为:从第一列逐列累加到当前列的目标元素个数。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程以及相应的有益效果,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例三提供的数据处理设备,通过对于每个非零元素,确定与所述待计算向量相乘的稀疏矩阵的目标列,在内存31中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置,其中,所述内存31中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,从而通过减少稀疏矩阵中零元素与另一向量的元素进行相乘的次数,进而提高了运算资源和内存31资源的利用率。
本发明实施例四提供的一种数据处理设备,该数据处理设备包括:
内存,与所述内存连接的缓存,以及与所述内存和所述缓存分别连接的处理器;
所述内存中存储有待计算向量以及稀疏矩阵的每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;
所述缓存用于从内存中读取所述待计算向量,并确定待计算向量中的非零元素;
所述处理器用于从缓存中读取所述待计算向量中的非零元素,以及从内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置;所述处理器还用于对于每个非零元素,确定与所述待计算向量相乘的稀疏矩阵的目标列,根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果,以供所述内存对所述乘法计算结果进行存储。
与实施例三不同的是,在本实施例四中,所述处理器包括:至少两个计算单元;所述缓存包括至少两个缓存区,每个缓存区与一个所述计算单元连接;
所述每个缓存区用于从内存中读取所述待计算向量中的各向量单元,并确定每个向量单元中的非零元素;其中,所述向量单元是将所述待计算向量根据行或列进行划分获得的;
各所述计算单元用于获取并解码数据处理指令,并根据所述数据处理指令对与其连接的缓存区中的向量单元的非零元素与所述目标列中的目标元素进行乘法计算;根据向量单元中每个非零元素的乘法计算结果构造所述待计算向量单元和所述稀疏矩阵的乘法计算结果;
所述内存还用于对各计算单元构造的乘法计算结果进行存储。
在本实施例四中,考虑到缓存和处理器的存储计算能力以及待计算向量和稀疏矩阵的数据量,可利用并行处理的方式实现稀疏矩阵与待计算向量乘法运算。
举例来说,可在缓存中设置有多个缓存区,并将待计算向量进行拆分,以使每个缓存区存储部分的待计算向量,采用与前述实施例类似的方式,以使每个缓存区中的待计算向量在其所对应的计算单元中与稀疏矩阵的目标元素进行乘法运算。最后,综合各计算单元得到的乘法计算结果以得到最后的乘法计算结果。
当然,在其他可选的实施方式中,还可采用其他的划分方式以实现对稀疏矩阵向量乘法的并行处理,如计算单元假设每次最多可以计算W行,因此把稀疏矩阵M划分为W×n的小矩阵,每个矩阵分别与前述的方式进行计算,最终得到对应W行的最终结果存回内存中,然后再按前述计算下一个W×n的小矩阵和a乘积,得到接下来W行的结果存回内存中。如此就可以得到M×a的所有结果。
本实施例四提供的数据处理设备,在实施例三的基础上,还通过采用并行处理的架构,从而有效提高了对于包括稀疏矩阵的数据的处理效率。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。
Claims (9)
1.一种数据处理方法,其特征在于,包括:
确定待计算向量中的非零元素;
获取数据处理指令,所述数据处理指令携带有第一基地址与列号,所述第一基地址为与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址,所述列号为目标列在所述稀疏矩阵中的位置;
解码所述数据处理指令,并根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算;其中,所述内存中存储有所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;根据待计算向量中每个非零元素的乘法计算结果构造所述待计算向量和所述稀疏矩阵的乘法计算结果;
所述将所述目标元素的值与对应的所述位置关联存储在内存中,包括:
将每列中任一目标元素的值及其在该列中的位置存储在一个内存单元中,该列中的各目标元素的值按其在该列中的位置存储在连续的内存单元中;
其中,内存单元的地址通过以下公式表示:
base_address为首地址,M_width为稀疏矩阵M中每个元素的元素宽度,w为目标元素在所属列中的位置的比特宽,N为大于等于0的整数,N为目标元素的顺序序号;
当前计算的稀疏矩阵中的每个非零元素所对应的乘法计算结果所在的行数为0+pos[0]+(pos[1]+1)+(pos[2]+1)+……+(pos[i]+1),其中,pos[i]为当前计算的稀疏矩阵的目标元素在所属列中的位置。
2.根据权利要求1所述的方法,其特征在于,所述根据所述数据处理指令对所述待计算向量中的非零元素与所述目标列中的目标元素进行乘法计算,包括:
根据所述第一基地址与所述列号确定与所述非零元素相乘的稀疏矩阵的目标列,在内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置;
根据所述目标元素在所述目标列中的位置,对所述待计算向量中的非零元素与所述目标元素进行乘法计算。
3.根据权利要求1或2所述的方法,其特征在于,还包括:
确定所述稀疏矩阵中每列中的目标元素以及该目标元素与该列前一个目标元素之间的零元素的个数;
将该目标元素与该列前一个目标元素之间的零元素的个数作为所述目标元素在该列中的位置。
4.根据权利要求2所述的方法,其特征在于,所述内存中还存储有所述稀疏矩阵的索引,所述索引用于表示所述稀疏矩阵中每列中的目标元素值的个数;
所述在内存中读取所述目标列中的目标元素的值及所述目标元素在所述目标列中的位置,包括:
根据所述索引确定所述目标列中的目标元素的个数,并根据所述目标列中的目标元素的个数在所述内存中读取所述目标列中的目标元素的值及在所述目标列中的位置。
5.根据权利要求4所述的方法,其特征在于,所述索引包括:所述稀疏矩阵中每列中的目标元素值的个数为:从第一列逐列累加到当前列的目标元素个数。
6.根据权利要求5所述的方法,其特征在于,所述确定待计算向量中的非零元素,包括:获取待计算向量中非零元素的值、所述非零元素在所述待计算向量中的位置以及与非零向量对应的索引。
7.根据权利要求5所述的方法,其特征在于,所述数据处理指令还携带有第二基地址,所述第二基地址为所述索引在内存中存储的首地址:所述方法还包括:
根据所述数据处理指令获取非零向量对应的索引。
8.一种数据处理设备,其特征在于,包括:内存,与所述内存连接的缓存,以及与所述内存和所述缓存分别连接的处理器;
所述内存中存储有待计算向量、与所述待计算向量相乘的稀疏矩阵在内存中存储的首地址以及所述稀疏矩阵中每一列的目标元素的值及其在所属列中的位置,所述目标元素包括该列存在的非零元素以及符合预设条件的零元素;
所述缓存用于从内存中读取所述待计算向量,并确定待计算向量中的非零元素;
所述处理器用于执行权利要求1-7任一项所述的数据处理方法。
9.根据权利要求8所述的数据处理设备,其特征在于,所述处理器包括:至少两个计算单元;所述缓存包括至少两个缓存区,每个缓存区与一个所述计算单元连接;
所述每个缓存区用于从内存中读取所述待计算向量中的各向量单元,并确定每个向量单元中的非零元素;其中,所述向量单元是将所述待计算向量根据行或列进行划分获得的;
各所述计算单元用于获取并解码数据处理指令,并根据所述数据处理指令对与其连接的缓存区中的向量单元的非零元素与目标列中的目标元素进行乘法计算;根据向量单元中每个非零元素的乘法计算结果构造所述待计算向量单元和所述稀疏矩阵的乘法计算结果;
所述内存还用于对各计算单元构造的乘法计算结果进行存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811440502.0A CN109597647B (zh) | 2018-11-29 | 2018-11-29 | 数据处理方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811440502.0A CN109597647B (zh) | 2018-11-29 | 2018-11-29 | 数据处理方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109597647A CN109597647A (zh) | 2019-04-09 |
CN109597647B true CN109597647B (zh) | 2020-11-10 |
Family
ID=65960610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811440502.0A Active CN109597647B (zh) | 2018-11-29 | 2018-11-29 | 数据处理方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109597647B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831207A (zh) * | 2019-04-16 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及其设备 |
CN110456983A (zh) * | 2019-04-17 | 2019-11-15 | 上海酷芯微电子有限公司 | 面向深度学习芯片稀疏计算的数据存储结构和方法 |
CN111079082B (zh) * | 2019-12-20 | 2023-03-10 | 支付宝(杭州)信息技术有限公司 | 一种提高涉及稀疏矩阵计算速率的方法和系统 |
CN113836481A (zh) * | 2020-06-24 | 2021-12-24 | 北京希姆计算科技有限公司 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
CN112364294B (zh) * | 2020-10-27 | 2022-12-27 | 中国核动力研究设计院 | 堆芯数值计算矩阵的自动转换方法、装置、设备及介质 |
CN113516253B (zh) * | 2021-07-02 | 2022-04-05 | 深圳市洞见智慧科技有限公司 | 一种联邦学习中数据加密优化方法及装置 |
CN113722668B (zh) * | 2021-07-22 | 2023-10-31 | 平头哥(上海)半导体技术有限公司 | 处理单元、相关装置和张量运算方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541814B (zh) * | 2010-12-27 | 2015-10-14 | 北京国睿中数科技股份有限公司 | 用于数据通信处理器的矩阵计算装置和方法 |
CN107239823A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种用于实现稀疏神经网络的装置和方法 |
US10452744B2 (en) * | 2017-03-27 | 2019-10-22 | Oracle International Corporation | Memory management for sparse matrix multiplication |
-
2018
- 2018-11-29 CN CN201811440502.0A patent/CN109597647B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109597647A (zh) | 2019-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109597647B (zh) | 数据处理方法及设备 | |
EP3779681B1 (en) | Accelerator for sparse-dense matrix multiplication | |
US20180121789A1 (en) | Data processing method and apparatus | |
KR20190066473A (ko) | 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치 | |
US20130159665A1 (en) | Specialized vector instruction and datapath for matrix multiplication | |
CN109885407B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
CN108961147B (zh) | 一种数据处理方法和装置 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
CN108108190B (zh) | 一种计算方法及相关产品 | |
US20230068450A1 (en) | Method and apparatus for processing sparse data | |
US11397791B2 (en) | Method, circuit, and SOC for performing matrix multiplication operation | |
CN107943756B (zh) | 一种计算方法及相关产品 | |
CN114092336A (zh) | 基于双线性插值算法的图像缩放方法、装置、设备及介质 | |
CN114327244A (zh) | 数据迁移的方法、装置、处理器和计算设备 | |
CN111104092A (zh) | 一种快速除法器和除法运算方法 | |
WO2019141160A1 (zh) | 一种数据处理的方法及装置 | |
CN102662864B (zh) | 一种缺页异常的处理方法、装置及系统 | |
CN112947858B (zh) | 一种raid 5校验值的更新方法、装置和介质 | |
CN113724127B (zh) | 一种图像矩阵卷积的实现方法、计算设备及储存介质 | |
CN115952388A (zh) | 基于图像数据处理的卷积运算方法、装置、处理器及介质 | |
CN110766133B (zh) | 嵌入式设备中的数据处理方法、装置、设备和存储介质 | |
US6760741B1 (en) | FFT pointer mechanism for FFT memory management | |
US8423597B1 (en) | Method and system for adaptive matrix trimming in an inverse discrete cosine transform (IDCT) operation | |
CN112463040B (zh) | 一种数据写入方法、装置、电子设备及存储介质 | |
CN116127261B (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 | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |