回 帖 发 新 帖 刷新版面

主题:[讨论]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我已经正确配置,我第一次运行时,是正确的。但是我关了文件再次打开运行时,出现了上面的错误,不知是什么原因?大家都讨论下!!!

回复列表 (共6个回复)

沙发

编译命令错了吧. 没连接到mpi的函数.

板凳


我第一次可以运行出来之后打开文件就出现链接错误

3 楼

出错信息表示连接的时候无法找到mpi的库函数. 再查查配置有没有弄好?

4 楼


好的,还有一个问题,为什么我的fortran点击运行了要一段时间才出结果,但是程序里的计时器却显示程序运行时间为0s,什么原因?好像我装过intel visual fortran后,因为出错了,我在换回compaq fortran就这样子了,是什么原因?

5 楼

我猜你那个根本不是运行, 是编译+运行. 编译成功后在工程debug或者release文件夹下有exe文件, 直接双进它那个才是"运行".
可能你或者其他人帮你配置过cvf. 你的工程也是在cvf建立的. 装ivf要重新配置, 重新建立ivf的工程. 详细请查阅mpi的配置(mpich2?).

6 楼


我已经编译,链接,在运行。运行时已经生成exe文件啦,可是点击运行还要3-4秒后才能出结果。之前装的intel fortran已经下载了,重装了从compaq fortran,可是还是哪样,是不是配置环境出问题啦?

我来回复

您尚未登录,请登录后再回复。点此登录或注册