aboutsummaryrefslogtreecommitdiff
path: root/tests/framework/instruments/SchedulerTimer.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2018-05-01 15:26:20 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:51:17 +0000
commit5c2fb3f34462632b99331e2cc2d964c99fc1782b (patch)
tree16ee3edc412fcf7e3d20241ca8fb093d9774863d /tests/framework/instruments/SchedulerTimer.cpp
parentcac13b1cfd593889271f8e2191be2039b8d88f36 (diff)
downloadComputeLibrary-5c2fb3f34462632b99331e2cc2d964c99fc1782b.tar.gz
COMPMID-997: Add support for node's name in GraphAPI.
Change-Id: I0ca02e42807c1ad9afeffb7202a3556feb11442f Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/129701 Tested-by: Jenkins <bsgcomp@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'tests/framework/instruments/SchedulerTimer.cpp')
-rw-r--r--tests/framework/instruments/SchedulerTimer.cpp62
1 files changed, 53 insertions, 9 deletions
diff --git a/tests/framework/instruments/SchedulerTimer.cpp b/tests/framework/instruments/SchedulerTimer.cpp
index e42cebde21..1b37b189dd 100644
--- a/tests/framework/instruments/SchedulerTimer.cpp
+++ b/tests/framework/instruments/SchedulerTimer.cpp
@@ -25,6 +25,8 @@
#include "WallClockTimer.h"
#include "arm_compute/core/CPP/ICPPKernel.h"
+#include "arm_compute/core/utils/misc/Cast.h"
+#include "arm_compute/graph/INode.h"
namespace arm_compute
{
@@ -42,7 +44,7 @@ class Interceptor final : public IScheduler
public:
/** Default constructor. */
Interceptor(std::list<SchedulerTimer::kernel_info> &kernels, IScheduler &real_scheduler, ScaleFactor scale_factor)
- : _kernels(kernels), _real_scheduler(real_scheduler), _timer(scale_factor)
+ : _kernels(kernels), _real_scheduler(real_scheduler), _timer(scale_factor), _prefix()
{
}
@@ -56,6 +58,11 @@ public:
return _real_scheduler.num_threads();
}
+ void set_prefix(std::string prefix)
+ {
+ _prefix = std::move(prefix);
+ }
+
void schedule(ICPPKernel *kernel, unsigned int split_dimension) override
{
_timer.start();
@@ -64,6 +71,7 @@ public:
SchedulerTimer::kernel_info info;
info.name = kernel->name();
+ info.prefix = _prefix;
info.measurements = _timer.measurements();
_kernels.push_back(std::move(info));
}
@@ -72,32 +80,68 @@ private:
std::list<SchedulerTimer::kernel_info> &_kernels;
IScheduler &_real_scheduler;
WallClockTimer _timer;
+ std::string _prefix;
};
SchedulerTimer::SchedulerTimer(ScaleFactor scale_factor)
- : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _scale_factor(scale_factor)
+ : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr)
{
}
-void SchedulerTimer::start()
+void SchedulerTimer::test_start()
{
+ // Start intercepting tasks:
+ ARM_COMPUTE_ERROR_ON(_real_graph_function != nullptr);
+ _real_graph_function = graph::TaskExecutor::get().execute_function;
+ auto task_interceptor = [this](graph::ExecutionTask & task)
+ {
+ Interceptor *scheduler = nullptr;
+ if(dynamic_cast<Interceptor *>(this->_interceptor.get()) != nullptr)
+ {
+ scheduler = arm_compute::utils::cast::polymorphic_downcast<Interceptor *>(_interceptor.get());
+ if(task.node != nullptr && !task.node->name().empty())
+ {
+ scheduler->set_prefix(task.node->name() + "/");
+ }
+ else
+ {
+ scheduler->set_prefix("");
+ }
+ }
+
+ this->_real_graph_function(task);
+
+ if(scheduler != nullptr)
+ {
+ scheduler->set_prefix("");
+ }
+ };
+
ARM_COMPUTE_ERROR_ON(_real_scheduler != nullptr);
_real_scheduler_type = Scheduler::get_type();
//Note: We can't currently replace a custom scheduler
if(_real_scheduler_type != Scheduler::Type::CUSTOM)
{
- _real_scheduler = &Scheduler::get();
- auto interceptor = std::make_shared<Interceptor>(_kernels, *_real_scheduler, _scale_factor);
- Scheduler::set(std::static_pointer_cast<IScheduler>(interceptor));
+ _real_scheduler = &Scheduler::get();
+ _interceptor = std::make_shared<Interceptor>(_kernels, *_real_scheduler, _scale_factor);
+ Scheduler::set(std::static_pointer_cast<IScheduler>(_interceptor));
+ graph::TaskExecutor::get().execute_function = task_interceptor;
}
+}
+
+void SchedulerTimer::start()
+{
_kernels.clear();
}
-void SchedulerTimer::stop()
+void SchedulerTimer::test_stop()
{
// Restore real scheduler
Scheduler::set(_real_scheduler_type);
- _real_scheduler = nullptr;
+ _real_scheduler = nullptr;
+ _interceptor = nullptr;
+ graph::TaskExecutor::get().execute_function = _real_graph_function;
+ _real_graph_function = nullptr;
}
Instrument::MeasurementsMap SchedulerTimer::measurements() const
@@ -106,7 +150,7 @@ Instrument::MeasurementsMap SchedulerTimer::measurements() const
unsigned int kernel_number = 0;
for(auto kernel : _kernels)
{
- measurements.emplace(kernel.name + " #" + support::cpp11::to_string(kernel_number++), kernel.measurements.begin()->second);
+ measurements.emplace(kernel.prefix + kernel.name + " #" + support::cpp11::to_string(kernel_number++), kernel.measurements.begin()->second);
}
return measurements;