1

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

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 传输单元列表。怎么做?

4

1 回答 1

3

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

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

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

我想你可以把它打包CELLS成一个数组进行传输。或者您可以一次发送一个CELL,因为接收进程将按照接收包含CELLs 的消息的顺序重建动态数据结构。

于 2013-09-16T14:42:28.260 回答