Fortran Coder

标题: MPI并行遇到的消息传递问题 [打印本页]

作者: 石子    时间: 2024-5-26 20:31
标题: MPI并行遇到的消息传递问题
各位好,我有个MPI消息传递的问题想请教下,
我的数据类型为结构体(派生数据类型),定义如下:
[Fortran] 纯文本查看 复制代码
type efield
    double precision::r1,r2,i1,i2
    endtype
type(efield),dimension(:,:),allocatable::e



但消息传递部分我有些不确定,比如我要发送n个派生数据类型,那我是应该每次发送n个数据成员,然后一共4次呢?还是一次性发送n个派生数据类型的变量就可以?如果可以将派生数据类型整体发送,那么buffer的数目应该是n还是4N,以及数据类型如何写?

我按照一次发送n个派生数据,类型写的double  precision,根据输出看的话,ierr是0,应该是没什么问题,但感觉还是不确定。毕竟只有这个rank操作成功了,其他rank遇到了一些问题。
[Fortran] 纯文本查看 复制代码
call MPI_Isend(e(pml_cell,Ny-ypml_cell+1:Ny-1),ypml_cell-1,MPI_DOUBLE_PRECISION,pairx2,0,MPI_COMM_WORLD,request,ierr)
        print*,'rank02',ierr



作者: li913    时间: 2024-5-27 09:17
本帖最后由 li913 于 2024-5-27 09:19 编辑

mpi可以发送派生类型(成员不能是动态数组或指针),但是需要自己定义一个mpi_type. 了解一下  MPI_Type_create_struct
作者: 石子    时间: 2024-5-27 11:51
li913 发表于 2024-5-27 09:17
mpi可以发送派生类型(成员不能是动态数组或指针),但是需要自己定义一个mpi_type. 了解一下  MPI_Type_crea ...

好的,谢谢




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2