The resolution of time_t
is at most one second on most platforms. That is, on most platforms, time_t
will be an integer (32- or 64-bit) value counting the number of seconds elapsed since midnight of Jan 1st 1970 (UTC), and can only achieve one-second resolution.
Therefore, a sum of time_t
values will also only exhibit one-second resolution (no decimal part, even after converting to double
.)
The above having been said, what native or OpenMP call are you using to obtain the time_t
values that you are attempting to accumulate?
If using either the native *nix getrusage()
call to fill out an rusage
structure (provided your platform supports it) with user/kernel times, or if using gettimeofday()
to get wall time, then use both the tv_sec
and tv_usec
fields of struct timeval
to generate a double
value (of millisecond-or-better resolution, typically), and use that instead of time_t
in your calculations:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Correspondingly, you can use GetThreadTimes
/GetProcessTimes
for user/kernel times or _ftime
for wall time on Windows platforms, then combine FILETIME::dwHighDateTime/dwLowDateTime
.