MPI_Type_commit是否隐式调用MPI_COMM_WORLD中所有进程上的屏障?
在我的代码中,我定义了一个新的MPI用户定义的数据类型。 我想知道MPI_Barrier函数是否必须遵循MPI_提交,或者必须放置在新数据类型首次使用出现的某个位置,以便所有进程都确认并同意新数据类型的定义MPI_Type_commit是否隐式调用MPI_COMM_WORLD中所有进程上的屏障?,mpi,user-defined-types,barrier,Mpi,User Defined Types,Barrier,在我的代码中,我定义了一个新的MPI用户定义的数据类型。 我想知道MPI_Barrier函数是否必须遵循MPI_提交,或者必须放置在新数据类型首次使用出现的某个位置,以便所有进程都确认并同意新数据类型的定义 谢谢。MPI数据类型是创建它们的流程的私有业务。它们不需要匹配,事实上,接收进程使用不同于发送进程的类型映射是可能的,也是完全合法的(当然,只要它不会导致内存损坏)。因此,在使用Define或Commit否时,没有任何同步-MPI_类型命令内没有通信,它们完全是本地的。特别是,流程不一定必须
谢谢。MPI数据类型是创建它们的流程的私有业务。它们不需要匹配,事实上,接收进程使用不同于发送进程的类型映射是可能的,也是完全合法的(当然,只要它不会导致内存损坏)。因此,在使用
Define
或Commit
否时,没有任何同步-MPI_类型命令内没有通信,它们完全是本地的。特别是,流程不一定必须就新类型的定义达成一致
如果秩1向秩0发送一个新的数据类型,则它们所需要同意的只是数据量,而不是类型的布局。例如,假设秩1将它的所有(比如2d)本地数组发送到秩0-它可能只选择发送一个MPI类型的NX*NY浮点。但是秩0可能将其接收到一个更大的全局数组中;它可能会选择将其接收到全局类型的子阵列类型中。即使这些数据类型具有相同的名称,只要数据总量相同,它们也可以在内存中描述不同的最终布局