我是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)
....
答案 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
。
感谢高性能标志的澄清。