使用COMM_WORLD或COMM_SELF实例化TS,DMDA,Vec等是什么意思

问题描述

我正在查看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,这是否意味着求解器实际上无法访问虚幻节点?会影响DMCreateLocalVectorDMCreateGlobalVector的结果吗?

解决方法

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...