Resolution of core.time.Duration...

Alexander aldem+dmars at nk7.net
Wed May 18 04:12:50 PDT 2011


On 18.05.2011 12:12, Jonathan M Davis wrote:

> To my knowledge, using the system's monotonic clock is the absolute best that you're going to get for stuff like benchmarking.

  It depends. If system is not busy, then it doesn't really matter - which clock to use, especially if you take average over several runs.

  If you benchmark I/O performance, then you need real-time clock and idle system - no way around.

  But if you benchmark CPU performance, the you have to use CPU clock - i.e. the clock which is increasing only when application is actually using CPU.

> Are you suggesting that there is an alternative which is better?

  Sure, there is - clock_gettime with CLOCK_THREAD_CPUTIME_ID or CLOCK_PROCESS_CPUTIME_ID as clock id. This way, you will get exactly the amount of time that was spent while specific thread was using CPU.

> As far as I know, the issues of context  switching and whatnot are just a part of life and that you can't do anything 
> about them except restrict what you're running on your computer when you run benchmarks.

  The way I've described it (CLOCK_THREAD_CPUTIME_ID or CLOCK_PROCESS_CPUTIME_ID), or using simple clock() function (less precise, though) you can do this.

  It only doesn't work well with measuring I/O performance, as CPU is mostly waiting, so CPU time is useless.

  I would propose extension of StopWatch - an option to specify which clock to use, CPU or real-time (monotonic is real-time).

/Alexander


More information about the Digitalmars-d mailing list