aboutsummaryrefslogtreecommitdiff
path: root/src/core
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
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')
-rw-r--r--src/core/CL/CLKernelLibrary.cpp9
-rw-r--r--src/core/CL/OpenCL.cpp58
2 files changed, 62 insertions, 5 deletions
diff --git a/src/core/CL/CLKernelLibrary.cpp b/src/core/CL/CLKernelLibrary.cpp
index 45149c29b8..d815ac1afc 100644
--- a/src/core/CL/CLKernelLibrary.cpp
+++ b/src/core/CL/CLKernelLibrary.cpp
@@ -713,7 +713,6 @@ Kernel CLKernelLibrary::create_kernel(const std::string &kernel_name, const Stri
{
ARM_COMPUTE_ERROR("Kernel %s not found in the CLKernelLibrary", kernel_name.c_str());
}
-
std::string concat_str;
if(fp16_support(_device))
@@ -721,13 +720,13 @@ Kernel CLKernelLibrary::create_kernel(const std::string &kernel_name, const Stri
concat_str += " -DARM_COMPUTE_OPENCL_FP16_ENABLED=1 ";
}
- if(non_uniform_workgroup_support(_device))
+ if(get_cl_version(_device) == CLVersion::CL20)
{
- concat_str += " -cl-arm-non-uniform-work-group-size ";
+ concat_str += " -cl-std=CL2.0 ";
}
- else if(get_cl_version(_device) == CLVersion::CL20)
+ else if(non_uniform_workgroup_support(_device))
{
- concat_str += " -cl-std=CL2.0 ";
+ concat_str += " -cl-arm-non-uniform-work-group-size ";
}
else
{
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,