From 558be1187b5c903ebada9bd2cfe88cea9dba9ba2 Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Sun, 25 May 2014 23:20:49 -0400 Subject: [PATCH] enqueue_task --- pyopencl/c_wrapper/wrap_cl_core.h | 3 +++ pyopencl/cffi_cl.py | 18 ++++++++++++++---- src/c_wrapper/wrap_cl.cpp | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index 04c6267a..84da8e42 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -126,6 +126,9 @@ error *enqueue_nd_range_kernel(clobj_t *event, clobj_t queue, const size_t *global_work_size, const size_t *local_work_size, const clobj_t *wait_for, uint32_t num_wait_for); +error *enqueue_task(clobj_t *_evt, clobj_t _queue, clobj_t _knl, + const clobj_t *_wait_for, uint32_t num_wait_for); + error *enqueue_marker_with_wait_list(clobj_t *event, clobj_t queue, const clobj_t *wait_for, uint32_t num_wait_for); diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index b802c6b7..835a7027 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -718,16 +718,15 @@ class NannyEvent(Event): # get_image_format_channel_count # get_image_format_dtype_size # get_image_format_item_size -# enqueue_task # }}} # {{{ enqueue_nd_range_kernel -def enqueue_nd_range_kernel(queue, kernel, - global_work_size, local_work_size, global_work_offset=None, - wait_for=None, g_times_l=False): +def enqueue_nd_range_kernel(queue, kernel, global_work_size, local_work_size, + global_work_offset=None, wait_for=None, + g_times_l=False): work_dim = len(global_work_size) @@ -772,6 +771,17 @@ def enqueue_nd_range_kernel(queue, kernel, # }}} +# {{{ enqueue_task + +def enqueue_task(queue, kernel, wait_for=None): + _event = _ffi.new('clobj_t*') + c_wait_for, num_wait_for = _clobj_list(wait_for) + _handle_error(_lib.enqueue_task( + _event, queue.ptr, kernel.ptr, c_wait_for, num_wait_for)) + return _create_instance(Event, ptr_event[0]) + +# }}} + # {{{ _enqueue_marker_* def _enqueue_marker_with_wait_list(queue, wait_for=None): diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp index eca8f599..3f7fa288 100644 --- a/src/c_wrapper/wrap_cl.cpp +++ b/src/c_wrapper/wrap_cl.cpp @@ -2370,6 +2370,24 @@ enqueue_nd_range_kernel(clobj_t *_evt, clobj_t _queue, clobj_t _knl, }); } +error* +enqueue_task(clobj_t *_evt, clobj_t _queue, clobj_t _knl, + const clobj_t *_wait_for, uint32_t num_wait_for) +{ + auto queue = static_cast<command_queue*>(_queue); + auto knl = static_cast<kernel*>(_knl); + auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); + return c_handle_error([&] { + cl_event evt; + retry_mem_error<void>([&] { + pyopencl_call_guarded( + clEnqueueTask, queue->data(), knl->data(), + num_wait_for, wait_for.get(), &evt); + }); + *_evt = new_event(evt); + }); +} + #if PYOPENCL_CL_VERSION >= 0x1020 error* enqueue_marker_with_wait_list(clobj_t *_evt, clobj_t _queue, -- GitLab