m_RealScheduler.schedule(kernel, hints.split_dimension());
m_Timer.Stop();
- m_Timer.SetScaleFactor(Measurement::Unit::TIME_US);
std::vector<Measurement> measurements = m_Timer.GetMeasurements();
BOOST_ASSERT(!measurements.empty());
m_RealScheduler.run_tagged_workloads(workloads, nullptr);
m_Timer.Stop();
- m_Timer.SetScaleFactor(Measurement::Unit::TIME_US);
std::vector<Measurement> measurements = m_Timer.GetMeasurements();
BOOST_ASSERT_MSG(measurements.size() == 3, "WallClockTimer does not have correct amount of measurements.");
//
#include "WallClockTimer.hpp"
-#include "armnn/Exceptions.hpp"
namespace armnn
{
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());
+ const auto delta = std::chrono::duration<double, std::micro>(m_Stop - m_Start);
+ const auto startTimeMs = std::chrono::duration<double, std::micro>(m_Start.time_since_epoch());
+ const auto stopTimeMs = std::chrono::duration<double, std::micro>(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 } };
+ return { { WALL_CLOCK_TIME, delta.count(), Measurement::Unit::TIME_US },
+ { WALL_CLOCK_TIME_START, startTimeMs.count(), Measurement::Unit::TIME_US },
+ { WALL_CLOCK_TIME_STOP, stopTimeMs.count(), Measurement::Unit::TIME_US } };
}
} //namespace armnn
}
};
-// Implementation of an instrument to measure elapsed wall-clock time in milliseconds.
+// Implementation of an instrument to measure elapsed wall-clock time in microseconds.
class WallClockTimer : public Instrument
{
public:
// Get the name of the timer
const char* GetName() const override;
- void SetScaleFactor(Measurement::Unit measurementUnit);
-
// Get the recorded measurements
std::vector<Measurement> GetMeasurements() const override;
private:
clock::time_point m_Start;
clock::time_point m_Stop;
- float m_ScaleFactor = 1.f;
- Measurement::Unit m_Unit = Measurement::Unit::TIME_MS;
};
} //namespace armnn
BOOST_AUTO_TEST_SUITE(Instruments)
-BOOST_AUTO_TEST_CASE(WallClockTimerInMilliseconds)
+BOOST_AUTO_TEST_CASE(WallClockTimerInMicroseconds)
{
WallClockTimer wallClockTimer;
// start the timer
wallClockTimer.Start();
- // wait for 10 milliseconds
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
+ // wait for 10 microseconds
+ std::this_thread::sleep_for(std::chrono::microseconds(10));
// stop the timer
wallClockTimer.Stop();
BOOST_CHECK_EQUAL(wallClockTimer.GetMeasurements().front().m_Name, WallClockTimer::WALL_CLOCK_TIME);
- // check that WallClockTimer measurement should be >= 10 milliseconds
- BOOST_CHECK_GE(wallClockTimer.GetMeasurements().front().m_Value, std::chrono::milliseconds(10).count());
+ // check that WallClockTimer measurement should be >= 10 microseconds
+ BOOST_CHECK_GE(wallClockTimer.GetMeasurements().front().m_Value, std::chrono::microseconds(10).count());
}
BOOST_AUTO_TEST_CASE(WallClockTimerInNanoseconds)
// start the timer
wallClockTimer.Start();
- // wait for 500 nanoseconds - 0.0005 milliseconds
+ // wait for 500 nanoseconds - 0.5 microseconds
std::this_thread::sleep_for(std::chrono::nanoseconds(500));
// stop the timer
BOOST_CHECK_EQUAL(wallClockTimer.GetMeasurements().front().m_Name, WallClockTimer::WALL_CLOCK_TIME);
- // delta is 0.0005 milliseconds
+ // delta is 0.5 microseconds
const auto delta =
- std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(std::chrono::nanoseconds(500));
+ std::chrono::duration_cast<std::chrono::duration<double, std::micro>>(std::chrono::nanoseconds(500));
- // check that WallClockTimer measurement should be >= 0.0005 milliseconds
+ // check that WallClockTimer measurement should be >= 0.5 microseconds
BOOST_CHECK_GE(wallClockTimer.GetMeasurements().front().m_Value, delta.count());
}
std::string backend = "Ref";
std::string changeLine31 = "\n},\n\"CopyMemGeneric_Execute\": {";
- std::string changeLine39 = "ms\"";
+ std::string changeLine39 = "us\"";
std::string changeLine40;
std::string changeLine45;
,
],
-"unit": "ms")";
+"unit": "us")";
changeLine45 = "}\n";
break;
case armnn::Compute::CpuAcc: backend = "Neon";
,
],
-"unit": "ms")";
+"unit": "us")";
changeLine45 = "}\n";
break;
default:
,
],
-"unit": "ms",
+"unit": "us",
"layer_measurements": {
"raw": [
,
,
],
-"unit": "ms",
+"unit": "us",
"CopyMemGeneric_Execute": {
"raw": [
,
,
],
-"unit": "ms"
+"unit": "us"
},
")" + backend + R"(SoftmaxUintWorkload_Execute": {
"raw": [
,
],
-"unit": "ms")" + changeLine31 + R"(
+"unit": "us")" + changeLine31 + R"(
"raw": [
,
,
// start the timer - outer
testEvent.Start();
- // wait for 10 milliseconds
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
+ // wait for 10 microseconds
+ std::this_thread::sleep_for(std::chrono::microseconds(10));
// stop the timer - outer
testEvent.Stop();
// start the timer - outer
testEvent.Start();
- // wait for 10 milliseconds
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
+ // wait for 10 microseconds
+ std::this_thread::sleep_for(std::chrono::microseconds(10));
// stop the timer - outer
testEvent.Stop();