2

私はMPIが初めてです。MPI と FORTRAN を使用して PI を計算するプログラムを作成しようとしています。しかし、プログラムをビルドしようとすると、次のメッセージが表示されます。

make all
 gfortran -O2 -g \
    -o bin/MpiTest.exe \
    src/MpiTest.f -fno-range-check
C:/Program Files/MicrosoftMPI/Inc/mpif.h:344.38:
    Included at src/MpiTest.f:11:

       PARAMETER (MPI_AINT=z'4c00043b')                                 
                                      1
Error: PARAMETER attribute of 'mpi_aint' conflicts with PARAMETER attribute at (1)
C:/Program Files/MicrosoftMPI/Inc/mpif.h:359.35:
    Included at src/MpiTest.f:11:

       PARAMETER (MPI_ADDRESS_KIND=INT_PTR_KIND())                      
                                   1
Error: Function 'int_ptr_kind' in initialization expression at (1) must be an intrinsic function
make: *** [all] Error 1

誰でもここで私を助けることができますか?

PS :

PROGRAM CalculatePI
        include "C:/Program Files/MicrosoftMPI/Inc/mpif.h"

            INTEGER :: i = 0, nThrows = 0, nSuccess = 0, ierror =0, numOfProcessors=0,myID=0
            REAL :: x = 0, y = 0, results = 0

            INTEGER :: Counter = 0

            call mpi_init(ierror)
            call mpi_comm_rank(MPI_COMM_WORLD, myID, ierror)
            call mpi_comm_size(MPI_COMM_WORLD, numOfProcessors, ierror)
            ....
4

2 に答える 2

3

INT_PTR_KINDインテル Fortran コンパイラ拡張関数です。つまり、Fortran 組み込み関数ではありません。報告された 2 番目のエラー メッセージは、gfortran見つからない関数への参照を含むコードのコンパイルに失敗していることを示しています。最初のエラーは同じ問題から発生していると思います.「間違った」コンパイラでコンパイルしようとしています.

Alexander Vogt が示唆しているように、 などのコンパイラ ラッパーを使用すると、より良い進行が得られる可能性がありますがmpif90、gfortran を呼び出して MS MPI ライブラリとリンクする適切なラッパーである必要があります。そのラッパーが存在するかどうかはわかりませんが、 の下で探してくださいC:/Program Files/MicrosoftMPI/

ただし、これらのエラーはインクルードしたmpif.hファイルから発生するため、.NET でコンパイルするための対応するインクルード ファイルも見つける必要がありますgfortran。私は MS MPI を使用していませんが、Intel Fortran でコンパイルするためのツール、ライブラリ、およびインクルード ファイルしか提供していないことに気付いても驚かないでしょう。

于 2013-11-03T17:07:19.780 に答える
1

gfortranMPI コードを単独でコンパイルしないでください。代わりに、MPI ライブラリが提供するラッパーを使用してください。通常は と呼ばれmpif90ます。

明確化のためにハイパフォーマンスマークに感謝します。

于 2013-11-03T16:47:46.097 に答える