def asnumpy(a, stream=None, order='C', out=None): """Returns an array on the host memory from an arbitrary source array. Args: a: Arbitrary object that can be converted to :class:`numpy.ndarray`. stream (cupy.cuda.Stream): CUDA stream object. If it is specified, then the device-to-host copy runs asynchronously. Otherwise, the copy is synchronous. Note that if ``a`` is not a :class:`cupy.ndarray` object, then this argument has no effect. order ({'C', 'F', 'A'}): The desired memory layout of the host array. When ``order`` is 'A', it uses 'F' if ``a`` is fortran-contiguous and 'C' otherwise. out (numpy.ndarray): The output array to be written to. It must have compatible shape and dtype with those of ``a``'s. Returns: numpy.ndarray: Converted array on the host memory. """ if isinstance(a, ndarray): return a.get(stream=stream, order=order, out=out) elif hasattr(a, "__cuda_array_interface__"): return array(a).get(stream=stream, order=order, out=out) else: temp = _numpy.asarray(a, order=order) if out is not None: out[...] = temp else: out = temp return out
def check_del(self, null): stream = cuda.Stream(null=null).use() stream_ptr = stream.ptr x = from_data.array([1, 2, 3]) del stream assert cuda.Stream.null == cuda.get_current_stream() # Want to test cudaStreamDestory is issued, but # runtime.streamQuery(stream_ptr) causes SEGV. We cannot test... del stream_ptr del x
def __getitem__(self, key): trans1d = self.trans1d ndmin = self.ndmin objs = [] scalars = [] arraytypes = [] scalartypes = [] if isinstance(key, str): raise NotImplementedError if not isinstance(key, tuple): key = (key, ) for i, k in enumerate(key): scalar = False if isinstance(k, slice): raise NotImplementedError elif isinstance(k, str): if i != 0: raise ValueError( 'special directives must be the first entry.') raise NotImplementedError elif type(k) in numpy.ScalarType: newobj = from_data.array(k, ndmin=ndmin) scalars.append(i) scalar = True scalartypes.append(newobj.dtype) else: newobj = from_data.array(k, copy=False, ndmin=ndmin) if ndmin > 1: ndim = from_data.array(k, copy=False).ndim if trans1d != -1 and ndim < ndmin: newobj = self._output_obj(newobj, ndim, ndmin, trans1d) objs.append(newobj) if not scalar and isinstance(newobj, core.ndarray): arraytypes.append(newobj.dtype) final_dtype = numpy.find_common_type(arraytypes, scalartypes) if final_dtype is not None: for k in scalars: objs[k] = objs[k].astype(final_dtype) return join.concatenate(tuple(objs), axis=self.axis)
def asnumpy(a, stream=None, order='C'): """Returns an array on the host memory from an arbitrary source array. Args: a: Arbitrary object that can be converted to :class:`numpy.ndarray`. stream (cupy.cuda.Stream): CUDA stream object. If it is specified, then the device-to-host copy runs asynchronously. Otherwise, the copy is synchronous. Note that if ``a`` is not a :class:`cupy.ndarray` object, then this argument has no effect. order ({'C', 'F', 'A'}): The desired memory layout of the host array. When ``order`` is 'A', it uses 'F' if ``a`` is fortran-contiguous and 'C' otherwise. Returns: numpy.ndarray: Converted array on the host memory. """ if isinstance(a, ndarray): return a.get(stream=stream, order=order) elif hasattr(a, "__cuda_array_interface__"): return array(a).get(stream=stream, order=order) else: return numpy.asarray(a, order=order)