From f2662f42c73f141148732ebe6dda15dac3eac0b9 Mon Sep 17 00:00:00 2001 From: Quentin Khan <quentin.khan@inria.fr> Date: Fri, 20 May 2016 14:20:37 +0200 Subject: [PATCH] FTic: refresh interface Add a peek method to check timer without stopping it Make tac return elapsed time Add c++11 std::chrono timing --- Src/Utils/FTic.hpp | 50 ++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/Src/Utils/FTic.hpp b/Src/Utils/FTic.hpp index 911c88043..72527b6e4 100644 --- a/Src/Utils/FTic.hpp +++ b/Src/Utils/FTic.hpp @@ -4,13 +4,13 @@ // This software is a computer program whose purpose is to compute the FMM. // // This software is governed by the CeCILL-C and LGPL licenses and -// abiding by the rules of distribution of free software. -// +// abiding by the rules of distribution of free software. +// // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public and CeCILL-C Licenses for more details. -// "http://www.cecill.info". +// "http://www.cecill.info". // "http://www.gnu.org/licenses". // =================================================================================== #ifndef FTIC_HPP @@ -18,7 +18,11 @@ #include "FGlobal.hpp" -#ifdef _OPENMP +#define USE_STD_CHRONO + +#if defined(USE_STD_CHRONO) + #include <chrono> +#elif defined(_OPENMP) #include <omp.h> #elif defined(WINDOWS) // We need an os specific function #include <time.h> @@ -42,7 +46,7 @@ * * - use elapsed() to get the last time interval; * - use cumulated() to get the total running time; - * - use reset() to stop and reset the counter. + * - use reset() to stop and reset the counter. * * \code * FTic timer; @@ -66,12 +70,12 @@ private: double start = 0; ///< start time (tic) double end = 0; ///< stop time (tac) - double cumulate = 0; ///< the cumulate time + double cumulate = 0; ///< cumulated duration public: /// Constructor FTic() { - tic(); + this->reset(); } /// Copy constructor @@ -100,12 +104,12 @@ public: res.cumulate += other.cumulate; return res; } - + /// Resets the timer /**\warning Use tic() to restart the timer. */ void reset() { - start = 0; - end = 0; + start = FTic::GetTime(); + end = start; cumulate = 0; } @@ -114,26 +118,35 @@ public: this->start = FTic::GetTime(); } + /// Peek at current elapsed time without stopping timer + double peek() const { + return FTic::GetTime() - this->start;; + } + /// Stop measuring time and add to cumulated time. - void tac(){ + double tac(){ this->end = FTic::GetTime(); - cumulate += elapsed(); + auto lapse = this->elapsed(); + cumulate += lapse; + return lapse; } /// Elapsed time between the last tic() and tac() (in seconds). /** \return the time elapsed between tic() & tac() in second. */ - double elapsed() const{ + double elapsed() const { return this->end - this->start; } /// Cumulated tic() - tac() time spans /** \return the time elapsed between ALL tic() & tac() in second. */ - double cumulated() const{ + double cumulated() const { return cumulate; } /// Combination of tic() and elapsed(). - /** \return the time elapsed between tic() & tac() in second. */ + /** + * \todo deprecate + * \return the time elapsed between tic() & tac() in second. */ double tacAndElapsed() { tac(); return elapsed(); @@ -145,7 +158,11 @@ public: * \return A system dependent time point. */ static double GetTime(){ -#ifdef _OPENMP +#if defined(USE_STD_CHRONO) + using clock = std::chrono::high_resolution_clock; + using duration = std::chrono::duration<double>; + return duration(clock::now().time_since_epoch()).count(); +#elif defined(_OPENMP) return omp_get_wtime(); #elif defined(WINDOWS) return static_cast<double>(GetTickCount())/1000.0; @@ -159,4 +176,3 @@ public: #endif - -- GitLab