学习日记-spmv(7)

SPMV稀疏矩阵向量乘笔记(7)

OpenMP循环调度算法及SpMV多核并行化研究 浅读

spmv优化技术

  1. 寄存器分块算法(其实就是BCSR格式的实现,并且寄存器重用),代码笔记6已经给出,下面给出BCSR案例。(block为2x3矩阵)
    example
    寄存器分块的优点如下:
    blockadv
  2. 基于数据压缩的优化技术
    2.1 主要为因为col索引数组大小可预估->取决于矩阵的列数,可以通过压缩col数组,即例如一个列索引本用一个int值,现在可以使用一个int存储两个列索引。
    2.2 如果矩阵中非零元重复较多,也可以压缩非零值数组,不过这个压缩方法使得对非零元的访问变成了间接访问,但是在不同非零元个数较少的情况下,也可以提高访存效率,如图。
    valzip
  3. cache分块算法(与寄存器分块不同的是,cache块一般比较大,一般是基于csr格式的数组,将其分为Rcache*Rcache的小矩阵,然后在进行相应的计算,不过这方法也有一定的局限性,只对一部分特定的矩阵才有效)
    cache

spmv负载均衡策略

  1. 基于非零元个数的行划分
    在openmp中,static策略一般是较好的性能,但是并不是负载均衡所想要的。因为最初的划分为给每个线程按照相同行数划分,使得线程计算时间长短不一。可以通过非零元个数进行划分。
  2. 列划分和二维划分
    列划分一般是基于csc划分,存储格式在之前已经给出,不再详细解释。二维划分的意思就是将大矩阵分为小矩阵进行计算,可以进一步改善负载均衡的情况。

大矩阵分为小矩阵进行计算,可以进一步改善负载均衡的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值