构建MPI程序时出错

时间:2013-11-03 16:41:10

标签: fortran mpi

我是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

有人可以帮我吗?

P.S:

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)
            ....

2 个答案:

答案 0 :(得分:3)

INT_PTR_KIND是英特尔Fortran编译器扩展功能;也就是说,它不是Fortran内在的。您报告的第二条错误消息表明gfortran正在编译包含对其无法找到的函数的引用的编译代码。我想第一个错误来自同一个问题,你试图使用'错误'编译器进行编译。

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

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

答案 1 :(得分:1)

您不应仅使用gfortran编译MPI代码。而是使用MPI库提供的包装器。通常称为mpif90

感谢高性能标志的澄清。