b-f*_*-fg 2 parallel-processing fortran hpc mpi
我正在使用Fortran MPI进行编码,因此需要获取程序的运行时间。因此,我尝试使用WTIME()函数,但得到了一些奇怪的结果。
部分代码如下所示:
program heat_transfer_1D_parallel
implicit none
include 'mpif.h'
integer myid,np,rc,ierror,status(MPI_STATUS_SIZE)
integer :: N,N_loc,i,k,e !e = number extra points (filled with 0s)
real :: time,tmax,start,finish,dt,dx,xmax,xmin,T_in1,T_in2,T_out1,T_out2,calc_T,t1,t2
real,allocatable,dimension(:) :: T,T_prev,T_loc,T_loc_prev
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD,np,ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierror)
...
t1 = MPI_WTIME()
time = 0.
do while (time.le.tmax)
...
end do
...
call MPI_BARRIER(MPI_COMM_WORLD,ierror)
t2 = MPI_WTIME()
call MPI_FINALIZE(ierror)
if(myid.eq.0) then
write(*,"(8E15.7)") T(1:N-e)
write(*,*)t2
write(*,*)t1
end if
Run Code Online (Sandbox Code Playgroud)
t1和t2的输出值相同且非常大:1.4240656E + 09有什么想法吗?非常感谢。
在亚历山大·沃格特(Alexander Vogt)的答案的基础上,我想添加许多MPI_WTIME使用gettimeofday(2)(或类似方法)的Unix实现来检索系统时间,然后将返回的struct timeval值转换为浮点值。Unix中的计时是通过跟踪自纪元(1970年1月1日00:00 UTC)以来经过的秒数来完成的。编写此代码时,该值为1424165330.897136秒并进行计数。
对于许多Fortran编译器,REAL默认情况下为单精度浮点表示形式,仅可容纳7.22个十进制数字,而您至少需要9个数字(如果需要亚秒精度,则需要更多)。当存储在REAL变量中时,上述高精度时间值将变为1.42416538E9 。该类型可以表示的下一个最接近的值是1.4241655E9。因此,您无法测量短于(1.4241655-1.42416538).10 9或120秒的时间段。
使用双精度。
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |