From 5c2fb3f34462632b99331e2cc2d964c99fc1782b Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Tue, 1 May 2018 15:26:20 +0100 Subject: 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 Reviewed-by: Anthony Barbier Reviewed-by: Georgios Pinitas --- tests/framework/instruments/SchedulerTimer.cpp | 62 ++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 9 deletions(-) (limited to 'tests/framework/instruments/SchedulerTimer.cpp') 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 &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 &_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(this->_interceptor.get()) != nullptr) + { + scheduler = arm_compute::utils::cast::polymorphic_downcast(_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(_kernels, *_real_scheduler, _scale_factor); - Scheduler::set(std::static_pointer_cast(interceptor)); + _real_scheduler = &Scheduler::get(); + _interceptor = std::make_shared(_kernels, *_real_scheduler, _scale_factor); + Scheduler::set(std::static_pointer_cast(_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; -- cgit v1.2.1