相关疑难解决方法(0)

Fortran固有的时序例程,哪个更好?cpu_time或system_clock

在为FORTRAN程序计时时,我通常只使用该命令call cpu_time(t).
然后我偶然发现call system_clock([count,count_rate,count_max])它似乎在做同样的事情.但是,在一个更难的庄园.我对这些的了解来自:旧的英特尔文档.
我无法在英特尔的主页上找到它.请参阅下面的标记.

  1. 哪个更准确,还是相似?
  2. 其中一个是否计算缓存未命中(或其他类型)而另一个没有,或者执行其中任何一个?
  3. 或者唯一的区别是我的标记下面标记的东西?

这些是我的问题,下面我提供了一些代码供您查看一些时间和用法.他们向我展示了它们在输出方面非常相似,因此在实现方面似乎相似.
我应该注意,我可能会一直坚持cpu_time,而且我并不需要更精确的时间.

在下面的代码中,我试图比较它们.(我也尝试了更精细的东西,但为了保持简洁而不会供应)所以基本上我的结果是:

  • cpu_time
    1. 更容易使用,您不需要初始化调用
    2. 差异的直接时间
    3. 也应该是编译器特定的,但是没有办法看到精度.(标准是毫秒)
    4. 是线程时间的总和.不推荐用于并行运行.
  • system_clock
    1. 需要预先初始化.
    2. 后进程,以分界的形式.(小事,但仍有区别)
    3. 是编译器特定的.在我的电脑上发现以下内容:
      • 由于INTEGER精度,英特尔12.0.4的计数率为10000 .
      • gcc-4.4.5使用1000,不知道这是如何区分的
    4. 容易遇到包装,即如果c1 > c2,由于count_max
    5. 是时间从一个标准时间.因此,这将产生一个线程的实际时间而不是总和.

码:

PROGRAM timer
  IMPLICIT NONE
  REAL :: t1,t2,rate 
  INTEGER :: c1,c2,cr,cm,i,j,n,s
  INTEGER , PARAMETER :: x=20000,y=15000,runs=1000
  REAL :: array(x,y),a_diff,diff

  ! First initialize the system_clock
  CALL system_clock(count_rate=cr)
  CALL system_clock(count_max=cm)
  rate = REAL(cr)
  WRITE(*,*) "system_clock rate ",rate …
Run Code Online (Sandbox Code Playgroud)

fortran timer

26
推荐指数
2
解决办法
3万
查看次数

标签 统计

fortran ×1

timer ×1