如何计算程序运行时间

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、dtime 和 etime:已用的执行时间
这两个函数的返回值都是已用时间(如果为 -1.0,表示出现错误)。返回的时间以秒数表示。

缺省情况下,Fortran 95 使用的 dtime 和 etime 版本使用系统的低精度时钟。该精度是百分之一秒。但是,如果在 Sun OSTM 操作系统实用程序 ptime(1) (/usr/proc/bin/ptime) 下运行程序,则使用高精度时钟。
1. dtime:自上次调用 dtime 后已用时间

对于 dtime,已用时间为:

?
第一次调用:自开始执行后已用时间

?
后来调用:自上次调用 dtime 后已用时间

?
单处理器:CPU 占用的时间

?
多处理器:所有 CPU 占用时间总和,该数据没有什么用,这时可改用 etime。


--------------------------------------------------------------------------------
注:

在并行循环中调用 dtime 会得到不确定的结果,这是因为参与循环的所有线程都共用已用时间计数器。


--------------------------------------------------------------------------------


该函数的调用方式如下所示:


e = dtime( tarray )


tarray
real(2)
输出

e= -1.0:错误:tarray 值未定义

e≠ -1.0:没有错误,tarray(1) 中存储的是用户时间,tarray(2) 中存储的是系统时间


返回值

real

输出

e= -1.0:错误

e≠ -1.0:tarray(1) 与 tarray(2) 之和




示例:dtime(),单处理器:


demo% cat tdtime.f

real e, dtime, t(2)

print *, ’elapsed:’, e, ’, user:’, t(1), ’, sys:’, t(2)

do i = 1, 10000

k=k+1

end do

e = dtime( t )

print *, ’elapsed:’, e, ’, user:’, t(1), ’, sys:’, t(2)

end

demo% f95 tdtime.f

demo% a.out

elapsed: 0.0E+0 , user: 0.0E+0 , sys: 0.0E+0

elapsed: 0.03 , user: 0.01 , sys: 0.02

demo%


2. etime:自开始执行后已用时间

对于 etime,已用时间为:

?
单处理器执行-调用进程的 CPU 时间

?
多处理器执行-处理程序时的挂钟时间


如果环境变量 PARALLEL 或 OMP_NUM_THREADS 定义为大于 1 的某个整数值,运行时库就确定程序是在多处理器模式下执行。

该函数的调用方式如下所示:


e = etime( tarray )


tarray

real(2)

输出

e= -1.0:错误:tarray 值未定义

e≠ -1.0:单处理器:tarray(1) 中存储的是用户时间,tarray(2) 中存储的是系统时间

多处理器:tarray(1) 中存储的是挂钟时间,tarray(2) 中存储的是 0.0

返回值

real

输出

e= -1.0:错误

e≠ -1.0:tarray(1) 与 tarray(2) 之和




请注意,初次调用 etime 时所得结果不准确。它只是使系统时钟开始运转。请勿使用初次调用 etime 返回的值。

示例:etime(),单处理器:


demo% cat tetime.f

real e, etime, t(2)

e = etime(t)

! Startup etime - do not use r

esult

do i = 1, 10000

k=k+1

end do

e = etime( t )

print *, ’elapsed:’, e, ’, user:’, t(1), ’, sys:’, t(2)

end

demo% f95 tetime.f

demo% a.out

elapsed: 0.02 , user: 0.01 , sys: 0.01

demo%





二、MPI计时器

MPI定义了一个计时器。尽管不是“消息传递”,也说明一个计时器,因为对并行程序计时在“性能调试”中是很重要的,并且已存在的计时器(在POSIX 1003.1-1988和1003.4D 14.1和在Fortran 90中)要么是不方便的,要么是没能提供对高分辨率计时器的足够的访问。

MPI_WTIME()

double MPI_Wtime(void)

DOUBLE PRECISION MPI_WTIME()

MPI-WTIME返回一个浮点的秒数, 它表示在过去某一时刻所经历的屏蔽时钟时间。

要保证过去某一时刻在进程生命期间不被改变。用户如果喜欢,则负责将大的秒数转换成其它单位。

函数是可移植的(它返回秒而不是滴答数),它允许高分辨率,且不携带没有必要的垃圾。人们将象这样的使用它:

{


double starttime, endtime;

starttime = double MPI_Wtime()

…要计时的东西…

endtime = double MPI_Wtime()

printf("That took %f secodes\n", endtime-starttime);


}

所返回的时间居域于调用它们的节点。不要求不同的节点返回“同样的时间”。

MPI_WTICK()

double MPI_Wtick()

DOUBLE PRECISION MPI_WTICK()

MPI_WTICK返回秒中MPI_WTIME的精度。即,它返回连续时钟滴答的秒数,是一双精度值。




相关文档
最新文档