From 7a5ac0c0dfbf48b3d0ae2500047e3f831ba0068f Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Sat, 24 May 2014 14:41:53 -0400 Subject: [PATCH] wait_for_events --- pyopencl/c_wrapper/wrap_cl_core.h | 1 + pyopencl/cffi_cl.py | 5 +++++ src/c_wrapper/wrap_cl.cpp | 11 ++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index 5e17b0de..8a2cb021 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -108,6 +108,7 @@ error *image__get_image_info(clobj_t image, cl_image_info param, error *event__get_profiling_info(clobj_t event, cl_profiling_info param, generic_info *out); error *event__wait(clobj_t event); +error *wait_for_events(const clobj_t *_wait_for, uint32_t num_wait_for); // Nanny Event unsigned long nanny_event__get_ward(clobj_t evt); // enqueue_* diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index c6a3e5fb..a2cef461 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -696,7 +696,12 @@ class Event(_Common): def wait(self): _handle_error(_lib.event__wait(self.ptr)) +def wait_for_events(wait_for): + _handle_error(_lib.wait_for_events(*_c_obj_list(wait_for))) + class NannyEvent(Event): + # TODO disable/handle write to buffer from bytes since the data may be moved + # by GC def get_ward(self): return _find_obj(_lib.nanny_event__get_ward(self.ptr)) diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp index fff57435..7140d38e 100644 --- a/src/c_wrapper/wrap_cl.cpp +++ b/src/c_wrapper/wrap_cl.cpp @@ -2181,6 +2181,15 @@ event__wait(clobj_t evt) }); } +error* +wait_for_events(const clobj_t *_wait_for, uint32_t num_wait_for) +{ + auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); + return c_handle_error([&] { + pyopencl_call_guarded(clWaitForEvents, + num_wait_for, wait_for.get()); + }); +} // Nanny Event unsigned long @@ -2200,8 +2209,8 @@ enqueue_nd_range_kernel(clobj_t *_evt, clobj_t _queue, clobj_t _knl, { 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([&] { - auto wait_for = buf_from_class<event>(_wait_for, num_wait_for); cl_event evt; retry_mem_error<void>([&] { pyopencl_call_guarded( -- GitLab