问题描述
我正在查看PETSc和petsc4py的几个示例,并查看PETSc的PDF用户手册。手册指出:
对于不熟悉MPI的人,交流是一种指示将在计算或交流中共同参与的过程集合的方式。通信器的变量类型为
MPI_Comm
。在大多数情况下,用户可以使用通信器PETSC_COMM_WORLD
来指示给定运行中的所有过程,而可以使用PETSC_COMM_SELF
来指示单个过程。
我相信我理解这一说法,但是我不确定实际使用这些沟通工具的真正后果。我不确定当您进行TSCreate(PETSC_COMM_WORLD,...)
与TSCreate(PETSC_COMM_SELF,...)
还是分布式数组时的实际情况。如果您使用DMDA
创建了PETSC_COMM_SELF
,这是否意味着DM
对象实际上不会分布在多个进程中?还是如果您使用TS
创建一个PETSC_COMM_SELF
并使用DM
创建一个PETSC_COMM_WORLD
,这是否意味着求解器实际上无法访问虚幻节点?会影响DMCreateLocalVector
和DMCreateGlobalVector
的结果吗?
解决方法
求解器的通信器决定哪些进程参与求解器操作。例如,带有 PETSC_COMM_SELF 的 TS 将在每个进程上独立运行,而带有 PETSC_COMM_WORLD 的 TS 将在所有进程中发展一个单一系统。如果您将 DM 与求解器一起使用,则通信器必须一致。