Skip to content
Snippets Groups Projects

Replace Kokkos::Timer by a builtin one based on std::chrono

3 files
+ 180
2
Compare changes
  • Side-by-side
  • Inline

Files

#ifndef TIMER_HPP
#ifndef TIMER_HPP
#define TIMER_HPP
#define TIMER_HPP
#include <Kokkos_Timer.hpp>
#include <chrono>
 
#include <iostream>
using Timer = Kokkos::Timer;
class Timer
 
{
 
public:
 
enum class Status
 
{
 
running,
 
paused,
 
stopped
 
};
 
 
private:
 
std::chrono::time_point<std::chrono::high_resolution_clock> m_start;
 
std::chrono::duration<double> m_elapsed_sum;
 
 
Status m_status;
 
 
public:
 
Status
 
status() const
 
{
 
return m_status;
 
}
 
 
double
 
seconds() const
 
{
 
switch (m_status) {
 
case Status::running: {
 
return (m_elapsed_sum + std::chrono::duration<double>{std::chrono::system_clock::now() - m_start}).count();
 
}
 
case Status::paused:
 
case Status::stopped: {
 
return m_elapsed_sum.count();
 
}
 
// LCOV_EXCL_START
 
default: {
 
return 0;
 
}
 
// LCOV_EXCL_STOP
 
}
 
}
 
 
friend std::ostream&
 
operator<<(std::ostream& os, const Timer& timer)
 
{
 
os << timer.seconds() << 's';
 
return os;
 
}
 
 
void
 
reset()
 
{
 
m_start = std::chrono::high_resolution_clock::now();
 
m_elapsed_sum = std::chrono::duration<double>::zero();
 
}
 
 
void
 
stop()
 
{
 
m_start = std::chrono::high_resolution_clock::now();
 
m_elapsed_sum = std::chrono::duration<double>::zero();
 
m_status = Status::stopped;
 
}
 
 
void
 
pause()
 
{
 
if (m_status == Status::running) {
 
m_elapsed_sum += std::chrono::high_resolution_clock::now() - m_start;
 
m_start = std::chrono::high_resolution_clock::now();
 
m_status = Status::paused;
 
}
 
}
 
 
void
 
start()
 
{
 
switch (m_status) {
 
case Status::running: {
 
return;
 
}
 
case Status::paused:
 
case Status::stopped: {
 
m_start = std::chrono::high_resolution_clock::now();
 
m_status = Status::running;
 
}
 
}
 
}
 
 
Timer& operator=(const Timer&) = default;
 
Timer& operator=(Timer&&) = default;
 
 
Timer(const Timer&) = default;
 
Timer(Timer&&) = default;
 
 
Timer()
 
: m_start{std::chrono::high_resolution_clock::now()},
 
m_elapsed_sum{std::chrono::duration<double>::zero()},
 
m_status{Status::running}
 
{}
 
 
~Timer() = default;
 
};
#endif // TIMER_HPP
#endif // TIMER_HPP
Loading