diff options
Diffstat (limited to 'arm_compute/runtime/IScheduler.h')
-rw-r--r-- | arm_compute/runtime/IScheduler.h | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/arm_compute/runtime/IScheduler.h b/arm_compute/runtime/IScheduler.h index 309aee3bb5..ae204c8560 100644 --- a/arm_compute/runtime/IScheduler.h +++ b/arm_compute/runtime/IScheduler.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 Arm Limited. + * Copyright (c) 2017-2021, 2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -25,8 +25,8 @@ #define ARM_COMPUTE_ISCHEDULER_H #include "arm_compute/core/CPP/CPPTypes.h" -#include "arm_compute/core/Types.h" #include "arm_compute/core/experimental/Types.h" +#include "arm_compute/core/Types.h" #include <functional> #include <limits> @@ -35,6 +35,7 @@ namespace arm_compute { class ICPPKernel; class ITensor; +class Window; /** Scheduler interface to run kernels */ class IScheduler @@ -126,9 +127,9 @@ public: } private: - unsigned int _split_dimension; - StrategyHint _strategy; - int _threshold; + unsigned int _split_dimension{}; + StrategyHint _strategy{}; + int _threshold{}; }; /** Signature for the workloads to execute */ using Workload = std::function<void(const ThreadInfo &)>; @@ -151,7 +152,7 @@ public: */ virtual void set_num_threads_with_affinity(unsigned int num_threads, BindFunc func); - /** Returns the number of threads that the SingleThreadScheduler has in his pool. + /** Returns the number of threads that the SingleThreadScheduler has in its pool. * * @return Number of threads available in SingleThreadScheduler. */ @@ -168,15 +169,16 @@ public: * * @param[in] kernel Kernel to execute. * @param[in] hints Hints for the scheduler. + * @param[in] window Window to use for kernel execution. * @param[in] tensors Vector containing the tensors to operate on. */ - virtual void schedule_op(ICPPKernel *kernel, const Hints &hints, ITensorPack &tensors) = 0; + virtual void schedule_op(ICPPKernel *kernel, const Hints &hints, const Window &window, ITensorPack &tensors) = 0; /** Execute all the passed workloads * - * @note there is no guarantee regarding the order in which the workloads will be executed or whether or not they will be executed in parallel. + * @note There is no guarantee regarding the order in which the workloads will be executed or whether or not they will be executed in parallel. * - * @param[in] workloads Array of workloads to run + * @param[in] workloads List of workloads to run * @param[in] tag String that can be used by profiling tools to identify the workloads run by the scheduler (Can be null). */ virtual void run_tagged_workloads(std::vector<Workload> &workloads, const char *tag); @@ -203,9 +205,32 @@ protected: * @param[in] workloads Array of workloads to run */ virtual void run_workloads(std::vector<Workload> &workloads) = 0; - CPUInfo _cpu_info; - void schedule_common(ICPPKernel *kernel, const Hints &hints, ITensorPack &tensors); + /** Common scheduler logic to execute the given kernel + * + * @param[in] kernel Kernel to execute. + * @param[in] hints Hints for the scheduler. + * @param[in] window Window to use for kernel execution. + * @param[in] tensors Vector containing the tensors to operate on. + */ + void schedule_common(ICPPKernel *kernel, const Hints &hints, const Window &window, ITensorPack &tensors); + + /** Adjust the number of windows to the optimize performance + * (used for small workloads where smaller number of threads might improve the performance) + * + * @param[in] window Window to use for kernel execution + * @param[in] split_dimension Axis of dimension to split + * @param[in] init_num_windows Initial number of sub-windows to split + * @param[in] kernel Kernel to execute + * @param[in] cpu_info The CPU platform used to create the context. + * + * @return Adjusted number of windows + */ + std::size_t adjust_num_of_windows(const Window &window, + std::size_t split_dimension, + std::size_t init_num_windows, + const ICPPKernel &kernel, + const CPUInfo &cpu_info); private: unsigned int _num_threads_hint = {}; |