diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-07-25 13:31:10 +0100 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-09-09 11:22:01 +0000 |
commit | 12833d063259cb7809a97a4262f821efdc40554f (patch) | |
tree | 455333091c9eeba97079a385e0186f56076f5169 /tests/framework/instruments/SchedulerTimer.cpp | |
parent | ed0e35bfe15bad01387504afc15b8553e585bdb9 (diff) | |
download | ComputeLibrary-12833d063259cb7809a97a4262f821efdc40554f.tar.gz |
COMPMID-2204: RuntimeContext interface for NEON functions.
This patch creates the interfaces for the runtime context for NEON.
Only the Neon backend implements the context which currently only holds
an instance of the scheduler.
The NEActivationLayer function has been updated to use the new context
interface and the corresponding validation tests ported.
Change-Id: I32e7e6aa888796dcbbfc5039b1e7f784a24f47da
Signed-off-by: Pablo Tello <pablo.tello@arm.com>
Reviewed-on: https://review.mlplatform.org/c/1851
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Diffstat (limited to 'tests/framework/instruments/SchedulerTimer.cpp')
-rw-r--r-- | tests/framework/instruments/SchedulerTimer.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/tests/framework/instruments/SchedulerTimer.cpp b/tests/framework/instruments/SchedulerTimer.cpp index c114dfbd9d..98c9b878d9 100644 --- a/tests/framework/instruments/SchedulerTimer.cpp +++ b/tests/framework/instruments/SchedulerTimer.cpp @@ -23,6 +23,7 @@ */ #include "SchedulerTimer.h" +#include "Instruments.h" #include "WallClockTimer.h" #include "arm_compute/core/CPP/ICPPKernel.h" #include "arm_compute/core/utils/misc/Cast.h" @@ -114,8 +115,12 @@ private: template <bool output_timestamps> SchedulerClock<output_timestamps>::SchedulerClock(ScaleFactor scale_factor) - : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr) + : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr), _scheduler_users() { + if(instruments_info != nullptr) + { + _scheduler_users = instruments_info->_scheduler_users; + } } template <bool output_timestamps> @@ -157,6 +162,17 @@ void SchedulerClock<output_timestamps>::test_start() _interceptor = std::make_shared<Interceptor<output_timestamps>>(_kernels, *_real_scheduler, _scale_factor); Scheduler::set(std::static_pointer_cast<IScheduler>(_interceptor)); graph::TaskExecutor::get().execute_function = task_interceptor; + + // Create an interceptor for each scheduler + // TODO(COMPID-2638) : Allow multiple schedulers, now it assumes the same scheduler is used. + std::for_each(std::begin(_scheduler_users), std::end(_scheduler_users), + [&](ISchedulerUser * user) + { + if(user != nullptr && user->scheduler() != nullptr) + { + user->intercept_scheduler(support::cpp14::make_unique<Interceptor<output_timestamps>>(_kernels, *user->scheduler(), _scale_factor)); + } + }); } } @@ -175,6 +191,16 @@ void SchedulerClock<output_timestamps>::test_stop() _interceptor = nullptr; graph::TaskExecutor::get().execute_function = _real_graph_function; _real_graph_function = nullptr; + + // Restore schedulers + std::for_each(std::begin(_scheduler_users), std::end(_scheduler_users), + [&](ISchedulerUser * user) + { + if(user != nullptr) + { + user->restore_scheduler(); + } + }); } template <bool output_timestamps> |