[daily paper 7]2023 03 05 2011 109 CSX An Extended Compression Format for SpMV on Shared Memory Sys

该论文提出了一种名为CSX的新格式,它扩展了CSR-DU格式,能识别并存储矩阵的行、列、主副对角线和分块结构。通过LLVM在线生成优化的矩阵乘法代码,尤其是在多步迭代中提高效率。虽然特征提取和预优化需要时间,但可以减少内存带宽限制对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文链接

这篇论文讲了一种新的格式Compressed Sparse eXtended(CSX),这种格式把矩阵在行、列、主副对角线、分块上的结构都识别了出来,然后分别用不同的方式存储。

CSX基于CSR-DU格式,这种格式记录的是列坐标之间的差,因此数值更小。如果都不超过256,那么可以用一个Byte存储。256而不是255是因为列坐标的差不为零,所以0可以代表256。一般处理器都有分支预测,所以这个判断并不影响速度。下面是图示:

在这里插入图片描述

CSX在CSR-DU的理念上进行了扩展,不仅探测行上的结构单元,还探测列、主副对角线、分块上的稠密单元。这些不同的探测方向被CSX用一套滑动窗口的框架统一了。

CSX的另一个理念是在进行多步迭代之前,使用LLVM在线生成CSR格式的稀疏矩阵的矩阵乘法计算代码。虽然这个编译优化是要占用不少时间的,但是由于很多迭代算法会一直使用同一个矩阵,所以有可能整体上降低计算时间。LLVM能优化什么呢?我觉得应该是稀疏矩阵上面常量的一些优化,比如乘2/4/8改成位移,以及一些连续元素的向量操作优化。既然可以现场编译,我觉得也可以JIT,这可能也是一个研究方向。

CSX统一探测的基础在于水平方向上的探测,如下图所示:

在这里插入图片描述

Figure 5中,41 61 81不能被探测到,因为长度不够。1 21 41 61 81也不能被探测出来,因为为了算法运行的效率,不支持这样的overlapped run。探测出来间隔一样的,应该是为了压缩,这样只用记录间隔为多少,有几个就行了。

对于列、对角线的方法都一样,对角线的话是分成不同对角线,对每个对角线分别探测。探测分块有两点不一样,一是步长只能为1,另外只能探测到一整个矩形,因为不对齐的矩形会增加额外的复杂度。2D探测图示:

在这里插入图片描述

将特征提取出来之后,就是用LLVM编译并优化不同的部分,然后进行计算,论文中没有细讲。

论文还提供的一个重要的信息,我们知道SpMV的瓶颈在于内存带宽,论文中提到核数越多,内存带宽的影响就越大。其实也很好理解,核数多了算得就快,但还是一个内存,带宽的问题就凸显了。

总结一下,论文的主要思想在于将矩阵在不同方面的特征都提取出来,如行、列、主副对角线、分块等。另一个思想在于在多次使用同一稀疏矩阵的时候,提前进行优化。缺点是提取的特征越详尽就越花费时间,提前优化也是同样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值