aboutsummaryrefslogtreecommitdiff
path: root/src/core/CL/OpenCL.cpp
diff options
context:
space:
mode:
authorPablo Tello <pablo.tello@arm.com>2018-01-11 15:44:48 +0000
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:49:16 +0000
commite86a09fe4c5aa9037787e13ee55cba2b049d5ea5 (patch)
tree4863d78ad9282666a43a18e8ba727d1630e1b7d1 /src/core/CL/OpenCL.cpp
parent00854295ac18e1a79d99e6f1692432503cc71448 (diff)
downloadComputeLibrary-e86a09fe4c5aa9037787e13ee55cba2b049d5ea5.tar.gz
COMPMID-337: Adding OpenCL SVM support.
Change-Id: I250d6a1daeccf91d97b6da65aec53b02cf6046a7 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/116140 Tested-by: Jenkins <bsgcomp@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'src/core/CL/OpenCL.cpp')
-rw-r--r--src/core/CL/OpenCL.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp
index f75a90a324..0ef800f265 100644
--- a/src/core/CL/OpenCL.cpp
+++ b/src/core/CL/OpenCL.cpp
@@ -111,6 +111,10 @@ bool CLSymbols::load(const std::string &library)
LOAD_FUNCTION_PTR(clGetCommandQueueInfo, handle);
LOAD_FUNCTION_PTR(clGetKernelInfo, handle);
LOAD_FUNCTION_PTR(clGetEventProfilingInfo, handle);
+ LOAD_FUNCTION_PTR(clSVMAlloc, handle);
+ LOAD_FUNCTION_PTR(clSVMFree, handle);
+ LOAD_FUNCTION_PTR(clEnqueueSVMMap, handle);
+ LOAD_FUNCTION_PTR(clEnqueueSVMUnmap, handle);
#undef LOAD_FUNCTION_PTR
@@ -129,6 +133,60 @@ bool opencl_is_available()
}
} // namespace arm_compute
+cl_int clEnqueueSVMMap(cl_command_queue command_queue, cl_bool blocking_map, cl_map_flags flags, void *svm_ptr,
+ size_t size, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event)
+{
+ arm_compute::CLSymbols::get().load_default();
+ auto func = arm_compute::CLSymbols::get().clEnqueueSVMMap_ptr;
+ if(func != nullptr)
+ {
+ return func(command_queue, blocking_map, flags, svm_ptr, size, num_events_in_wait_list, event_wait_list, event);
+ }
+ else
+ {
+ return CL_OUT_OF_RESOURCES;
+ }
+}
+
+cl_int clEnqueueSVMUnmap(cl_command_queue command_queue, void *svm_ptr, cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list, cl_event *event)
+{
+ arm_compute::CLSymbols::get().load_default();
+ auto func = arm_compute::CLSymbols::get().clEnqueueSVMUnmap_ptr;
+ if(func != nullptr)
+ {
+ return func(command_queue, svm_ptr, num_events_in_wait_list, event_wait_list, event);
+ }
+ else
+ {
+ return CL_OUT_OF_RESOURCES;
+ }
+}
+
+void *clSVMAlloc(cl_context context, cl_svm_mem_flags_arm flags, size_t size, cl_uint alignment)
+{
+ arm_compute::CLSymbols::get().load_default();
+ auto func = arm_compute::CLSymbols::get().clSVMAlloc_ptr;
+ if(func != nullptr)
+ {
+ return func(context, flags, size, alignment);
+ }
+ else
+ {
+ return nullptr;
+ }
+}
+
+void clSVMFree(cl_context context, void *svm_pointer)
+{
+ arm_compute::CLSymbols::get().load_default();
+ auto func = arm_compute::CLSymbols::get().clSVMFree_ptr;
+ if(func != nullptr)
+ {
+ func(context, svm_pointer);
+ }
+}
+
cl_int clGetContextInfo(cl_context context,
cl_context_info param_name,
size_t param_value_size,