From 11dfce56a40605030ec2edc48dd80456bc591eb1 Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Fri, 16 May 2014 08:34:20 -0400 Subject: [PATCH] command queue finish/flush --- pyopencl/c_wrapper/wrap_cl_core.h | 3 +++ pyopencl/cffi_cl.py | 5 ++++- src/c_wrapper/wrap_cl.cpp | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index 9f1d0d6d..458f6c3a 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -84,6 +84,9 @@ error *_enqueue_write_buffer(void **ptr_event, void *ptr_command_queue, void *pt error *_enqueue_read_image(void **ptr_event, void *ptr_command_queue, void *ptr_mem, size_t *origin, size_t *region, void *buffer, size_t size, size_t row_pitch, size_t slice_pitch, void **wait_for, uint32_t num_wait_for, int is_blocking); void populate_constants(void(*add)(const char*, const char*, long value)); +error *_command_queue_finish(void *ptr_command_queue); +error *_command_queue_flush(void *ptr_command_queue); + intptr_t _int_ptr(void*, class_t); void* _from_int_ptr(void **ptr_out, intptr_t int_ptr_value, class_t); error *_get_info(void *ptr, class_t class_, cl_uint param, generic_info *out); diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index a58cbf14..3aeb863c 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -425,7 +425,10 @@ class CommandQueue(_Common): _ffi.NULL if device is None else device.ptr, properties)) self.ptr = ptr_command_queue[0] - + def finish(self): + _handle_error(_lib._command_queue_finish(self.ptr)) + def flush(self): + _handle_error(_lib._command_queue_flush(self.ptr)) class MemoryObjectHolder(_Common): pass diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp index 1d60f586..33619a43 100644 --- a/src/c_wrapper/wrap_cl.cpp +++ b/src/c_wrapper/wrap_cl.cpp @@ -1074,8 +1074,7 @@ namespace pyopencl void finish() { - // TODO - // PYOPENCL_CALL_GUARDED_THREADED(clFinish, (m_queue)); + PYOPENCL_CALL_GUARDED_THREADED(clFinish, (m_queue)); } }; @@ -3412,6 +3411,21 @@ error *_create_image_3d( // }}} +::error *_command_queue_finish(void *ptr_command_queue) +{ + BEGIN_C_HANDLE_ERROR + static_cast<pyopencl::command_queue*>(ptr_command_queue)->finish(); + END_C_HANDLE_ERROR + return 0; +} + +::error *_command_queue_flush(void *ptr_command_queue) +{ + BEGIN_C_HANDLE_ERROR + static_cast<pyopencl::command_queue*>(ptr_command_queue)->flush(); + END_C_HANDLE_ERROR + return 0; +} intptr_t _int_ptr(void* ptr, class_t class_) { #define INT_PTR(CLSU, CLS) return (intptr_t)(static_cast<pyopencl::CLS*>(ptr)->data()); -- GitLab