diff options
author | Viet-Hoa Do <viet-hoa.do@arm.com> | 2022-05-30 15:15:15 +0100 |
---|---|---|
committer | Viet-Hoa Do <viet-hoa.do@arm.com> | 2022-06-15 15:36:21 +0000 |
commit | f8bb0928ed5e2acce2f6e0c2fd8caf8884141c79 (patch) | |
tree | 61c3351ad0a0873220122987ceb99d6660964b54 /src/core/CL/CLHelpers.cpp | |
parent | 0c687044c3f5d7f294858debfc7c4c070228a9b4 (diff) | |
download | ComputeLibrary-f8bb0928ed5e2acce2f6e0c2fd8caf8884141c79.tar.gz |
Add support OpenCL 3.0 non-uniform workgroup
* Add OpenCL version 3 detection.
* Use -cl-std=CL3.0 build option to support non-uniform workgroup
when OpenCL 3 is detected and the feature is supported.
Resolves: COMPMID-5208
Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Change-Id: Ifd8cbae6b34228c07e761bcb94ee8f35bdf1bace
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/7655
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Pablo Marquez Tello <pablo.tello@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core/CL/CLHelpers.cpp')
-rw-r--r-- | src/core/CL/CLHelpers.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/core/CL/CLHelpers.cpp b/src/core/CL/CLHelpers.cpp index 8685180b7f..5172a7730a 100644 --- a/src/core/CL/CLHelpers.cpp +++ b/src/core/CL/CLHelpers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021 Arm Limited. + * Copyright (c) 2016-2022 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -256,7 +256,11 @@ bool dot8_acc_supported(const cl::Device &device) CLVersion get_cl_version(const cl::Device &device) { std::string version_str = device.getInfo<CL_DEVICE_VERSION>(); - if(version_str.find("OpenCL 2") != std::string::npos) + if(version_str.find("OpenCL 3") != std::string::npos) + { + return CLVersion::CL30; + } + else if(version_str.find("OpenCL 2") != std::string::npos) { return CLVersion::CL20; } @@ -388,6 +392,15 @@ size_t get_cl_image_pitch_alignment(const cl::Device &device) } } +bool get_cl_non_uniform_work_group_supported(const cl::Device &device) +{ + cl_bool supported = CL_FALSE; + + cl_int err = clGetDeviceInfo(device(), CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT, sizeof(cl_bool), &supported, nullptr); + + return (err == CL_SUCCESS && supported == CL_TRUE); +} + cl::Kernel create_kernel(const CLCompileContext &ctx, const std::string &kernel_name, const std::set<std::string> &build_opts) { opencl::ClKernelLibrary &klib = opencl::ClKernelLibrary::get(); |