更新:我有一個問題,我不知道它是什麼。我有一個MPI_INIT和MPI_FINALIZE的測試程序。我有一個包含5個子例程的模塊:3個子例程是相關的,獨立於2個其他子例程。我想將測試程序中的MPI代碼放入此模塊中。我將MPI_INIT放入聲明變量的模塊中,並放在子例程之前。我得到一個具有相同錯誤消息的一系列錯誤:更新:我應該把MPI放在模塊還是模塊的子程序中?
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代碼?
是的,在主程序開始時初始化MPI,並在最後完成。 – milancurcic
謝謝大家的回覆! – Pippi