Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 复制MPI派生类型与将一种类型设置为另一种类型_Fortran_Mpi_Derived Types - Fatal编程技术网

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\

假设我在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\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非常清楚,非常有用。谢谢!