diff options
Diffstat (limited to 'arm_compute/runtime/CL/CLScheduler.h')
-rw-r--r-- | arm_compute/runtime/CL/CLScheduler.h | 87 |
1 files changed, 63 insertions, 24 deletions
diff --git a/arm_compute/runtime/CL/CLScheduler.h b/arm_compute/runtime/CL/CLScheduler.h index d3a91da751..b74fcb74ef 100644 --- a/arm_compute/runtime/CL/CLScheduler.h +++ b/arm_compute/runtime/CL/CLScheduler.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021 Arm Limited. + * Copyright (c) 2016-2022 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -28,9 +28,11 @@ #include "arm_compute/core/CL/CLTypes.h" #include "arm_compute/core/CL/OpenCL.h" #include "arm_compute/core/Error.h" -#include "arm_compute/core/Types.h" #include "arm_compute/core/experimental/Types.h" +#include "arm_compute/core/Types.h" #include "arm_compute/runtime/CL/CLGEMMHeuristicsHandle.h" +#include "arm_compute/runtime/CL/CLHelpers.h" +#include "arm_compute/runtime/CL/CLTypes.h" #include "arm_compute/runtime/CL/ICLTuner.h" namespace arm_compute @@ -57,10 +59,13 @@ public: /** Initialises the context and command queue used by the scheduler to default values * and sets a default device and kernel path for the @ref CLKernelLibrary. * - * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr) - * @param[in] gemm_h (Optional) Pointer to CLGEMMHeuristicsHandle (default = nullptr) + * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr) + * @param[in] gemm_h (Optional) Pointer to CLGEMMHeuristicsHandle (default = nullptr) + * @param[in] cl_backend_type (Optional) Type of backend to use (default = CLBackendType::Native) */ - void default_init(ICLTuner *cl_tuner = nullptr, CLGEMMHeuristicsHandle *gemm_h = nullptr); + void default_init(ICLTuner *cl_tuner = nullptr, + CLGEMMHeuristicsHandle *gemm_h = nullptr, + CLBackendType cl_backend_type = CLBackendType::Native); /** Initialises the scheduler with context and device provided by the user * * @param[in] device OpenCL device to be used @@ -68,32 +73,51 @@ public: * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr) * @param[in] gemm_h (Optional) Pointer to CLGEMMHeuristicsHandle (default = nullptr) */ - void default_init_with_context(cl::Device &device, cl::Context &ctx, ICLTuner *cl_tuner = nullptr, CLGEMMHeuristicsHandle *gemm_h = nullptr); + void default_init_with_context(cl::Device &device, + cl::Context &ctx, + ICLTuner *cl_tuner = nullptr, + CLGEMMHeuristicsHandle *gemm_h = nullptr); + + /** Re-initializes the context and command queue used by the scheduler to default values + * and sets a default device and kernel path for the @ref CLKernelLibrary. + * + * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr) + * @param[in] gemm_h (Optional) Pointer to CLGEMMHeuristicsHandle (default = nullptr) + * @param[in] cl_backend_type (Optional) Type of backend to use (default = CLBackendType::Native) + */ + void default_reinit(ICLTuner *cl_tuner = nullptr, + CLGEMMHeuristicsHandle *gemm_h = nullptr, + CLBackendType cl_backend_type = CLBackendType::Native); /** Schedule the execution of the passed kernel if possible. * * @param[in] kernel Kernel to execute. - * @param[in] flush (Optional) Specifies if the command queue will be flushed after running the kernel. + * @param[in] flush (Optional) Specifies if the command queue will be flushed after running the kernel. This will be ignored if job chaining is enabled. */ void enqueue(ICLKernel &kernel, bool flush = true); /** Schedule the execution of the passed kernel if possible. * * @param[in] kernel Kernel to execute. * @param[in] tensors Vector containing the tensors to operate on. - * @param[in] flush (Optional) Specifies if the command queue will be flushed after running the kernel. + * @param[in] flush (Optional) Specifies if the command queue will be flushed after running the kernel. This will be ignored if job chaining is enabled. */ void enqueue_op(ICLKernel &kernel, ITensorPack &tensors, bool flush = true); - /** Initialises the context and command queue to be used by the scheduler. * - * @param[in] context A CL context. - * @param[in] queue A CL command queue. - * @param[in] device A CL device. - * @param[in] cl_tuner (Optional) Pointer to OpenCL tuner (default=nullptr) - * Note: It is caller's responsibility to release the allocated memory for CLTuner - * @param[in] gemm_h (Optional) Pointer to CLGEMMHeuristicsHandle (default = nullptr) - */ - void init(cl::Context context, cl::CommandQueue queue, const cl::Device &device, ICLTuner *cl_tuner = nullptr, CLGEMMHeuristicsHandle *gemm_h = nullptr); + * @param[in] context A CL context. + * @param[in] queue A CL command queue. + * @param[in] device A CL device. + * @param[in] cl_tuner (Optional) Pointer to OpenCL tuner (default=nullptr) + * Note: It is caller's responsibility to release the allocated memory for CLTuner + * @param[in] gemm_h (Optional) Pointer to CLGEMMHeuristicsHandle (default = nullptr) + * @param[in] cl_backend_type (Optional) Type of backend to use (default = CLBackendType::Native) + */ + void init(cl::Context context, + cl::CommandQueue queue, + const cl::Device &device, + ICLTuner *cl_tuner = nullptr, + CLGEMMHeuristicsHandle *gemm_h = nullptr, + CLBackendType cl_backend_type = CLBackendType::Native); /** Accessor for the associated CL context. * @@ -158,20 +182,35 @@ public: */ void tune_kernel_static(ICLKernel &kernel); + /** Enable job chaining. The command queue will only be flushed when @p job_chaining_size kernels have been enqueued. + * + * @param[in] job_chaining_size Kernels to enqueue before flushing + */ + void enable_job_chaining(int job_chaining_size); + bool is_initialised() const; private: void enqueue_common(ICLKernel &kernel, ITensorPack &tensors, bool flush); + /** If job chain is disabled, then flush the command queue according to @p flush. Otherwise @p flush is ignored and the queue is only flushed when job chain count exceeds allocated job chain size + * + * @param[in] flush Flush the command queue. Ignored when job chain is enabled. + */ + void flush_queue(bool flush); + /** Flag to ensure symbols initialisation is happening before Scheduler creation */ static std::once_flag _initialize_symbols; - cl::Context _context; - cl::CommandQueue _queue; - GPUTarget _target; - bool _is_initialised; - ICLTuner *_cl_tuner; - std::unique_ptr<ICLTuner> _cl_default_static_tuner; - CLGEMMHeuristicsHandle *_gemm_heuristics; + cl::Context _context; + cl::CommandQueue _queue; + GPUTarget _target; + bool _is_initialised; + ICLTuner *_cl_tuner; + CLGEMMHeuristicsHandle *_gemm_heuristics; + CLBackendType _backend_type; + bool _job_chaining_enabled; + int _job_chaining_size; + int _job_chaining_count; }; } // namespace arm_compute #endif /* ARM_COMPUTE_CLSCHEDULER_H */ |