MCPcopy Create free account
hub / github.com/AdaptiveCpp/AdaptiveCpp / submit_ocl_kernel

Function submit_ocl_kernel

src/runtime/ocl/ocl_queue.cpp:42–106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40
41
42result submit_ocl_kernel(cl::Kernel& kernel,
43 cl::CommandQueue& queue,
44 const rt::range<3> &group_size,
45 const rt::range<3> &num_groups, void **kernel_args,
46 const std::size_t *arg_sizes, std::size_t num_args,
47 ocl_usm* usm,
48 const hcf_kernel_info *info,
49 cl::Event* evt_out = nullptr) {
50
51 cl_int err = 0;
52 for(std::size_t i = 0; i < num_args; ++i ){
53 HIPSYCL_DEBUG_INFO << "ocl_queue: Setting kernel argument " << i
54 << " of size " << arg_sizes[i] << " at " << kernel_args[i]
55 << std::endl;
56
57 err = kernel.setArg(i, static_cast<std::size_t>(arg_sizes[i]), kernel_args[i]);
58
59 if(err != CL_SUCCESS) {
60 return make_error(
61 __acpp_here(),
62 error_info{"ocl_queue: Could not set kernel argument",
63 error_code{"CL", static_cast<int>(err)}});
64 }
65 }
66
67 // This is necessary for USM pointers, which hipSYCL *always*
68 // relies on.
69 err = usm->enable_indirect_usm_access(kernel);
70
71 if(err != CL_SUCCESS) {
72 return make_error(
73 __acpp_here(),
74 error_info{"ocl_queue: Could not set indirect access flags",
75 error_code{"CL", static_cast<int>(err)}});
76 }
77
78 HIPSYCL_DEBUG_INFO << "ocl_queue: Submitting kernel!" << std::endl;
79 rt::range<3> global_size = num_groups * group_size;
80
81 cl::NDRange cl_global_size{global_size[0], global_size[1], global_size[2]};
82 cl::NDRange cl_local_size{group_size[0], group_size[1], group_size[2]};
83 cl::NDRange offset{0, 0, 0};
84 if (global_size[2] == 1) {
85 cl_global_size = cl::NDRange{global_size[0], global_size[1]};
86 cl_local_size = cl::NDRange{group_size[0], group_size[1]};
87 offset = cl::NDRange{0, 0};
88 if (global_size[1] == 1) {
89 cl_global_size = cl::NDRange{global_size[0]};
90 cl_local_size = cl::NDRange{group_size[0]};
91 offset = cl::NDRange{0};
92 }
93 }
94
95 err = queue.enqueueNDRangeKernel(kernel, offset, cl_global_size,
96 cl_local_size, nullptr, evt_out);
97
98 if(err != CL_SUCCESS) {
99 return make_error(

Calls 3

make_errorFunction · 0.85
make_successFunction · 0.85

Tested by

no test coverage detected