gpt4 book ai didi

c - Fortran/MPI 非持久数据的非阻塞发送

转载 作者:行者123 更新时间:2023-11-30 17:56:05 31 4
gpt4 key购买 nike

考虑以下因素:

subroutine send_to_friend(a,b,c,request)
implicit none
include 'mpif.h' !use mpi if you've built the mpif90 bindings...

real a,b,c
real buff(3)
integer tag,dest,ierr,request

tag = 50
dest = 0

buff(1) = a
buff(2) = b
buff(3) = c
call MPI_Isend(buff,3,MPI_REAL,dest,tag,MPI_COMM_WORLD,request,ierr)
return
end subroutine send_to_friend

这可能不起作用,因为 buff 将被放在堆栈上(无论如何对于大多数现代编译器来说),但每当子例程退出时,它就会被删除干净。分配数组也没有帮助,因为根据 here (第 10 节),当您退出过程时,分配的数组会自动释放——在 C 中,这将是内存泄漏(也很糟糕)。做这样的事情的正确方法是什么?我应该使用 save 属性声明数组吗? (C 语言中的静态)。这个设计从一开始就存在缺陷吗?

最佳答案

SAVE 应该没问题(最好与可分配的组合),只要你没有遇到其他问题,这将需要 Fortran 通过复制输入复制输出来传递数组,它必须是通过引用完成(不要尝试使用非阻塞 MPI 发送非连续数据)。

如果您在例程中保存变量,并且结合 MPI/OpenMP,也不要尝试从更多线程运行它。

关于c - Fortran/MPI 非持久数据的非阻塞发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822565/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com