blob: aeccca26e2cdc95ebc3d92be0fe87ebb9974e507 [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa01c577f2c2018-08-31 09:22:23 +01004//
5#pragma once
6
7#include "NeonTimer.hpp"
8#include "WallClockTimer.hpp"
9
10#include <arm_compute/runtime/IScheduler.h>
11#include <arm_compute/runtime/Scheduler.h>
12#include <arm_compute/core/CPP/ICPPKernel.h>
13
14namespace armnn
15{
16
17class NeonInterceptorScheduler : public arm_compute::IScheduler
18{
19public:
Derek Lambertie4ba53a2018-10-01 09:28:57 +010020 NeonInterceptorScheduler(arm_compute::IScheduler &realScheduler);
telsoa01c577f2c2018-08-31 09:22:23 +010021 ~NeonInterceptorScheduler() = default;
22
23 void set_num_threads(unsigned int numThreads) override;
24
25 unsigned int num_threads() const override;
26
27 void schedule(arm_compute::ICPPKernel *kernel, const Hints &hints) override;
28
29 void run_workloads(std::vector<Workload> &workloads) override;
30
saoste0119bd47d2019-01-24 12:31:58 +000031 void run_tagged_workloads(std::vector<Workload> &workloads, const char *tag) override;
32
Derek Lambertie4ba53a2018-10-01 09:28:57 +010033 void SetKernels(NeonTimer::KernelMeasurements* kernels) { m_Kernels = kernels; }
34 NeonTimer::KernelMeasurements* GetKernels() { return m_Kernels; }
David Monahan9b14bfc2020-06-30 15:57:56 +010035
Nikhil Raje5617952021-01-22 10:02:38 +000036 void schedule_op(arm_compute::ICPPKernel* kernel,
37 const Hints& hints,
38 const arm_compute::Window& window,
39 arm_compute::ITensorPack& tensors ) override;
telsoa01c577f2c2018-08-31 09:22:23 +010040private:
Derek Lambertie4ba53a2018-10-01 09:28:57 +010041 NeonTimer::KernelMeasurements* m_Kernels;
telsoa01c577f2c2018-08-31 09:22:23 +010042 arm_compute::IScheduler& m_RealScheduler;
telsoa01c577f2c2018-08-31 09:22:23 +010043};
44
45} // namespace armnn