diff options
Diffstat (limited to 'arm_compute/runtime')
-rw-r--r-- | arm_compute/runtime/CL/CLHelpers.h | 15 | ||||
-rw-r--r-- | arm_compute/runtime/CL/CLRuntimeContext.h | 4 | ||||
-rw-r--r-- | arm_compute/runtime/CL/CLScheduler.h | 26 | ||||
-rw-r--r-- | arm_compute/runtime/CL/CLTypes.h | 7 |
4 files changed, 39 insertions, 13 deletions
diff --git a/arm_compute/runtime/CL/CLHelpers.h b/arm_compute/runtime/CL/CLHelpers.h index 9b71561c39..fef2619071 100644 --- a/arm_compute/runtime/CL/CLHelpers.h +++ b/arm_compute/runtime/CL/CLHelpers.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 Arm Limited. + * Copyright (c) 2019-2021 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -25,6 +25,7 @@ #define ARM_COMPUTE_CL_HELPERS_H #include "arm_compute/core/CL/OpenCL.h" +#include "arm_compute/runtime/CL/CLTypes.h" #include "arm_compute/runtime/IScheduler.h" namespace arm_compute @@ -37,11 +38,13 @@ class ICLKernel; * * @note In debug builds, the function will automatically enable cl_arm_printf if the driver/device supports it. * + * @param[in] cl_backend_type The OpenCL backend type to use. + * * @return A std::tuple where the first element is the opencl context, the second element is the opencl device * and the third one an error code. The error code will be CL_SUCCESS upon successful creation, otherwise * a value telling why the function failed. */ -std::tuple<cl::Context, cl::Device, cl_int> create_opencl_context_and_device(); +std::tuple<cl::Context, cl::Device, cl_int> create_opencl_context_and_device(CLBackendType cl_backend_type); /** Schedules a kernel using the context if not nullptr else uses the legacy scheduling flow. * * @param[in] ctx Context to use. @@ -49,5 +52,13 @@ std::tuple<cl::Context, cl::Device, cl_int> create_opencl_context_and_device(); * @param[in] flush (Optional) Specifies if the command queue will be flushed after running the kernel. */ void schedule_kernel_on_ctx(CLRuntimeContext *ctx, ICLKernel *kernel, bool flush = true); + +/** This function selects the OpenCL platform based on the backend type. + * + * @param[in] cl_backend_type The OpenCL backend type to use. + * + * @return A cl::Platform object. + */ +cl::Platform select_preferable_platform(CLBackendType cl_backend_type); } // namespace arm_compute #endif /* ARM_COMPUTE_CL_HELPERS_H */ diff --git a/arm_compute/runtime/CL/CLRuntimeContext.h b/arm_compute/runtime/CL/CLRuntimeContext.h index 083ac0ab88..4ab8f70887 100644 --- a/arm_compute/runtime/CL/CLRuntimeContext.h +++ b/arm_compute/runtime/CL/CLRuntimeContext.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020 Arm Limited. + * Copyright (c) 2019-2021 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -29,6 +29,7 @@ #include "arm_compute/core/CL/OpenCL.h" #include "arm_compute/runtime/CL/CLScheduler.h" #include "arm_compute/runtime/CL/CLTuner.h" +#include "arm_compute/runtime/CL/CLTypes.h" #include "arm_compute/runtime/IScheduler.h" #include "arm_compute/runtime/RuntimeContext.h" @@ -60,6 +61,7 @@ private: CLTuner _tuner{ false }; CLSymbols _symbols{}; CLCoreRuntimeContext _core_context{}; + CLBackendType _backend_type{ CLBackendType::Native }; }; } // namespace arm_compute #endif /*ARM_COMPUTE_CLRUNTIME_CONTEXT_H */ diff --git a/arm_compute/runtime/CL/CLScheduler.h b/arm_compute/runtime/CL/CLScheduler.h index 41a074089e..56852aec6e 100644 --- a/arm_compute/runtime/CL/CLScheduler.h +++ b/arm_compute/runtime/CL/CLScheduler.h @@ -31,6 +31,8 @@ #include "arm_compute/core/Types.h" #include "arm_compute/core/experimental/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,11 @@ 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 @@ -86,14 +89,16 @@ public: /** 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) + * @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); + 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. * @@ -171,6 +176,7 @@ private: bool _is_initialised; ICLTuner *_cl_tuner; CLGEMMHeuristicsHandle *_gemm_heuristics; + CLBackendType _backend_type; }; } // namespace arm_compute #endif /* ARM_COMPUTE_CLSCHEDULER_H */ diff --git a/arm_compute/runtime/CL/CLTypes.h b/arm_compute/runtime/CL/CLTypes.h index ab973f973c..cf0486c8c3 100644 --- a/arm_compute/runtime/CL/CLTypes.h +++ b/arm_compute/runtime/CL/CLTypes.h @@ -58,5 +58,12 @@ struct CLGEMMKernelSelectionParams bool is_rhs_constant{ false }; /**< True if the content of the rhs matrix is constant */ DataType data_type{ DataType::UNKNOWN }; /**< Data type */ }; + +/** List the possible OpenCL backends */ +enum class CLBackendType +{ + Native, /**< OpenCL native backend */ + Clvk, /**< CLVK backend */ +}; } // namespace arm_compute #endif /* ARM_COMPUTE_RUNTIME_CLTYPES_H */ |