aboutsummaryrefslogtreecommitdiff
path: root/src/core/CL/OpenCL.cpp
diff options
context:
space:
mode:
authorViet-Hoa Do <viet-hoa.do@arm.com>2023-09-12 17:49:38 +0100
committerViet-Hoa Do <viet-hoa.do@arm.com>2023-09-18 17:12:18 +0000
commit500e10b3222e726cfc5d484f924d5eb98016a754 (patch)
tree680a92198b5b85bf833e5654798986f3fdffaa2e /src/core/CL/OpenCL.cpp
parent532ce2c84dd24cb0c5064a3d2e5c7b4094df0e01 (diff)
downloadComputeLibrary-500e10b3222e726cfc5d484f924d5eb98016a754.tar.gz
Add CL command buffer class
* Two implementations of the command buffer are added: - CLMutableCommandBuffer uses mutable dispatch command buffer extension. - CLCompatCommandBuffer is the compatibility class for platform without the CL extension. Resolves: COMPMID-6454 Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com> Change-Id: I15b370a50168ca940bd8fb2b5fae26230da3f472 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10298 Reviewed-by: Gunes Bayir <gunes.bayir@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Benchmark: Arm Jenkins <bsgcomp@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core/CL/OpenCL.cpp')
-rw-r--r--src/core/CL/OpenCL.cpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp
index 8aa9b2bc1e..b092dfb4e2 100644
--- a/src/core/CL/OpenCL.cpp
+++ b/src/core/CL/OpenCL.cpp
@@ -187,6 +187,16 @@ bool CLSymbols::load(const std::vector<std::string> &libraries_filenames, bool u
LOAD_FUNCTION_PTR(clCreateImage, handle);
LOAD_FUNCTION_PTR(clSetKernelExecInfo, handle);
+ // Command buffer and mutable dispatch command buffer extensions
+ LOAD_FUNCTION_PTR(clCreateCommandBufferKHR, handle);
+ LOAD_FUNCTION_PTR(clRetainCommandBufferKHR, handle);
+ LOAD_FUNCTION_PTR(clReleaseCommandBufferKHR, handle);
+ LOAD_FUNCTION_PTR(clFinalizeCommandBufferKHR, handle);
+ LOAD_FUNCTION_PTR(clEnqueueCommandBufferKHR, handle);
+ LOAD_FUNCTION_PTR(clCommandNDRangeKernelKHR, handle);
+
+ LOAD_FUNCTION_PTR(clUpdateMutableCommandsKHR, handle);
+
// Third-party extensions
LOAD_FUNCTION_PTR(clImportMemoryARM, handle);
@@ -1083,6 +1093,141 @@ cl_int clSetKernelExecInfo(cl_kernel kernel,
}
}
+cl_command_buffer_khr clCreateCommandBufferKHR(
+ cl_uint num_queues,
+ const cl_command_queue* queues,
+ const cl_command_buffer_properties_khr* properties,
+ cl_int* errcode_ret)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clCreateCommandBufferKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(num_queues, queues, properties, errcode_ret);
+ }
+ else
+ {
+ if(errcode_ret != nullptr)
+ {
+ *errcode_ret = CL_INVALID_OPERATION;
+ }
+
+ return {};
+ }
+}
+
+cl_int clFinalizeCommandBufferKHR(cl_command_buffer_khr command_buffer)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clFinalizeCommandBufferKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(command_buffer);
+ }
+ else
+ {
+ return CL_INVALID_OPERATION;
+ }
+}
+
+cl_int clRetainCommandBufferKHR(cl_command_buffer_khr command_buffer)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clRetainCommandBufferKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(command_buffer);
+ }
+ else
+ {
+ return CL_INVALID_OPERATION;
+ }
+}
+
+cl_int clReleaseCommandBufferKHR(cl_command_buffer_khr command_buffer)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clReleaseCommandBufferKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(command_buffer);
+ }
+ else
+ {
+ return CL_INVALID_OPERATION;
+ }
+}
+
+cl_int clEnqueueCommandBufferKHR(
+ cl_uint num_queues,
+ cl_command_queue* queues,
+ cl_command_buffer_khr command_buffer,
+ cl_uint num_events_in_wait_list,
+ const cl_event* event_wait_list,
+ cl_event* event)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clEnqueueCommandBufferKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(num_queues, queues, command_buffer, num_events_in_wait_list, event_wait_list, event);
+ }
+ else
+ {
+ return CL_INVALID_OPERATION;
+ }
+}
+
+
+cl_int clCommandNDRangeKernelKHR(
+ cl_command_buffer_khr command_buffer,
+ cl_command_queue command_queue,
+ const cl_ndrange_kernel_command_properties_khr* properties,
+ cl_kernel kernel,
+ cl_uint work_dim,
+ const size_t* global_work_offset,
+ const size_t* global_work_size,
+ const size_t* local_work_size,
+ cl_uint num_sync_points_in_wait_list,
+ const cl_sync_point_khr* sync_point_wait_list,
+ cl_sync_point_khr* sync_point,
+ cl_mutable_command_khr* mutable_handle)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clCommandNDRangeKernelKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(command_buffer, command_queue, properties, kernel, work_dim, global_work_offset, global_work_size, local_work_size, num_sync_points_in_wait_list, sync_point_wait_list, sync_point, mutable_handle);
+ }
+ else
+ {
+ return CL_INVALID_OPERATION;
+ }
+}
+
+cl_int clUpdateMutableCommandsKHR(
+ cl_command_buffer_khr command_buffer,
+ const cl_mutable_base_config_khr* mutable_config)
+{
+ arm_compute::CLSymbols::get().load_default();
+ const auto func = arm_compute::CLSymbols::get().clUpdateMutableCommandsKHR_ptr;
+
+ if(func != nullptr)
+ {
+ return func(command_buffer, mutable_config);
+ }
+ else
+ {
+ return CL_INVALID_OPERATION;
+ }
+}
+
cl_mem
clImportMemoryARM(cl_context context,
cl_mem_flags flags,