我正在使用 MPI 在 FORTRAN 中编写一个非常简单的集成程序。我已经用 C 完成了这个,一切都很好。
但是,在我的“MAP_REDUCE”调用中,comm 参数似乎有问题。我尝试了几个不同的值,并且在程序运行时收到了几条错误消息。
注意:程序会编译,但不会运行。
这是程序本身(FORTRAN 90):
c Fortran example
program intega
implicit none
include '/opt/apps/intel15/mvapich2/2.1/include/mpif.h'
integer rank,size,ierror,tag,status(MPI_STATUS_SIZE),i
real :: integral = 0.00, x = 0.00, total_t = 0.00
real :: analy,numres,edif
real, PARAMETER :: x_lower_bound = 0,x_upper_bound = 1
real, PARAMETER :: nsteps = 10000000
real, PARAMETER :: dx = (x_upper_bound - x_lower_bound)/nSteps
integer :: iMin,iMax,ierr=0,comm=0
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD,size,ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierror)
do i = 0,(iMax-1)
x = x_lower_bound + dx*(i+0.5)
integral = integral + x*x*dx
end do
call MPI_REDUCE(integral,total_t,1,MPI_REAL,MPI_SUM,0,rank,ierr)
analy = ((x_upper_bound**3)-(x_lower_bound**3))/3
numres = total_t
if (rank == 0) then
edif = analy-numres
print *, numres,analy,edif
end if
call MPI_FINALIZE(ierror)
end
现在错误文件看起来像这样:(不是全部,只是一个示例)
[cli_0]: [cli_1]: aborting job:
Fatal error in PMPI_Reduce:
Invalid communicator, error stack:
PMPI_Reduce(1288): MPI_Reduce(sbuf=0x6ac4a8, rbuf=0x6ac4b4, count=1, MPI_REAL, \
MPI_SUM, root=0, comm=0x1) failed
PMPI_Reduce(1163): Invalid communicator
aborting job:
Fatal error in PMPI_Reduce:
Invalid communicator, error stack:
PMPI_Reduce(1288): MPI_Reduce(sbuf=0x6ac4a8, rbuf=0x6ac4b4, count=1, MPI_REAL, \
MPI_SUM, root=0, comm=0x0) failed
PMPI_Reduce(1163): Invalid communicator
[cli_2]: aborting job:
Fatal error in PMPI_Reduce:
Invalid communicator, error stack:
所以沟通者是麻烦制造者。但不确定我应该在那里放什么。
提前感谢您的任何建议。