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 内在函数。您报告的第二条错误消息表明gfortran正在编译包含对它找不到的函数的引用的代码。我猜第一个错误是由同一个问题引起的,您正在尝试使用“错误”的编译器进行编译。

正如 Alexander Vogt 建议的那样,您可能会使用编译器包装器取得更好的进展mpif90,但它必须是正确的包装器,即调用 gfortran 并与 MS MPI 库链接的包装器。我不知道该包装器是否存在,但在C:/Program Files/MicrosoftMPI/.

但是,由于这些错误来自mpif.h您包含的文件,您还必须找到相应的包含文件以使用gfortran. 我不使用 MS MPI,但如果您发现它只提供工具、库和包含文件以使用英特尔 Fortran 进行编译,我不会感到惊讶。

于 2013-11-03T17:07:19.780 回答
1

gfortran你不应该单独编译你的 MPI 代码。相反,请使用 MPI 库提供的包装器。通常称为mpif90.

感谢高性能标记的澄清。

于 2013-11-03T16:47:46.097 回答