更新:我有一个问题,我不知道它是什么。我有一个带有 MPI_INIT 和 MPI_FINALIZE 的测试程序。我有一个包含 5 个子例程的模块:3 个子例程是依赖的,并且独立于其他 2 个子例程。我想把测试程序中的MPI代码放到这个模块中。我将 MPI_INIT 放在声明变量的模块中和子例程之前。我收到了一系列带有相同错误消息的错误:
This statement must not appear in the specification part of a module
“MPI_INIT 和 MPI_FINALIZE 只应调用一次”如何影响 Fortran 程序、模块和子例程?如果有多个独立程序,每个程序多次调用该模块的子例程,我应该将 MPI 函数和变量放在哪里?
~~~~~~~~~ 我有一个包含一系列子例程的模块,其中包含我希望并行化的do循环。子程序是其他程序使用的公共程序。我应该在子程序之外定义 MPI:
module ...
call MPI_INIT
subroutine 1
... (MPI code)
subroutine 2
subroutine 3
MPI_GATHERV
call MPI_FINALIZE
module
还是在每个子程序中?
module ...
subroutine 1
call MPI_INIT
... (MPI code)
MPI_GATHERV
call MPI_FINALIZE
subroutine 2
call MPI_INIT
... (MPI code)
MPI_GATHERV
call MPI_FINALIZE
subroutine 3
call MPI_INIT
... (MPI code)
MPI_GATHERV
call MPI_FINALIZE
module
我看到了解决方案 1 遵循粗粒度原则的优势。如果程序调用子程序 1,它还会在子程序之外执行 MPI 代码吗?