Parallelize Matrix Inversion

本文记录并行化矩阵求逆

Strassen 算法

算法

用于矩阵求逆的Strassen's 算法描述如下:

其中:

$$ \left [ \begin{array}{lr} A_{11} & A_{12} \\ A_{21} & A_{22} \end{array} \right ]^{-1} = \left [ \begin{array}{lr} C_{11} & C_{12} \\ C_{21} & C_{22} \end{array} \right ] $$

所以我们可以递归的并行执行,如下:

MPI实现上各进程之间的交互关系如下:

Gaussian-Jodan elimination

Gaussian elimination phase 为了增加该方法的稳定性,避免除以0的错误(A[i][i]等于0或者太小)。使用Pivoting操作可以增加稳定性。

  • Partial Pivoting: 只交换行

    • 往下搜索与pivot位置上拥有最大值的行进行交换
    • 通常情况下Partial pivoting即足够了
  • Full Pivoting: 交换行和列

    • 从Submatrix中搜索最大的数,然后交换行与列

  • Scaled Partial Pivoting: (有点复杂详情请看4

Back Substitution Phase

数据分配策略

其中d为可控制的变量

参考

  1. SPIN: A Fast and Scalable Matrix Inversion Method in Apache Spark

  2. Matrix Inversion using Parallel Gaussian Elimination

  3. Dense Linear Algebra: Parallel Gaussian Elimination

  4. Gaussian Elimination with Pivoting

updatedupdated2021-11-062021-11-06