如何解决:因为我在hpc中使用fortran获得的错误百分比为199%?
我得到的错误百分比(%)为:如何解决:因为我在hpc中使用fortran获得的错误百分比为199%?,fortran,hpc,Fortran,Hpc,我得到的错误百分比(%)为:199.20我犯了什么错误?我的公式是 program EConstant include 'mpif.h' INTEGER n,ierr,lcv,rank,size,i DOUBLE PRECISION INTEGER factor, reduc DOUBLE PRECISION INTEGER redat, redrl, repnt DOUBLE PRECISION actval, actdiff,erpnt DOUB
199.20
我犯了什么错误?我的公式是
program EConstant
include 'mpif.h'
INTEGER n,ierr,lcv,rank,size,i
DOUBLE PRECISION INTEGER factor, reduc
DOUBLE PRECISION INTEGER redat, redrl, repnt
DOUBLE PRECISION actval, actdiff,erpnt
DOUBLE PRECISION este, reldiff
integer status(MPI_STATUS_SIZE)
call MPI_INIT(ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
l
actval = 2.71828D0
n=1000
factor = 1.D0
este = 0.D0
DO lcv = rank, n, size
DO i=1,lcv
factor=factor*i
END DO
c factor = factor * lcv
este = este + 1/factor
END DO
actdiff = actval - este
reldiff = actdiff/((actval+este)/2)
erpnt = (actdiff/actval)*100
CALL MPI_REDUCE(este,reduc,1,MPI_DOUBLE_PRECISION,
& MPI_SUM,0,MPI_COMM_WORLD,ierr)
CALL MPI_REDUCE(actdiff,redat,1,MPI_DOUBLE_PRECISION,
& MPI_SUM,0,MPI_COMM_WORLD,ierr)
CALL MPI_REDUCE(reldiff,redrl,1,MPI_DOUBLE_PRECISION,
& MPI_SUM,0,MPI_COMM_WORLD,ierr)
CALL MPI_REDUCE(erpnt,repnt,1,MPI_DOUBLE_PRECISION,
& MPI_SUM,0,MPI_COMM_WORLD,ierr)
if(rank.eq.0)PRINT *,'The estimate of e is: ', reduc
if(rank.eq.0)PRINT *,'Actual difference is: ', redat
if(rank.eq.0)PRINT *,'Relative difference is: ', redrl
if(rank.eq.0)PRINT *,'Error percentage (%) is: ', repnt
call MPI_FINALIZE(ierr)
end
快速浏览一下,我发现您正在对某些错误度量进行加法缩减,而不是对所涉及的进程数进行更正。如果一个进程测量的错误为
100%
,而第二个进程测量的错误为99.2%
,那么您的程序似乎会将它们相加,得出一个错误为199.2%
但是,正如我所说,我只是简单地看了一下。你的意思是我应该在调用附近进行修改\u MPIReduceNo,我的意思是你应该弄清楚你想要做什么算术,然后编写代码来实现它。如何从每个进程计算的错误计算整个程序的错误?回答这个问题,然后编写代码。我的建议是先编写一个非mpi程序,确保它正常工作,然后靠近观察点,你应该在este上只调用reduce一次。在还原后只在线程0上进行错误计算。知道了,我正在这样做。
error percentage = (actual difference/ actual value) *100 I am getting error percentage (%) as: `199.20` what mistake am I doing ? My formula is
error percentage = (actual difference/ actual value) *100 I am getting error percentage (%) as: `199.20` what mistake am I doing ? My formula is
error percentage = (actual difference/ actual value) *100 I am getting error percentage (%) as: `199.20` what mistake am I doing ? My formula is
error percentage = (actual difference/ actual value) *100