2015-12-11 10:59:22 -08:00
|
|
|
#ifndef CAFFE2_CORE_TIMER_H_
|
|
|
|
|
#define CAFFE2_CORE_TIMER_H_
|
|
|
|
|
|
|
|
|
|
#include <chrono>
|
|
|
|
|
|
2024-09-12 03:27:06 +00:00
|
|
|
#include <c10/macros/Macros.h>
|
2015-12-11 10:59:22 -08:00
|
|
|
|
|
|
|
|
namespace caffe2 {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief A simple timer object for measuring time.
|
|
|
|
|
*
|
|
|
|
|
* This is a minimal class around a std::chrono::high_resolution_clock that
|
|
|
|
|
* serves as a utility class for testing code.
|
|
|
|
|
*/
|
|
|
|
|
class Timer {
|
|
|
|
|
public:
|
|
|
|
|
typedef std::chrono::high_resolution_clock clock;
|
|
|
|
|
typedef std::chrono::nanoseconds ns;
|
|
|
|
|
Timer() { Start(); }
|
|
|
|
|
/**
|
|
|
|
|
* @brief Starts a timer.
|
|
|
|
|
*/
|
|
|
|
|
inline void Start() { start_time_ = clock::now(); }
|
|
|
|
|
inline float NanoSeconds() {
|
2017-12-23 19:56:40 -08:00
|
|
|
return static_cast<float>(
|
|
|
|
|
std::chrono::duration_cast<ns>(clock::now() - start_time_).count());
|
2015-12-11 10:59:22 -08:00
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* @brief Returns the elapsed time in milliseconds.
|
|
|
|
|
*/
|
|
|
|
|
inline float MilliSeconds() { return NanoSeconds() / 1000000.f; }
|
|
|
|
|
/**
|
|
|
|
|
* @brief Returns the elapsed time in microseconds.
|
|
|
|
|
*/
|
|
|
|
|
inline float MicroSeconds() { return NanoSeconds() / 1000.f; }
|
2016-05-13 14:43:48 -07:00
|
|
|
/**
|
|
|
|
|
* @brief Returns the elapsed time in seconds.
|
|
|
|
|
*/
|
|
|
|
|
inline float Seconds() { return NanoSeconds() / 1000000000.f; }
|
2015-12-11 10:59:22 -08:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
std::chrono::time_point<clock> start_time_;
|
2018-09-25 17:28:37 -07:00
|
|
|
C10_DISABLE_COPY_AND_ASSIGN(Timer);
|
2015-12-11 10:59:22 -08:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif // CAFFE2_CORE_TIMER_H_
|