CN116842304A - 一种不规则稀疏矩阵的计算方法及系统 - Google Patents
一种不规则稀疏矩阵的计算方法及系统 Download PDFInfo
- Publication number
- CN116842304A CN116842304A CN202310798739.0A CN202310798739A CN116842304A CN 116842304 A CN116842304 A CN 116842304A CN 202310798739 A CN202310798739 A CN 202310798739A CN 116842304 A CN116842304 A CN 116842304A
- Authority
- CN
- China
- Prior art keywords
- sparse matrix
- rcsr
- row
- simd
- storage format
- 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
- 239000011159 matrix material Substances 0.000 title claims abstract description 180
- 238000000034 method Methods 0.000 title claims abstract description 48
- 230000001788 irregular Effects 0.000 title claims abstract description 45
- 239000013598 vector Substances 0.000 claims abstract description 110
- 238000004364 calculation method Methods 0.000 claims abstract description 99
- 238000006243 chemical reaction Methods 0.000 claims abstract description 40
- 241001409283 Spartina mottle virus Species 0.000 claims abstract 5
- 238000003491 array Methods 0.000 claims description 21
- 230000006835 compression Effects 0.000 claims description 15
- 238000007906 compression Methods 0.000 claims description 15
- 238000010586 diagram Methods 0.000 description 15
- 238000005457 optimization Methods 0.000 description 14
- 229910052754 neon Inorganic materials 0.000 description 6
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000013527 convolutional neural network Methods 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000011160 research 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
- 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种不规则稀疏矩阵的计算方法及系统,通过建立新的存储格式转换:建立RCSR存储格式和RCSR‑SIMD存储格式;建立基于RCSR或RCSR‑SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。本发明具有减少存储空间、提高计算效率、灵活选择等优点,能够有效地提升不规则稀疏矩阵SpMV的性能。
Description
技术领域
本发明涉及计算机控制技术领域,尤其公开了一种不规则稀疏矩阵的计算方法及系统。
背景技术
在计算机科学和算法领域,SpMV(稀疏矩阵向量乘)是一种常见的矩阵运算,用于将一个稀疏矩阵与一个向量相乘。在许多应用中,稀疏矩阵的大小非常大,因此需要使用高效的算法和数据结构来实现SpMV计算。
CSR(Compressed Sparse Row,压缩稀疏行)是一种常见的稀疏矩阵存储格式,可以将稀疏矩阵压缩为三个数组:一个包含非零元素的值,一个包含每一行的第一个非零元素的位置,以及一个包含每个非零元素的列索引。使用CSR格式可以在不浪费存储空间的情况下高效地访问稀疏矩阵。
SIMD(Single Instruction Multiple Data,单指令多数据)指令集是一种处理器硬件级别的计算加速技术,通过在单个指令周期内对多个数据进行并行计算来提高计算效率和性能表现。SIMD在各种体系结构的处理器上都有具体实现,例如ARM(Advanced RISCMachines,RISC微处理器)处理器上实现的NEON指令集和SVE(Scalable VectorExtension,可伸缩矢量扩展)指令集。SIMD指令集应用广泛,尤其在涉及到高性能计算、图形处理以及机器学习等领域中具有重要的作用。
CSR-SIMD(Compressed Sparse Row-Single Instruction Multiple Data,压缩稀疏行-单指令多数据)存储格式,与CSR存储格式类似,使用三个数组val、col_index和row_ptr记录稀疏矩阵信息。其中,col_index数组按顺序存储每个数据片段的列索引和向量化计算次数,而row_ptr数组包含每行第一个数据片段在col_index数组内的位置,通常为一个int数组。数组val按行主序存储矩阵元素(由非零元素和引入的零元素组成),即对齐向量化后的非零值。
对于不同的稀疏矩阵的存储格式,有着不同的稀疏矩阵向量乘的算法。SpMV(Sparse Matrix-Vector Multiplication,稀疏矩阵-向量乘法)是高性能计算领域的关键算子之一,同时也在新兴的深度学习领域中有着重要应用。根据SpMV使用矩阵的负载特点,可以细分为三种类型:(1)大规模SpMV,M、N、K的大小都在1000以上,经典的高性能计算程序中涉及的矩阵计算通常都是这类问题,现有的主流BLAS库对这类问题进行了高度的优化;(2)小规模SpMV,这类问题中M、N、K都小于100甚至10,在计算流体力学中较为常见。(3)不规则SpMV,这类问题中矩阵的某个维度远远小于另一维度,例如M=64,N=30000,是卷积计算、K-means算法等算法的核心计算。
不规则形状的稀疏矩阵负载广泛存在于卷积计算中,例如在自然语言处理领域,通常使用1D CNN(1D Convolutional Neural Network,一维卷积神经网络)对文本序列进行特征提取和分类。此时,卷积核通常被设计为一个向量,用于在单个维度上滑动并提取局部特征信息。尽管现有的研究可以在大规模SpMV上取得接近处理器运算性能峰值的能力,但是在针对不规则形状和小规模稀疏矩阵乘法研究和快速算法较少。
不规则稀疏矩阵与一般稀疏矩阵的主要区别在于优化时需要特别考虑不平衡的行列,因为这会导致存储数据结构中不同部分的比重不同。因此,在优化过程中,应该针对性地优化存储数据结构的某些部分,以实现高效优化的效果。然而,对于不规则稀疏矩阵使用基于CSR的SpMV计算方法仍然存在一些性能瓶颈,例如内存带宽和计算效率。
因此,现有技术中使用基于CSR的SpMV的方法来计算不规则稀疏矩阵时存在的内存带宽利用率低和计算效率慢,是目前亟待解决的技术问题。
发明内容
本发明提供了一种不规则稀疏矩阵的计算方法及系统,旨在解决现有技术中使用基于CSR的SpMV的方法来计算不规则稀疏矩阵时存在的内存带宽利用率低和计算效率慢的技术问题。
本发明的一方面涉及一种不规则稀疏矩阵的计算方法,包括以下步骤:
建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;
建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。
进一步地,建立RCSR存储格式和RCSR-SIMD存储格式的步骤包括:
设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列;
若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;
若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
进一步地,若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储的步骤包括:
按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;
按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
进一步地,若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储的步骤包括:
按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;
按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;
按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
进一步地,建立基于RCSR或RCSR-SIMD的SpMV计算流程的步骤包括:
判断是否使用SIMD扩展指令;
若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;
根据row_ptr数组指示,计算出一行需要多少个非零元;
通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。
本发明的另一方面涉及一种规则稀疏矩阵的计算系统,包括:
第一建立模块,用于建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;
第二建立模块,用于建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。
进一步地,第一建立模块包括:
设置单元,用于设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列;
第一转换单元,用于若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;
第二转换单元,用于若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
进一步地,第一转换单元包括:
第一扫描子单元,用于按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;
第二扫描子单元,用于按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
第一计算子单元,用于根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
进一步地,第二转换单元包括:
第三扫描子单元,用于按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;
第四扫描子单元,用于按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;
第五扫描子单元,用于按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
第二计算子单元,用于根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
进一步地,第二建立模块包括:
判断单元,用于判断是否使用SIMD扩展指令;
第三转换单元,用于若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;
第一计算单元,用于根据row_ptr数组指示,计算出一行需要多少个非零元;
第二计算单元,用于通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。
本发明所取得的有益效果为:
本发明提供一种不规则稀疏矩阵的计算方法及系统,通过建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。本发明提供的不规则稀疏矩阵的计算方法及系统,首先,本发明通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能。此外,本发明还采用了一种新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能。其次,本发明在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率。最后,本发明根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
综上所述,本发明具有减少存储空间、提高计算效率、灵活选择等优点,能够有效地提升不规则稀疏矩阵SpMV的性能。
附图说明
图1为本发明提供的一种不规则稀疏矩阵的计算方法一实施例的流程示意图;
图2为本发明RCSR存储格式示意图;
图3为本发明RCSR-SIMD存储格式示意图;
图4为图1中所示的建立RCSR存储格式和RCSR-SIMD存储格式的步骤一实施例的细化流程示意图;
图5为图4中所示的若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储的步骤一实施例的细化流程示意图;
图6为图4中所示的若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储的步骤一实施例的细化流程示意图;
图7为图1中所示的基于RCSR或RCSR-SIMD的SpMV计算流程的步骤一实施例的细化流程示意图;
图8为本发明提供的一种不规则稀疏矩阵的计算方法一实施例的基本框架示意图;
图9为本发明提供的一种不规则稀疏矩阵的计算系统一实施例的功能框架图;
图10为图9中所示的第一建立模块一实施例的功能模块示意图;
图11为图10中所示的第一转换单元一实施例的功能模块示意图;
图12为10中所示的第二转换单元一实施例的功能模块示意图;
图13为图9中所示的第二建立模块一实施例的功能模块示意图。
附图标号说明:
10、第一建立模块;20、第二建立模块;11、设置单元;12、第一转换单元;13、第二转换单元;121、第一扫描子单元;122、第二扫描子单元;123、第一计算子单元;131、第三扫描子单元;132、第四扫描子单元;133、第五扫描子单元;134、第二计算子单元;21、判断单元;22、第三转换单元;23、第一计算单元;24、第二计算单元。
具体实施方式
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案做详细的说明。
如图1至图8所示,本发明第一实施例提出一种不规则稀疏矩阵的计算方法,包括以下步骤:
步骤S100、建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式。
建立的压缩格式针对是否支持SIMD指令集具体可划分为RCSR存储格式和RCSR-SIMD存储格式两种压缩存储格式,其采用的设计思想一致,区别仅在于后者针对SIMD的加载特点进行优化。
步骤S200、建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。
从外部存储介质中读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中。读取的方式可以根据具体的实现方式而定,例如可以使用文件IO操作来进行读取。
将需要进行乘加计算操作的数据加载进SIMD向量寄存器中。这些数据可以是来自于内存中的数据,也可以是来自于其他寄存器中的数据。加载数据的方式可以根据具体的实现方式而定,例如可以使用SIMD指令来进行加载操作。
使用SIMD扩展指令来进行乘加计算操作,并将结果输出到输出向量块中。这些输出结果可以是需要存储到内存中的数据,也可以是需要传递给其他模块进行处理的数据。
考虑到数据的精度和数据的位宽。例如,如果需要进行高精度的计算操作,可以使用更高位宽的SIMD寄存器来进行计算。此外,还需要考虑到数据的对齐方式和内存访问模式,以保证计算效率和数据的正确性。
将之前计算得到的输出向量块合并为最终的输出向量。输出向量块是在之前的计算中得到的,每个输出向量块包含了一部分计算结果。合并输出向量块的方式可以根据具体的实现方式而定,例如可以使用SIMD指令来进行合并操作。
合并输出向量块时,需要考虑到数据的对齐方式和内存访问模式,以保证计算效率和数据的正确性。此外,还需要考虑到输出向量的精度和位宽,以保证最终输出的数据符合要求。
将输出向量块合并为最终的输出向量需要考虑到计算的并行性和负载均衡。例如,可以将输出向量块分配给不同的处理单元进行合并操作,以提高计算效率。此外,还可以根据具体的应用场景,对输出向量块进行优化,以提高计算效率和减少数据传输的开销。
本实施例提供一种不规则稀疏矩阵的计算方法,同现有技术相比,通过建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。本实施例提供的不规则稀疏矩阵的计算方法,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
进一步地,请见图4,图4为图1中所示的步骤S100一实施例的细化流程示意图,在本实施例中,步骤S100包括:
步骤S110、设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列。
步骤S120、若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
若识别到转换为RCSR存储格式,设A为待压缩存储的稀疏矩阵,其规模为m*n,其中m为行,n为列,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
步骤S130、若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
若识别到转换为RCSR-SIMD存储格式,设A为待压缩存储的稀疏矩阵,其规模为m*n,其中m为行,n为列,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
本实施例提供一种不规则稀疏矩阵的计算方法,同现有技术相比,通过设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列;若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。本实施例提供的不规则稀疏矩阵的计算方法,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
进一步地,参见图5,图5为图4中所示的步骤S120一实施例的细化流程示意图,在本实施例中,步骤S120包括:
步骤S121、按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中。
values数组和col-index数组与常见CSR格式一致。首先,按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中,其长度为A的非零元个数nnz;同时将每个非零元对应的列坐标信息顺序存入col-index中,其长度为A的非零元个数nnz。
步骤S122、按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中。
按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中,数组长度为m。
步骤S123、根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
本实施例提供一种不规则稀疏矩阵的计算方法,同现有技术相比,通过按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。本实施例提供的不规则稀疏矩阵的计算方法,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
进一步地,请见图6,图6为图4中所示的步骤S130一实施例的细化流程示意图,在本实施例中,步骤S130包括:
步骤S131、按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中。
按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零。将每个连续非零元段顺序存入数组values中,其长度为S的相应SIMD向量寄存器能够存储数组values数据类型的个数。
步骤S132、按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中。
按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中。
步骤S133、按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中。
按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中,数组长度为m。
步骤S134、根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
本实施例提供一种不规则稀疏矩阵的计算方法,同现有技术相比,通过按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。本实施例提供的不规则稀疏矩阵的计算方法,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
进一步地,请见图7,图7为图1中所示的步骤S200一实施例的细化流程示意图,步骤S200包括:
步骤S210、判断是否使用SIMD扩展指令。
步骤S220、若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式。
步骤S230、根据row_ptr数组指示,计算出一行需要多少个非零元。
步骤S240、通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。
本实施例提供一种不规则稀疏矩阵的计算方法,同现有技术相比,通过判断是否使用SIMD扩展指令;若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;根据row_ptr数组指示,计算出一行需要多少个非零元;通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。本实施例提供的不规则稀疏矩阵的计算方法,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
本发明的另一方面涉及一种规则稀疏矩阵的计算系统,包括第一建立模块10和第二建立模块20,其中,第一建立模块10,用于建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;第二建立模块20,用于建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。
第一建立模块10建立的压缩格式针对是否支持SIMD指令集具体可划分为RCSR存储格式和RCSR-SIMD存储格式两种压缩存储格式,其采用的设计思想一致,区别仅在于后者针对SIMD的加载特点进行优化。
第二建立模块20从外部存储介质中读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中。读取的方式可以根据具体的实现方式而定,例如可以使用文件IO操作来进行读取。
将需要进行乘加计算操作的数据加载进SIMD向量寄存器中。这些数据可以是来自于内存中的数据,也可以是来自于其他寄存器中的数据。加载数据的方式可以根据具体的实现方式而定,例如可以使用SIMD指令来进行加载操作。
使用SIMD扩展指令来进行乘加计算操作,并将结果输出到输出向量块中。这些输出结果可以是需要存储到内存中的数据,也可以是需要传递给其他模块进行处理的数据。
考虑到数据的精度和数据的位宽。例如,如果需要进行高精度的计算操作,可以使用更高位宽的SIMD寄存器来进行计算。此外,还需要考虑到数据的对齐方式和内存访问模式,以保证计算效率和数据的正确性。
将之前计算得到的输出向量块合并为最终的输出向量。输出向量块是在之前的计算中得到的,每个输出向量块包含了一部分计算结果。合并输出向量块的方式可以根据具体的实现方式而定,例如可以使用SIMD指令来进行合并操作。
合并输出向量块时,需要考虑到数据的对齐方式和内存访问模式,以保证计算效率和数据的正确性。此外,还需要考虑到输出向量的精度和位宽,以保证最终输出的数据符合要求。
将输出向量块合并为最终的输出向量需要考虑到计算的并行性和负载均衡。例如,可以将输出向量块分配给不同的处理单元进行合并操作,以提高计算效率。此外,还可以根据具体的应用场景,对输出向量块进行优化,以提高计算效率和减少数据传输的开销。
本实施例提供一种不规则稀疏矩阵的计算系统,同现有技术相比,采用第一建立模块10和第二建立模块20,通过建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。本实施例提供的不规则稀疏矩阵的计算系统,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
进一步地,请见图10,图10为图9中所示的第一建立模块一实施例的功能模块示意图,在本实施例中,第一建立模块10包括设置单元11、第一转换单元12和第二转换单元13,其中,设置单元11,用于设A为待压缩存储的稀疏矩阵,其规模为m*n,m为行,n为列;第一转换单元12,用于若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;第二转换单元13,用于若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
第一转换单元12若识别到转换为RCSR存储格式,设A为待压缩存储的稀疏矩阵,其规模为m*n,其中m为行,n为列,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
第二转换单元13若识别到转换为RCSR-SIMD存储格式,设A为待压缩存储的稀疏矩阵,其规模为m*n,其中m为行,n为列,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
本实施例提供一种不规则稀疏矩阵的计算系统,同现有技术相比,第一建立模块10采用设置单元11、第一转换单元12和第二转换单元13,通过设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列;若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。本实施例提供的不规则稀疏矩阵的计算系统,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
优选地,参见图11,图11为图10中所示的第一转换单元一实施例的功能模块示意图,在本实施例中,第一转换单元12包括第一扫描子单元121、第二扫描子单元122和第一计算子单元123,其中,第一扫描子单元121,用于按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;第二扫描子单元122,用于按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;第一计算子单元123,用于根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
values数组和col-index数组与常见CSR格式一致。首先,第一扫描子单元121按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中,其长度为A的非零元个数nnz;同时将每个非零元对应的列坐标信息顺序存入col-index中,其长度为A的非零元个数nnz。
第二扫描子单元122按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中,数组长度为m。
第一计算子单元123根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
本实施例提供一种不规则稀疏矩阵的计算系统,同现有技术相比,第一转换单元12采用第一扫描子单元121、第二扫描子单元122和第一计算子单元123,通过按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。本实施例提供的不规则稀疏矩阵的计算系统,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
进一步地,图12为10中所示的第二转换单元一实施例的功能模块示意图,在本实施例中,第二转换单元13包括第三扫描子单元131、第四扫描子单元132、第五扫描子单元133和第二计算子单元134,其中,第三扫描子单元131,用于按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;第四扫描子单元132,用于按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;第五扫描子单元133,用于按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;第二计算子单元134,用于根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
第三扫描子单元131按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零。将每个连续非零元段顺序存入数组values中,其长度为S的相应SIMD向量寄存器能够存储数组values数据类型的个数。
第四扫描子单元132按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中。
第五扫描子单元133按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中,数组长度为m。
第二计算子单元134根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
本实施例提供一种不规则稀疏矩阵的计算系统,同现有技术相比,第二转换单元13采用第三扫描子单元131、第四扫描子单元132、第五扫描子单元133和第二计算子单元134,通过按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。本实施例提供的不规则稀疏矩阵的计算系统,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
优选地,请见图13,图13为图9中所示的第二建立模块一实施例的功能模块示意图,在本实施例中,第二建立模块20包括判断单元21、第三转换单元22、第一计算单元23和第二计算单元24,其中,判断单元21,用于判断是否使用SIMD扩展指令;第三转换单元22,用于若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;第一计算单元23,用于根据row_ptr数组指示,计算出一行需要多少个非零元;第二计算单元24,用于通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。
本实施例提供一种不规则稀疏矩阵的计算系统,同现有技术相比,第二建立模块20采用判断单元21、第三转换单元22、第一计算单元23和第二计算单元24,通过判断是否使用SIMD扩展指令;若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;根据row_ptr数组指示,计算出一行需要多少个非零元;通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。本实施例提供的不规则稀疏矩阵的计算系统,通过对row_ptr数组进行优化,减少了其存储空间,从而缓解了带宽不足的问题,提升了SpMV的性能;采用新的RCSR以及RCSR-SIMD存储格式,使得在计算过程中能够更加高效地利用内存带宽,进一步提升了性能;在内层循环中将原来的两次访存操作合并为一次访存操作,减少了访存操作的次数,提高了计算效率;根据输入矩阵的特点进行灵活选择,能够根据不同的输入矩阵进行不同的计算优化,从而进一步提升了计算性能和灵活性。
下面以具体的实施例来对本发明进行说明:
本实例设定采样平台的传感器为256个,采样生成的稀疏矩阵随时间的增长而不断增大。计算平台硬件架构为arm架构,其支持neon指令集(arm上的一种SIMD扩展指令)。采取本发明的方法的具体实现步骤为:
1)存储格式转换
首先依据硬件环境特点特点,其支持neon指令集,选择采取RCSR-SIMD存储格式。其次,按行扫描稀疏矩阵A,将连续的2个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零。将每个连续非零元段顺序存入数组values中;之后,按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中。
最后将row_ptr数组的作用定义为统计每行非零值的个数,原因在于通过限制存储值的变化范围(最大值为列数),进而可以进行压缩存储。而且通过累加计算,可以达到同原来row_ptr一样的作用。由于行数远多于列数,因此每行非零值的个数存在一个最大上限即稀疏矩阵的列数。依据输入稀疏矩阵的列数,求其关于2的对数即为压缩之后的比特位数。原有矩阵为256列,可用8位比特位(1字节)进行表示,相比于int数组的4字节,节省约3个字节。同时在内层循环中由原来的两次访存变为一次访存来确定内循环次数。
2)建立基于RCSR或RCSR-SIMD的SpMV计算流程
基于RCSR稀疏矩阵存储格式,给出了基于其的SpMV算法。其算法与CSR存储格式不同之处在于定义了全局index变量,在内层循环中通过累加index变量来找到相应非零元的列坐标。
为了说明此方法的可行性,如表1所示,这里提供了基于RCSR的SpMV实现的一个版本。
表1基于RCSR的SpMV算法
基于RCSR-SIMD稀疏矩阵存储格式,给出了基于其的SpMV算法。通过组合相邻的非零值和填充零在一个数据片段的末尾,可以使得每个向量化的片段存储在连续的内存地址中。因此,每个向量化的片段的浮点乘加计算操作可以通过SIMD单元上的向量化部件实现完全计算出来。
为了说明此方法的可行性,如表2所示,这里提供了基于RCSR-SIMD的SpMV实现的一个版本,其中包含完整的NEON指令。
表2基于RCSR-SIMD的SpMV算法
在算法2中,外部for循环迭代所有行,内部for循环迭代一行中的向量化的片段。p是指向values数组的指针,q是指向向量x的指针。在while循环中使用向量化指令计算每个向量化的数据片段。NEON扩展指令的选择取决于飞腾处理器的中向量寄存器的宽度,在本版本中一个128位的NEON向量寄存器可以存储两个双精度浮点数。当每个数据片段的向量化计算计数为0时,过程停止。最后,每一行的计算结果都存储在结果数组y中。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种不规则稀疏矩阵的计算方法,其特征在于,包括以下步骤:
建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;
建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。
2.如权利要求1所述的一种不规则稀疏矩阵的计算方法,其特征在于,所述建立RCSR存储格式和RCSR-SIMD存储格式的步骤包括:
设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列;
若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;
若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
3.如权利要求2所述的一种不规则稀疏矩阵的计算方法,其特征在于,所述若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储的步骤包括:
按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;
按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
4.如权利要求2所述的一种不规则稀疏矩阵的计算方法,其特征在于,所述若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储的步骤包括:
按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;
按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;
按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
5.如权利要求1所述的一种不规则稀疏矩阵的计算方法,其特征在于,所述建立基于RCSR或RCSR-SIMD的SpMV计算流程的步骤包括:
判断是否使用SIMD扩展指令;
若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;
根据row_ptr数组指示,计算出一行需要多少个非零元;
通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。
6.一种规则稀疏矩阵的计算系统,其特征在于,包括:
第一建立模块(10),用于建立新的存储格式转换:建立RCSR存储格式和RCSR-SIMD存储格式;
第二建立模块(20),用于建立基于RCSR或RCSR-SIMD的SpMV计算流程:读取RCSR存储格式或者RCSR存储格式的稀疏矩阵和向量,并将其存储在内存中;将需要乘加计算操作的数据加载进SIMD向量寄存器,并使用SIMD扩展指令将结果输出到输出向量块中;将输出向量块合并为最终的输出向量。
7.如权利要求6所述的一种不规则稀疏矩阵的计算系统,其特征在于,所述第一建立模块(10)包括:
设置单元(11),用于设A为待压缩存储的稀疏矩阵,其规模为m*n,其中,m为行,n为列;
第一转换单元(12),用于若转换为RCSR存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储;
第二转换单元(13),用于若转换为RCSR-SIMD存储格式,则采用三个一维数组values、col-index和row_ptr来进行压缩存储。
8.如权利要求7所述的一种不规则稀疏矩阵的计算系统,其特征在于,所述第一转换单元(12)包括:
第一扫描子单元(121),用于按行扫描稀疏矩阵A,将每个非零元顺序存入数组values中;同时将每个非零元对应的列坐标信息顺序存入col-index中;
第二扫描子单元(122),用于按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
第一计算子单元(123),用于根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
9.如权利要求8所述的一种不规则稀疏矩阵的计算系统,其特征在于,所述第二转换单元(13)包括:
第三扫描子单元(131),用于按行扫描稀疏矩阵A,将连续的S个非零元定义为一个连续非零元段,以非零元开始,若之后没有连续的非零元,则填充零;将每个连续非零元段顺序存入数组values中;
第四扫描子单元(132),用于按行扫描稀疏矩阵A,将每个连续非零元段对应的起始列坐标信息以及连续的非零元段个数顺序存入col-index中;
第五扫描子单元(133),用于按行扫描稀疏矩阵A,将每行非零元的个数顺序存入row_ptr数组中;
第二计算子单元(134),用于根据待压缩的稀疏矩阵列数n,计算出row_ptr数组中索引压缩后的长度为log2n,将row_ptr数组中每个索引值用长度为log2n的01串进行表示。
10.如权利要求6所述的一种不规则稀疏矩阵的计算系统,其特征在于,所述第二建立模块(20)包括:
判断单元(21),用于判断是否使用SIMD扩展指令;
第三转换单元(22),用于若没有使用SIMD扩展指令,则将原存储格式转换为RCSR存储格式;若使用SIMD扩展指令,则将原存储格式转换为RCSR-SIMD存储格式;
第一计算单元(23),用于根据row_ptr数组指示,计算出一行需要多少个非零元;
第二计算单元(24),用于通过构建的两层for循环,依次计算稀疏矩阵-向量乘结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310798739.0A CN116842304A (zh) | 2023-06-30 | 2023-06-30 | 一种不规则稀疏矩阵的计算方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310798739.0A CN116842304A (zh) | 2023-06-30 | 2023-06-30 | 一种不规则稀疏矩阵的计算方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116842304A true CN116842304A (zh) | 2023-10-03 |
Family
ID=88166451
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310798739.0A Pending CN116842304A (zh) | 2023-06-30 | 2023-06-30 | 一种不规则稀疏矩阵的计算方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116842304A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093816A (zh) * | 2023-10-19 | 2023-11-21 | 上海登临科技有限公司 | 矩阵乘运算方法、装置和电子设备 |
-
2023
- 2023-06-30 CN CN202310798739.0A patent/CN116842304A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093816A (zh) * | 2023-10-19 | 2023-11-21 | 上海登临科技有限公司 | 矩阵乘运算方法、装置和电子设备 |
CN117093816B (zh) * | 2023-10-19 | 2024-01-19 | 上海登临科技有限公司 | 矩阵乘运算方法、装置和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110447010B (zh) | 在硬件中执行矩阵乘法 | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
WO2020057161A1 (zh) | 一种用于卷积神经网络加速器的拆分累加器 | |
CN109840585B (zh) | 一种面向稀疏二维卷积的运算方法和系统 | |
US11120101B2 (en) | Matrix multiplication system and method | |
US11550586B2 (en) | Method and tensor traversal engine for strided memory access during execution of neural networks | |
CN116842304A (zh) | 一种不规则稀疏矩阵的计算方法及系统 | |
WO2021040832A1 (en) | Neural network training with decreased memory consumption and processor utilization | |
CN117539546A (zh) | 基于非空列存储的稀疏矩阵向量乘加速方法及装置 | |
CN115885249A (zh) | 用于加速深度学习网络的训练的系统和方法 | |
EP4206993A1 (en) | Configurable pooling processing unit for neural network accelerator | |
CN115495152A (zh) | 变长输入的存内计算电路 | |
CN112734021A (zh) | 一种基于位稀疏计算的神经网络加速方法 | |
KR20220131333A (ko) | 산술 논리 유닛 | |
US20240232285A9 (en) | Method and apparatus for neural network weight block compression in a compute accelerator | |
CN116502028B (zh) | 基于浮点数压缩技术的大规模fft实现方法及装置 | |
US20240134930A1 (en) | Method and apparatus for neural network weight block compression in a compute accelerator | |
CN113836481B (zh) | 矩阵计算电路、方法、电子设备及计算机可读存储介质 | |
Liguori | A MAC-less Neural Inference Processor Supporting Compressed, Variable Precision Weights | |
US20240152327A1 (en) | Computing circuit, computing method, and decoder | |
CN220983883U (zh) | 矩阵计算装置、小芯片设备及人工智能加速器装置 | |
CN116910432A (zh) | 基于异构众核处理器的稀疏矩阵向量乘方法和装置 | |
CN115586922A (zh) | 一种存储与计算格式解耦的SpMV混合精度优化方法 | |
WO2023224614A1 (en) | Exploiting data sparsity at a machine-learning hardware accelerator | |
Soltaniyeh | Hardware-Software Techniques for Accelerating Sparse Computation |
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 |