我想加快我正在努力的图书馆。大多数矩阵的尺寸相当小(比如高达10x40)。大多数都是块稀疏的,在运行时已知有稀疏模式。我想利用稀疏性来加速线性代数运算。
除了基本的线性代数运算外,我还使用了SVD分解。块稀疏矩阵有助于检测零行和块对角矩阵,这可以减少分解时间。
是否有一个特定的原因,为什么稀疏矩阵只是按系数方式实现而不是按块方式实现?
我的意思是当前的实现对于具有少量非零元素的大型矩阵是有效的,但对于具有可比较的非零和零的矩阵则不然。
我查看了使用特征库实现稀疏块矩阵的the so-bogus library。
答案 0 :(得分:1)
对于这样的小矩阵没有太多期望,因为这会减少矢量化机会和指令流水线。您可以通过比较triangular matrix * vector
与full matrix * vector
对10x10矩阵的效果来自行检查。
然后,关于SVD,情况更糟,因为这样的小矩阵JacobiSVD
是优选的,并且零的结构可能在第一次扫描期间完全丢失,除非它具有非常特殊的结构,可以被利用,就像一个块对角线结构。