ExecutionTime与ClockTime有什么区别与联系?



  • 在采用mpirun执行并行计算的过程中,每次迭代都会打印迭代结果ExecutionTime = 239.5 s ClockTime = 302 s,这两个Time有什么区别与联系呢?


  • OpenFOAM教授

    ExecutionTime 是 CPU 时间,指CPU执行代码花费的时间。

    ClockTime是墙上时钟时间(wall-clock time),指物理世界中花费的时间。

    CPU由操作系统调度,不会一直执行你的代码,可能会用来执行其他一些操作(如中断等)。墙上时钟时间包括CPU时间,以及执行其他这些操作所花的时间。

    更正:ClockTime一般比 ExecutionTime 要大。



  • @wwzhao Thank you,你说的应该是对的,如问题中描述,我实际计算过程中,每次都是ClockTime 大于ExecutionTime,这又是为何呢,请解惑。



  • @wwzhao 如你解释的“ClockTime 是墙上时钟时间(wall-clock time),指物理世界中花费的时间”,这个应该是程序执行的所有时间,包括CPU的任务调度,中断响应,数据计算,数据IO等操作;

    ExecutionTime 仅仅指计算的时间,如此说来后者应该比前者小


  • OpenFOAM教授

    @北方 笔误,应该是ClockTime比ExecutionTime大,ClockTime=ExecutionTime+CPU调度和中断等花的时间。



  • @wwzhao :happy: ,谢谢大神的解答。


  • OpenFOAM教授

    @北方 不是大神,相互学习:happy:



  • QQ截图20190911102057.png

    再补充一下,用不同的电脑跑了 damBreak 算例,得到的三个 ExecutionTime 和 ClockTime 。 并不总是 clockTime 大于 ExecutionTime。@wwzhao

    但是仔细检查发现,造成右边两个有差异的主要原因是两个时间的精度问题,如下所示:

    ExecutionTime = 1.58 s  ClockTime = 1 s 
    ExecutionTime = 1.59 s  ClockTime = 1 s  
    ExecutionTime = 1.59 s  ClockTime = 1 s 
    ExecutionTime = 1.6 s  ClockTime = 1 s 
    ExecutionTime = 1.6 s  ClockTime = 1 s
    ExecutionTime = 1.61 s  ClockTime = 1 s 
    ExecutionTime = 1.62 s  ClockTime = 1 s 
    ExecutionTime = 1.62 s  ClockTime = 1 s 
    ExecutionTime = 1.63 s  ClockTime = 1 s                                                                                                                                                       ExecutionTime = 1.64 s  ClockTime = 1 s  
    ExecutionTime = 1.64 s  ClockTime = 2 s
    ExecutionTime = 1.65 s  ClockTime = 2 s   
    ExecutionTime = 1.66 s  ClockTime = 2 s     
    ExecutionTime = 1.66 s  ClockTime = 2 s  
    ExecutionTime = 1.67 s  ClockTime = 2 s 
    ExecutionTime = 1.67 s  ClockTime = 2 s 
    ExecutionTime = 1.68 s  ClockTime = 2 s 
    
    

    因为是一个很小的单核算例,IO也不大,所以IO基本上没有花时间,导致在保留精度不同的情况下出现了上述差异。

    多说两句
    上图右上角是在WSL2 根目录下的结果,
    右下角是在一个 Ubuntu18.0.4 服务器上的结果,
    左边的结果是用 WSL2 在 /mnt/h 盘下的结果,

    可以看到在即使是很小的算例。这个IO耗时也是相当大。这是 WSL2目前的问题,相较于WSL 它在 根目录下确实IO能力有很大提升。但是在 /mnt/* 下 真是果断弃疗。


    版本:
    OpenFOAM-v7

    The 'ExecutionTime' is the elapsed CPU time, and the ClockTime is the elapsed wall clock time for the latest time step(approximate!!)

    https://www.cfd-online.com/Forums/openfoam-solving/67695-difference-between-executiontime-clocktime.html


Log in to reply