CN114065123A - 稀疏矩阵计算方法及加速装置 - Google Patents
稀疏矩阵计算方法及加速装置 Download PDFInfo
- Publication number
- CN114065123A CN114065123A CN202010761618.5A CN202010761618A CN114065123A CN 114065123 A CN114065123 A CN 114065123A CN 202010761618 A CN202010761618 A CN 202010761618A CN 114065123 A CN114065123 A CN 114065123A
- Authority
- CN
- China
- Prior art keywords
- matrix
- sparse
- row
- sparse matrix
- elements
- 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
Images
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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
一种稀疏矩阵计算方法,方法包括:当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断稀疏矩阵的均匀度是否满足预设条件;其中,均匀度用于指示稀疏矩阵中非0元素分布的均匀程度;如果是,采用第一模式对两个矩阵进行乘法处理;第一模式为对稀疏矩阵进行偏移和压缩,得到至少一组非0元素,将至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵;否则,采用第二模式对两个矩阵进行乘法处理;第二模式为将稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。
Description
技术领域
本公开涉及计算机技术领域,尤其是涉及一种稀疏矩阵计算方法及加速装置。
背景技术
目前,机器学习领域可以利用推荐系统通过收集用户的日常喜好信息,如点赞的歌曲、常逛的店铺、购买的商品等,采用机器学习的方式构建用户喜好规律,根据用户喜好规律主动推荐用户可能会感兴趣的歌曲、店铺、商品等信息,从而达到提升用户体验、引导用户消费、优化资源配置等目的。
其中,矩阵计算是机器学习中的核心算法,由于推荐系统中,用户可能会感兴趣的信息只占用推荐系统中信息的很小一部分,所以根据用户感兴趣的信息构建出的计算矩阵通常具有明显的稀疏性,因此在推荐系统中,稀疏矩阵的计算效率尤为重要。
由于稀疏矩阵中具有大量的0元素,在对稀疏矩阵进行存储时,可以采用坐标稀疏格式(coordinate,COO)存储格式、压缩行稀疏(compressed sparse row,CSR)存储格式、压缩列稀疏(compressed sparse column,CSC)存储格式等存储格式将0元素压缩,以节省存储空间。当对采用上述存储格式的稀疏矩阵与其他矩阵进行乘法计算时,由于对稀疏矩阵进行了压缩处理,导致原本的矩阵结构被破坏,每次计算只能处理单个非0元素,无法进行向量化矩阵计算,当稀疏矩阵中的非0元素逐渐增多时,会使得稀疏矩阵的计算效率逐渐降低。如何合理对包含至少一个稀疏矩阵的两个矩阵进行乘法处理成为亟待解决的问题。
发明内容
本公开提供一种稀疏矩阵计算方法、加速装置及设备,以此改善现有无法合理对包含至少一个稀疏矩阵的两个矩阵进行乘法处理的技术问题。
第一方面,提供了一种稀疏矩阵计算方法,该方法包括:当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断稀疏矩阵的均匀度是否满足预设条件;其中,均匀度用于指示稀疏矩阵中非0元素分布的均匀程度;如果是,采用第一模式对两个矩阵进行乘法处理;其中,第一模式用于指示对稀疏矩阵进行压缩和偏移处理实现对所述两个矩阵乘法处理;否则,采用第二模式对两个矩阵进行乘法处理;其中,第二模式为将稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。
可选地,第一模式为对稀疏矩阵进行偏移和压缩,得到至少一组非0元素,将至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵。
在一种可能的设计中,当稀疏矩阵的均匀度满足预设条件时,采用第一模式对两个矩阵进行乘法处理,当稀疏矩阵的均匀度不满足预设条件时,采用第二模式对两个矩阵进行乘法处理。通过判断稀疏矩阵的均匀度是否满足预设条件,可以合理确定具体采用哪种模式来对两个矩阵进行乘法处理,从而提高稀疏矩阵的计算效率。
在另一种可能的设计中,稀疏矩阵包括行号信息、列号信息和数值;其中,行号信息用于指示稀疏矩阵中非0元素对应的行;列号信息用于指示稀疏矩阵中非0元素对应的列;数值包括稀疏矩阵的全部非0元素。
在另一种可能的设计中,稀疏矩阵以行号信息、列号信息和数值的形式进行存储,可以节省存储空间。
在另一种可能的设计中,稀疏矩阵包括元数据;其中,当稀疏矩阵为被乘矩阵时,元数据包括稀疏矩阵所有列中非0元素的数量的最大值和最小值;当稀疏矩阵为乘矩阵时,元数据包括稀疏矩阵中所有行中非0元素的数量的最大值和最小值。
在另一种可能的设计中,当稀疏矩阵为被乘矩阵时,根据稀疏矩阵的列号信息确定稀疏矩阵所有列中非0元素的数量的最大值与最小值;当稀疏矩阵为乘矩阵时,根据稀疏矩阵的行号信息确定稀疏矩阵所有行中非0元素的数量的最大值与最小值。
基于上述两种可能的设计,可以在对稀疏矩阵进行存储时,确定稀疏矩阵的元数据并保存,也可以在对稀疏矩阵进行乘法处理时,根据稀疏矩阵的列号信息或行号信息确定上述最大值与最小值,不予限制。
在另一种可能的设计中,当稀疏矩阵为被乘矩阵时,均匀度为稀疏矩阵的列均匀度;其中,列均匀度为稀疏矩阵的所有列中非0元素的数量的最大值与最小值的差值;当稀疏矩阵为乘矩阵时,均匀度为稀疏矩阵的行均匀度;其中,行均匀度为稀疏矩阵的所有行中非0元素的数量的最大值与最小值的差值。
在另一种可能的设计中,可以根据上述最大值与最小值确定稀疏矩阵的均匀度,为确定稀疏矩阵的均匀度提供了可行性方案。
在另一种可能的设计中,判断稀疏矩阵的均匀度是否满足预设条件,包括:当稀疏矩阵为被乘矩阵时,判断稀疏矩阵的列均匀度是否小于等于第一阈值,如果是,确定稀疏矩阵的均匀度满足预设条件;当稀疏矩阵为乘矩阵时,判断稀疏矩阵的行均匀度是否小于等于第二阈值,如果是,确定稀疏矩阵的均匀度满足预设条件。
在另一种可能的设计中,可以根据稀疏矩阵的均匀度与第一阈值的比较结果,确定是否满足预设条件,为确定稀疏矩阵的均匀度是否满足预设条件提供了可行性方案,便于后续根据稀疏矩阵的均匀度确定具体采用哪种方式对稀疏矩阵进行乘法处理。
在另一种可能的设计中,元数据还包括稀疏矩阵的稠密度;其中,稠密度用于指示稀疏矩阵的全部元素中非0元素的比例。
在另一种可能的设计中,根据稀疏矩阵对应的矩阵规模和稀疏矩阵中非0元素的数量,确定稀疏矩阵的稠密度;其中,矩阵规模用于指示稀疏矩阵的行数和列数。
基于上述两种可能的设计,可以在对稀疏矩阵进行存储时,确定稀疏矩阵的稠密度并保存到元数据中,也可以在对稀疏矩阵进行乘法处理时,根据稀疏矩阵对应的矩阵规模和稀疏矩阵中非0元素的数量,确定稀疏矩阵的稠密度,不予限制。
在另一种可能的设计中,判断稀疏矩阵的均匀度是否满足预设条件之前,方法还包括:判断稀疏矩阵的稠密度是否小于预设稠密度阈值;其中,稠密度用于指示稀疏矩阵的全部元素中非0元素的比例;预设稠密度阈值与稀疏矩阵对应的矩阵规模对应;矩阵规模用于指示稀疏矩阵的行数和列数;如果小于,判断稀疏矩阵的均匀度是否满足预设条件;否则,将稀疏矩阵转换为矩阵结构进行乘法处理。
在另一种可能的设计中,当稀疏矩阵的稠密度大于预设稠密度阈值时,可以将稀疏矩阵转换成矩阵结构进行乘法处理,当稀疏矩阵的稠密度小于预设稠密度阈值时,可以进一步判断稀疏矩阵的均匀度是否满足预设条件。通过利用稀疏矩阵的稠密度和均匀度,可以合理确定具体采用哪种方式来对包括至少一个稀疏矩阵的两个矩阵进行乘法处理,从而提高稀疏矩阵的计算效率。
在另一种可能的设计中,采用第二模式对同一矩阵规模的不同稠密度的稀疏矩阵进行乘法处理,得到同一矩阵规模下每个稠密度对应的第一计算速度;采用矩阵结构对不同稠密度的稀疏矩阵进行乘法处理,得到每个稠密度对应的第二计算速度;根据不同稠密度对应的第一计算速度和第二计算速度,将第一计算速度小于或等于第二计算速度时对应的稠密度确定为矩阵规模对应的稠密度阈值。
在另一种可能的设计中,可以采用第二模式和矩阵结构分别对同一矩阵规模的不同稠密度的稀疏矩阵进行乘法处理,得到第一计算速度和第二计算速度,通过将第一计算速度和第二计算速度进行比较,得到矩阵规模对应的稠密度阈值,为确定稠密度阈值提供了可行性方案。
在另一种可能的设计中,对稀疏矩阵进行行偏移和压缩,得到行偏移矩阵和压缩矩阵;其中,稀疏矩阵为i*j的矩阵;i和j为大于1的整数;行偏移矩阵为k*j的矩阵,k<i,行偏移矩阵包括压缩矩阵中每个元素对应的偏移行数offset1;0≤offset1<i;压缩矩阵为k*j的矩阵,压缩矩阵中的每行非0元素为每组非0元素;压缩矩阵中第(k,j)个非0元素为稀疏矩阵的第(k+offset1,j)个非0元素;压缩矩阵的第j列中非0元素之前不存在0元素。
在另一种可能的设计中,可以通过对稀疏矩阵进行行偏移和压缩,得到行偏移矩阵和压缩矩阵,根据压缩矩阵,确定至少一组非0元素,为采用第一模式对稀疏矩阵进行乘法处理提供可行性基础。
在另一种可能的设计中,根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,确定每个非0元素在压缩矩阵中的列数;根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,确定稀疏矩阵中每列对应的非0元素,根据每个非0元素在每列非0元素中的顺序,确定每个非0元素在压缩矩阵中的行数。
在另一种可能的设计中,可以根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,以及每个非0元素在每列非0元素中的顺序,确定压缩矩阵,为确定压缩矩阵提供可行性方案。
在另一种可能的设计中,根据压缩矩阵中的每个元素在稀疏矩阵中的行数,和压缩矩阵中的每个元素在压缩矩阵中的行数,确定压缩矩阵中每个元素对应的偏移行数;根据偏移行数,确定行偏移矩阵。
在另一种可能的设计中,可以根据压缩矩阵中每个元素对应的偏移行数,确定行偏移矩阵,为确定行偏移矩阵提供可行性方案。
在另一种可能的设计中,将压缩矩阵中的每行元素分别与另外一个矩阵的每列元素相乘,得到每行元素对应的m个第一矩阵;其中,另外一个矩阵为j*m的矩阵;第一矩阵为1*j的矩阵;每行元素对应的第m个第一矩阵的第(1,j)个元素为每行元素的第j个元素与另外一个矩阵的第m列元素中第j个元素的乘积;根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移行数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的行数的基础上,对第一矩阵中的每个元素进行行偏移,得到第一矩阵对应的第二矩阵;其中,第二矩阵为i*j的矩阵;根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的列数,对第一矩阵对应的第二矩阵中的每个元素进行列偏移,得到第二矩阵对应的第三矩阵;其中,第三矩阵为i*m的矩阵;将每行元素对应的m个第三矩阵相加,得到每行元素对应的第四矩阵;其中,第四矩阵为i*m的矩阵;将每行元素对应的第四矩阵相加,得到结果矩阵;其中,结果矩阵为i*m的矩阵。
在另一种可能的设计中,可以通过对压缩矩阵和另外一个矩阵相乘,并根据行偏移矩阵对乘法结果进行偏移,得到结果矩阵,为采用第一模式对稀疏矩阵进行乘法处理提供了可行性方案。
在另一种可能的设计中,对稀疏矩阵进行列偏移和压缩,得到列偏移矩阵和压缩矩阵;其中,稀疏矩阵为i*j的矩阵;i和j为大于1的整数;列偏移矩阵为i*p的矩阵,p<j,列偏移矩阵包括压缩矩阵中每个元素对应的偏移列数offset2;0≤offset2<j;压缩矩阵为i*p的矩阵,压缩矩阵中的每列非0元素为每组非0元素;压缩矩阵中第(i,p)个非0元素为稀疏矩阵的第(i,p+offset2)个非0元素;压缩矩阵的第i行中非0元素之前不存在0元素。
在另一种可能的设计中,可以通过对稀疏矩阵进行列偏移和压缩,得到列偏移矩阵和压缩矩阵,根据压缩矩阵,确定至少一组非0元素,为采用第一模式对稀疏矩阵进行乘法处理提供可行性基础。
在另一种可能的设计中,根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,确定每个非0元素在压缩矩阵中的行数;根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,确定稀疏矩阵中每行对应的非0元素,根据每个非0元素在每行非0元素中的顺序,确定每个非0元素在压缩矩阵中的列数。
在另一种可能的设计中,可以根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,以及每个非0元素在每行非0元素中的顺序,确定压缩矩阵,为确定压缩矩阵提供可行性方案。
在另一种可能的设计中,根据压缩矩阵中的每个元素在稀疏矩阵中的列数,和压缩矩阵中的每个元素在压缩矩阵中的列数,确定压缩矩阵中每个元素对应的偏移列数;根据偏移列数,确定列偏移矩阵。
在另一种可能的设计中,可以根据压缩矩阵中每个元素对应的偏移列数,确定列偏移矩阵,为确定列偏移矩阵提供可行性方案。
在另一种可能的设计中,将压缩矩阵中的每列元素分别与另外一个矩阵的每行元素相乘,得到每列元素对应的n个第一矩阵;其中,另外一个矩阵为n*i的矩阵;第一矩阵为i*1的矩阵;每列元素对应的第n个第一矩阵的第(i,1)个元素为每列元素的第i个元素与另外一个矩阵的第n行元素中第i个元素的乘积;根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移列数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的列数的基础上,对第一矩阵中的每个元素进行列偏移,得到第一矩阵对应的第二矩阵;其中,第二矩阵为i*j的矩阵;根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的行数,对第一矩阵对应的第二矩阵中的每个元素进行行偏移,得到第二矩阵对应的第三矩阵;其中,第三矩阵为n*j的矩阵;将每列元素对应的n个第三矩阵相加,得到每列元素对应的第四矩阵;其中,第四矩阵为n*j的矩阵;将每列元素对应的第四矩阵相加,得到结果矩阵;其中,结果矩阵为n*j的矩阵。
在另一种可能的设计中,可以通过对压缩矩阵和另外一个矩阵相乘,并根据列偏移矩阵对乘法结果进行偏移,得到结果矩阵,为采用第一模式对稀疏矩阵进行乘法处理提供了可行性方案。
第二方面,提供了一种加速装置,所述装置包括用于执行第一方面或第一方面任一种可能实现方式中的矩阵运算方法的各个模块。
第三方面,提供了一种加速装置,该加速装置可以为芯片或者片上系统。该装置可以实现上述各方面或者各可能的设计所执行的功能,所述功能可以通过硬件实现。一种可能的设计中,该加速装置可以包括:处理器。处理器可以用于支持加速装置实现上述第一方面或者第一方面的任一种可能的设计中所涉及的功能。例如:处理器可以用于当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断稀疏矩阵的均匀度是否满足预设条件;其中,均匀度用于指示稀疏矩阵中非0元素分布的均匀程度;处理器还可以用于如果是,采用第一模式对两个矩阵进行乘法处理;其中,第一模式为对稀疏矩阵进行偏移和压缩,得到至少一组非0元素,将至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵;处理器还可以用于否则,采用第二模式对两个矩阵进行乘法处理;其中,第二模式为将稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。在又一种可能的设计中,所述加速装置还可以包括存储器,存储器,用于保存加速装置必要的计算机执行指令和数据。当该加速装置运行时,该处理器执行该存储器存储的该计算机执行指令,以使该加速装置执行如上述第一方面或者第一方面的任一种可能的设计所述的稀疏矩阵计算方法。
其中,该加速装置的具体实现方式可参考第一方面或第一方面的任一种可能的设计提供的稀疏矩阵计算方法的行为功能。
第四方面,提供了一种加速装置,该加速装置包括一个或多个处理器和一个或多个存储器;一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码或计算机指令;当一个或多个处理器执行计算机指令时,使得加速装置执行如第一方面或者第一方面的任一可能的设计所述的稀疏矩阵计算方法。
第五方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机指令或程序,当计算机指令或程序在计算机上运行时,使得计算机执行如第一方面或者第一方面的任一可能的设计所述的稀疏矩阵计算方法。
第六方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如第一方面或者第一方面的任一可能的设计所述的稀疏矩阵计算方法。
第七方面,提供了一种芯片系统,所述芯片系统包括一个或多个处理器和一个或多个存储器;一个或多个存储器与一个或多个处理器耦合,一个或多个存储器中存储有计算机程序代码或计算机指令;当所述一个或多个处理器执行所述计算机程序代码或计算机指令时,使得所述芯片系统执行如第一方面或者第一方面的任一可能的设计所述的稀疏矩阵计算方法。
其中,第三方面至第七方面中任一种设计方式所带来的技术效果可参见上述第一方面至第二方面的任一种可能的设计所带来的技术效果,不予赘述。
附图说明
图1为本实施例提供的一种信息处理系统的示意图;
图2为本实施例提供的一种装置的组成结构图;
图3为本实施例提供的一种稀疏矩阵计算方法的流程图;
图4为本实施例提供的一种稀疏矩阵计算方法的流程图;
图5为本实施例提供的一种稀疏矩阵计算方法的流程图;
图6为本实施例提供的一种加速装置的组成示意图。
具体实施方式
为了便于理解本实施例所述技术发方案,首先对本实施例涉及的技术术语进行描述。
稀疏矩阵:如果某一矩阵中,数值为0的元素的数量远大于数值为非0的元素的数量,且非0元素分布没有规律时,可以称该矩阵为稀疏矩阵。
稠密矩阵:如果某一矩阵中,数值为0的元素的数量远小于数值为非0的元素的数量,可以称该矩阵为稠密矩阵。
被乘矩阵与乘矩阵:两个矩阵相乘时,位于乘号左边的矩阵称为被乘矩阵,位于乘号右边的矩阵称为乘矩阵。例如,以A*B为例,矩阵A为被乘矩阵,矩阵B为乘矩阵。
在对稀疏矩阵进行存储时,由于稀疏矩阵中存在大量的0元素,如果以原有矩阵结构的形式对稀疏矩阵进行存储,会使得稀疏矩阵占用的内存资源较大,使得内存资源被浪费。为了降低稀疏矩阵在存储时占用的内存,可以采用压缩行稀疏(compressed sparserow,CSR)存储格式、压缩列稀疏(compressed sparse column,CSC)存储格式、坐标稀疏格式(coordinate,COO)存储格式等存储格式,通过将稀疏矩阵中的0元素压缩,来降低稀疏矩阵占用的内存。
当稀疏矩阵与其他矩阵相乘时,如果稀疏矩阵预先采用CSR存储格式、CSC存储格式或COO存储格式进行存储,由于对稀疏矩阵进行了压缩处理,导致原本的矩阵结构被破坏,每次计算只能处理单个非0元素,无法进行向量化矩阵计算,当稀疏矩阵中的非0元素逐渐增多时,会使得稀疏矩阵的计算效率逐渐降低。如何合理对包含至少一个稀疏矩阵的两个矩阵进行乘法处理成为亟待解决的问题。
为解决该问题,本实施例提供了一种稀疏矩阵计算方法,该方法中,当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断稀疏矩阵的均匀度是否满足预设条件;其中,均匀度用于指示稀疏矩阵中非0元素分布的均匀程度;如果是,采用第一模式对两个矩阵进行乘法处理;其中,第一模式为对稀疏矩阵进行偏移和压缩,得到至少一组非0元素,将至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵;否则,采用第二模式对两个矩阵进行乘法处理;其中,第二模式为将稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。本实施例中,当稀疏矩阵的均匀度满足预设条件时,采用第一模式对两个矩阵进行乘法处理,当稀疏矩阵的均匀度不满足预设条件时,采用第二模式对两个矩阵进行乘法处理。通过判断稀疏矩阵的均匀度是否满足预设条件,可以合理确定具体采用哪种模式来对两个矩阵进行乘法处理,从而提高稀疏矩阵的计算效率。
下面结合说明书附图对本实施例的实施方式进行详细描述。
本实施例提供的稀疏矩阵计算方法可以用于任一对稀疏矩阵进行计算处理的信息处理系统中,该信息处理系统可以为推荐系统、图像处理系统等,不予限制。
其中,推荐系统可以通过收集用户的日常喜好信息,如点赞的歌曲、常逛的店铺、购买的商品等,采用机器学习的方式构建表征用户喜好规律的稀疏矩阵,通过对稀疏矩阵进行处理,根据处理结果主动推荐用户可能会感兴趣的歌曲、店铺、商品等信息,以提升用户体验、引导用户消费、优化资源配置。
图像处理系统可以通过采集由多个像素构成的图像,通过对每个像素的亮度值进行二值化处理,可以得到一个矩阵,根据该矩阵中0元素的数量与非0元素的数量,确定该矩阵是否为稀疏矩阵,如果为稀疏矩阵,则可以采用本实施例提供的方法对稀疏矩阵进行处理。
图1为本实施例提供的一种信息处理系统的示意图,如图1所示,该信息处理系统100可以包括采集装置101和加速装置102。
其中,以推荐系统为例,采集装置101可以用于采集用户信息,根据用户信息生成稀疏矩阵并存储,加速装置102用于采用本实施例提供的稀疏矩阵计算方法对采集装置101存储的稀疏矩阵进行处理。
需要说明的是,为了节省存储空间,采集装置101可以采用上述存储格式对稀疏矩阵进行存储。
具体实现时,图1所示,如:采集装置101、加速装置102均可以采用图2所示的组成结构,或者包括图2所示的部件。图2为本实施例提供的一种装置200的组成示意图,该装置200可以为采集装置或者采集装置中的芯片或者片上系统;也可以为加速装置或者加速装置中的芯片或者片上系统。如图2所示,该装置200包括处理器201,通信接口202以及总线203。
进一步的,该装置200还可以包括存储器204。其中,处理器201,存储器204以及通信接口202之间可以通过总线203连接。
其中,处理器201是中央处理器(central processing unit,CPU)、现场可编程门阵列(field-programmable gate array,FPGA)、专用集成电路(application-specificintegrated circuit,ASIC)、通用处理器网络处理器(network processor,NP)、数字信号处理器(digital signal processing,DSP)、微处理器、微控制器、可编程逻辑器件(programmable logic device,PLD)或它们的任意组合。处理器201还可以是其它具有处理功能的装置,例如电路、器件或软件模块,不予限制。
通信接口202,用于与其他设备进行通信。通信接口202可以是模块、电路、收发器或者任何能够实现通信的装置。
总线203,用于连接处理器201,存储器204以及通信接口202,可以包括数据总线,还可以包括电源总线、控制总线和状态信号总线等,不予限制,但是为了清楚说明起见,在图2中将各种总线都标为总线203。
存储器204,用于存储指令。其中,指令可以是计算机程序。
其中,存储器204可以是只读存储器(read-only memory,ROM)或可存储静态信息和/或指令的其他类型的静态存储设备,也可以是随机存取存储器(random accessmemory,RAM)或可存储信息和/或指令的其他类型的动态存储设备,还可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或其他磁存储设备等,不予限制。
需要指出的是,存储器204可以独立于处理器201存在,也可以和处理器201集成在一起。存储器204可以用于存储指令或者程序代码或者一些数据等。存储器204可以位于装置200内,也可以位于装置200外,不予限制。处理器201,用于执行存储器204中存储的指令,以实现本申请下述实施例提供的稀疏矩阵计算方法。
在一种示例中,处理器201可以包括一个或多个CPU,例如图2中的CPU0和CPU1。该处理器201还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。
作为一种可选的实现方式,装置200包括多个处理器,例如,除图2中的处理器201之外,还可以包括处理器207。
作为一种可选的实现方式,装置200还包括输出设备205和输入设备206。示例性地,输入设备206是键盘、鼠标、麦克风或操作杆等设备,输出设备205是显示屏、扬声器(speaker)等设备。
需要指出的是,装置200可以是台式机、便携式电脑、服务器、移动手机、平板电脑、无线终端、嵌入式设备、芯片系统或有图2中类似结构的设备。此外,图3中示出的组成结构并不构成对该装置的限定,除图2所示部件之外,该装置可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本实施例中,芯片系统可以由芯片构成,也可以包括芯片和其他分立器件。
此外,各实施例之间涉及的动作、术语等均可以相互参考,不予限制。本申请的实施例中各个设备之间交互的消息名称或消息中的参数名称等只是一个示例,具体实现中也可以采用其他的名称,不予限制。
下面结合图1所示信息处理系统,对本实施例提供的稀疏矩阵计算方法进行描述,其中,采集装置可以为信息处理系统中任一采集装置,加速装置可以为信息处理系统中的任一加速装置,下述实施例所述的采集装置、加速装置可以具备图2所示部件。
图3为本实施例提供的一种稀疏矩阵计算方法的流程图,如图3所示,该方法可以包括:
步骤301、采集装置生成并存储稀疏矩阵。
具体的,采集装置可以根据采集到的信息生成矩阵,根据生成的矩阵中0元素和非0元素的数量,确定该矩阵是否为稀疏矩阵。
例如,以采用推荐系统采集5个用户对5首不同的歌曲是否喜爱为例,假设用户1喜爱第1首和第3首歌曲,用户2喜欢第5首歌曲,用户3喜欢第2首和第4首歌曲,用户4喜欢第1首和第5首歌曲,用户5喜欢第3首歌曲,若采用每行元素对应每个用户,每列元素对应每首歌曲,则可以生成下述矩阵:
在该矩阵中,0元素的数量大于非0元素的数量,可以认为该矩阵为稀疏矩阵。
示例性的,采集装置在对生成的稀疏矩阵进行存储时,可以采用下述两种方式中的任意一种方式对稀疏矩阵进行存储:
方式一:将稀疏矩阵以行号信息、列号信息、数值和元数据的形式进行存储。
其中,行号信息用于指示稀疏矩阵中非0元素对应的行;列号信息用于指示稀疏矩阵中非0元素对应的列;数值包括稀疏矩阵的全部非0元素。当稀疏矩阵为被乘矩阵时,元数据包括稀疏矩阵所有列中非0元素的数量的最大值和最小值;当稀疏矩阵为乘矩阵时,元数据包括稀疏矩阵中所有行中非0元素的数量的最大值和最小值。
具体的,采集装置可以根据生成的稀疏矩阵对应的乘法处理,确定生成的稀疏矩阵为被乘矩阵还是乘矩阵,如果生成的稀疏矩阵位于乘号的左边,则确定该稀疏矩阵为被乘矩阵,如果生成的稀疏矩阵位于乘号的右边,则确定该稀疏矩阵为乘矩阵。
当生成的稀疏矩阵为被乘矩阵时,可以采用扩展的CSR存储格式进行存储,该扩展的CSR存储格式可以包括行号信息、列号信息、数值和元数据。
其中,行号信息也可以描述为行偏移量,行偏移量中元素的数量为稀疏矩阵的行数加1,行偏移量中从第2个元素开始,每个元素与前一个元素的差值,表示稀疏矩阵对应的行包括的非0元素的数量。列号信息即列号,列号中元素的数量与稀疏矩阵中非0元素的数量相同,列号中的每个元素表示稀疏矩阵中每个非0元素所在的列。数值包括稀疏矩阵中的全部非0元素,可以将稀疏矩阵中每行对应的非0元素依次排列在数值中。元数据包括稀疏矩阵所有列中非0元素的数量的最大值和最小值。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行偏移量=[1 3 4 68 9];列号=[1 3 5 2 4 1 5 3];数值=[1 1 1 1 1 1 1 1];元数据=[2 1]。
上述被乘矩阵也可以采用扩展的COO存储格式进行存储,该扩展的COO存储格式包括行号信息、列号信息、数值和元数据。
其中,行号信息即行号,行号中元素的数量与稀疏矩阵中非0元素的数量相同,行号中的每个元素表示稀疏矩阵中每个非0元素所在的行。列号信息即列号,列号中元素的数量与稀疏矩阵中非0元素的数量相同,列号中的每个元素表示稀疏矩阵中每个非0元素所在的列。数值包括稀疏矩阵中的全部非0元素。元数据包括稀疏矩阵所有列中非0元素的数量的最大值和最小值。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行号=[1 1 2 3 3 44 5];列号=[1 3 5 2 4 1 5 3];数值=[1 1 1 1 1 1 1 1];元数据=[2 1]。
当生成的稀疏矩阵为乘矩阵时,可以采用扩展的CSC存储格式进行存储,该扩展的CSC存储格式包括行号信息、列号信息、数值和元数据。
其中,行号信息即行号,行号中元素的数量与稀疏矩阵中非0元素的数量相同,行号中的每个元素表示稀疏矩阵中每个非0元素所在的行。列号信息也可以描述为列偏移量,列偏移量中元素的数量为稀疏矩阵的列数加1,列偏移量中从第2个元素开始,每个元素与前一个元素的差值,表示稀疏矩阵对应的列包括的非0元素的数量。数值包括稀疏矩阵中的全部非0元素,可以将稀疏矩阵中每列对应的非0元素依次排列在数值中;元数据包括稀疏矩阵所有行中非0元素的数量的最大值和最小值。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行号=[1 4 3 1 5 32 4];列号=[1 3 4 6 7 9];数值=[1 1 1 1 1 1 1 1];元数据=[2 1]。
上述乘矩阵也可以采用扩展的COO存储格式进行存储,该扩展的COO存储格式包括行号信息、列号信息、数值和元数据。
其中,行号信息即行号,行号中元素的数量与稀疏矩阵中非0元素的数量相同,行号中的每个元素表示稀疏矩阵中每个非0元素所在的行。列号信息即列号,列号中元素的数量与稀疏矩阵中非0元素的数量相同,列号中的每个元素表示稀疏矩阵中每个非0元素所在的列。数值包括稀疏矩阵中的全部非0元素。元数据包括稀疏矩阵所有行中非0元素的数量的最大值和最小值。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行号=[1 4 3 1 5 32 4];列号=[1 1 2 3 3 4 5 5];数值=[1 1 1 1 1 1 1 1];元数据=[2 1]。
方式二:将稀疏矩阵以行号信息、列号信息和数值的形式进行存储。
具体的,当生成的稀疏矩阵为被乘矩阵时,可以采用CSR存储格式进行存储,该CSR存储格式包括行号信息、列号信息和数值。
其中,行号信息即行偏移量,列号信息即列号。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行偏移量=[1 3 4 68 9];列号=[1 3 5 2 4 1 5 3];数值=[1 1 1 1 1 1 1 1]。
上述被乘矩阵也可以采用COO存储格式进行存储,该COO存储格式包括行号信息、列号信息和数值。
其中,行号信息即行号,列号信息即列号。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行号=[1 1 2 3 3 44 5];列号=[1 3 5 2 4 1 5 3];数值=[1 1 1 1 1 1 1 1]。
当生成的稀疏矩阵为乘矩阵时,可以采用CSC存储格式进行存储,该CSC存储格式包括行号信息、列号信息和数值。
其中,行号信息即行号,列号信息即列偏移量。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行号=[1 4 3 1 5 32 4];列号=[1 3 4 6 7 9];数值=[1 1 1 1 1 1 1 1]。
上述乘矩阵也可以采用COO存储格式进行存储,该COO存储格式包括行号信息、列号信息和数值。
其中,行号信息即行号,列号信息即列号。
例如,以步骤301中的稀疏矩阵为例,存储的稀疏矩阵包括:行号=[1 4 3 1 5 32 4];列号=[1 1 2 3 3 4 5 5];数值=[1 1 1 1 1 1 1 1]。
步骤302、加速装置判断稀疏矩阵的均匀度是否满足预设条件。如果是,执行下述步骤303,否则,执行下述步骤304。
其中,均匀度用于指示稀疏矩阵中非0元素分布的均匀程度。
具体的,当加速装置对两个相乘的矩阵进行乘法处理时,如果存在一个矩阵是稀疏矩阵,可以判断该稀疏矩阵的均匀度是否满足预设条件。
一种可能的设计中,当稀疏矩阵为被乘矩阵时,均匀度为稀疏矩阵的列均匀度。
其中,列均匀度为稀疏矩阵的所有列中非0元素的数量的最大值与最小值的差值。
具体的,如果稀疏矩阵采用上述方式一指示的存储格式进行存储,则可以根据稀疏矩阵的元数据确定稀疏矩阵的列均匀度。
例如,以步骤301中的矩阵为例,由上述方式一可知该矩阵为被乘矩阵时,对应的元数据=[2 1],则可以确定该稀疏矩阵的列均匀度=2-1=1。
如果稀疏矩阵采用上述方式二指示的存储格式进行存储,则可以根据稀疏矩阵的列号信息确定每一列对应的非0元素的数量,根据每一列对应的非0元素的数量确定所有列中非0元素的数量的最大值与最小值,并根据该最大值和最小值确定稀疏矩阵的列均匀度。
例如,以步骤301中的矩阵为例,由上述方式二可知该矩阵为被乘矩阵时,对应的列号信息=[1 3 5 2 4 1 5 3],则可以确定第1列中存在2个非0元素,第2列中存在1个非0元素,第3列中存在2个非0元素,第4列中存在1个非0元素,第5列中存在2个非0元素,所以,该稀疏矩阵的所有列中非0元素的数量的最大值为2,最小值为1,该稀疏矩阵的列均匀度=2-1=1。
当确定稀疏矩阵的列均匀度后,可以判断稀疏矩阵的列均匀度是否小于等于第一阈值,如果是,则确定稀疏矩阵的均匀度满足预设条件。
其中,稀疏矩阵的所有列中非0元素的数量的最大值与最小值的差值越小,可以认为该稀疏矩阵的列均匀度越好。
需要说明的是,第一阈值可以为根据实际计算效率要求确定的阈值,当列均匀度小于等于第一阈值时,采用第一模式进行乘法处理的计算效率高于采用第二模式进行乘法处理的计算效率,当列均匀度大于第一阈值时,采用第二模式进行乘法处理的计算效率高于采用第一模式进行乘法处理的计算效率。
又一种可能的设计中,当稀疏矩阵为乘矩阵时,均匀度为稀疏矩阵的行均匀度。
其中,行均匀度为稀疏矩阵的所有行中非0元素的数量的最大值与最小值的差值。
具体的,如果稀疏矩阵采用上述方式一指示的存储格式进行存储,则可以根据稀疏矩阵的元数据确定稀疏矩阵的行均匀度。
例如,以步骤301中的矩阵为例,由上述方式一可知该矩阵为乘矩阵时,对应的元数据=[2 1],则可以确定该稀疏矩阵的行均匀度=2-1=1。
如果稀疏矩阵采用上述方式二指示的存储格式进行存储,则可以根据稀疏矩阵的行号信息确定每一行对应的非0元素的数量,根据每一行对应的非0元素的数量确定所有行中非0元素的数量的最大值与最小值,并根据该最大值和最小值确定稀疏矩阵的行均匀度。
例如,以步骤301中的矩阵为例,由上述方式二可知该矩阵为乘矩阵时,对应的行号信息=[1 4 3 1 5 3 2 4],则可以确定第1行中存在2个非0元素,第2行中存在1个非0元素,第3行中存在2个非0元素,第4行中存在2个非0元素,第5行中存在1个非0元素,所以,该稀疏矩阵的所有行中非0元素的数量的最大值为2,最小值为1,该稀疏矩阵的行均匀度=2-1=1。
当确定稀疏矩阵的行均匀度后,可以判断稀疏矩阵的行均匀度是否小于等于第二阈值,如果是,则确定稀疏矩阵的行匀度满足预设条件。
其中,稀疏矩阵的所有行中非0元素的数量的最大值与最小值的差值越小,可以认为该稀疏矩阵的行均匀度越好。
需要说明的是,第二阈值可以为根据实际计算效率要求确定的阈值,当行均匀度小于等于第二阈值时,采用第一模式进行乘法处理的计算效率高于采用第二模式进行乘法处理的计算效率,当列均匀度大于第一阈值时,采用第二模式进行乘法处理的计算效率高于采用第一模式进行乘法处理的计算效率。
步骤303、加速装置采用第一模式对稀疏矩阵进行处理。
其中,第一模式为对稀疏矩阵进行偏移和压缩,得到至少一组非0元素,将至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵。
示例性的,当稀疏矩阵为被乘矩阵时,可以采用下述图4所示的方法对矩阵进行乘法处理,得到结果矩阵。
具体的,可以对稀疏矩阵进行行偏移和压缩,得到行偏移矩阵和压缩矩阵,将压缩矩阵中的每行元素分别与另外一个矩阵的每列元素相乘,得到每行元素对应的多个第一矩阵;根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移行数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的行数的基础上,对第一矩阵中的每个元素进行行偏移,得到第一矩阵对应的第二矩阵;根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的列数,对第一矩阵对应的第二矩阵中的每个元素进行列偏移,得到第二矩阵对应的第三矩阵;将每行元素对应的多个第三矩阵相加,得到每行元素对应的第四矩阵;将每行元素对应的第四矩阵相加,得到结果矩阵。
示例性的,当稀疏矩阵为乘矩阵时,可以采用下述图5所示的方法对矩阵进行乘法处理。
具体的,对稀疏矩阵进行列偏移和压缩,得到列偏移矩阵和压缩矩阵;将压缩矩阵中的每列元素分别与另外一个矩阵的每行元素相乘,得到每列元素对应的多个第一矩阵;根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移列数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的列数的基础上,对第一矩阵中的每个元素进行列偏移,得到第一矩阵对应的第二矩阵;根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的行数,对第一矩阵对应的第二矩阵中的每个元素进行行偏移,得到第二矩阵对应的第三矩阵;将每列元素对应的多个第三矩阵相加,得到每列元素对应的第四矩阵;将每列元素对应的第四矩阵相加,得到结果矩阵。
步骤304、加速装置采用第二模式对稀疏矩阵进行处理。
其中,第二模式为将稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。
示例性的,以稀疏矩阵A与矩阵B相乘,且稀疏矩阵A采用上述CSR格式进行存储为例,假设稀疏矩阵A为行偏移量=[1 3 4 5 7]、列号=[1 4 4 2 1 3]、数值=[1 5 2 4 31]的矩阵;
当计算A*B的结果矩阵时,可以包括下述步骤1至步骤6:
步骤1、从稀疏矩阵A的数值中取出数值1,根据行偏移量和列号确定数值1位于第1行第1列,将数值1分别与矩阵B中每列元素的第1个元素相乘,得到[1 2 3 4],作为结果矩阵的第1行元素。
步骤2、从稀疏矩阵A的数值中取出数值5,根据行偏移量和列号确定数值5位于第1行第4列,将数值5分别与矩阵B中每列元素的第4个元素相乘,得到[25 30 35 40],由于数值5也位于第1行,所以将数值5对应的结果与数值1对应的结果相加,作为结果矩阵的第1行元素,即[26 32 38 44]。
步骤3、从稀疏矩阵A的数值中取出数值2,根据行偏移量和列号确定数值2位于第2行第4列,将数值2分别与矩阵B中每列元素的第4个元素相乘,得到[10 12 14 16],作为结果矩阵的第2行元素。
步骤4、从稀疏矩阵A的数值中取出数值4,根据行偏移量和列号确定数值4位于第3行第2列,将数值4分别与矩阵B中每列元素的第2个元素相乘,得到[20 24 28 32],作为结果矩阵的第3行元素。
步骤5、从稀疏矩阵A的数值中取出数值3,根据行偏移量和列号确定数值3位于第4行第1列,将数值3分别与矩阵B中每列元素的第1个元素相乘,得到[3 6 9 12],作为结果矩阵的第4行元素。
步骤6、从稀疏矩阵A的数值中取出数值1,根据行偏移量和列号确定数值1位于第4行第3列,将数值1分别与矩阵B中每列元素的第3个元素相乘,得到[1 2 3 4],由于数值1也位于第4行,所以将数值1对应的结果与数值3对应的结果相加,作为结果矩阵的第4行元素,即[4 8 12 16]。
基于图3所示的方法,当稀疏矩阵的均匀度越好时,可以采用第一模式基于向量化矩阵计算对两个矩阵进行乘法处理,当稀疏矩阵的均匀度较差时,可以采用第二模式基于稀疏矩阵的每个非0元素对两个矩阵进行乘法处理。通过判断稀疏矩阵的均匀度是否满足预设条件,可以合理确定具体采用哪种模式来对两个矩阵进行乘法处理,从而提高稀疏矩阵的计算效率。
基于上述图3,可以根据稀疏矩阵的均匀度确定采用第一模式还是采用第二模式对两个矩阵进行乘法处理,进一步的,在根据上述步骤302判断稀疏矩阵的均匀度是否满足预设条件之前,还可以采用下述步骤302a,根据稀疏矩阵的稠密度是否满足预设稠密度阈值,确定是否需要执行上述步骤302。
步骤302a、加速装置判断稀疏矩阵的稠密度是否小于预设稠密阈值;如果小于,执行上述步骤302,否则,执行下述步骤305。
其中,稀疏矩阵的元数据还可以包括稀疏矩阵的稠密度,稠密度用于指示稀疏矩阵的全部元素中非0元素的比例,稀疏矩阵中的非0元素越多,稀疏矩阵的稠密度越高。预设稠密度阈值与稀疏矩阵对应的矩阵规模对应;矩阵规模用于指示稀疏矩阵的行数和列数;根据稀疏矩阵的矩阵规模可以确定稀疏矩阵的全部元素的数量。
具体的,当根据上述步骤301对稀疏矩阵进行存储时,可以根据稀疏矩阵的矩阵规模和稀疏矩阵中非0元素的数量,确定稀疏矩阵的稠密度并保存到元数据中。也可以在对预先存储的稀疏矩阵进行乘法处理时,根据稀疏矩阵的行号信息和列号信息确定稀疏矩阵的矩阵规模,并根据矩阵规模和数值确定稀疏矩阵的稠密度。
对于一定矩阵规模的稀疏矩阵,当根据下述步骤305所示的采用矩阵结构处理方式对稀疏矩阵进行矩阵计算时,无论稀疏矩阵中非0元素的数量是多少,其计算速度都是一定的。当根据上述步骤304采用上述第二模式对稀疏矩阵进行矩阵计算时,随着稀疏矩阵中非0元素数量的增多,其计算速度逐渐下降,直至等于甚至小于采用矩阵结构处理方式进行矩阵计算的计算速度,此时,采用矩阵结构处理方式对稀疏矩阵进行矩阵计算的计算速度更高。
示例性的,对于一定矩阵规模的稀疏矩阵,可以计算不同稠密度下采用第二模式对稀疏矩阵进行矩阵计算的第一计算速度,以及采用矩阵结构处理方式对稀疏矩阵进行矩阵计算的第二计算速度,将第一计算速度刚好等于或小于第二计算速度时对应的稠密度确定为该矩阵规模下的稀疏矩阵对应的稠密度阈值。
一种可能的设计中,加速装置可以在信息处理系统的初始化过程中,在配置文件中预先配置信息处理系统可能会处理的稀疏矩阵的矩阵规模和稠密度,然后根据配置文件中的矩阵规模和稠密度构建稀疏矩阵,对于同一矩阵规模下不同稠密度的稀疏矩阵,分别采用上述第二模式和矩阵结构处理方式对稀疏矩阵进行计算,得到不同稠密度下第二模式对应的第一计算速度和矩阵结构处理方式对应的第二计算速度,将第一计算速度刚好等于或小于第二计算速度时对应的稠密度确定为该矩阵规模下的稀疏矩阵对应的稠密度阈值。
又一种可能的设计中,加速装置也可以在信息处理系统的运行过程中,采用上述第二模式对稀疏矩阵进行处理,并记录该稀疏矩阵,以及采用第二模式对稀疏矩阵进行矩阵计算的第一计算速度。在信息处理系统处于空闲状态时,采用上述矩阵结构处理方式对记录的稀疏矩阵进行处理,得到采用矩阵结构处理方式对稀疏矩阵进行矩阵计算的第二计算速度。将对应于同一矩阵规模的不同稠密度的稀疏矩阵在两种处理方式下的计算速度进行比较,将第一计算速度刚好等于或小于第二计算速度时对应的稠密度确定为该矩阵规模下的稀疏矩阵对应的稠密度阈值。
进一步的,在信息处理系统的运行过程中,加速装置也可以记录稀疏矩阵的矩阵规模、稠密度以及对应的第一计算速度,而不用完整记录该稀疏矩阵,从而节省信息处理系统的存储空间。此时,可以在信息处理系统处于空闲状态时,根据记录的稀疏矩阵的矩阵规模和稠密度构建稀疏矩阵,并采用上述矩阵结构处理方式对构建的稀疏矩阵进行矩阵处理,得到第二计算速度。
步骤305、加速装置将稀疏矩阵转换为矩阵结构进行乘法处理。
具体的,当采用上述存储格式对稀疏矩阵进行存储时,根据步骤302a确定稀疏矩阵的稠密度大于预设稠密度阈值,可以将稀疏矩阵由上述存储格式转换为矩阵结构,根据矩阵结构处理方式对稀疏矩阵进行乘法处理。
示例性的,以转换后的稀疏矩阵为下述稀疏矩阵A为例,
当计算A*B的结果矩阵时,可以包括下述步骤1至步骤4:
步骤1、将稀疏矩阵A中第1行的元素分别与矩阵B中每一列的元素相乘相加,得到[26 32 38 44],作为结果矩阵的第1行元素。
步骤2、将稀疏矩阵A中第2行的元素分别与矩阵B中每一列的元素相乘相加,得到[10 12 14 16],作为结果矩阵的第2行元素。
步骤3、将稀疏矩阵A中第3行的元素分别与矩阵B中每一列的元素相乘相加,得到[20 24 28 32],作为结果矩阵的第3行元素。
步骤4、将稀疏矩阵A中第4行的元素分别与矩阵B中每一列的元素相乘相加,得到[4 8 12 16],作为结果矩阵的第4行元素。
基于上述包括步骤302a和步骤305在内的图3所示的方法,当稀疏矩阵的稠密度大于预设稠密度阈值时,可以将稀疏矩阵转换成矩阵结构进行乘法处理,当稀疏矩阵的稠密度小于预设稠密度阈值时,可以进一步判断稀疏矩阵的均匀度是否满足预设条件。通过利用稠密度和均匀度,可以合理确定具体采用哪种方式来对两个矩阵进行乘法处理,从而提高稀疏矩阵的计算效率。
基于上述图3,当确定采用第一模式对稀疏矩阵进行处理时,若该稀疏矩阵为被乘矩阵,则可以采用如下述图4所示的方法对稀疏矩阵进行处理。
图4为本实施例提供的一种稀疏矩阵计算方法的流程图,如图4所示,该方法可以包括:
步骤401、加速装置对稀疏矩阵进行行偏移和压缩,得到行偏移矩阵和压缩矩阵。
其中,稀疏矩阵为i*j的矩阵;i和j为大于1的整数;行偏移矩阵为k*j的矩阵,k<i,行偏移矩阵包括压缩矩阵中每个元素对应的偏移行数offset1;0≤offset1<i;压缩矩阵为k*j的矩阵,压缩矩阵中的每行非0元素为每组非0元素;压缩矩阵中第(k,j)个非0元素为稀疏矩阵的第(k+offset1,j)个非0元素;压缩矩阵的第j列中非0元素之前不存在0元素。
具体的,可以根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,确定每个非0元素在压缩矩阵中的列数;根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,确定稀疏矩阵中每列对应的非0元素,根据每个非0元素在每列非0元素中的顺序,确定每个非0元素在压缩矩阵中的行数。
具体的,可以根据压缩矩阵中的每个元素在稀疏矩阵中的行数,和压缩矩阵中的每个元素在压缩矩阵中的行数,确定压缩矩阵中每个元素对应的偏移行数;根据偏移行数,确定行偏移矩阵。
例如,以稀疏采用扩展的CSR存储格式进行存储为例,假设稀疏矩阵包括:行偏移量=[1 4 6 7 8 11];列号=[1 3 5 3 4 2 2 1 4 5];数值=[1 3 4 2 2 8 4 2 1 1];元数据=[2 2]。
根据上述稀疏矩阵可知,该稀疏矩阵的第1列中依次包括非0元素1和2,第2列中依次包括非0元素8和4,第3列中依次包括非0元素3和2,第4列中依次包括非0元素2和1,第5列中依次包括非0元素4和1,则可以确定压缩矩阵为:
根据稀疏矩阵和压缩矩阵可知,压缩矩阵的第一行中,数值1相比于稀疏矩阵没有进行行偏移;数值8相比于稀疏矩阵向上平移2行;数值3相比于稀疏矩阵没有进行行偏移;数值2相比于稀疏矩阵向上平移1行;数值4相比于稀疏矩阵没有进行行偏移;压缩矩阵的第2行中,数值2相比于稀疏矩阵向上平移3行;数值4相比于稀疏矩阵向上平移2行;数值2相比于稀疏矩阵没有进行行偏移;数值1相比于稀疏矩阵向上平移3行;数值1相比于稀疏矩阵向上平移3行;则可以确定行偏移矩阵为:
步骤402、加速装置将压缩矩阵中的每行元素分别与另外一个矩阵的每列元素相乘,得到每行元素对应的m个第一矩阵。
其中,另外一个矩阵为j*m的矩阵;第一矩阵为1*j的矩阵;每行元素对应的第m个第一矩阵的第(1,j)个元素为每行元素的第j个元素与另外一个矩阵的第m列元素中第j个元素的乘积。
例如,以步骤401中的稀疏矩阵和压缩矩阵为例,假设另外一个矩阵为下述5*3的矩阵:
将压缩矩阵的第1行元素与该另外一个矩阵的第1列元素相乘,得到第一矩阵11=[1 56 6 8 4];将压缩矩阵的第1行元素与另外一个矩阵的第2列元素相乘,得到第一矩阵12=[0 16 15 2 20];将压缩矩阵的第1行元素与另外一个矩阵的第3列元素相乘,得到第一矩阵13=[3 8 24 0 0]。
将压缩矩阵的第2行元素与该另外一个矩阵的第1列元素相乘,得到第一矩阵21=[2 28 4 4 1];将压缩矩阵的第2行元素与另外一个矩阵的第2列元素相乘,得到第一矩阵22=[0 8 10 1 5];将压缩矩阵的第2行元素与另外一个矩阵的第3列元素相乘,得到第一矩阵23=[6 4 16 0 0]。
步骤403、加速装置根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移行数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的行数的基础上,对第一矩阵中的每个元素进行行偏移,得到第一矩阵对应的第二矩阵。
其中,第二矩阵为i*j的矩阵。
例如,以步骤401中的行偏移矩阵和步骤402中每行元素对应的3个第一矩阵为例,
根据该行偏移矩阵的第1行元素,在第一矩阵对应压缩矩阵的第一行的基础上,分别对第一矩阵11=[1 56 6 8 4]、第一矩阵12=[0 16 15 2 20]、第一矩阵13=[3 8 24 00]进行行偏移,得到下述第二矩阵11、第二矩阵12、第二矩阵13:
根据该行偏移矩阵的第2行元素,在第一矩阵对应压缩矩阵的第二行的基础上,分别对第一矩阵21=[2 28 4 4 1]、第一矩阵22=[0 8 10 1 5]、第一矩阵23=[6 4 16 00]进行行偏移,得到下述第二矩阵21、第二矩阵22、第二矩阵23:
步骤404、加速装置根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的列数,对第一矩阵对应的第二矩阵中的每个元素进行列偏移,得到第二矩阵对应的第三矩阵。
其中,第三矩阵为i*m的矩阵。
例如,以上述步骤401中另外一个矩阵和步骤403中的第二矩阵为例,根据上述步骤可知,第二矩阵11对应另外一个矩阵的第1列元素,第二矩阵12对应另外一个矩阵的第2列元素;第二矩阵13对应另外一个矩阵的第3列元素;第二矩阵21对应另外一个矩阵的第1列元素,第二矩阵22对应另外一个矩阵的第2列元素;第二矩阵23对应另外一个矩阵的第3列元素;所以将第二矩阵11中的每个元素偏移到第1列;将第二矩阵12中的每个元素偏移到第2列;将第二矩阵13中的每个元素偏移到第3列;将第二矩阵21中的每个元素偏移到第1列;将第二矩阵22中的每个元素偏移到第2列;将第二矩阵23中的每个元素偏移到第3列;
步骤405、加速装置将每行元素对应的m个第三矩阵相加,得到每行元素对应的第四矩阵。
其中,第四矩阵为i*m的矩阵。
例如,以上述步骤404中的第三矩阵为例,根据上述步骤可知,第三矩阵11、第三矩阵12和第三矩阵13均对应压缩矩阵的第1行元素,所以将第三矩阵11、第三矩阵12和第三矩阵13相加,得到压缩矩阵的第1行元素对应的下述第四矩阵1;第三矩阵21、第三矩阵22和第三矩阵23均对应压缩矩阵的第2行元素,所以将第三矩阵21、第三矩阵22和第三矩阵23相加,得到压缩矩阵的第1行元素对应的下述第四矩阵2。
步骤406、加速装置将每行元素对应的第四矩阵相加,得到结果矩阵。
其中,结果矩阵为i*m的矩阵。
例如,以步骤405中的第四矩阵为例,可以得到步骤401中的稀疏矩阵与另外一个矩阵的结果矩阵为:
基于上述图3,当确定采用第一模式对稀疏矩阵进行处理时,若该稀疏矩阵为乘矩阵,则可以采用如下述图5所示的方法对稀疏矩阵进行处理。
步骤501、加速装置对稀疏矩阵进行列偏移和压缩,得到列偏移矩阵和压缩矩阵。
其中,稀疏矩阵为i*j的矩阵;i和j为大于1的整数;列偏移矩阵为i*p的矩阵,p<j,列偏移矩阵包括压缩矩阵中每个元素对应的偏移列数offset2;0≤offset2<j;压缩矩阵为i*p的矩阵,压缩矩阵中的每列非0元素为每组非0元素;压缩矩阵中第(i,p)个非0元素为稀疏矩阵的第(i,p+offset2)个非0元素;压缩矩阵的第i行中非0元素之前不存在0元素。
具体的,可以根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,确定每个非0元素在压缩矩阵中的行数;根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,确定稀疏矩阵中每行对应的非0元素,根据每个非0元素在每行非0元素中的顺序,确定每个非0元素在压缩矩阵中的列数。
具体的,可以根据压缩矩阵中的每个元素在稀疏矩阵中的列数,和压缩矩阵中的每个元素在压缩矩阵中的列数,确定压缩矩阵中每个元素对应的偏移列数;根据偏移列数,确定列偏移矩阵。
例如,以稀疏采用扩展的CSR存储格式进行存储为例,假设稀疏矩阵包括:行号=[1 5 3 4 1 2 2 3 5 4];列偏移量=[1 3 5 7 10 11];数值=[1 2 8 4 3 2 2 4 1 1];元数据=[2 2]。
根据上述稀疏矩阵可知,该稀疏矩阵的第1行中依次包括非0元素1和3,第2行中依次包括非0元素2和2,第3行中依次包括非0元素8和4,第4行中依次包括非0元素4和1,第5行中依次包括非0元素2和1,则可以确定压缩矩阵为:
根据稀疏矩阵和压缩矩阵可知,压缩矩阵的第1列中,数值1相比于稀疏矩阵没有进行列偏移;数值2相比于稀疏矩阵向左平移2行;数值8相比于稀疏矩阵向左平移1行;数值4相比于稀疏矩阵向左平移1行;数值2相比于稀疏矩阵没有进行列偏移;压缩矩阵的第2列中,数值3相比于稀疏矩阵向左平移1行;数值2相比于稀疏矩阵向左平移2行;数值4相比于稀疏矩阵向左平移2行;数值1相比于稀疏矩阵向左平移3行;数值1相比于稀疏矩阵向左平移2行;则可以确定列偏移矩阵为:
步骤502、加速装置将压缩矩阵中的每列元素分别与另外一个矩阵的每行元素相乘,得到每列元素对应的n个第一矩阵。
其中,另外一个矩阵为n*i的矩阵;第一矩阵为i*1的矩阵;每列元素对应的第n个第一矩阵的第(i,1)个元素为每列元素的第i个元素与另外一个矩阵的第n行元素中第i个元素的乘积。
例如,以步骤501中的稀疏矩阵和压缩矩阵为例,假设另外一个矩阵为下述2*5的矩阵:
将压缩矩阵的第1列元素与该另外一个矩阵的第1行元素相乘,得到下述第一矩阵11;将压缩矩阵的第1列元素与该另外一个矩阵的第2行元素相乘,得到下述第一矩阵12;将压缩矩阵的第2列元素与该另外一个矩阵的第1行元素相乘,得到下述第一矩阵21;将压缩矩阵的第2列元素与该另外一个矩阵的第2行元素相乘,得到下述第一矩阵22。
步骤503、加速装置根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移列数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的列数的基础上,对第一矩阵中的每个元素进行列偏移,得到第一矩阵对应的第二矩阵。
其中,第二矩阵为i*j的矩阵。
例如,以步骤501中的列偏移矩阵和步骤502中每列元素对应的2个第一矩阵为例,
根据该列偏移矩阵的第1列元素,在第一矩阵对应压缩矩阵的第1列的基础上,分别对第一矩阵11、第一矩阵12进行列偏移,得到下述第二矩阵11、第二矩阵12:
根据该列偏移矩阵的第2列元素,在第一矩阵对应压缩矩阵的第2列的基础上,分别对第一矩阵21、第一矩阵22进行列偏移,得到下述第二矩阵21、第二矩阵22:
步骤504、加速装置根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的行数,对第一矩阵对应的第二矩阵中的每个元素进行行偏移,得到第二矩阵对应的第三矩阵。
其中,第三矩阵为n*j的矩阵。
例如,以上述步骤501中另外一个矩阵和步骤503中的第二矩阵为例,根据上述步骤可知,第二矩阵11对应另外一个矩阵的第1行元素,第二矩阵12对应另外一个矩阵的第2行元素;第二矩阵21对应另外一个矩阵的第1行元素,第二矩阵22对应另外一个矩阵的第2行元素;所以将第二矩阵11中的每个元素偏移到第1行;将第二矩阵12中的每个元素偏移到第2行;将第二矩阵21中的每个元素偏移到第1行;将第二矩阵22中的每个元素偏移到第2行;
步骤505、加速装置将每列元素对应的n个第三矩阵相加,得到每列元素对应的第四矩阵。
其中,第四矩阵为n*j的矩阵。
例如,以上述步骤504中的第三矩阵为例,根据上述步骤可知,第三矩阵11、第三矩阵12均对应压缩矩阵的第1列元素,所以将第三矩阵11、第三矩阵12相加,得到压缩矩阵的第1列元素对应的下述第四矩阵1;第三矩阵21、第三矩阵22均对应压缩矩阵的第2列元素,所以将第三矩阵21、第三矩阵22相加,得到压缩矩阵的第1列元素对应的下述第四矩阵2。
步骤506、将每列元素对应的第四矩阵相加,得到结果矩阵。
其中,结果矩阵为n*j的矩阵。
例如,以步骤505中的第四矩阵为例,可以得到步骤501中的稀疏矩阵与另外一个矩阵的结果矩阵为:
上述主要从设备之间交互的角度对本实施例提供的方案进行了介绍。可以理解的是,各个设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本实施例可以根据上述方法示例对各个网元进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图6示出了一种加速装置,加速装置60可以为芯片或者片上系统。该加速装置60可以用于执行上述实施例中涉及的加速装置的功能。图6所示加速装置60包括:判断模块601、计算模块602。
判断模块601,用于当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断稀疏矩阵的均匀度是否满足预设条件;其中,均匀度用于指示稀疏矩阵中非0元素分布的均匀程度。
计算模块602,用于如果是,采用第一模式对两个矩阵进行乘法处理;其中,第一模式为对稀疏矩阵进行偏移和压缩,得到至少一组非0元素,将至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵。
计算模块602,还用于否则,采用第二模式对两个矩阵进行乘法处理;其中,第二模式为将稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。
其中,该加速装置60的具体实现方式可参考图3至图5所述稀疏矩阵计算方法中加速装置的行为功能。
可选地,稀疏矩阵包括行号信息、列号信息和数值;其中,行号信息用于指示稀疏矩阵中非0元素对应的行;列号信息用于指示稀疏矩阵中非0元素对应的列;数值包括稀疏矩阵的全部非0元素。
可选地,稀疏矩阵包括元数据;其中,当稀疏矩阵为被乘矩阵时,元数据包括稀疏矩阵所有列中非0元素的数量的最大值和最小值;当稀疏矩阵为乘矩阵时,元数据包括稀疏矩阵中所有行中非0元素的数量的最大值和最小值。
可选地,加速装置60还包括确定模块603;确定模块603,用于当稀疏矩阵为被乘矩阵时,根据稀疏矩阵和列号信息确定稀疏矩阵所有列中非0元素的数量的最大值与最小值;确定模块603,还用于当稀疏矩阵为乘矩阵时,根据稀疏矩阵的行号信息确定稀疏矩阵所有行中非0元素的数量的最大值与最小值。
可选地,当稀疏矩阵为被乘矩阵时,均匀度为稀疏矩阵的列均匀度;其中,列均匀度为稀疏矩阵的所有列中非0元素的数量的最大值与最小值的差值;当稀疏矩阵为乘矩阵时,均匀度为稀疏矩阵的行均匀度;其中,行均匀度为稀疏矩阵的所有行中非0元素的数量的最大值与最小值的差值。
可选地,当稀疏矩阵为被乘矩阵时,判断模块601,用于判断稀疏矩阵的列均匀度是否小于等于第一阈值,如果是,确定稀疏矩阵的均匀度满足预设条件;当稀疏矩阵为乘矩阵时,判断模块601,用于判断稀疏矩阵的行均匀度是否小于等于第二阈值,如果是,确定稀疏矩阵的均匀度满足预设条件。
可选地,元数据还包括稀疏矩阵的稠密度;其中,稠密度用于指示稀疏矩阵的全部元素中非0元素的比例。
可选地,确定模块603,还用于根据稀疏矩阵对应的矩阵规模和稀疏矩阵中非0元素的数量,确定稀疏矩阵的稠密度;其中,矩阵规模用于指示稀疏矩阵的行数和列数。
可选地,判断稀疏矩阵的稠密度是否小于预设稠密度阈值;其中,稠密度用于指示稀疏矩阵的全部元素中非0元素的比例;预设稠密度矩阵与稀疏矩阵对应的矩阵规模对应;矩阵规模用于指示稀疏矩阵的行数和列数;如果小于,判断稀疏矩阵的均匀度是否满足预设条件;否则,将稀疏矩阵转换为矩阵结构进行乘法处理。
可选地,计算模块602,还用于采用第二模式对同一矩阵规模的不同稠密度的稀疏矩阵进行乘法处理,得到同一矩阵规模下每个稠密度对应的第一计算速度;计算模块602,还用于采用矩阵结构对不同稠密度的稀疏矩阵进行乘法处理,得到每个稠密度对应的第二计算速度;计算模块602,还用于根据不同稠密度对应的第一计算速度和第二计算速度,将第一计算速度小于或等于第二计算速度时对应的稠密度确定为矩阵规模对应的稠密度阈值。
可选地,当稀疏矩阵为被乘矩阵时,计算模块602,具体用于:计算模块602,用于对稀疏矩阵进行行偏移和压缩,得到行偏移矩阵和压缩矩阵;其中,稀疏矩阵为i*j的矩阵;i和j为大于1的整数;行偏移矩阵为k*j的矩阵,k<i,行偏移矩阵包括压缩矩阵中每个元素对应的偏移行数offset1;0≤offset1<i;压缩矩阵为k*j的矩阵,压缩矩阵中的每行非0元素为每组非0元素;压缩矩阵中第(k,j)个非0元素为稀疏矩阵的第(k+offset1,j)个非0元素;压缩矩阵的第j列中非0元素之前不存在0元素。
可选地,计算模块602,还用于根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,确定每个非0元素在压缩矩阵中的列数;计算模块602,还用于根据稀疏矩阵中每个非0元素在稀疏矩阵中的列数,确定稀疏矩阵中每列对应的非0元素,根据每个非0元素在每列非0元素中的顺序,确定每个非0元素在压缩矩阵中的行数。
可选地,计算模块602,还用于根据压缩矩阵中的每个元素在稀疏矩阵中的行数,和压缩矩阵中的每个元素在压缩矩阵中的行数,确定压缩矩阵中每个元素对应的偏移行数;计算模块602,还用于根据偏移行数,确定行偏移矩阵。
可选地,计算模块602,还用于将压缩矩阵中的每行元素分别与另外一个矩阵的每列元素相乘,得到每行元素对应的m个第一矩阵;其中,另外一个矩阵为j*m的矩阵;第一矩阵为1*j的矩阵;每行元素对应的第m个第一矩阵的第(1,j)个元素为每行元素的第j个元素与另外一个矩阵的第m列元素中第j个元素的乘积;计算模块602,还用于根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移行数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的行数的基础上,对第一矩阵中的每个元素进行行偏移,得到第一矩阵对应的第二矩阵;其中,第二矩阵为i*j的矩阵;计算模块602,还用于根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的列数,对第一矩阵对应的第二矩阵中的每个元素进行列偏移,得到第二矩阵对应的第三矩阵;其中,第三矩阵为i*m的矩阵;计算模块602,还用于将每行元素对应的m个第三矩阵相加,得到每行元素对应的第四矩阵;其中,第四矩阵为i*m的矩阵;计算模块602,还用于将每行元素对应的第四矩阵相加,得到结果矩阵;其中,结果矩阵为i*m的矩阵。
可选地,当稀疏矩阵为乘矩阵时,计算模块602,具体用于:计算模块602,用于对稀疏矩阵进行列偏移和压缩,得到列偏移矩阵和压缩矩阵;其中,稀疏矩阵为i*j的矩阵;i和j为大于1的整数;列偏移矩阵为i*p的矩阵,p<j,列偏移矩阵包括压缩矩阵中每个元素对应的偏移列数offset2;0≤offset2<j;压缩矩阵为i*p的矩阵,压缩矩阵中的每列非0元素为每组非0元素;压缩矩阵中第(i,p)个非0元素为稀疏矩阵的第(i,p+offset2)个非0元素;压缩矩阵的第i行中非0元素之前不存在0元素。
可选地,计算模块602,还用于根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,确定每个非0元素在压缩矩阵中的行数;计算模块602,还用于根据稀疏矩阵中每个非0元素在稀疏矩阵中的行数,确定稀疏矩阵中每行对应的非0元素,根据每个非0元素在每行非0元素中的顺序,确定每个非0元素在压缩矩阵中的列数。
可选地,计算模块602,还用于根据压缩矩阵中的每个元素在稀疏矩阵中的列数,和压缩矩阵中的每个元素在压缩矩阵中的列数,确定压缩矩阵中每个元素对应的偏移列数;计算模块602,还用于根据偏移列数,确定列偏移矩阵。
可选地,计算模块602,还用于将压缩矩阵中的每列元素分别与另外一个矩阵的每行元素相乘,得到每列元素对应的n个第一矩阵;其中,另外一个矩阵为n*i的矩阵;第一矩阵为i*1的矩阵;每列元素对应的第n个第一矩阵的第(i,1)个元素为每列元素的第i个元素与另外一个矩阵的第n行元素中第i个元素的乘积;计算模块602,还用于根据第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移列数,在第一矩阵中的元素对应的压缩矩阵中的元素对应的列数的基础上,对第一矩阵中的每个元素进行列偏移,得到第一矩阵对应的第二矩阵;其中,第二矩阵为i*j的矩阵;计算模块602,还用于根据第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的行数,对第一矩阵对应的第二矩阵中的每个元素进行行偏移,得到第二矩阵对应的第三矩阵;其中,第三矩阵为n*j的矩阵;计算模块602,还用于将每列元素对应的n个第三矩阵相加,得到每列元素对应的第四矩阵;其中,第四矩阵为n*j的矩阵;计算模块602,还用于将每列元素对应的第四矩阵相加,得到结果矩阵;其中,结果矩阵为n*j的矩阵。
可选地,图6中的判断模块601、计算模块602可以由处理器代替,该处理器可以集成判断模块601、计算模块602的功能。进一步的,图6所示加速装置60还可以包括存储器。当判断模块601、计算模块602由处理器代替时,本实施例所涉及的加速装置60可以为图2所示装置。
作为一种可能的实施例,本申请还提供一种加速装置,所述加速装置包括一个或多个处理器,具体结构参见图1或图2所述加速装置的结构示意图。上述处理器用于实现上述图3至图5所述方法的操作步骤,为了避免重复,在此不再赘述。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (21)
1.一种稀疏矩阵计算方法,其特征在于,包括:
当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断所述稀疏矩阵的均匀度是否满足预设条件;其中,所述均匀度用于指示所述稀疏矩阵中非0元素分布的均匀程度;
如果是,采用第一模式对两个矩阵进行乘法处理,得到结果矩阵,其中,所述第一模式用于指示对所述稀疏矩阵进行压缩和偏移处理实现对所述两个矩阵乘法处理;
否则,采用第二模式对所述两个矩阵进行乘法处理,得到结果矩阵,其中,所述第二模式用于将所述稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘实现对所述两个矩阵乘法处理。
2.根据权利要求1所述的方法,其特征在于,
所述稀疏矩阵包括行号信息、列号信息和数值;其中,所述行号信息用于指示所述稀疏矩阵中非0元素对应的行;所述列号信息用于指示所述稀疏矩阵中非0元素对应的列;所述数值包括所述稀疏矩阵的全部非0元素。
3.根据权利要求1或2所述的方法,其特征在于,所述稀疏矩阵包括元数据;
当所述稀疏矩阵为被乘矩阵时,所述元数据包括所述稀疏矩阵所有列中非0元素的数量的最大值和最小值;
当所述稀疏矩阵为乘矩阵时,所述元数据包括所述稀疏矩阵中所有行中非0元素的数量的最大值和最小值。
4.根据权利要求2所述的方法,其特征在于,
当所述稀疏矩阵为被乘矩阵时,根据所述稀疏矩阵的列号信息确定所述稀疏矩阵所有列中非0元素的数量的最大值与最小值;
当所述稀疏矩阵为乘矩阵时,根据所述稀疏矩阵的行号信息确定所述稀疏矩阵所有行中非0元素的数量的最大值与最小值。
5.根据权利要求1-4任一项所述的方法,其特征在于,
当所述稀疏矩阵为被乘矩阵时,所述均匀度为所述稀疏矩阵的列均匀度;其中,所述列均匀度为所述稀疏矩阵的所有列中非0元素的数量的最大值与最小值的差值;
当所述稀疏矩阵为乘矩阵时,所述均匀度为所述稀疏矩阵的行均匀度;其中,所述行均匀度为所述稀疏矩阵的所有行中非0元素的数量的最大值与最小值的差值。
6.根据权利要求5所述的方法,其特征在于,判断所述稀疏矩阵的均匀度是否满足预设条件,包括:
当所述稀疏矩阵为被乘矩阵时,判断所述稀疏矩阵的列均匀度是否小于等于第一阈值,如果是,确定所述稀疏矩阵的均匀度满足预设条件;
当所述稀疏矩阵为乘矩阵时,判断所述稀疏矩阵的行均匀度是否小于等于第二阈值,如果是,确定所述稀疏矩阵的均匀度满足预设条件。
7.根据权利要求3所述的方法,其特征在于,
所述元数据还包括所述稀疏矩阵的稠密度;其中,所述稠密度用于指示所述稀疏矩阵的全部元素中非0元素的比例。
8.根据权利要求7所述的方法,其特征在于,
根据所述稀疏矩阵对应的矩阵规模和所述稀疏矩阵中非0元素的数量,确定所述稀疏矩阵的稠密度;其中,所述矩阵规模用于指示所述稀疏矩阵的行数和列数。
9.根据权利要求1-8任一项所述的方法,其特征在于,所述判断所述稀疏矩阵的均匀度是否满足预设条件之前,所述方法还包括:
判断所述稀疏矩阵的稠密度是否小于预设稠密度阈值;其中,所述稠密度用于指示所述稀疏矩阵的全部元素中非0元素的比例;所述预设稠密度阈值与所述稀疏矩阵对应的矩阵规模对应;所述矩阵规模用于指示所述稀疏矩阵的行数和列数;
如果小于,判断所述稀疏矩阵的均匀度是否满足预设条件;
否则,将所述稀疏矩阵转换为矩阵结构进行乘法处理。
10.根据权利要求9所述的方法,其特征在于,
采用所述第二模式对同一矩阵规模的不同稠密度的稀疏矩阵进行乘法处理,得到同一矩阵规模下每个稠密度对应的第一计算速度;
采用所述矩阵结构对所述不同稠密度的稀疏矩阵进行乘法处理,得到所述每个稠密度对应的第二计算速度;
根据所述不同稠密度对应的所述第一计算速度和所述第二计算速度,将所述第一计算速度小于或等于所述第二计算速度时对应的稠密度确定为所述矩阵规模对应的稠密度阈值。
11.根据权利要求1-10任一项所述的方法,其特征在于,当所述稀疏矩阵为被乘矩阵时,所述对所述稀疏矩阵进行偏移和压缩,得到至少一组非0元素,包括:
对所述稀疏矩阵进行行偏移和压缩,得到行偏移矩阵和压缩矩阵;其中,所述稀疏矩阵为i*j的矩阵;i和j为大于1的整数;所述行偏移矩阵为k*j的矩阵,k<i,所述行偏移矩阵包括所述压缩矩阵中每个元素对应的偏移行数offset1;0≤offset1<i;所述压缩矩阵为k*j的矩阵,所述压缩矩阵中的每行非0元素为所述每组非0元素;所述压缩矩阵中第(k,j)个非0元素为所述稀疏矩阵的第(k+offset1,j)个非0元素;所述压缩矩阵的第j列中非0元素之前不存在0元素。
12.根据权利要求11所述的方法,其特征在于,所述对所述稀疏矩阵进行行偏移和压缩,得到所述压缩矩阵,包括:
根据所述稀疏矩阵中每个非0元素在所述稀疏矩阵中的列数,确定所述每个非0元素在所述压缩矩阵中的列数;
根据所述稀疏矩阵中每个非0元素在所述稀疏矩阵中的列数,确定所述稀疏矩阵中每列对应的非0元素,根据所述每个非0元素在每列非0元素中的顺序,确定每个非0元素在所述压缩矩阵中的行数。
13.根据权利要求12所述的方法,其特征在于,所述对所述稀疏矩阵进行行偏移和压缩,得到所述行偏移矩阵,包括:
根据所述压缩矩阵中的每个元素在所述稀疏矩阵中的行数,和所述压缩矩阵中的每个元素在所述压缩矩阵中的行数,确定所述压缩矩阵中每个元素对应的偏移行数;
根据所述偏移行数,确定所述行偏移矩阵。
14.根据权利要求11-13任一项所述的方法,其特征在于,所述将所述至少一组非0元素中的每组非0元素分别与另外一个矩阵相乘并偏移,得到结果矩阵,包括:
将所述压缩矩阵中的每行元素分别与所述另外一个矩阵的每列元素相乘,得到所述每行元素对应的m个第一矩阵;其中,所述另外一个矩阵为j*m的矩阵;所述第一矩阵为1*j的矩阵;所述每行元素对应的第m个第一矩阵的第(1,j)个元素为所述每行元素的第j个元素与所述另外一个矩阵的第m列元素中第j个元素的乘积;
根据所述第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移行数,在所述第一矩阵中的元素对应的压缩矩阵中的元素对应的行数的基础上,对所述第一矩阵中的每个元素进行行偏移,得到所述第一矩阵对应的第二矩阵;其中,所述第二矩阵为i*j的矩阵;
根据所述第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的列数,对所述第一矩阵对应的第二矩阵中的每个元素进行列偏移,得到所述第二矩阵对应的第三矩阵;其中,所述第三矩阵为i*m的矩阵;
将所述每行元素对应的m个第三矩阵相加,得到所述每行元素对应的第四矩阵;其中,所述第四矩阵为i*m的矩阵;
将所述每行元素对应的第四矩阵相加,得到所述结果矩阵;其中,所述结果矩阵为i*m的矩阵。
15.根据权利要求1-10任一项所述的方法,其特征在于,当所述稀疏矩阵为乘矩阵时,所述采用第一模式对两个矩阵进行乘法处理,包括:
对所述稀疏矩阵进行列偏移和压缩,得到列偏移矩阵和压缩矩阵;
将所述压缩矩阵中的每列元素分别与所述另外一个矩阵的每行元素相乘,得到所述每列元素对应的多个第一矩阵;
根据所述第一矩阵中的每个元素对应的压缩矩阵中的元素对应的偏移列数,在所述第一矩阵中的元素对应的压缩矩阵中的元素对应的列数的基础上,对所述第一矩阵中的每个元素进行列偏移,得到所述第一矩阵对应的第二矩阵;
根据所述第一矩阵中的每个元素对应的另外一个矩阵中的元素对应的行数,对所述第一矩阵对应的第二矩阵中的每个元素进行行偏移,得到所述第二矩阵对应的第三矩阵;
将所述每列元素对应的多个第三矩阵相加,得到所述每列元素对应的第四矩阵;
将所述每列元素对应的第四矩阵相加,得到所述结果矩阵。
16.一种加速装置,其特征在于,包括:
判断模块,用于当两个相乘的矩阵中至少有一个矩阵是稀疏矩阵时,判断所述稀疏矩阵的均匀度是否满足预设条件;其中,所述均匀度用于指示所述稀疏矩阵中非0元素分布的均匀程度;
计算模块,用于如果是,采用第一模式对两个矩阵进行乘法处理;其中,所所述第一模式用于指示对所述稀疏矩阵进行压缩和偏移处理实现对所述两个矩阵乘法处理;
所述计算模块,还用于否则,采用第二模式对所述两个矩阵进行乘法处理;其中,所述第二模式为将所述稀疏矩阵中的每个非0元素分别与另外一个矩阵相乘,得到结果矩阵。
17.根据权利要求16所述的装置,其特征在于,所述稀疏矩阵包括元数据;
当所述稀疏矩阵为被乘矩阵时,所述元数据包括所述稀疏矩阵所有列中非0元素的数量的最大值和最小值;
当所述稀疏矩阵为乘矩阵时,所述元数据包括所述稀疏矩阵中所有行中非0元素的数量的最大值和最小值。
18.根据权利要求16或17任一项所述的装置,其特征在于,
当所述稀疏矩阵为被乘矩阵时,所述均匀度为所述稀疏矩阵的列均匀度;其中,所述列均匀度为所述稀疏矩阵的所有列中非0元素的数量的最大值与最小值的差值;
当所述稀疏矩阵为乘矩阵时,所述均匀度为所述稀疏矩阵的行均匀度;其中,所述行均匀度为所述稀疏矩阵的所有行中非0元素的数量的最大值与最小值的差值。
19.根据权利要求18所述的装置,其特征在于,所述判断模块,具体用于:
当所述稀疏矩阵为被乘矩阵时,所述判断模块,用于判断所述稀疏矩阵的列均匀度是否小于等于第一阈值,如果是,确定所述稀疏矩阵的均匀度满足预设条件;
当所述稀疏矩阵为乘矩阵时,所述判断模块,用于判断所述稀疏矩阵的行均匀度是否小于等于第二阈值,如果是,确定所述稀疏矩阵的均匀度满足预设条件。
20.根据权利要求16-19任一项所述的装置,其特征在于,所述判断模块,具体用于:
判断所述稀疏矩阵的稠密度是否小于预设稠密度阈值;其中,所述稠密度用于指示所述稀疏矩阵的全部元素中非0元素的比例;所述预设稠密度矩阵与所述稀疏矩阵对应的矩阵规模对应;所述矩阵规模用于指示所述稀疏矩阵的行数和列数;
如果小于,判断所述稀疏矩阵的均匀度是否满足预设条件;
否则,将所述稀疏矩阵转换为矩阵结构进行乘法处理。
21.一种加速装置,其特征在于,所述加速装置包括一个或多个处理器;所述一个或多个处理器支持所述加速装置执行如权利要求1-15任一项所述的稀疏矩阵计算方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010761618.5A CN114065123A (zh) | 2020-07-31 | 2020-07-31 | 稀疏矩阵计算方法及加速装置 |
PCT/CN2021/099893 WO2022022117A1 (zh) | 2020-07-31 | 2021-06-12 | 稀疏矩阵计算方法及加速装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010761618.5A CN114065123A (zh) | 2020-07-31 | 2020-07-31 | 稀疏矩阵计算方法及加速装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114065123A true CN114065123A (zh) | 2022-02-18 |
Family
ID=80037106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010761618.5A Pending CN114065123A (zh) | 2020-07-31 | 2020-07-31 | 稀疏矩阵计算方法及加速装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114065123A (zh) |
WO (1) | WO2022022117A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024012180A1 (zh) * | 2022-07-15 | 2024-01-18 | 华为技术有限公司 | 一种矩阵计算方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10599429B2 (en) * | 2018-06-08 | 2020-03-24 | Intel Corporation | Variable format, variable sparsity matrix multiplication instruction |
US10726096B2 (en) * | 2018-10-12 | 2020-07-28 | Hewlett Packard Enterprise Development Lp | Sparse matrix vector multiplication with a matrix vector multiplication unit |
CN109710213A (zh) * | 2018-12-25 | 2019-05-03 | 广东浪潮大数据研究有限公司 | 一种稀疏矩阵加速计算方法、装置、设备及其系统 |
CN111240744B (zh) * | 2020-01-03 | 2022-03-22 | 支付宝(杭州)信息技术有限公司 | 一种提高涉及稀疏矩阵并行计算效率的方法和系统 |
CN111428192A (zh) * | 2020-03-19 | 2020-07-17 | 湖南大学 | 用于优化高性能计算构架稀疏矩阵向量乘的方法和系统 |
-
2020
- 2020-07-31 CN CN202010761618.5A patent/CN114065123A/zh active Pending
-
2021
- 2021-06-12 WO PCT/CN2021/099893 patent/WO2022022117A1/zh active Application Filing
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024012180A1 (zh) * | 2022-07-15 | 2024-01-18 | 华为技术有限公司 | 一种矩阵计算方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2022022117A1 (zh) | 2022-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
US20230026006A1 (en) | Convolution computation engine, artificial intelligence chip, and data processing method | |
CN108197324B (zh) | 用于存储数据的方法和装置 | |
CN110968585B (zh) | 面向列的存储方法、装置、设备及计算机可读存储介质 | |
CN111767986A (zh) | 一种基于神经网络的运算方法及装置 | |
CN114065123A (zh) | 稀疏矩阵计算方法及加速装置 | |
CN109844774B (zh) | 一种并行反卷积计算方法、单引擎计算方法及相关产品 | |
CN108197074B (zh) | 快速傅里叶变换fft数据处理方法及装置 | |
CN114116656B (zh) | 数据处理方法及相关装置 | |
US10664952B2 (en) | Image processing method, and device, for performing coordinate conversion | |
CN115935909A (zh) | 一种文件生成方法、装置及电子设备 | |
CN107301017B (zh) | 一种数据存储方法及装置 | |
CN116955271A (zh) | 一种数据副本存储的方法、装置、电子设备及存储介质 | |
CN114662689A (zh) | 一种神经网络的剪枝方法、装置、设备及介质 | |
US11586910B1 (en) | Write cache for neural network inference circuit | |
CN115454923A (zh) | 数据计算的装置、板卡、方法以及存储介质 | |
CN113379038A (zh) | 数据处理方法和电子设备 | |
CN113407904A (zh) | 兼容多维度卷积神经网络的Winograd处理方法、系统及介质 | |
CN113783912A (zh) | 请求分发方法、装置及存储介质 | |
CN111324310A (zh) | 一种数据的读取方法、装置及计算机系统 | |
CN108073594B (zh) | 一种生成热力图的方法及装置 | |
CN115344506B (zh) | 内存地址的映射方法、内存访问方法和装置、芯片、设备 | |
CN117785759B (zh) | 数据存储方法、数据读取方法、电子设备和存储介质 | |
CN113986227A (zh) | 一种页面搭建方法及装置 | |
CN116719810A (zh) | 一种一致性hash环的优化方法、系统、设备及介质 |
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 |