Fortran Coder

查看: 217|回复: 2

[并行] MPI并行遇到的消息传递问题

[复制链接]

35

帖子

16

主题

0

精华

专家

F 币
399 元
贡献
396 点
发表于 2024-5-26 20:31:54 | 显示全部楼层 |阅读模式
各位好,我有个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


欢迎交流

819

帖子

2

主题

0

精华

大宗师

F 币
3862 元
贡献
2301 点
发表于 2024-5-27 09:17:39 | 显示全部楼层
本帖最后由 li913 于 2024-5-27 09:19 编辑

mpi可以发送派生类型(成员不能是动态数组或指针),但是需要自己定义一个mpi_type. 了解一下  MPI_Type_create_struct

35

帖子

16

主题

0

精华

专家

F 币
399 元
贡献
396 点
 楼主| 发表于 2024-5-27 11:51:02 | 显示全部楼层
li913 发表于 2024-5-27 09:17
mpi可以发送派生类型(成员不能是动态数组或指针),但是需要自己定义一个mpi_type. 了解一下  MPI_Type_crea ...

好的,谢谢
欢迎交流
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-6-25 00:30

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表