xref: /aosp_15_r20/external/armnn/src/backends/neon/NeonInterceptorScheduler.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #pragma once
6*89c4ff92SAndroid Build Coastguard Worker 
7*89c4ff92SAndroid Build Coastguard Worker #include "NeonTimer.hpp"
8*89c4ff92SAndroid Build Coastguard Worker #include "WallClockTimer.hpp"
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/runtime/IScheduler.h>
11*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/runtime/Scheduler.h>
12*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/core/CPP/ICPPKernel.h>
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker namespace armnn
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker class NeonInterceptorScheduler : public arm_compute::IScheduler
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker public:
20*89c4ff92SAndroid Build Coastguard Worker     NeonInterceptorScheduler(arm_compute::IScheduler &realScheduler);
21*89c4ff92SAndroid Build Coastguard Worker     ~NeonInterceptorScheduler() = default;
22*89c4ff92SAndroid Build Coastguard Worker 
23*89c4ff92SAndroid Build Coastguard Worker     void set_num_threads(unsigned int numThreads) override;
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker     unsigned int num_threads() const override;
26*89c4ff92SAndroid Build Coastguard Worker 
27*89c4ff92SAndroid Build Coastguard Worker     void schedule(arm_compute::ICPPKernel *kernel, const Hints &hints) override;
28*89c4ff92SAndroid Build Coastguard Worker 
29*89c4ff92SAndroid Build Coastguard Worker     void run_workloads(std::vector<Workload> &workloads) override;
30*89c4ff92SAndroid Build Coastguard Worker 
31*89c4ff92SAndroid Build Coastguard Worker     void run_tagged_workloads(std::vector<Workload> &workloads, const char *tag) override;
32*89c4ff92SAndroid Build Coastguard Worker 
SetKernels(NeonTimer::KernelMeasurements * kernels)33*89c4ff92SAndroid Build Coastguard Worker     void SetKernels(NeonTimer::KernelMeasurements* kernels) { m_Kernels = kernels; }
GetKernels()34*89c4ff92SAndroid Build Coastguard Worker     NeonTimer::KernelMeasurements* GetKernels() { return m_Kernels; }
35*89c4ff92SAndroid Build Coastguard Worker 
36*89c4ff92SAndroid Build Coastguard Worker     void schedule_op(arm_compute::ICPPKernel* kernel,
37*89c4ff92SAndroid Build Coastguard Worker                      const Hints& hints,
38*89c4ff92SAndroid Build Coastguard Worker                      const arm_compute::Window& window,
39*89c4ff92SAndroid Build Coastguard Worker                      arm_compute::ITensorPack& tensors ) override;
40*89c4ff92SAndroid Build Coastguard Worker private:
41*89c4ff92SAndroid Build Coastguard Worker     NeonTimer::KernelMeasurements* m_Kernels;
42*89c4ff92SAndroid Build Coastguard Worker     arm_compute::IScheduler& m_RealScheduler;
43*89c4ff92SAndroid Build Coastguard Worker };
44*89c4ff92SAndroid Build Coastguard Worker 
45*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn
46