首页 > 解决方案 > 使用 COMM_WORLD 或 COMM_SELF 实例化一个 TS、DMDA、Vec 等是什么意思

问题描述

我正在查看来自 PETSc 和 petsc4py 的几个示例,并查看 PETSc 的 PDF 用户手册。手册指出:

对于那些不熟悉 MPI 的人来说,通信器是一种指示将一起参与计算或通信的进程集合的方式。Communicators 有变量 type MPI_Comm。在大多数情况下,用户可以使用通信PETSC_COMM_WORLD器来指示给定运行中的所有进程并PETSC_COMM_SELF指示单个进程。

我相信我理解这种说法,但我不确定实际使用这些交流器的真正后果。我不确定当您对分布式数组执行TSCreate(PETSC_COMM_WORLD,...)vs或类似操作时会发生什么。TSCreate(PETSC_COMM_SELF,...)如果您创建了DMDAwith PETSC_COMM_SELF,这是否意味着该DM对象不会真正分布在多个进程中?或者,如果您创建一个TSwithPETSC_COMM_SELF和一个DMwith PETSC_COMM_WORLD,这是否意味着求解器实际上无法访问幽灵节点?它会影响 和 的结果DMCreateLocalVectorDMCreateGlobalVector

标签: openmpipetsc

解决方案


求解器的通信器决定哪些进程参与求解器操作。例如,具有 PE​​TSC_COMM_SELF 的 TS 将在每​​个进程上独立运行,而具有 PE​​TSC_COMM_WORLD 的 TS 将在所有进程中演化出单个系统。如果您将 DM 与求解器一起使用,则通信器必须一致。


推荐阅读