mpi - 发送 MPI_COMM_NULL 作为参数时 MPI_Comm_dup() 不起作用
问题描述
我用过的地方
MPI_Comm_dup(row_comm, &bigger_row_comm);
我注意到它在row_comm
等于时会导致“致命”错误MPI_COMM_NULL
。我改变了它
if (row_comm != MPI_COMM_NULL)
MPI_Comm_dup(row_comm, &bigger_row_comm);
else
bigger_row_comm = MPI_COMM_NULL;
现在它起作用了。我使用 MPICH 并在其文档中的条目中找到了这一点MPI_Comm_dup
:
一个常见的错误是在调用中使用空通信器(甚至不允许在调用中
MPI_Comm_rank
)。
我想知道这种行为是否是标准的,我应该期望其他实现也这样做。为什么他们不像我那样处理它?人们期望 MPI_COMM_NULL 的副本是 MPI_COMM_NULL。
解决方案
MPI 标准没有规定当MPI_Comm_dup
使用空通信器调用时应该做什么(参见第 6.4.2 节)。因此,不能假设允许这样的调用,尤其是因为MPI_COMM_NULL
它被定义为“用于无效通信器句柄的值”。
对于它的价值,OpenMPI 4.0.1 还将调用视为错误。
推荐阅读
- python - 使用rest框架将文件从服务器发送到另一台服务器
- javascript - 更新对象列表中的特定属性
- c# - 根据脚本c#unity更改游戏对象实例克隆中的目标
- python - 如何在 python 脚本中运行多个音频文件
- c++ - cmake:ExternalProject_Add() 不应用 cmake 参数
- c++ - 0:1(10):错误:不支持 GLSL 3.30。Ubuntu 18.04 C++
- javascript - sendKeys(index) 中值的量角器循环
- php - 如何在 ubuntu for PHP 上设置没有域的 sendmail
- r - R igraph:边缘介数中心性的估计仅适用于小截止值
- c# - 使用 AngleSharp 在 C# 中使用 Captcha 进行 Web 抓取