CN104636273B - 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法 - Google Patents

一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法 Download PDF

Info

Publication number
CN104636273B
CN104636273B CN201510091269.XA CN201510091269A CN104636273B CN 104636273 B CN104636273 B CN 104636273B CN 201510091269 A CN201510091269 A CN 201510091269A CN 104636273 B CN104636273 B CN 104636273B
Authority
CN
China
Prior art keywords
row
block
value
sub
sparse matrix
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
Application number
CN201510091269.XA
Other languages
English (en)
Other versions
CN104636273A (zh
Inventor
韩文廷
张爱民
江霞
安虹
陈俊仕
孙荪
汪朝辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Science and Technology of China USTC
Original Assignee
University of Science and Technology of China USTC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by University of Science and Technology of China USTC filed Critical University of Science and Technology of China USTC
Priority to CN201510091269.XA priority Critical patent/CN104636273B/zh
Publication of CN104636273A publication Critical patent/CN104636273A/zh
Application granted granted Critical
Publication of CN104636273B publication Critical patent/CN104636273B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法,包括:(1)获取矩阵A中行非零元个数最大值a,处理器SIMD单元可同时计算的非零元个数b,计算大于a且为b的倍数的最小值作为临时行宽度;(2)对矩阵A,数组Value和Colidx分别顺序存储每一行的非零元值和列坐标,每行非零元个数不足临时行宽度的,在该行尾分别补0和‑1;(3)对Colidx和Value按b列分块;(4)每个列块按行压缩,使列块中有非零元的行集中于列块上部;(6)列块按b行分块,得到子块;(7)去除全零子块,将子块按行存储。本发明的存储方法将稀疏矩阵分成稠密子块,在保留非零元局部性的基础上,提高了对处理器SIMD处理单元以及寄存器的利用率,提高了稀疏矩阵向量乘的性能。

Description

一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法
技术领域
本发明涉及并行程序设计领域,特别涉及一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法。
背景技术
稀疏矩阵向量乘(SpMV)是很多科学和工程应用的一个重要的计算核心,它的计算效率是科学和工程应用的计算性能的关键。该算法的主要功能是计算y=y+Ax,其中A是一个二维稀疏矩阵,x和y都是一维稠密的向量。然而该算法核心在现代具有多级Cache的SIMD众核处理器上,由于稀疏矩阵非零元分布的不规则性,其SIMD利用率很低,导致SpMV性能较差。要想提高该算法的性能,我们往往需要综合考虑输入集和计算平台的特性,然后选择合适的稀疏矩阵存储格式,这些格式可以有效利用具体计算矩阵的数据特点和计算平台的结构特点。
随着多核CPU的快速发展,其单指令多数据SIMD计算单元的计算宽度也越来越大。例如,Intel MMX指令提供了64位宽度的SIMD支持,Intel SSE指令则支持128位的SIMD支持,Intel AVX指令支持256位的SIMD操作。近年来英特尔推出了Intel Xeon Phi协处理器,其提供了512位的SIMD计算单元。这些处理器的共同特点是:每个计算核心都具有能够处理长向量的宽SIMD计算单元,并具有多层高速缓存(Cache)结构。
由于这些处理器拥有宽SIMD计算部件,所以其非常适合稠密矩阵的计算。而稀疏矩阵向量乘要想在这种带多级Cache的SIMD处理器上获得很高的计算性能,需要克服由于稀疏矩阵非零元分布不规则导致的计算瓶颈:
(1)SIMD利用率较低;
(2)x向量中的数据重用率低,使得高速缓存缺失和访存延迟开销很大;
本发明充分地利用了带多级Cache的SIMD众核处理器的各种硬件特性,如每个核上的宽SIMD计算能力,多级高速缓存等,提出了一种对稀疏矩阵进行分块压缩的存储办法,称为ERB(ELLPACK Register Blocking),该方法是一种寄存器分块优化方法。该方法有效地解决了稀疏矩阵向量乘在带多级Cache的SIMD众核处理器上的计算瓶颈,提供了一种可以高效地利用其结构特征的稀疏矩阵存储格式。
发明内容
本发明提出一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法ERB(ELLPACK Register Blocking),之前的工作表明,基于ELLPACK的稀疏矩阵向量乘算法可以有效地利用宽SIMD计算能力,而且ELLPACK的变种在CPU、GPU和MIC等具有宽SIMD计算能力的架构上都表现出了不俗的计算性能。所以,本发明在ELLPACK的基础上,通过对以ELLPACK格式存储的稀疏矩阵进行分块和压缩等操作,提出一种可以有效解决背景技术中所述瓶颈的寄存器分块优化的稀疏矩阵存储方法。
本发明实现的针对具有宽SIMD计算单元的处理器的稀疏矩阵存储方法ERB的具体实现步骤如图1所示,本发明的格式转换过程共有5个步骤,具体如下:
(1)特征提取及矩阵扫描,按行扫描稀疏矩阵,获取稀疏矩阵中非零元个数最多的行的非零元个数a以及处理器SIMD处理单元中可同时计算的非零元个数b,图2、图3、图4中假设b为2,计算得到大于a且为b的整数倍的最小值作为临时行宽度。按行扫描稀疏矩阵A,用数组Value顺序存储稀疏矩阵每一行的非零元,每行非零元个数不足临时行宽度的,在该行补0。用数组Colidx存储Value中每一个非零元对应的列索引值,对Value中的零元(Value中存储全部非零元,但由于每行非零元个数不同,所以在每行最后补0,使每行长度相等,补的0即此处的零元),在Colidx中存储为-1。稀疏矩阵A扫描结果如图2所示。
(2)列分块,将步骤1得到的稀疏矩阵按列宽为b进行按列分块。由于下面的转换过程同时应用于Value矩阵和Colidx矩阵,并且操作完全一致,故以下仅以Value数组的变换作图阐明。在步骤1得到的稀疏矩阵中,将Value矩阵和Colidx矩阵按同一固定列宽度为b分块。
(3)列压缩,在按列分块的基础上,对每一个列块,将其中全零的行去除,并将其余行依次向上压缩。Value矩阵的列分块和列压缩的过程如图3所示。图中列块1中,第2行的元素都是零元,则将第三行及其后的行向上压缩。
(4)行分块,在列压缩的基础上,对每一个列块按行分块大小为b进行按行分块得到子块。并用相同的办法处理子块的非零元的列信息矩阵,此外还要保存子块每一行的行信息。Value矩阵的行分块过程如图4所示。
(5)按行存储,将子块内的数值按行存储,并将所有的块按行存储,则得到ERB存储格式的稀疏矩阵。
在按行存储后,转换过程执行完毕,稀疏矩阵最终的存储格式如图5所示,接下来就需要将分好的子块平均分配到处理器各核上进行稀疏矩阵向量乘的计算。
与现有技术中存在的问题相比较,本发明所具有的优点和积极效果主要体现在:
(1)本发明通过对稀疏矩阵进行列分块和列压缩,使得矩阵中的非零元集中,在最后ERB存储格式的每个子块中,非零元的密度高。相比较目前在具有宽SIMD计算单元的处理器上的稀疏矩阵向量乘算法可以提高每个计算核的SIMD寄存器和SIMD计算单元的利用率,是一种寄存器分块优化的存储方法;
(2)本发明通过对稀疏矩阵进行细粒度的划分,然后对每个块进行稀疏矩阵向量乘的过程中保留了稀疏矩阵非零元之间固有的局部性,相比较目前基于ELLPACK的优化办法,有效地保留了稀疏矩阵非零元固有的局部性,从而很好地利用了具有宽SIMD计算单元的处理器结构高速缓存中的局部性;
本发明提出的方法相较于Intel MKL中已有的稀疏矩阵向量乘算法,算法运行时的实际表现好很多,而且本优化方法对稀疏矩阵的模式没有限制,是一个通用的能够有效提高稀疏矩阵向量乘算法在带多级Cache的SIMD众核处理器上计算效率的存储方法。
附图说明
图1、针对具有宽SIMD计算单元的处理器的稀疏矩阵存储格式转换过程示意图;
图2(a)、稀疏矩阵A扫描结果示意图,普通的稀疏矩阵A;
图2(b)、为扫描后的结果格式;
图3(a)、矩阵的Value矩阵列分块及列压缩示意图,按列块大小为2进行按列分块,形成3个列块;
图3(b),在每个列块中,分别进行按列压缩,列块1的第2行,列块2的第1行和第2行由于是全零的行,则被其后的行所压缩;
图4、矩阵的Value矩阵行分块示意图,图中先按行块大小为2进行按行分块,去掉全为0的块后,则剩余4个子块;
图5、稀疏矩阵ERB存储格式示意图,转换结果由三个数组组成,其中value数组按列存储矩阵的非零元的值;colidx数组按列存储矩阵非零元的列坐标;row_perm数组存储每个块中每行的原始行坐标。
具体实施方式
本节将本发明应用于一个典型的在带多级Cache的SIMD众核处理器上的稀疏矩阵向量乘计算。从而进一步说明本发明的目的、优点和关键技术特征。这个实施只是该方案的一个典型范例,凡采取替换或者等效变换而形成的技术方案,均落在本发明要求保护的范围之内。
对于一个要计算的稀疏矩阵A:
先将矩阵A按本发明提出的优化方法经过特征提取及矩阵扫描、列分块、列压缩、行分块、按行存储。转换成如图5的ERB存储格式,或者直接将要计算的稀疏矩阵存储成如图5的存储格式,并保存到文件中。
在计算时,从文件中读入图5中存储的稀疏矩阵,然后根据小子块大小确定每个子块所在的位置从Value数组中读入各子块的非零元的值,从Colidx中读入各子块中非零元的列坐标信息,从row_perm中读入各子块的行信息。然后将各子块按固定的分配算法分配到不同的核上去计算。在每个子块内部,一次读取一行放入到SIMD计算单元中去计算,然后将结果加入到y向量中。其中x向量和y向量参与计算的元素分别由当前非零元的列坐标和行坐标决定。

Claims (3)

1.一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法,其特征在于:将稀疏矩阵通过五次矩阵变换后进行存储,包括以下步骤:
特征提取及矩阵扫描:获取稀疏矩阵中非零元最多的行的非零元个数a以及处理器SIMD处理单元中可同时计算的非零元个数b,计算得到大于a且为b的整数倍的最小值作为临时行宽度,按行扫描稀疏矩阵A,用数组Value顺序存储稀疏矩阵每一行的非零元,每行非零元个数不足临时行宽度的,在该行后补0,用数组Colidx存储Value中每一个元素对应的列索引值,对Value中的零元,其在Colidx数组中对应的值为-1;
列分块,将特征提取得到的b的值作为列分块宽度,对Colidx数组和Value数组按列划分为多个列块;
列压缩,在按列分块的基础上,对每一个块,将其中全零的行去除,并将其余行依次向上压缩;
行分块,在列压缩的基础上,对每一个列块在Value和Colidx的值按行宽为b进行按行分块得到子块,并用row_perm数组保存每个子块的行索引信息;
按行存储,将子块内的元素按行存储,并将所有的块按行存储,则得到ERB存储格式的稀疏矩阵。
2.根据权利要求1所述的方法,其特征在于:在计算时,从文件中读入与稀疏矩阵相关的Value,Colidx和row_perm数组,然后根据子块大小确定每个子块所在的位置从Value数组中读入各子块的非零元的值,从Colidx中读入各子块中非零元的列坐标信息,从row_perm中读入各子块的行信息;然后将各子块按固定的分配算法分配到不同的核上去进行稀疏矩阵向量乘的计算。
3.根据权利要求1所述的方法,其特征在于:矩阵变换过程中参数包括:
1)稀疏矩阵:行数,列数,非零元个数,每行非零元个数,按行和按列分块大小;
2)处理器:SIMD计算单元宽度;
3)数据类型:单精度浮点类型,或双精度浮点类型。
CN201510091269.XA 2015-02-28 2015-02-28 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法 Active CN104636273B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510091269.XA CN104636273B (zh) 2015-02-28 2015-02-28 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510091269.XA CN104636273B (zh) 2015-02-28 2015-02-28 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法

Publications (2)

Publication Number Publication Date
CN104636273A CN104636273A (zh) 2015-05-20
CN104636273B true CN104636273B (zh) 2017-07-25

Family

ID=53215050

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510091269.XA Active CN104636273B (zh) 2015-02-28 2015-02-28 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法

Country Status (1)

Country Link
CN (1) CN104636273B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104951427B (zh) * 2015-06-30 2019-01-11 深圳清华大学研究院 以矩阵为中心的分布式计算框架
CN105068787A (zh) * 2015-08-28 2015-11-18 华南理工大学 一种稀疏矩阵向量乘法的异构并行计算方法
US10482392B2 (en) * 2016-02-12 2019-11-19 Google Llc Robust large-scale machine learning in the cloud
CN107315567B (zh) * 2016-04-26 2020-08-07 中科寒武纪科技股份有限公司 一种用于执行向量最大值最小值运算的装置和方法
CN106775594B (zh) * 2017-01-13 2019-03-19 中国科学院软件研究所 一种基于申威26010处理器的稀疏矩阵向量乘异构众核实现方法
CN108446253B (zh) * 2018-03-28 2021-07-23 北京航空航天大学 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法
WO2020029018A1 (zh) 2018-08-06 2020-02-13 华为技术有限公司 矩阵的处理方法、装置及逻辑电路
CN109710213A (zh) * 2018-12-25 2019-05-03 广东浪潮大数据研究有限公司 一种稀疏矩阵加速计算方法、装置、设备及其系统
CN109919826B (zh) * 2019-02-02 2023-02-17 西安邮电大学 一种用于图计算加速器的图数据压缩方法及图计算加速器
CN112540718A (zh) * 2019-09-23 2021-03-23 无锡江南计算技术研究所 面向申威众核架构的稀疏矩阵存储方法
WO2021237518A1 (zh) * 2020-05-27 2021-12-02 深圳市大疆创新科技有限公司 数据存储的方法、装置、处理器及计算机存储介质
CN111984418B (zh) * 2020-07-20 2022-09-02 中国人民解放军国防科技大学 稀疏矩阵向量乘并行任务粒度参数自动调优方法和装置
WO2022161394A1 (zh) * 2021-01-26 2022-08-04 北京灵汐科技有限公司 任务映射方法、任务处理方法、处理核和电子设备
CN112953549B (zh) * 2021-02-08 2022-03-29 中国科学院计算机网络信息中心 一种稀疏矩阵的存储处理方法及装置
CN117931131A (zh) * 2024-03-22 2024-04-26 中国人民解放军国防科技大学 一种稀疏矩阵乘指令实现方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5905666A (en) * 1995-01-03 1999-05-18 International Business Machines Corporation Processing system and method for performing sparse matrix multiplication by reordering vector blocks
CN102141976A (zh) * 2011-01-10 2011-08-03 中国科学院软件研究所 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5905666A (en) * 1995-01-03 1999-05-18 International Business Machines Corporation Processing system and method for performing sparse matrix multiplication by reordering vector blocks
CN102141976A (zh) * 2011-01-10 2011-08-03 中国科学院软件研究所 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Model-driven autotuning of sparse matrix-vector multiply on GPUs;Choi J W, et al.;《Preceedings of the 15th ACM sigplan Symposium on principies and practice of parallel programming》;20100531;第45卷(第5期);全文 *
一种提高SpMV向量化性能的新型稀疏矩阵存储格式;刘芳芳 等;《数值计算与计算机应用》;20141231;第35卷(第4期);全文 *
对角线稀疏矩阵的SpMV自适应性能优化;孙相征 等;《计算机研究与发展》;20130331;第50卷(第3期);全文 *

Also Published As

Publication number Publication date
CN104636273A (zh) 2015-05-20

Similar Documents

Publication Publication Date Title
CN104636273B (zh) 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法
CN110378468B (zh) 一种基于结构化剪枝和低比特量化的神经网络加速器
Guo et al. FBNA: A fully binarized neural network accelerator
CN109086244A (zh) 一种基于向量处理器的矩阵卷积向量化实现方法
TW201913460A (zh) 芯片裝置及相關産品
CN107301456B (zh) 基于向量处理器的深度神经网络多核加速实现方法
US11797855B2 (en) System and method of accelerating execution of a neural network
CN101937425B (zh) 基于gpu众核平台的矩阵并行转置方法
WO2022166199A1 (zh) 量子纠错解码系统、方法、容错量子纠错系统及芯片
CN106846235A (zh) 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统
CN109840585B (zh) 一种面向稀疏二维卷积的运算方法和系统
Wang et al. A low-latency sparse-winograd accelerator for convolutional neural networks
CN112286864B (zh) 加速可重构处理器运行的稀疏化数据处理方法及系统
WO2019136751A1 (zh) 人工智能并行处理方法、装置、可读存储介质、及终端
CN112784973A (zh) 卷积运算电路、装置以及方法
CN113486298A (zh) 基于Transformer神经网络的模型压缩方法、矩阵乘法模块
CN111381968A (zh) 一种高效运行深度学习任务的卷积运算优化方法及系统
CN112257844A (zh) 一种基于混合精度配置的卷积神经网络加速器及其实现方法
CN113254391B (zh) 一种神经网络加速器卷积计算和数据载入并行方法及装置
CN102438149A (zh) 一种基于可重构技术的avs反变换的实现方法
CN109472734A (zh) 一种基于fpga的目标检测网络及其实现方法
CN110837483B (zh) 张量维度变换的方法以及装置
CN104572588A (zh) 矩阵求逆处理方法和装置
CN115983343A (zh) 基于FPGA的YOLOv4卷积神经网络轻量化方法
CN115170381A (zh) 一种基于深度学习的视觉slam加速系统及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant