diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp index 7132b27823cb94c02c4aac9c3df94a5eacfbcf3b..0228e75b8edb4365a59bf2ad5c537d389306453e 100644 --- a/src/wrapper/wrap_cl.hpp +++ b/src/wrapper/wrap_cl.hpp @@ -2807,12 +2807,20 @@ namespace pyopencl std::vector<size_t> local_work_size; if (py_local_work_size.ptr() != Py_None) { - if (work_dim != unsigned(len(py_local_work_size))) - throw error("enqueue_nd_range_kernel", CL_INVALID_VALUE, - "global/work work sizes have differing dimensions"); + if (g_times_l) + work_dim = std::max(work_dim, unsigned(len(py_local_work_size))); + else + if (work_dim != unsigned(len(py_local_work_size))) + throw error("enqueue_nd_range_kernel", CL_INVALID_VALUE, + "global/local work sizes have differing dimensions"); COPY_PY_LIST(size_t, local_work_size); + while (local_work_size.size() < work_dim) + local_work_size.push_back(1); + while (global_work_size.size() < work_dim) + global_work_size.push_back(1); + local_work_size_ptr = local_work_size.empty( ) ? NULL : &local_work_size.front(); }