主题:[讨论]fortran并行计算
代码
program main
implicit none
include 'mpif.h'
integer:: iam, np, comm, ierr
integer:: n, i, num, is, ie
real*8:: pi, h, eps, xi, s
call mpi_init(ierr)
!write(*, *) 'the ierr is: ', ierr
call mpi_comm_dup(mpi_comm_world, comm, ierr)
call mpi_comm_rank(comm, iam, ierr)
call mpi_comm_size(comm, np, ierr)
print *, 'Process ', iam, ' off ', np, ' is running!'
if(iam == 0) then
write(*, *) 'Enter Number of digits(1-16)= '
read(*, *) num
endif
call mpi_bcast(num, 1, mpi_integer, 0, comm, ierr)
eps = 1
do i=1, num
eps = eps *0.1
end do
n = sqrt(4.0/(3.0*eps))
h = 1.0/n
num = n/np
if(iam == 0) then
s = 2.0
xi = 0.0
is = 0.0
ie = num
elseif(iam == np-1) then
s = 1.0
is = iam*num
ie = n - 1
xi = is * h
else
s = 0.0
is = iam*num
ie = is + num
xi = is * h
end if
do i=is+1, ie
xi = xi + h
s = s + 4.0/(1.0+xi*xi)
end do
call mpi_reduce(s, pi, 1, mpi_double_precision, mpi_sum, 0, comm, ierr)
if(iam == 0) then
pi = h*pi
write(*, *) 'The pi = ', pi
endif
call mpi_finalize(ierr)
write(*, *) 'ierr is: ', ierr
end program main
编译时没有错,但是链接出错,错误信息:
inking...
mian.obj : error LNK2001: unresolved external symbol _MPI_INIT@4
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_DUP@12
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_RANK@12
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_SIZE@12
mian.obj : error LNK2001: unresolved external symbol _MPI_BCAST@24
mian.obj : error LNK2001: unresolved external symbol _MPI_REDUCE@32
mian.obj : error LNK2001: unresolved external symbol _MPI_FINALIZE@4
mian.obj : error LNK2001: unresolved external symbol _MPI_CONVERSION_FN_NULL
mian.obj : error LNK2001: unresolved external symbol _MPI_TYPE_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_TYPE_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_TYPE_DUP_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_WIN_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_WIN_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_WIN_DUP_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_DUP_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_DUP_FN
Debug/mian.exe : fatal error LNK1120: 20 unresolved externals
Error executing link.exe.
mian.exe - 21 error(s), 0 warning(s)
各位大神看看是什么原因?
fortran我已经正确配置,我第一次运行时,是正确的。但是我关了文件再次打开运行时,出现了上面的错误,不知是什么原因?大家都讨论下!!!
program main
implicit none
include 'mpif.h'
integer:: iam, np, comm, ierr
integer:: n, i, num, is, ie
real*8:: pi, h, eps, xi, s
call mpi_init(ierr)
!write(*, *) 'the ierr is: ', ierr
call mpi_comm_dup(mpi_comm_world, comm, ierr)
call mpi_comm_rank(comm, iam, ierr)
call mpi_comm_size(comm, np, ierr)
print *, 'Process ', iam, ' off ', np, ' is running!'
if(iam == 0) then
write(*, *) 'Enter Number of digits(1-16)= '
read(*, *) num
endif
call mpi_bcast(num, 1, mpi_integer, 0, comm, ierr)
eps = 1
do i=1, num
eps = eps *0.1
end do
n = sqrt(4.0/(3.0*eps))
h = 1.0/n
num = n/np
if(iam == 0) then
s = 2.0
xi = 0.0
is = 0.0
ie = num
elseif(iam == np-1) then
s = 1.0
is = iam*num
ie = n - 1
xi = is * h
else
s = 0.0
is = iam*num
ie = is + num
xi = is * h
end if
do i=is+1, ie
xi = xi + h
s = s + 4.0/(1.0+xi*xi)
end do
call mpi_reduce(s, pi, 1, mpi_double_precision, mpi_sum, 0, comm, ierr)
if(iam == 0) then
pi = h*pi
write(*, *) 'The pi = ', pi
endif
call mpi_finalize(ierr)
write(*, *) 'ierr is: ', ierr
end program main
编译时没有错,但是链接出错,错误信息:
inking...
mian.obj : error LNK2001: unresolved external symbol _MPI_INIT@4
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_DUP@12
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_RANK@12
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_SIZE@12
mian.obj : error LNK2001: unresolved external symbol _MPI_BCAST@24
mian.obj : error LNK2001: unresolved external symbol _MPI_REDUCE@32
mian.obj : error LNK2001: unresolved external symbol _MPI_FINALIZE@4
mian.obj : error LNK2001: unresolved external symbol _MPI_CONVERSION_FN_NULL
mian.obj : error LNK2001: unresolved external symbol _MPI_TYPE_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_TYPE_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_TYPE_DUP_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_WIN_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_WIN_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_WIN_DUP_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_COMM_DUP_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_NULL_COPY_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_NULL_DELETE_FN
mian.obj : error LNK2001: unresolved external symbol _MPI_DUP_FN
Debug/mian.exe : fatal error LNK1120: 20 unresolved externals
Error executing link.exe.
mian.exe - 21 error(s), 0 warning(s)
各位大神看看是什么原因?
fortran我已经正确配置,我第一次运行时,是正确的。但是我关了文件再次打开运行时,出现了上面的错误,不知是什么原因?大家都讨论下!!!