2

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

谢谢。

4

2 回答 2

4

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

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

于 2012-03-18T13:26:03.413 回答
3

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

于 2012-03-18T13:25:03.087 回答