在没有 mpiexec 命令行的情况下从 petsc4py 设置 COMM_WORLD 大小

计算科学 宠物 mpi
2021-12-16 17:42:58

我想创建一个并行求解器,使用 petsc4py 作为大型应用程序的一个组件。我可以通过调用轻松地将 PETSc.COMM_WORLD.getSize() 设为 4

mpiexec -n 4 python my_prog.py

但是,这会创建 4 个应用程序,而我只希望 PETSc 并行求解。目前它只使用一个进程,并提供与 scipy 的 spsolve 基本相同的性能。

我可以重构,使 KSP 解决方案是它自己的程序,并从主程序中产生它,使用它们之间的 IO 来发送矩阵等,但这似乎不太理想。

petsc4py 是否可以通过 petsc4py.init 或类似的方式创建自己的 mpi proc,或者以编程方式指定分区数?还是我错过了对整个问题更基本的东西?

1个回答

从一个进程上的所有数据开始是不可扩展的,但如果您只需要适度的并行性,它可能是实用的。可以使用 mpi4py spawn,但是如果您真的希望程序的其余部分只使用一个进程,并且您不希望在求解期间存在额外的进程,我将为 PETSc 启动一个独立的并行作业解决。如果您不介意在不使用(空闲)进程时使用它们,则可以将所有逻辑设置为 rank=0; PETSc 将在那里收集的值传达给适当的过程。