我想将用户定义的数据类型发送为:
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传输单元列表。怎么做?
答案 0 :(得分:3)
从一个MPI进程发送指针到另一个MPI进程是没有意义的。
问题在于它们指针是特定于流程的。将指针视为存储其目标的内存地址是一个合理的类比。该内存地址不可移植,一个进程的地址空间中没有地址概念与另一个进程的地址空间中的地址相同。
您必须解开_CELLLIST
中的指针链,通过CELLS
发送,然后重建目标进程上的指针链。
我想您可以将CELLS
打包到数组中进行传输。或者您可以一次发送一个CELL
,条件是接收进程将按接收包含CELL
s的消息的顺序重建动态数据结构。