MPI_Type_commit 是不是隐式调用 MPI_COMM_WORLD 中所有进程的屏障?

Posted

技术标签:

【中文标题】MPI_Type_commit 是不是隐式调用 MPI_COMM_WORLD 中所有进程的屏障?【英文标题】:Does MPI_Type_commit implicitly call a barrier on all the processes in MPI_COMM_WORLD?MPI_Type_commit 是否隐式调用 MPI_COMM_WORLD 中所有进程的屏障? 【发布时间】:2012-04-03 05:38:08 【问题描述】:

在我的代码中,我定义了一个新的 MPI 用户定义数据类型。 我想知道 MPI_Barrier 函数是否必须遵循 MPI_Commit 或必须放置在首次使用新数据类型的某个点,以便所有进程都确认并同意新数据类型的定义。

谢谢。

【问题讨论】:

【参考方案1】:

否 - MPI_Type 命令中没有通信,它们完全是本地的。特别是,进程不一定必须就新类型的定义达成一致。

如果 rank 1 向 rank 0 发送一个新的数据类型,他们所要同意的只是数据量,而不是类型的布局。例如,假设排名 1 正在将其所有(例如,2d)本地数组发送到排名 0 - 它可能只是选择发送 NX*NY 浮点数的 MPI_Type_contiguous。但是等级 0 可能会将其接收到更大的全局数组中;它可能会选择将其接收到全局类型的 Subarray 类型中。即使这些数据类型有相同的名称,它们也可以描述内存中不同的最终布局,只要数据总量相同。

【讨论】:

【参考方案2】:

MPI 数据类型是创建它们的进程的私有业务。它们不需要匹配,事实上,接收进程使用与发送进程不同的类型映射是可能且完全合法的(只要它当然不会导致内存损坏)。因此,在使用DefineCommit 时,没有任何同步。

【讨论】:

以上是关于MPI_Type_commit 是不是隐式调用 MPI_COMM_WORLD 中所有进程的屏障?的主要内容,如果未能解决你的问题,请参考以下文章

Async/Await 和 Redux Thunks:调用 'dispatch' 是不是隐式返回来自 thunk 的承诺?

25.scala的隐式转换

如何防止在 Typescript 中的函数调用上从“任何”进行隐式转换

SQL Server:事务内的“DROP TABLE”是不是会导致隐式提交?

我定义了一个非拷贝构造函数;复制构造函数是不是仍会被隐式定义?

Make -- 改变系统范围的隐式规则