use C++11 functionality to determine wall time

This commit is contained in:
Axel Kohlmeyer
2021-10-05 21:52:52 -04:00
parent fcdabe0002
commit b2c4f08bbc
2 changed files with 16 additions and 22 deletions

View File

@ -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<double>(std::chrono::steady_clock::now() - initial_time).count();
}
/* ----------------------------------------------------------------------

View File

@ -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 */