【发布时间】:2021-04-28 23:06:03
【问题描述】:
自从我 70 年代后期的大学时代以来,我就没有使用 Fortran 编码(那是使用打孔卡!),但现在我正在尝试学习如何将 MPI 与该语言一起使用。我在调用 MPI_REDUCE 时遇到语法错误,但我不知道为什么。我只知道我错过了一些简单的东西。
C Test program
program pi_reduce
include 'mpif.h'
double precision PI25DT
parameter (PI25DT = 3.141592535897932384662643d0)
double precision mypi, pi, h, sum, x, f, a
integer n, myid, numprocs, i, ierr
f(a) = 4.d0/(1.d0 + a*a)
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr)
do
if (myid .eq. 0) then
print *, 'Enter the number of intervals: (0 quits) '
read(*,*) n
endif
call MPI_BCAST(n, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, ierr)
if (n .le. 0) exit
h = 1.0d0/n
sum = 0.0d0
do i = myid + 1, n, numprocs
x = h * (dble(i) - 0.5d0)
sum = sum + f(x)
enddo
mypi = h * sum
call MPI_REDUCE(mypi, pi, 1, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_WORLD, ierr)
if (myid .eq. 0) then
print *, 'pi is ', pi, ' Error is', abs(pi-PI25DT)
endif
enddo
call MPI_FINALIZE(ierr)
end
【问题讨论】:
-
首先,您应该将“旧版”
include 'mpif.h'替换为use mpi,紧随其后的是implicit none。如果这没有指出错误,请使用新代码和完整的错误消息更新您的问题。 -
仔细检查违规行不超过允许的长度(例如,固定格式源文件中的 72 列)
-
@GillesGouaillardet include 'mpif.h' 和使用 mpi 没有区别。隐含的也没有,但 72 字符截断是正确的。奇怪的是,使用 & 继续下一行的其余部分也会引发错误。我想我会放弃这个 Fortran 的东西并使用更现代的语言,比如 C 或 Python。
-
您是否(也)在第 6 列添加了续行符?无论如何,不要把婴儿和洗澡水一起扔出去。 Fortran 90 及更高版本就是您所需要的(将您的
.F文件重命名为.f90,更改第一行(注释),您应该会很好。