Fortran 复制MPI派生类型与将一种类型设置为另一种类型
假设我在Fortran代码中有一个MPI派生类型,Fortran 复制MPI派生类型与将一种类型设置为另一种类型,fortran,mpi,derived-types,Fortran,Mpi,Derived Types,假设我在Fortran代码中有一个MPI派生类型,type_a。我想要第二份,type_b。两者之间有实际区别吗 call mpi_type_dup(type_a, type_b, err) 及 type_b=type_a 我不想更改MPI标准中提到的任何“关联键值” 其中一个比另一个好吗?另外,如果已经提交了type\u a,我是否还必须提交type\u b?在Fortran中,派生数据类型是一个整数(如果使用mpi\u f08绑定,则该数据类型是抽象的) 如果您type\u b=type\
type_a
。我想要第二份,type_b
。两者之间有实际区别吗
call mpi_type_dup(type_a, type_b, err)
及
type_b=type_a
我不想更改MPI标准中提到的任何“关联键值”
其中一个比另一个好吗?另外,如果已经提交了
type\u a
,我是否还必须提交type\u b
?在Fortran中,派生数据类型是一个整数(如果使用mpi\u f08
绑定,则该数据类型是抽象的)
如果您type\u b=type\u a
,则在将其用于通信之前不必提交type\u b
,但如果您稍后调用mpi\u type\u free(type\u a)
,则type\u b
将无法再使用
如果您复制了type_a
,那么在将其用于通信之前,您必须提交type_b
,这两种类型都是独立的,在不再需要它们时,它们都必须是自由的
关于“相关键值”
MPI_Type_dup是一个类型构造函数,它用关联的键值复制现有类型。对于每个键值,相应的复制回调函数确定新通信器中与此键值关联的属性值。复制回调可能采取的一个特定操作是从新数据类型中删除该属性
因此,只要所有复制回调函数都保留属性,就可以使用此子例程
如果你知道
type\u a
在使用type\u b
时不会免费,那么type\u b=type\u a
就简单得多,效率也更高。你从哪里得到的报价?“在新的通讯器中”看起来是错误的,我假设它应该是“在新的数据类型中”打开MPI手册页(!)你想发布公关吗?如果不想,我很乐意发布,并感谢你发现了它。@GillesGouaillardet非常清楚,非常有用。谢谢!