【问题标题】:Duplicating an MPI derived type vs. setting one type equal to another复制 MPI 派生类型与将一种类型设置为另一种类型
【发布时间】:2019-12-04 05:12:36
【问题描述】:

假设我在 Fortran 代码中有一个 MPI 派生类型 type_a。我想要第二份,type_b。有没有实际区别

call mpi_type_dup(type_a, type_b, err)

type_b = type_a?

我不想更改 MPI 标准提到的任何“关联键值”。

其中一个是否比另一个更受欢迎?另外,如果type_a已经提交了,我还需要提交type_b吗?

【问题讨论】:

    标签: fortran mpi derived-types


    【解决方案1】:

    在 Fortran 中,派生数据类型是整数(如果您使用 mpi_f08 绑定,则会被抽象出来。

    如果你type_b=type_a,那么在使用它进行通信之前你不必提交type_b,但如果你以后call mpi_type_free(type_a),那么type_b就不能再使用了。

    如果您复制了type_a,那么您必须在使用它进行通信之前提交type_b,这两种类型都是独立的,并且在不再需要它们时都必须释放它们。

    关于“关联键值”

    MPI_Type_dup 是一个类型构造函数,它使用关联的键值复制现有类型。对于每个键值,相应的复制回调函数确定与新通信器中的该键关联的属性值。复制回调可能采取的一项特定操作是从新数据类型中删除属性。

    所以只要所有的复制回调函数都保留了属性,就可以使用这个子程序。

    如果您知道type_a 在使用type_b 时不会被释放,那么type_b=type_a 会更简单、更高效。

    【讨论】:

    • 你从哪里得到的报价? “在新的通信器中”看起来不对,我假设它应该是“在新的数据类型中”
    • 打开 MPI 手册页 (!) 你想发布 PR 吗?如果没有,我很乐意这样做并感谢您发现它。
    • @GillesGouaillardet 非常清晰且乐于助人。谢谢!
    猜你喜欢
    • 2012-03-28
    • 2021-04-11
    • 2016-09-20
    • 1970-01-01
    • 2010-09-12
    • 2011-05-30
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多