MPI在Fortran 90中使用指针发送派生数据类型

时间:2013-09-16 14:33:31

标签: mpi fortran90

我想将用户定义的数据类型发送为:

TYPE CELL
    INTEGER :: NUM
    TYPE(CELL), POINTER :: NEXT => NULL()
END TYPE CELL

TYPE CELLLIST
    INTEGER :: NBCELL
    TYPE(CELL), POINTER :: BEGIN => NULL()
END TYPE CELLLIST

并且MPI要发送的变量定义为:

TYPE(CELLLIST) :: _CELLLIST

在此变量中,_CELLIST%NBCELL表示列表的长度,CELL类型的指针指向列表的头部。

我想使用MPI_send和MPI_recv通过MPI传输单元列表。怎么做?

1 个答案:

答案 0 :(得分:3)

从一个MPI进程发送指针到另一个MPI进程是没有意义的。

问题在于它们指针是特定于流程的。将指针视为存储其目标的内存地址是一个合理的类比。该内存地址不可移植,一个进程的地址空间中没有地址概念与另一个进程的地址空间中的地址相同。

您必须解开_CELLLIST中的指针链,通过CELLS发送,然后重建目标进程上的指针链。

我想您可以将CELLS打包到数组中进行传输。或者您可以一次发送一个CELL,条件是接收进程将按接收包含CELL s的消息的顺序重建动态数据结构。