CN103336758B - 一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 - Google Patents
一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 Download PDFInfo
- Publication number
- CN103336758B CN103336758B CN201310271126.8A CN201310271126A CN103336758B CN 103336758 B CN103336758 B CN 103336758B CN 201310271126 A CN201310271126 A CN 201310271126A CN 103336758 B CN103336758 B CN 103336758B
- Authority
- CN
- China
- Prior art keywords
- zero entry
- entry section
- sparse matrix
- row
- continuous non
- 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.)
- Expired - Fee Related
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 81
- 238000000034 method Methods 0.000 title claims abstract description 53
- 241001409283 Spartina mottle virus Species 0.000 title claims abstract 9
- 230000006835 compression Effects 0.000 title claims description 8
- 238000007906 compression Methods 0.000 title claims description 8
- 230000008901 benefit Effects 0.000 claims abstract description 24
- 238000004364 calculation method Methods 0.000 claims description 13
- 230000008569 process Effects 0.000 claims description 2
- 238000005267 amalgamation Methods 0.000 claims 1
- 235000013399 edible fruits Nutrition 0.000 claims 1
- 238000012360 testing method Methods 0.000 description 14
- 238000005516 engineering process Methods 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 4
- 230000001788 irregular Effects 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- XEEYBQQBJWHFJM-UHFFFAOYSA-N Iron Chemical compound [Fe] XEEYBQQBJWHFJM-UHFFFAOYSA-N 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000012141 concentrate Substances 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 229910052742 iron Inorganic materials 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开一种稀疏矩阵的存储方法CSRL及SpMV实现方法,按行扫描稀疏矩阵A,用数组val顺序存储每个非零元值信息;定义列下标连续的若干个非零元为一个连续非零元段,用数组jas记录每个连续非零元段的第一个元素的列下标,用数组jan记录每个连续非零元段的非零元个数;用数组ptr记录稀疏矩阵A每行第一个连续非零元段的起始索引。本发明的数据存储方法对非零元的列索引合并存储,减小了存储空间需求;充分挖掘了稀疏矩阵的数据局部性,据此可以利用SIMD指令进行存取和计算,并可减少内存访问次数,提高了稀疏矩阵向量乘SpMV的性能。
Description
技术领域
本发明涉及一种针对稀疏矩阵的数据存储方法CSRL(CompressedSparseRowwithLocalinformation:带有局部信息的压缩稀疏行)及基于该方法的SpMV实现方法,属于高性能数值计算技术领域,主要用于气象、湍流模拟、天体物理、油藏模拟等科学计算和实际应用中。
背景技术
稀疏矩阵向量乘(SpMV)y=A*x是迭代解法器中一个十分重要,且被大量调用的计算内核,而迭代法又广泛应用在气象、湍流模拟、天体物理、油藏模拟等科学计算和实际应用中。但在现在基于存储器层次结构的计算平台上,传统CSR存储的稀疏矩阵向量乘性能很差,运行效率往往低于硬件浮点峰值的10%。主要是因为处理器存储层次结构复杂,且每级存储器的访问速度差距很大,一般从几个时钟周期到几百个时钟周期。而稀疏矩阵非零元素分布很不规则,使得向量x为间接访问且访问不规则,可重用性差,从而导致cache命中率较低。另外SpMV操作是属于访存密集型的,算法中的浮点计算与存储访问的比率太低,浮点操作和load指令混杂导致把大量的时间花费在数据的存储访问中。稀疏矩阵向量乘作为迭代解法器的核心计算如果能够提高运行速度,整个计算的运行效率将会大大改善,在实际应用中有着十分重要的作用。
稀疏矩阵是指矩阵A的元素大部分是零,而非零元素所占比例非常小,往往小于总数的1%。通过只存储和操作这些非零元,可以减少存储的内存,并大幅减少乘法次数,进而提高整体性能。稀疏矩阵存储时,除了存储非零元外,还要记录非零元在矩阵中所占的位置。稀疏矩阵的一般存储方法是CSR(compressedsparserow)方法。CSR方法需要存储稀疏矩阵A的每个非零元素的值,非零元所在的列和每行第1个非零元的索引,即需要3个数组(其中矩阵A是m×n矩阵,有nz个非零元),如下所示:
·val[nz],记录每个非零元的值;
·col[nz],记录每个非零元所在的列;
·ptr[m+1],记录每行的第1个非零元在数组val[nz]col[nz]中的索引,其中ptr[m]=nz。
稀疏矩阵向量乘的形式为y=Ax,其中A为稀疏矩阵,x,y为稠密向量。CSR矩阵存储格式的SpMV核心代码见图3,从图3中可以看出,矩阵A中每个元素都要跟x中相应元素相乘,x的访问是间接的和不规则的,所以运行效率很低。
稀疏矩阵向量乘的一般实现算法运行效率很低,往往低于机器浮点运算峰值的10%,其中一个原因是,数据引用的时间局部性和空间局部性比较差,尤其是向量x的间接访问和访问的不可重用性;另一个原因就是算法中的浮点计算与存储访问的比率太低,浮点操作和load指令混杂导致把大量的时间花费在数据的存储访问中。
目前现有的处理器架构一般都采用向量化技术进行加速,如Intel的SandyBridge支持AVX(AdvancedVectorsExtensions)技术,有两个128bit的读端口,一个时钟周期内可以同时发射2条读指令,读取4个双精度浮点数,支持256bit的向量计算。现有的CSR存储格式对x的访问是不规则的,不能直接采用SIMD指令进行读取和计算,导致性能较低。然而从实际应用中得到的稀疏矩阵一般情况下都是具有局部性特征的,即有很多列下标连续的非零元片段。如果能从格式上充分挖掘这些局部性特征,就能利用SIMD指令对其进行优化,进而提高SpMV的性能。
SpMV优化方面,前人已经做了很多的工作。如OSKI软件包通过采用寄存器分块和cache分块技术,使x的值可以得到重用,改变了内存访问顺序,提高了浮点计算与存储访问的比值,进而提高性能。该软件包还给出了一种启发式算法,针对不同的矩阵和不同的平台,自适应选择最优的分块大小,以达到最优的性能;Willcock和Lunsdaine提出了DCSR(Delta-CodedSparseRow)和RPCSR(RowPatternCompressedSparseRow)两种存储格式,该格式主要设计思想是对矩阵信息进行压缩,这样可以缓解访存带宽,进而提高SpMV性能。Kornilios等提出了CSR-DU(CSRwithDeltaUnit)存储格式,主要思想是采用delta编码技术对col数组进行压缩存储,达到减少SpMV执行时的总数据访存量。CSX(CompressedSparseeXtended)格式是CSR-DU格式的扩展,探索了水平、垂直、对角等方向的子结构,这样可以利用稀疏矩阵的规则性来提高性能。XiangzhengSun等提出了CRSD格式,主要是针对有对角特征的稀疏矩阵。其借助“对角线格式”有效描述矩阵中对角线分布,控制零元的填充数目。通过x元素寄存器重用、软件预取、使用SSEintrinsic对稀疏矩阵向量乘实现进行优化。
JiajiaLi等提出了一个SpMV自动调优框架SMAT,该框架可自动选择最优格式及相应的最优实现。该框架基于csr格式进行。采用数据挖掘的方法对UF稀疏矩阵集中矩阵进行分析,从而可以快速搜索出最优组合。
目前SpMV的优化方面前人的工作虽然很多,但是每个技术都是只针对一类稀疏矩阵有性能提升,并不能覆盖所有的稀疏矩阵,而且之前的稀疏矩阵存储方法,没有考虑存储稀疏矩阵的一些局部信息,而这些信息对SpMV的性能优化有着至关重要的作用,另外之前的技术也没有从存储方法的角度考虑如何进行向量化,本发明主要是要解决这些问题。
发明内容
本发明解决的技术问题是:克服现有技术中稀疏存储方法没有包含很多关键局部信息,不能直接进行向量化的不足,提供一种稀疏矩阵的存储方法CSRL及基于该方法的SpMV实现方法,对非零元的列索引合并存储,减小了存储空间需求;减少内存访问次数,提高了稀疏矩阵向量乘SpMV的性能。
本发明的技术方案为,一种稀疏矩阵的存储方法CSRL,包括如下步骤:
设A为待压缩存储的稀疏矩阵,其规模为m*n,其中m为行,n为列,CSRL方法需要采用4个一维数组val,jas,jan和ptr来进行压缩存储。
(1)按行扫描稀疏矩阵A,将每个非零元顺序存入数组val中,其长度为A的非零元个数nz;
(2)将每行中列下标连续的若干个非零元定义为一个连续非零元段,按行扫描稀疏矩阵A,寻找每个连续非零元段的起始列下标和长度,对于只有一个非零元的非零元段,即孤立非零元,长度定为1,将每个连续非零元段的起始列下标顺序存入数组jas,将每个连续非零元段的长度顺序存入数组jan,数组长度为A的连续非零元段个数nzseg;
(3)将稀疏矩阵A中每行第一个连续非零元段的索引信息(每行第一个连续非零元段在整个数组的所有连续非零元段中的序号)顺序存入ptr中,数组长度为m+1。
如图4所示,图4中矩阵中有填充的方块均代表非零元,相邻的非零元用同一填充表示,val数组中包含了所有非零元,存储的是非零元值,jas数组中只包括连续非零元段的起始非零元,存储的是其列下标,jan数组同jas数组一样,但存储的是连续非零元段的长度,ptr数组包含的是每行第一个非零元,并与jas数组中相应元素相连,存储的是其索引值。
基于上述的稀疏矩阵存储方法,下面提供一种SpMV实现方法SpMV是SparseMatrixVectorMultiplication的简写,即稀疏矩阵向量乘y=A*x。其中y和x为稠密向量,A为稀疏矩阵,采用CSRL方法存储。
(1)对于第i(i=1,m)行,先计算稀疏矩阵中每个连续非零元段与x相乘的结果。用户计算平台一次存取和计算的双精度个数记为s,对每个非零元段长度jan[j](j为数组下标)进行判断,如果jan[j]>=s,则对jan[j]能被s整除的部分采用SIMD指令进行计算,尾巴部分直接计算;如果jan[j]<s,则直接计算;对于采用SIMD指令进行计算的部分,先计算当前计算的val和x的首地址,采用非对界的SIMDload指令读取s个val和x相应元素,如果用户计算平台支持向量乘加指令,则采用乘加指令直接计算val和x相应元素的乘积并累积到预先设定的向量寄存器中,如果用户计算平台不支持向量乘加指令,则需先乘后加;该步完成后可以得到每行所有连续非零元段与相应x相乘的结果,后面需要对这些结果进行合并。
(2)合并每行各个连续非零元段的结果,对于直接计算的部分,直接将计算结果累加到中间变量value;对于用SIMD指令计算的部分,将计算结果累加到向量寄存器中;每行各个连续非零元段执行结束后,将向量寄存器的结果存回内存,并将s个数累加,最后再与value相加,得到该行的计算结果,即向量y的一个分量y[i];
(3)i从1到m循环执行每一行,最终得到y的每个分量,即得到最终SpMV结果。
本发明与现有技术相比的有益效果:
(1)实际应用中的稀疏矩阵往往是具有局部性特征的,而传统的稀疏矩阵存储方法CSR只是记录了每个非零元的值和其索引信息,从而导致SpMV操作中连续访问的x是不确定的,不能直接采用向量化技术进行优化。为了充分挖掘稀疏矩阵的数据局部性,本发明提出了CSRL(CompressedSparseRowwithLocalinformation)格式,对稀疏矩阵中列下标连续的非零元段,存储首个非零元的列下标及段长度。SpMV操作时,在连续存储的非零元段中,x的访存是规则的、连续的,可以直接采用SIMD指令进行读取并计算。对于连续非零元段比较多的稀疏矩阵而言,该存储格式不仅可以采用SIMD指令进行load操作,还可以减少x向量使用中对其间接地址的访问,进而提高访存带宽利用率,另外还可以用SIMD指令进行多个浮点数的乘操作,加快了浮点计算的时间。
(2)本发明的数据存储方法对连续的非零元进行合并存储,对连续非零元个数较多的矩阵,该存储方法可以减少存储空间需求和x间接索引的访存开销,另外对连续的非零元段还可以采用向量化技术进行优化,提高访存速度和浮点执行速度,进而可以提高SpMV性能。
(3)与现有的CSR方法相比,本发明的SpMV实现方法也是逐行计算的,对A和x的访问顺序和次数均没有变化,对y的访问顺序和写回次数也是一致的,只是通过对连续非零元的合并存储,对每个非零元段只需访问首个非零元的列下标,后续的列下标均可以计算得到,减少了CSR格式中col数组的访问开销。但是该方法中会增加对非零元段长度数组的访问开销,实际计算中,当非零元段长度大于2时,本发明即可减少整体访问开销。在本发明中,每个连续非零元段的SpMV计算中对x和A的访问都是比较规则的,可以使用SIMD化指令一次load多个元素,并可以采用SIMD指令进行乘和加的操作,这样就可以提高访存带宽利用率和浮点操作的计算速度,进而提高性能。
(4)计算复杂性(CC:computationalcomplexity)分析:CSR计算复杂性为O(2*nz),本发明的CSRL计算复杂性为O(2*nz),两种算法的计算复杂性完全一致。
(5)访存复杂度(MAC:memoryaccesscomplexity)分析:CSR总访存复杂度为O(4*nz),CSRL总访存复杂度为O(3*nz+2*nzseg),当2*nzseg<nz时,即当平均每个非零元段有2个非零元时,本发明的CSRL方法访存复杂度降低。
(6)本发明的方法对具有连续非零元特征的稀疏矩阵具有较好的效果,连续非零元特征是指稀疏矩阵中非零元列下标连续。
附图说明
图1为本发明存储方法的实现流程图;
图2为本发明的SpMV实现方法流程图;
图3为现有CSR方法SpMV核心代码图;
图4为本发明的存储方法CSRL的结构图;
图5为本发明的CSRL相比CSR方法访存次数降低率示意图;
图6是测试用例性能结果示意图。
具体实施方式
如图1所示,本发明CSRL方法的具体实现过程,
(1)对矩阵中某行,扫描稀疏矩阵A中该行所有的非零元,将每个非零元顺序存入数组val中,其长度为A的非零元个数nz;
(2)若当前非零元为首个非零元,则记录其列下标index,将记录连续非零元段长度的变量length置1;如果不是首个非零元,则判断当前非零元与上一个非零元是否相邻。如果相邻,则length加1,继续判断下一个非零元,如果不相邻,则当前连续非零元段结束,将其首个非零元的列下标存入jas数组,将length存入jan数组。继续搜索下一个连续非零元段,直至该行全部非零元搜索完毕,数组长度为A的连续非零元段个数nzseg;。
(3)将稀疏矩阵A中每行第一个连续非零元段的索引信息(每行第一个连续非零元段在整个数组的所有连续非零元段中的序号)顺序存入ptr中,数组长度为m+1。
如图2所示,本发明的SpMV具体实现方法如下:
根据上述的存储方法,对稀疏矩阵A进行SpMV实现:
(1)对于第i(i=1,m)行,先计算稀疏矩阵中每个连续非零元段与x相乘的结果。用户计算平台一次存取和计算的双精度个数记为s,对每个非零元段长度jan[j](j为数组下标)进行判断,如果jan[j]>=s,则对jan[j]能被s整除的部分采用SIMD指令进行计算,尾部直接计算;如果jan[j]<s,则直接计算;对于采用SIMD指令进行计算的部分,先计算当前计算的val和x的首地址,采用非对界的SIMDload指令读取s个val和x相应元素,如果用户计算平台支持向量乘加指令,则采用乘加指令直接计算val和x相应元素的乘积并累积到预先设定的向量寄存器中,如果用户计算平台不支持向量乘加指令,则需先乘后加;该步完成后可以得到每行所有连续非零元段与相应x相乘的结果,后面需要对这些结果进行合并。
(2)合并每行各个连续非零元段的结果,对于直接计算的部分,直接将计算结果累加到中间变量value;对于用SIMD指令计算的部分,将计算结果累加到向量寄存器中;每行各个连续非零元段执行结束后,将向量寄存器的结果存回内存,并将s个数累加,最后再与value相加,得到该行的计算结果,即向量y的一个分量y[i];
(3)i从1到m循环执行每一行,最终得到y的每个分量,即得到最终SpMV结果。
该稀疏矩阵的SpMV实现方法的代码可见表1:
表1
采用以上介绍的技术,用Intel的sandybridge测试平台进行验证。
测试平台信息如下:GenuineIntel(R)CPU2.70GHz,支持256位的AVX指令集,拥有32KB的L0datacache,32KB的L1instructioncache,256KB的L2cache,20480KB的L3cache,采用icc编译器进行编译。
测试矩阵集采用国际上著名的matrixmarket稀疏矩阵集中的矩阵进行测试,我们选取了7类测试矩阵,其矩阵信息见表2:
表2矩阵信息表
分别实现了CSR和本发明CSRL方法的SpMV操作,并测试了Intel公司的MKL库的SpMV性能,其访存复杂度对比见表3,性能对比结果见表4。从表中可以看出,CSRL存储方法相比CSR存储方法的SpMV实现时访存平均减少了17.46%;基于CSRL存储方法相对于CSR方法的SpMV实现平均有31%的性能提升,基于CSRL存储方法的SpMV实现相比Intel公司的MKL库10.3版平均有29.5%的性能提升。
表3CSRL方法SpMV操作访存对比
矩阵名字 | Csr | Csrl | 访存降低率 |
Venkat01 | 6871168 | 5986296 | 12.88% |
Bcsstk28 | 876096 | 692472 | 20.96% |
Af_5_k101 | 36108600 | 30100650 | 16.64% |
Raefsky2 | 1177104 | 939896 | 20.15% |
Epb1 | 380212 | 358517 | 5.71% |
linverse | 383908 | 311929 | 18.75% |
pwtk | 46537696 | 36425166 | 21.73% |
raefsky3 | 5955072 | 4591362 | 22.90% |
表4CSRL方法SpMV操作性能对比(单位Gflops)
矩阵名字 | Csr | Csrl | Mkl | Csrl/mkl | Csrl/csr |
Venkat01 | 1.534 | 2.906 | 1.941 | 1.497 | 1.895 |
Bcsstk28 | 2.779 | 3.081 | 2.697 | 1.142 | 1.108 |
Af_5_k101 | 1.890 | 2.217 | 1.881 | 1.179 | 1.173 |
Raefsky2 | 3.023 | 3.749 | 2.971 | 1.262 | 1.240 |
Epb1 | 1.538 | 1.655 | 1.591 | 1.040 | 1.076 |
linverse | 1.582 | 2.299 | 1.593 | 1.443 | 1.453 |
pwtk | 2.044 | 2.267 | 2.048 | 1.107 | 1.109 |
raefsky3 | 3.036 | 4.333 | 2.562 | 1.692 | 1.427 |
本发明包括:一种稀疏矩阵的存储方法CSRL及基于该方法的SpMV实现。设计了一种稀疏矩阵的新的存储方法CSRL,并基于新的方法提出相应的SpMV算法。实验结果表明,对于连续非零元特征的稀疏矩阵,基于本发明存储方法的SpMV算法明显降低了计算时间,相比原始的CSR存储方法,所有测试矩阵平均性能提升了31%,相比国际上著名的商业库MKL10.3版,所有测试矩阵平均性能提升了29.5%,另外从CSR方法转换到本发明CSRL方法所需的时间较少,测试矩阵平均只需3个左右原CSRSpMV时间。
图5是测试矩阵的访存降低率(相对于CSR格式)示意图,从图5中可以看出,测试矩阵的总访存都有不同程度的降低,从5%-22%不等,跟每个矩阵的特点有关。
图6是测试矩阵的性能对比图,分别测试了CSR,CSRL和商业库MKL的性能,图6中纵轴代表SpMV的实际性能,单位为Gflops,横轴为测试矩阵,从图中可以看出,本发明CSRL方法的性能均有不同程度的提高,最高提升了89%,平均提升了29.5%。
本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (9)
1.一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法,其特征在于包括如下步骤:
设A为待压缩存储的稀疏矩阵,其规模为m*n,其中m为行,n为列,该方法需要采用4个一维数组val,jas,jan和ptr来进行压缩存储;
(1)按行扫描稀疏矩阵A,将每个非零元顺序存入数组val中,其长度为A的非零元个数nz;
(2)将每行中列下标连续的若干个非零元定义为一个连续非零元段,按行扫描稀疏矩阵A,寻找每个连续非零元段的起始列下标和长度,对于只有一个非零元的非零元段,即孤立非零元,长度定为1,将每个连续非零元段的起始列下标顺序存入数组jas,将每个连续非零元段的长度顺序存入数组jan,数组长度为A的连续非零元段个数nzseg;
(3)将稀疏矩阵A中每行第一个连续非零元段的索引信息即每行第一个连续非零元段在整个数组的所有连续非零元段中的序号,顺序存入ptr中,数组长度为m+1。
2.根据权利要求1所述的方法,其特征在于:所述m和n不同。
3.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,对稀疏矩阵中每行的连续非零元段合并存储,只存储该连续非零元段的首个非零元列下标及该非零元段的长度。
4.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,对于某个孤立非零元也按非零元段处理,其长度设为1。
5.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,稀疏矩阵为具有连续非零元特征的,即其每行的非零元如果部分非零元的下标连续,则归为一个连续非零元段。
6.一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法的SpMV实现方法,其特征在于包括如下步骤:
SpMV是SparseMatrixVectorMultiplication的简写,即稀疏矩阵向量乘y=A*x,其中y和x为稠密向量,A为稀疏矩阵,采用权利要求1所述的方法存储,
(11)对于第i行,i=1,......,m,先计算稀疏矩阵A中每个连续非零元段与x相乘的结果,用户计算平台一次存取和计算的双精度个数记为s,对每个非零元段长度jan[j]进行判断,j为数组下标,如果jan[j]>=s,则对jan[j]能被s整除的部分采用SIMD指令进行计算,尾部直接计算;如果jan[j]<s,则直接计算;对于采用SIMD指令进行计算的部分,先计算当前计算的val和x的首地址,采用非对界的SIMDload指令读取s个val和x相应元素,如果用户计算平台支持向量乘加指令,则采用乘加指令直接计算val和x相应元素的乘积并累积到预先设定的向量寄存器中,如果用户计算平台不支持向量乘加指令,则需先乘后加;该步完成后得到每行所有连续非零元段与相应x相乘的结果,后面需要对这些结果进行合并;
(12)合并每行各个连续非零元段的结果,对于直接计算的部分,直接将计算结果累加到中间变量value;对于用SIMD指令计算的部分,将计算结果累加到向量寄存器中;每行各个连续非零元段执行结束后,将向量寄存器的结果存回内存,并将s个数累加,最后再与value相加,得到该行的计算结果,即向量y的一个分量y[i];
(13)i从1到m循环执行每一行,最终得到y的每个分量,即得到最终SpMV结果。
7.根据权利要求6所述的SpMV实现方法,其特征在于:所述步骤(11)中,每个连续非零元段的起始列下标由jas数组获得,其余非零元的列下标不能直接获得,而是采用连续非零元段的起始列下标加上其在连续非零元段的相对位置索引值得到。
8.根据权利要求6所述的SpMV实现方法,其特征在于:所述步骤(11)中,并不是对所有的连续非零元段都采用向量化指令进行读取和计算,只是对符合条件的连续非零元段采用向量化指令进行读取和计算,即对非零元段长度大于当前平台一次能够同时读取和计算的双精度个数。
9.根据权利要求6所述的SpMV实现方法,其特征在于:所述步骤(12)中,对采用向量化指令计算的连续非零元段和不采用向量化指令的连续非零元段的计算结果分别累加,当一行计算结束时,再合并结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310271126.8A CN103336758B (zh) | 2013-06-29 | 2013-06-29 | 一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310271126.8A CN103336758B (zh) | 2013-06-29 | 2013-06-29 | 一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103336758A CN103336758A (zh) | 2013-10-02 |
CN103336758B true CN103336758B (zh) | 2016-06-01 |
Family
ID=49244927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310271126.8A Expired - Fee Related CN103336758B (zh) | 2013-06-29 | 2013-06-29 | 一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103336758B (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951442B (zh) * | 2014-03-24 | 2018-09-07 | 华为技术有限公司 | 一种确定结果向量的方法和装置 |
CN104834532B (zh) * | 2015-06-03 | 2018-01-02 | 星环信息科技(上海)有限公司 | 一种分布式数据向量化处理方法和装置 |
CN105045767B (zh) * | 2015-06-24 | 2017-11-17 | 南昌大学 | 一种快速存贮及读取电力系统稀疏矩阵数据的方法 |
CN105487839A (zh) * | 2015-11-24 | 2016-04-13 | 无锡江南计算技术研究所 | 一种面向连续不对界向量数据访问的编译优化方法 |
CN105844009A (zh) * | 2016-03-22 | 2016-08-10 | 北京大学 | 高效稀疏矩阵存储及油藏数值模拟的方法和装置 |
CN107315715B (zh) * | 2016-04-26 | 2020-11-03 | 中科寒武纪科技股份有限公司 | 一种用于执行矩阵加/减运算的装置和方法 |
CN106407158B (zh) * | 2016-09-12 | 2019-01-29 | 东南大学 | 一种gpu加速的批处理同构稀疏矩阵乘满向量的处理方法 |
US10489063B2 (en) * | 2016-12-19 | 2019-11-26 | Intel Corporation | Memory-to-memory instructions to accelerate sparse-matrix by dense-vector and sparse-vector by dense-vector multiplication |
CN106775594B (zh) * | 2017-01-13 | 2019-03-19 | 中国科学院软件研究所 | 一种基于申威26010处理器的稀疏矩阵向量乘异构众核实现方法 |
CN107944555B (zh) * | 2017-12-07 | 2021-09-17 | 广州方硅信息技术有限公司 | 神经网络压缩和加速的方法、存储设备和终端 |
EP3750113A1 (en) * | 2018-02-09 | 2020-12-16 | DeepMind Technologies Limited | Contiguous sparsity pattern neural networks |
CN108446253B (zh) * | 2018-03-28 | 2021-07-23 | 北京航空航天大学 | 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 |
US10644721B2 (en) * | 2018-06-11 | 2020-05-05 | Tenstorrent Inc. | Processing core data compression and storage system |
EP3690679A4 (en) * | 2018-08-06 | 2021-02-17 | Huawei Technologies Co., Ltd. | MATRIX PROCESSING PROCESS AND APPARATUS, AND LOGIC CIRCUIT |
CN109726314B (zh) * | 2019-01-03 | 2020-09-01 | 中国人民解放军国防科技大学 | 基于位图的稀疏矩阵压缩存储方法 |
CN109919826B (zh) * | 2019-02-02 | 2023-02-17 | 西安邮电大学 | 一种用于图计算加速器的图数据压缩方法及图计算加速器 |
CN110062233B (zh) * | 2019-04-25 | 2020-04-28 | 西安交通大学 | 卷积神经网络全连接层稀疏的权值矩阵的压缩方法及系统 |
CN110334067B (zh) * | 2019-06-17 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 一种稀疏矩阵压缩方法、装置、设备及存储介质 |
CN110489428B (zh) * | 2019-08-26 | 2020-05-22 | 上海燧原智能科技有限公司 | 多维稀疏矩阵压缩方法、解压缩方法、装置、设备及介质 |
CN110647508B (zh) * | 2019-08-30 | 2022-07-01 | 北京达佳互联信息技术有限公司 | 数据压缩方法、数据解压缩方法、装置及电子设备 |
CN110766136B (zh) * | 2019-10-16 | 2022-09-09 | 北京航空航天大学 | 一种稀疏矩阵与向量的压缩方法 |
US11366875B2 (en) * | 2020-03-13 | 2022-06-21 | Alibaba Group Holding Limited | Method and device for matrix multiplication optimization using vector registers |
CN111428192A (zh) * | 2020-03-19 | 2020-07-17 | 湖南大学 | 用于优化高性能计算构架稀疏矩阵向量乘的方法和系统 |
CN112364294B (zh) * | 2020-10-27 | 2022-12-27 | 中国核动力研究设计院 | 堆芯数值计算矩阵的自动转换方法、装置、设备及介质 |
CN113360188B (zh) * | 2021-05-18 | 2023-10-31 | 中国石油大学(北京) | 一种用于优化稀疏矩阵-向量乘的并行处理方法及装置 |
CN114491404B (zh) * | 2022-01-28 | 2022-12-06 | 北京理工大学 | 应用于计算设备的混合精度SpMV优化系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267185A (en) * | 1989-04-14 | 1993-11-30 | Sharp Kabushiki Kaisha | Apparatus for calculating matrices |
EP1207460A2 (en) * | 2000-11-16 | 2002-05-22 | Hitachi, Ltd. | Method and apparatus for solving simultaneous linear equations |
CN102033854A (zh) * | 2010-12-17 | 2011-04-27 | 中国科学院软件研究所 | 针对稀疏矩阵的数据存储方法及基于该方法的SpMV实现方法 |
CN102141976A (zh) * | 2011-01-10 | 2011-08-03 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
WO2012076379A2 (en) * | 2010-12-06 | 2012-06-14 | International Business Machines Corporation | Data structure for tiling and packetizing a sparse matrix |
-
2013
- 2013-06-29 CN CN201310271126.8A patent/CN103336758B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267185A (en) * | 1989-04-14 | 1993-11-30 | Sharp Kabushiki Kaisha | Apparatus for calculating matrices |
EP1207460A2 (en) * | 2000-11-16 | 2002-05-22 | Hitachi, Ltd. | Method and apparatus for solving simultaneous linear equations |
WO2012076379A2 (en) * | 2010-12-06 | 2012-06-14 | International Business Machines Corporation | Data structure for tiling and packetizing a sparse matrix |
CN102033854A (zh) * | 2010-12-17 | 2011-04-27 | 中国科学院软件研究所 | 针对稀疏矩阵的数据存储方法及基于该方法的SpMV实现方法 |
CN102141976A (zh) * | 2011-01-10 | 2011-08-03 | 中国科学院软件研究所 | 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法 |
Non-Patent Citations (5)
Title |
---|
COSC:Combine Optimized Sparse Matrix-Vector Multiplication for CSR format;Ji-Lin Zhang,et al.,;《2011 Sixth Annual ChinaGrid Conference》;20111231;125-130 * |
CRSD: application specific auto-tuning of SpMV for diagonal sparse matrices;sun X, et al.,;《Euro-Par 2011 Parallel Processing》;20111231;316-327 * |
Optimization of Sparse Matrix-Vector Multiplications with Variant CSR on GPUs;Xiaowen Feng,et al.,;《2011 IEEE 17th International Conference on Parallel and Distributed Systems》;20111231;165-171 * |
Optimizing Sparse Matrix Vector Multiplication Using Diagonal Storage Matrix Format;LiangYuan, et al.,;《2010 12th IEEE International Conference on High Performance Computing and Communications》;20101231;585-590 * |
SpMV 的自动性能优化实现技术及其应用研究;袁娥等;《计算机研究与发展》;20091231;第46卷(第7期);1117-1128 * |
Also Published As
Publication number | Publication date |
---|---|
CN103336758A (zh) | 2013-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103336758B (zh) | 一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 | |
Garofalo et al. | PULP-NN: Accelerating quantized neural networks on parallel ultra-low-power RISC-V processors | |
Li et al. | A high performance FPGA-based accelerator for large-scale convolutional neural networks | |
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
US8676874B2 (en) | Data structure for tiling and packetizing a sparse matrix | |
US11763156B2 (en) | Neural network compression based on bank-balanced sparsity | |
KR20190053262A (ko) | 신경망 계산 유닛에서 입력 데이터의 희소성 이용 | |
US8762655B2 (en) | Optimizing output vector data generation using a formatted matrix data structure | |
US20120054468A1 (en) | Processor, apparatus, and method for memory management | |
CN104915322A (zh) | 一种卷积神经网络硬件加速方法及其axi总线ip核 | |
Bae et al. | {FlashNeuron}:{SSD-Enabled}{Large-Batch} training of very deep neural networks | |
US20210117755A1 (en) | Power-efficient hybrid traversal apparatus and method for convolutional neural network accelerator architecture | |
CN103927270A (zh) | 一种面向多个粗粒度动态可重构阵列的共享数据缓存装置及控制方法 | |
JP7095479B2 (ja) | 学習装置および学習方法 | |
Shahshahani et al. | Memory optimization techniques for fpga based cnn implementations | |
US9772864B2 (en) | Methods of and apparatus for multidimensional indexing in microprocessor systems | |
US11823771B2 (en) | Streaming access memory device, system and method | |
CN112200310B (zh) | 智能处理器、数据处理方法及存储介质 | |
WO2023041002A1 (zh) | 近内存计算加速器、双列直插式内存模块以及计算设备 | |
CN102929580B (zh) | 数组多引用访问的分块方法和装置 | |
KR102578762B1 (ko) | 뉴럴 프로세서 | |
CN110555793A (zh) | 高效的深度卷积实现方法及包括该方法的视觉处理方法 | |
Juracy et al. | A comprehensive evaluation of convolutional hardware accelerators | |
Gandhi et al. | Optimization of fast Fourier transform (FFT) on Qualcomm Adreno GPU | |
CN116303135B (zh) | 任务数据的装载方法、装置和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160601 |