Am I doing it correctly? At times, my program will print 2000+ for the chrono solution and it always prints 1000 for the CLOCKS_PER_SEC..
What is that value I'm actually calculating? Is it Clocks Per Sec?
std::uint32_t TimeDuration(std::chrono::time_point<std::chrono::high_resolution_clock> Time)
return std::chrono::duration_cast<std::chrono::nanoseconds>(SystemTime() - Time).count();
auto Begin = std::chrono::high_resolution_clock::now();
std::cout<< (TimeDuration(Begin) / 1000.0)<<std::endl;
In order to get the correct ticks per second on Linux, you need to use the return value of
::sysconf(_SC_CLK_TCK) (declared in the header
unistd.h), rather than the macro
The latter is a constant defined in the POSIX standard – it is unrelated to the actual ticks per second of your CPU clock. For example, see the man page for
C89, C99, POSIX.1-2001. POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the actual resolution.
However, note that even when using the correct ticks-per-second constant, you still won't get the number of actual CPU cycles per second. "Clock tick" is a special unit used by the CPU clock. There is no standardized definition of how it relates to actual CPU cycles.