[发明专利]面向众核架构的稀疏矩阵向量乘众核优化方法在审
| 申请号: | 201910919675.9 | 申请日: | 2019-09-26 |
| 公开(公告)号: | CN112560356A | 公开(公告)日: | 2021-03-26 |
| 发明(设计)人: | 郭恒;陈鑫;刘鑫;陈德训;李芳;徐金秀;孙唯哲 | 申请(专利权)人: | 无锡江南计算技术研究所 |
| 主分类号: | G06F30/28 | 分类号: | G06F30/28;G06F113/08;G06F119/14 |
| 代理公司: | 苏州创元专利商标事务所有限公司 32103 | 代理人: | 王健 |
| 地址: | 214083 江苏*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 面向 架构 稀疏 矩阵 向量 乘众核 优化 方法 | ||
1.一种面向众核架构的稀疏矩阵向量乘众核优化方法,其特征在于:已知行数为m、列数为n的稀疏矩阵A,长为n的向量x;求解长度为m的向量y,y=Ax为稀疏矩阵A与向量x的点积;
所述稀疏矩阵向量乘众核优化方法包括以下步骤:
S1、定义x向量块大小blk_x_size,根据x向量元素下标对x向量元素进行分块;
S2、根据x向量的分块信息,即S1中得到的x向量元素所在的x向量块编号信息,统计原始稀疏矩阵,即稀疏矩阵A中每一行非零元所在列号对应的x向量块的编号,由此统计出稀疏矩阵向量乘时稀疏矩阵每一行所需要的x向量块的编号信息;
S3、合并在稀疏矩阵向量乘中需求的x向量块编号完全相同的各矩阵行,组成各个small_block;
S4、取block做Spmv时的性能评价函数,在依赖的x向量块的个数不超过阈值的前提下,合并部分small_block形成big_block;
S5、跟据big_block信息,包含稀疏矩阵A中的多行,以及在进行稀疏矩阵向量乘计算时需求的x向量块信息,建立稀疏矩阵A',按照big_block数组顺序将A中的行映射到A'中,按照big_block数组顺序,将A中的行写入到A'中;
S6、按照以上预处理阶段S1~S5分块后的矩阵信息进行Spmv众核加速,即稀疏矩阵A'中,非零元按照big_block数组顺序排布,Spmv众核加速算法中,计算单元为big_block,在一个核中,导入big_block中非零元数据,导入big_block中需求的x向量块数据,然后计算结果并写回主存;
所述big_block为众核内每个计算核心处理的基本数据单元。
2.根据权利要求1所述的面向众核架构的稀疏矩阵向量乘众核优化方法,其特征在于:所述步骤S1中x向量块大小blk_x_size为256或512,x向量中下标ind_x位置的元素划分到的x块的编号为ind_x/blk_x_size,然后ind_x/blk_x_size向下取整。
3.根据权利要求1所述的面向众核架构的稀疏矩阵向量乘众核优化方法,其特征在于:所述步骤S2中统计方式为:假设稀疏矩阵A中某一个非零元所在列的列号为c,那么这个非零元在进行稀疏矩阵向量乘时需求的x向量块编号为由此可以计算出A中每一行非零元对应的x向量块的编号信息,矩阵A的一行中,如果多个非零元计算得到的x向量块编号相同,记录A中这一行所需要的x向量块编号时,这个编号只记录一次。
4.根据权利要求1所述的面向众核架构的稀疏矩阵向量乘众核优化方法,其特征在于:所述步骤S3中small_block为S2中计算得到了矩阵A中每一行非零元在进行稀疏矩阵向量乘计算时需求的x向量块编号信息,small_block为小块,一个小块中记录矩阵A中多行的行号,一个小块small_block中这些行号对应的A中的这些行在进行稀疏矩阵向量乘时需求的x向量块编号信息完全相同。
5.根据权利要求1所述的面向众核架构的稀疏矩阵向量乘众核优化方法,其特征在于:所述步骤S4中具体操作为:
S41、对于一个small_block,假设它包含稀疏矩阵A中k行,A中这k行包含的非零元总数为sum,而该small_block中的这些行在做稀疏矩阵向量乘计算时需求的x向量块数量为n_blk_x,对该small_block,定义性能评价函数value=sum/(n_blk_x*blk_x_size),设定x向量块数量上限的阈值为10,也就是说,如果n_blk_x10,那么value=0;
S42、对原来的这些small_block进行遍历,遍历到第i个small_block时,计算该small_block与剩下的未参与合并的small_block合并后的value值,选择能够使得value值达到最大的第j个small_block,然后将第i个small_block与第j个small_block合并形成新的small_block;
S43、遍历一次small_block数组,形成新的small_block数组,然后在新的small_block数组基础上,再进行遍历,重复3~10次,这样最终形成的small_block数组重新命名为大块即big_block数组。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡江南计算技术研究所,未经无锡江南计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910919675.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种卡片渲染方法及电子设备
- 下一篇:一种火龙果园的水肥管理方法





