2 ms·
> The periodicity does have to be a known compile-time ratio expressible as a fraction of seconds Right, that's the problem I'm describing. > or just pick one
by loeg 10mo ago
> The periodicity does have to be a known compile-time ratio expressible as a fraction of seconds
Right, that's the problem I'm describing.
> or just pick one (or several) std::chrono base durations such as standardizing on nanoseconds, and then just count floating-point ticks.
None of this really fits well -- the idea is to count in integer ticks (invariant cycles), without doing expensive division or floating point math. It's like steady clock, but in ticks instead of nanos.
- maxnoe 10mo agoBut on any modern CPU, clock speed won't be constant. It's not compile time constant, nor a runtime constant. Its variable over time. You'd have to record the clock speed over time and the ticks, so why not just record actual time?
- loeg 10mo agoYou missed this key part of my earlier comment: > (invariant cycles) All major CPUs have had invariant cycle counters for decades at this point. It is a runtime constant.
- adrian_b 10mo agoThe CPU clock varies, but all modern CPUs have some counter that is incremented at a constant frequency, like the Time Stamp Counter (TSC) on Intel/AMD CPUs. When discussing hardware clock ticks used for time measurement, the ticks from TSC or similar counters are meant and not ticks from some counter that counts cycles of the CPU clock, like provided by the performance counters. The variable CPU clock frequency can be measured by computing the ratio between the ticks accumulated by the corresponding performance counter and the ticks accumulated by the TSC (or similar counter), for which the clock frequency is constant and known.