更新: 問題がありますが、それが何かわかりません。本体に 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 は 1 回だけ呼び出す必要がある」は、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 コードを実行しますか?