与 PETSc 并行求解一个简单的 Ax=b 系统

计算科学 宠物 矩阵
2021-12-18 05:28:25

我是 PETSc 包的新手。

我有一个矩阵市场格式的 ~4000x4000 矩阵 A,我想让 PETSc 使用多个处理器来解决这个问题。

我知道如何在单个处理器上解决系统问题,但我不知道如何在不同处理器之间分配矩阵和向量。

是否有一套简单的说明来做到这一点?

1个回答

Matrix Market 是一种糟糕的并行读取格式,因此最好预处理为更好的并行格式。您的矩阵大小非常小,因此性能不是问题,但最简单和最通用的方法是使用 Python 或 Matlab/Octave 以 PETSc 二进制格式编写 Matrix Market 文件,可以使用MatLoad(). 例如,您可以使用此 Python 代码进行预处理(添加$PETSC_DIR/bin/pythonscripts到您的PYTHONPATH

import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)

此时您也可以将向量写入文件。如果你只是想读取和解决系统,你可以使用src/ksp/ksp/examples/tutorials/ex10.c(带有-f petscmatrix读取你刚刚编写的二进制文件的选项)。

在实际应用程序中,您应该避免涉及以任何格式将文件写入磁盘的工作流程。使用问题的域分解表示并行组装矩阵要好得多。PETSc 中的大多数示例都是这样编写的。