CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Difference between "ExecutionTime" and "ClockTime" (https://www.cfd-online.com/Forums/openfoam-solving/67695-difference-between-executiontime-clocktime.html)

lakeat August 24, 2009 06:44

Difference between "ExecutionTime" and "ClockTime"
 
Dear all,

A small question, what is the difference between "ExecutionTime" and "ClockTime"?

I can get these lins from icoFoam.C,
Code:

Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;

someone said:
Quote:

elapsedCPUTime() is the elapsed CPU time.
elapsedClockTime() is the elapsed wall clock time.
  1. Could anyone explain this in detail?
  2. If ClockTime means something, why then that we have to care about ExecutionTime?
  3. Is there any meaning concerning the ratio of ClockTime over ExecutionTime? Latency, or what?
  4. How can I change the writing format of these time, eg. show four decimal places in second.?

Thanks in advance for any reply.

sandy August 24, 2009 06:56

Look at hani:
http://www.tfd.chalmers.se/~hani/kur...tyTutorial.pdf
in page 43.

Simon Lapointe August 24, 2009 21:19

Hi,

I'm not an expert but here's what I think,

1) There isn't much to add there, the ExecutionTime is the time spent by the processor and the ClockTime is the wall clock time or "real" time if you prefer.

2 & 3) There is an interest because a significative difference between the ExecutionTime and the ClockTime is a sign of a slow calculation. The difference can be explained by the time when a file is being written or when there is communication between processors in a parallel run. Using a computer with a slow interconnect or not enough cells per processor can cause a difference in cpu and clock time.

Hope that helps

lakeat August 24, 2009 21:58

Quote:

Originally Posted by Simon Lapointe (Post 227360)
Hi,

I'm not an expert but here's what I think,

1) There isn't much to add there, the ExecutionTime is the time spent by the processor and the ClockTime is the wall clock time or "real" time if you prefer.

2 & 3) There is an interest because a significative difference between the ExecutionTime and the ClockTime is a sign of a slow calculation. The difference can be explained by the time when a file is being written or when there is communication between processors in a parallel run. Using a computer with a slow interconnect or not enough cells per processor can cause a difference in cpu and clock time.

Hope that helps

:D:D
I noticed this is your first two posts on the forum, and they are so helpful, thank you.

mathslw September 1, 2014 10:53

Quote:

Originally Posted by lakeat (Post 227263)
Dear all,

A small question, what is the difference between "ExecutionTime" and "ClockTime"?

I can get these lins from icoFoam.C,
Code:

Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;

someone said:

  1. Could anyone explain this in detail?
  2. If ClockTime means something, why then that we have to care about ExecutionTime?
  3. Is there any meaning concerning the ratio of ClockTime over ExecutionTime? Latency, or what?
  4. How can I change the writing format of these time, eg. show four decimal places in second.?

Thanks in advance for any reply.

Hi Daniel,

Have you found the answer to your 4th question? Thanks!

Wei

louisgag September 11, 2020 09:52

Quote:

Originally Posted by mathslw (Post 508678)
Hi Daniel,

Have you found the answer to your 4th question? Thanks!

Wei


I had the same question and search a bit through the code.
It does not seem quite simple to do, or at least if it is I have not found how.
I think you would have to change the main code of OpenFOAM (I've looked at the .com version, pimpleFoam solver) or some of the principal libraries.


Here's my analysis, please jump in if you know more!

In the solver you call
Code:

runTime.printExecutionTime(Info);
and there are both

Code:

elapsedClockTime
Code:

elapsedCpuTime
printed. But both are not printed with the same precision.

elapsedCpuTime relies on the diff function which returns a scalar (double) coming from the C++ difftime function and elapsedClockTime relies directly on the C++ difftime function.


So the difference actually comes from the type of the arguments to the difftime function. For clockTime C++ time_t type is used and is in seconds. For cpuTime the call is to std::clock which returns a "processor time" which is no longer an integer.


The solution would be to somehow modify/rewrite the call from getTime to use chrono, something as what is given in here: https://stackoverflow.com/questions/...d-part-of-time

lxufeishi September 1, 2023 02:08

improve the precision of the excutive time
 
Quote:

Originally Posted by mathslw (Post 508678)
Hi Daniel,

Have you found the answer to your 4th question? Thanks!

Wei

The "clockTime" Class would help, as its description:
"Starts timing and returns elapsed time from start. Uses std::chrono::high_resolution_clock for better resolution (2uSec instead of ~20mSec) than cpuTime. "

So the code would be like:
Code:

#include "clockTime.H"

Foam::clockTime myTime;

Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
      //<< "  ClockTime = " << runTime.elapsedClockTime() << " s"
      << "  ClockTime = " << myTime.elapsedTime() << " s"
      << endl;



All times are GMT -4. The time now is 20:57.