diff --git a/pyopencl/array.py b/pyopencl/array.py index 6223f57cc67d62182051df17fd5f40a4aca48def..4ef896c5923af10c296fc69968da2c64db719dd2 100644 --- a/pyopencl/array.py +++ b/pyopencl/array.py @@ -1154,6 +1154,12 @@ class Array(object): # }}} + def finish(self): + # undoc + if self.events: + cl.wait_for_events(self.events) + del self.events[:] + # {{{ views def reshape(self, *shape, **kwargs): @@ -1214,12 +1220,6 @@ class Array(object): # }}} - def finish(self): - # undoc - if self.events: - cl.wait_for_events(self.events) - del self.events[:] - def map_to_host(self, queue=None, flags=None, is_blocking=True, wait_for=None): """If *is_blocking*, return a :class:`numpy.ndarray` corresponding to the same memory as *self*. @@ -1344,11 +1344,15 @@ class Array(object): shape=tuple(new_shape), strides=tuple(new_strides)) - def setitem(self, subscript, value, queue=None): + def setitem(self, subscript, value, queue=None, wait_for=None): """Like :meth:`__setitem__`, but with the ability to specify - a *queue* for execution. + a *queue* and *wait_for*. .. versionadded:: 2013.1 + + .. versionchanged:: 2013.2 + + Added *wait_for*. """ if isinstance(subscript, Array): @@ -1362,7 +1366,8 @@ class Array(object): raise NotImplementedError( "fancy indexing into a multi-d array is supported") - multi_put([value], subscript, out=[self], queue=self.queue) + multi_put([value], subscript, out=[self], queue=self.queue, + wait_for=wait_for) return queue = queue or self.queue or value.queue @@ -1373,7 +1378,7 @@ class Array(object): if subarray.shape == value.shape and subarray.strides == value.strides: self.events.append( cl.enqueue_copy(queue, subarray.base_data, - value, device_offset=subarray.offset)) + value, device_offset=subarray.offset, wait_for=wait_for)) return else: value = to_device(queue, value, self.allocator) @@ -1389,11 +1394,11 @@ class Array(object): raise ValueError("cannot assign between arrays of " "differing strides") - self._copy(subarray, value, queue=queue) + self._copy(subarray, value, queue=queue, wait_for=wait_for) else: # Let's assume it's a scalar - subarray.fill(value, queue=queue) + subarray.fill(value, queue=queue, wait_for=wait_for) def __setitem__(self, subscript, value): """Set the slice of *self* identified *subscript* to *value*.