aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/CL/CLHelpers.cpp
diff options
context:
space:
mode:
authorMichalis Spyrou <michalis.spyrou@arm.com>2021-04-20 11:26:21 +0100
committerGeorgios Pinitas <georgios.pinitas@arm.com>2021-04-21 20:48:28 +0000
commit402740da11c4fd2a9dc7aee5dadf3b1fdda0afde (patch)
tree61501d2f0af7115b87d26907d6ca9a3d00f4ef5e /src/runtime/CL/CLHelpers.cpp
parentbff2f9f2f92bf7a8d2f7532df0329dedfbe84693 (diff)
downloadComputeLibrary-402740da11c4fd2a9dc7aee5dadf3b1fdda0afde.tar.gz
Add support for CLVK
This patch enables CLVK through the graph API and inside the CLScheduler. By default the Native platform is selected. Selecting CLVK can be done via --target=clvk. Resolves COMPMID-4205 and COMPMID-4206 Change-Id: Ic60744980c6b8a60e776627ea677ed46be88f656 Signed-off-by: Michalis Spyrou <michalis.spyrou@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5475 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'src/runtime/CL/CLHelpers.cpp')
-rw-r--r--src/runtime/CL/CLHelpers.cpp44
1 files changed, 39 insertions, 5 deletions
diff --git a/src/runtime/CL/CLHelpers.cpp b/src/runtime/CL/CLHelpers.cpp
index 5f1842f76d..5b4bbbcde0 100644
--- a/src/runtime/CL/CLHelpers.cpp
+++ b/src/runtime/CL/CLHelpers.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019-2020 Arm Limited.
+ * Copyright (c) 2019-2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -85,14 +85,48 @@ void initialise_context_properties(const cl::Platform &platform, const cl::Devic
namespace arm_compute
{
-std::tuple<cl::Context, cl::Device, cl_int>
-create_opencl_context_and_device()
+cl::Platform select_preferable_platform(CLBackendType cl_backend_type)
{
- ARM_COMPUTE_ERROR_ON(!opencl_is_available());
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
ARM_COMPUTE_ERROR_ON_MSG(platforms.size() == 0, "Couldn't find any OpenCL platform");
- cl::Platform p = platforms[0];
+
+ cl::Platform selected_platform{ nullptr };
+
+ // If the user has selected the Native platform, return the first available.
+ switch(cl_backend_type)
+ {
+ case CLBackendType::Native:
+ selected_platform = platforms[0];
+ break;
+ case CLBackendType::Clvk:
+ for(auto p : platforms)
+ {
+ std::string res = p.getInfo<CL_PLATFORM_NAME>();
+ if(res.find("clvk") != std::string::npos)
+ {
+ selected_platform = p;
+ break;
+ }
+ }
+ break;
+ default:
+ ARM_COMPUTE_ERROR("Unsupported backend type");
+ }
+
+ if(!selected_platform())
+ {
+ ARM_COMPUTE_ERROR("No valid platform found");
+ }
+
+ return selected_platform;
+}
+
+std::tuple<cl::Context, cl::Device, cl_int>
+create_opencl_context_and_device(CLBackendType cl_backend_type)
+{
+ ARM_COMPUTE_ERROR_ON(!opencl_is_available());
+ cl::Platform p = select_preferable_platform(cl_backend_type);
cl::Device device;
std::vector<cl::Device> platform_devices;
p.getDevices(CL_DEVICE_TYPE_DEFAULT, &platform_devices);