稀疏矩阵乘法的开销是多少


10

矩阵乘法(Mat * Mat和Mat * Vec)是否随非零数或矩阵大小缩放?或两者的某种组合。

形状呢?

例如,我有一个100 x 100的矩阵,其中包含100个值,或者一个1000 x 1000的矩阵,其中包含100个值。

当对这些矩阵求平方(或将它们乘以具有相似稀疏性的相似矩阵)时,第一个(100x100)是否比第二个(1000x1000)快?是否取决于值在哪里?

如果它取决于实现,那么我对PETSc的答案很感兴趣。

Answers:


11

稀疏矩阵向量乘法的成本与非零项的数量成线性比例,因为每个项都乘以向量中的某个项一次。

稀疏矩阵-矩阵乘法的成本高度依赖于非零的结构。例如,考虑对具有箭头结构的稀疏矩阵进行平方:一个

一个=δ1个β1个δ2β2δñ-1个βñ-1个γ1个γ2γñ-1个δñ

那么有非零,但是密集的。有这种现象的众所周知的图形解释:在的曲线图长度1或2的每一个路径中的曲线图中成为边缘(即,在一个非零项)。一个Øñ一个2一个一个2一个2


4

首先,它取决于实现。如果将稀疏矩阵实现为稠密矩阵并填写非零值,则它将随矩阵的整体大小缩放。如果将其存储为非零值,它将随着访问时间随矩阵大小而缩放。

在PETSc文档中,它解释了稀疏矩阵的默认存储是压缩行存储,该压缩行随行数和每行非零值的数目而缩放。因此,我希望MatMat能够与该度量的平方成比例地扩展。即Ø[R2ñ2

但是,要注意的一件事是,存储不存在的内容是没有意义的。如果您关心这种性能,为什么要为1000x1000矩阵存储100个值?这意味着至少90%的行/列根本没有非零值,并且可以从矩阵中完全删除。如果非零值的模式不变,请考虑从此矩阵和目标矩阵中删除始终为零的行;它会删除的努力的一些90%,留下两个矩阵的性能(100 2,1000 2)大致等同。


空的行和列通常具有解决问题的功能(例如,保持行号与图像中位置的统一映射),但是要权衡取舍。
meawoppl 2012年

究竟; 仅维护一个可以存储在100个int数组中的映射就使运行时性能下降了10倍左右,这不是正常的折衷。正如他所问的那样,由于问题是关于基质空白尺寸的性能,所以这对PETSc尤其重要。
Phil H

3

的SPMV性能的完整模型,给出了本文。它清楚地表明,主要的限制因素是带宽,尽管您可以使用多个矢量来减轻负担。之后,我相信您会遇到指令问题的限制和对出色的编写指令的限制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.