openmpi - 使用 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,...)
如果您创建了DMDA
with PETSC_COMM_SELF
,这是否意味着该DM
对象不会真正分布在多个进程中?或者,如果您创建一个TS
withPETSC_COMM_SELF
和一个DM
with PETSC_COMM_WORLD
,这是否意味着求解器实际上无法访问幽灵节点?它会影响 和 的结果DMCreateLocalVector
吗DMCreateGlobalVector
?
解决方案
求解器的通信器决定哪些进程参与求解器操作。例如,具有 PETSC_COMM_SELF 的 TS 将在每个进程上独立运行,而具有 PETSC_COMM_WORLD 的 TS 将在所有进程中演化出单个系统。如果您将 DM 与求解器一起使用,则通信器必须一致。
推荐阅读
- virtual-machine - 如何获取 ESXi 主机上每个 VM 的 CPU 使用率
- android - 是否有新功能代替 getSharedPreferences?
- node.js - nodejs npm install sqlite3 等数据库打包报错
- excel - 根据标题名称选择范围
- java - org.bouncycastle.tls.crypto.TlsCertificate getSubject() 和其他 getter
- php - 如何根据完全匹配或部分匹配从数组中输出项目?
- symfony - Symfony 中的翻译覆盖在本地主机上不起作用
- python-3.x - Pandas 系列 value_counts 出现意外结果
- python - netmiko 脚本连接路由器
- postgresql - pg-go RunInTransaction 不回滚事务