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