System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及仿真软件,尤其涉及一种基于稀疏矩阵向量乘法的gpu加速优化方法和装置。
技术介绍
1、近年来随着图形处理器(gpu,graphics processing unit)硬件的发展,gpu的加速计算在越来越多的领域得到广泛的应用。在仿真计算领域,大型稀疏矩阵的线性方程组的求解非常常见,其中稀疏矩阵向量乘(sparse matrix vector multiplication,spmv)的计算最为常见,稀疏矩阵向量乘在gpu上实现高性能加速是现今的热点。
2、传统的cpu并行式稀疏矩阵向量乘迁移到gpu上实现高性能加速,通常会存在由稀疏矩阵引起的离散访存和缓存命中率低的问题,这导致了gpu性能无法最大化的发挥。由于gpu的计算峰值非常高,过多无效率的访存会造成gpu计算效率低下。
技术实现思路
1、为解决或部分解决相关技术中存在的问题,本申请提供一种基于稀疏矩阵向量乘法的gpu加速优化方法,能够减少稀疏矩阵在gpu上的访存次数,提高稀疏矩阵的缓存命中率,提高gpu的计算效率。
2、本申请第一方面提供一种稀疏矩阵向量乘法在gpu上的访存优化方法,包括获取内存空间中的稀疏矩阵和第一被乘向量,对所述稀疏矩阵和第一被乘向量进行重排序,得到第一矩阵和第二被乘向量;
3、对所述第一矩阵进行矩阵压缩,得到第二矩阵;
4、依据所述第二矩阵中每行非零元素的数量,确定每个线程束的分配行数,得到分配结果,依据所述分配结果对所述第二矩阵进行线程束分配处理
5、将所述若干个分配完成的线程束中每一行的非零元素与所述第二被乘向量进行点乘计算,生成计算结果。
6、在一种实施方式中,所述对所述第一矩阵进行矩阵压缩,获得第二矩阵,包括:
7、对所述第一矩阵中的非零元素进行分类处理,获得由对角的非零元素组成的对角向量和由非对角的非零元素组成的第一矩阵;
8、按照从右向左的顺序依次将所述由非对角的非零元素组成的第一矩阵每行中的非零元素向左移位,使每行中的非零元素靠左连续排列,获得所述第二矩阵。
9、在一种实施方式中,所述依据所述第二矩阵中每行非零元素的数量,确定每个线程束的分配行数,得到分配结果,依据所述分配结果对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束,包括:
10、判断所述第二矩阵中第一行至第四行中每一行的非零元素个数;
11、若所述第二矩阵中第一行至第四行中的其中一行的非零元素个数大于第一参数,则将所述第二矩阵中的第一行至第四行分配至同一个线程束中;
12、若所述第二矩阵中第一行至第四行中每一行的非零元素个数均小于第一参数,判断所述第二矩阵中第一行至第六行中的其中一行的非零元素个数是否大于第二参数;
13、若所述第二矩阵第一行至第六行中的其中一行的非零元素个数大于第二参数,则将所述第二矩阵中的第一行至第五行分配至同一个线程束中;
14、若所述第二矩阵第一行至第六行中的每一行的非零元素个数均小于第二参数,判断所述第二矩阵第一行至第八行中的其中一行的非零元素个数是否等于第二参数;
15、若所述第二矩阵第一行至第八行中的其中一行的非零元素个数等于第二参数,则将所述第二矩阵中的第一行至第八行分配至同一个线程束中,其中,所述第一参数大于所述第二参数;
16、判断所述第二矩阵是否还剩余未分配线程束的行;
17、若否,将所述第二矩阵中未分配的下一行作为第一行;返回所述判断所述第二矩阵中第一行至第四行中每一行的非零元素个数的步骤;
18、若是,依据线程束的分配结果,对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束。
19、在一种实施方式中,所述第一参数为6,所述第二参数为4。
20、在一种实施方式中,所述将所述若干个分配完成的线程束中每一行的非零元素与所述第二被乘向量进行点乘计算,生成计算结果,包括:
21、将所述若干个分配完成的线程束中每一行的非零元素与所述第二被乘向量进行点乘计算,生成第一结果;
22、将所述由对角的非零元素组成的对角向量与第二被乘向量进行点乘计算,生成第二结果;
23、对所述第一结果和第二结果进行求和计算,生成所述计算结果。
24、在一种实施方式中,所述对所述第一矩阵进行矩阵压缩,获得第二矩阵,包括:
25、按照从右向左的顺序依次将所述第一矩阵每行中的非零元素向左移位,使每行中的非零元素靠左连续排列,获得第二矩阵。
26、在一种实施方式中,所述依据所述第二矩阵中每行非零元素的数量,确定每个线程束的分配行数,得到分配结果,依据所述分配结果对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束,包括:
27、判断所述第二矩阵中第一行至第三行中每一行的非零元素个数;
28、若所述第二矩阵中第一行至第三行中的其中一行的非零元素个数等于第三参数,则将所述第二矩阵中的第一行至第三行分配至同一个线程束中;
29、若所述第二矩阵中第一行至第三行中每一行的非零元素个数不等于第三参数,判断所述第二矩阵中第一行至第四行中的其中一行的非零元素个数是否大于或等于第四参数;
30、若所述第二矩阵第一行至第四行中的其中一行的非零元素个数大于或等于第四参数,则将所述第二矩阵中的第一行至第四行分配至同一个线程束中;
31、若所述第二矩阵第一行至第六行中的每一行的非零元素个数均小于第四参数,判断所述第二矩阵第一行至第六行中的其中一行的非零元素个数是否大于或等于第五参数;
32、若所述第二矩阵第一行至第六行中的其中一行的非零元素个数大于或等于第五参数,则将所述第二矩阵中的第一行至第五行分配至同一个线程束中,其中,所述第三元素值大于所述第四参数,所述第四参数大于所述第五参数;
33、判断所述第二矩阵是否还剩余未分配线程束的行;
34、若否,将所述第二矩阵中未分配的下一行作为第一行;返回所述判断所述第二矩阵中第一行至第三行中每一行的非零元素个数的步骤;
35、若是,依据线程束的分配结果,对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束。
36、在一种实施方式中,所述第三参数为9,所述第四参数为7,所述第五参数为5。
37、在一种实施方式中,所述对所述稀疏矩阵进行重排序,获得第一矩阵,包括:
38、根据rcm排序法对所述稀疏矩阵和第一被乘向量进行重排序,获得所述第一矩阵和所述第二被乘向量。
39、在一种实施方式中,所述第一矩阵和所述第二矩阵中每行非对角的非零元素的数量为4-8个。
40、本申请第二方面提供一种基于稀疏矩阵向量乘法的gpu加速优化装置,包括:获取模块,用于获取内存空间中的稀疏矩阵和第一被乘向量,对所述稀疏矩阵和第一本文档来自技高网...
【技术保护点】
1.一种基于稀疏矩阵向量乘法的GPU加速优化方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述对所述第一矩阵进行矩阵压缩,获得第二矩阵,包括:
3.根据权利要求2所述的方法,其特征在于,所述依据所述第二矩阵中每行非零元素的数量,确定每个线程束的分配行数,得到分配结果,依据所述分配结果对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束,包括:
4.根据权利要求3所述的方法,其特征在于,所述第一参数为6,所述第二参数为4。
5.根据权利要求3所述的方法,其特征在于,所述将所述若干个分配完成的线程束中每一行的非零元素与所述第二被乘向量进行点乘计算,生成计算结果,包括:
6.根据权利要求1所述的方法,其特征在于,所述对所述第一矩阵进行矩阵压缩,获得第二矩阵,包括:
7.根据权利要求6所述的方法,其特征在于,所述依据所述第二矩阵中每行非零元素的数量,确定每个线程束的分配行数,得到分配结果,依据所述分配结果对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束,包括:
8
9.根据权利要求1所述的方法,其特征在于,所述第一矩阵和所述第二矩阵中每行非对角的非零元素的数量为4-8个。
10.一种基于稀疏矩阵向量乘法的GPU加速优化装置,其特征在于,包括:
...【技术特征摘要】
1.一种基于稀疏矩阵向量乘法的gpu加速优化方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述对所述第一矩阵进行矩阵压缩,获得第二矩阵,包括:
3.根据权利要求2所述的方法,其特征在于,所述依据所述第二矩阵中每行非零元素的数量,确定每个线程束的分配行数,得到分配结果,依据所述分配结果对所述第二矩阵进行线程束分配处理,得到若干个分配完成的线程束,包括:
4.根据权利要求3所述的方法,其特征在于,所述第一参数为6,所述第二参数为4。
5.根据权利要求3所述的方法,其特征在于,所述将所述若干个分配完成的线程束中每一行的非零元素与所述第二被乘向量进行点乘计算,生成计算结果,包括...
【专利技术属性】
技术研发人员:李佳智,王茂林,包刚强,
申请(专利权)人:安世亚太科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。