From b2c4f08bbcae26e68e5744ecaaeb1fc955ef1ea6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 21:52:52 -0400 Subject: [PATCH] use C++11 functionality to determine wall time --- src/platform.cpp | 21 +++++---------------- src/platform.h | 17 +++++++++++------ 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 9039816f12..18d760b34b 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -106,6 +106,10 @@ static const zip_info &find_zip_type(const std::string &file) /* ------------------------------------------------------------------ */ +// set reference time stamp during executable/library init. +// should provide better resolution than using epoch, if the system clock supports it. +static auto initial_time = std::chrono::steady_clock::now(); + using namespace LAMMPS_NS; // get CPU time @@ -156,22 +160,7 @@ double platform::cputime() ------------------------------------------------------------------------ */ double platform::walltime() { - double wtime; - -#if defined(_WIN32) - - wtime = GetTickCount64() * 0.001; - -#else - - struct timeval tv; - - gettimeofday(&tv, nullptr); - wtime = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; - -#endif - - return wtime; + return std::chrono::duration(std::chrono::steady_clock::now() - initial_time).count(); } /* ---------------------------------------------------------------------- diff --git a/src/platform.h b/src/platform.h index 31710caf2e..ef45ceff9b 100644 --- a/src/platform.h +++ b/src/platform.h @@ -27,25 +27,30 @@ namespace platform { /*! Return the consumed CPU time for the current process in seconds * * This is a wrapper around the POSIX function getrusage() and its Windows equivalent. - * It is to be used in a similar fashion than MPI_Wtime(). + * It is to be used in a similar fashion than MPI_Wtime(). Its resolution may + * be rather low so it can only be trusted when observing processes consuming at + * seconds or more of CPU time. * - * \return used CPU time in second */ + * \return used CPU time in seconds */ double cputime(); /*! Return the wall clock state for the current process in seconds * - * This is a wrapper around the gettimeofday() function and its Windows equivalent. - * It is to be used in a similar fashion than MPI_Wtime(). + * This this clock is counting continuous time is initialized during + * Load of the executable/library. Its absolute value must be considered + * arbitrary and thus elapsed wall times are measured in taking differences. + * It is therefore to be used in a similar fashion as MPI_Wtime() but + * has a different offset, usually leading to better resolution. * - * \return wall clock time in second */ + * \return wall clock time in seconds */ double walltime(); - /*! Suspend execution for a microsecond interval * * This emulates the usleep(3) BSD function call also mentioned in POSIX.1-2001. + * This is not a precise delay; it may be longer, but not shorter. * * \param usec length of delay in microseconds */