blob: 911b0147e011d09ebacbf1d0af8a534c19bf5f7d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "WallClockTimer.hpp"
#include "armnn/Exceptions.hpp"
namespace armnn
{
const std::string WallClockTimer::WALL_CLOCK_TIME ("Wall clock time");
const std::string WallClockTimer::WALL_CLOCK_TIME_START(WallClockTimer::WALL_CLOCK_TIME + " (Start)");
const std::string WallClockTimer::WALL_CLOCK_TIME_STOP (WallClockTimer::WALL_CLOCK_TIME + " (Stop)");
const char* WallClockTimer::GetName() const
{
return "WallClockTimer";
}
void WallClockTimer::Start()
{
m_Start = clock::now();
}
void WallClockTimer::Stop()
{
m_Stop = clock::now();
}
void WallClockTimer::SetScaleFactor(Measurement::Unit measurementUnit)
{
switch(measurementUnit)
{
case Measurement::TIME_MS:
m_ScaleFactor = 1.f;
break;
case Measurement::TIME_US:
m_ScaleFactor = 1000.f;
break;
case Measurement::TIME_NS:
m_ScaleFactor = 1000000.f;
break;
default:
throw InvalidArgumentException("Invalid scale used");
}
m_Unit = measurementUnit;
}
std::vector<Measurement> WallClockTimer::GetMeasurements() const
{
const auto delta = std::chrono::duration<double, std::milli>(m_Stop - m_Start);
const auto startTimeMs = std::chrono::duration<double, std::milli>(m_Start.time_since_epoch());
const auto stopTimeMs = std::chrono::duration<double, std::milli>(m_Stop.time_since_epoch());
return { { WALL_CLOCK_TIME, delta.count() * m_ScaleFactor, m_Unit },
{ WALL_CLOCK_TIME_START, startTimeMs.count() * m_ScaleFactor, m_Unit },
{ WALL_CLOCK_TIME_STOP, stopTimeMs.count() * m_ScaleFactor, m_Unit } };
}
} //namespace armnn
|