[cleanup] Remove old code in Dune::Timer
- Feb 05, 2025
-
-
-
Storing duration in doubles is sub-optimal as each cast may incur in truncation. Accumulations may also truncate the value further. Using the native value preserves the duration unit user request its value in seconds. Use duration_cast instead of division: Interestingly, dividing by 1.0s yields a different (slightly longer) assembly code than when making an explicit cast to seconds. The difference seems to me is the cast manages to generate SEE vector registers/instructions.
-
`Dune::Timer` includes two alternative implementations for measuring time. Historically one was based on `getrusage()` and the other one on `std::clock()`. The former was the default and the latter could be enabled by defining a macro. Both in fact measured the time spend computing by the process. In `fa43f4bf` the default code path was changed from `getrusage()` to `std::chrono::high_resolution_clock::now()` while `std::clock()` could still be enabled by the macro. This was in fact a breaking change because the new default version measures the elapsed real time. This patch removed the non-default version based on `std::clock` because: * The breaking change happened almost 11 years so one can consider the new behavior the established 'correct' version. * The macro switch was neither documented nor tested. * Setting the macro manually in user code is error prone. * Both versions do completely different things leading to different measurements. It's not even clear that one produces larger numbers in general: `std::clock` adds up time spend computing in all threads of the process. Thus time in concurrent threads is added up, while the time a thread is sleeping is not counted. There a minor grain of salt: The documentation still documented the old behaviour and instead of 'fixing' the code this patch adjusts the documentation to established reality.
-