Обновлено: у меня проблема, и я не знаю, что это такое. У меня есть тестовая программа с 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 вне подпрограммы?