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 数据类型是创建它们的进程的私有业务。它们不需要匹配,事实上,接收进程使用与发送进程不同的类型映射是可能且完全合法的(只要它当然不会导致内存损坏)。因此,在使用Define
或Commit
时,没有任何同步。
【讨论】:
以上是关于MPI_Type_commit 是不是隐式调用 MPI_COMM_WORLD 中所有进程的屏障?的主要内容,如果未能解决你的问题,请参考以下文章
Async/Await 和 Redux Thunks:调用 'dispatch' 是不是隐式返回来自 thunk 的承诺?
如何防止在 Typescript 中的函数调用上从“任何”进行隐式转换
SQL Server:事务内的“DROP TABLE”是不是会导致隐式提交?