def __init__(self, shape, dtype, buffer=None, offset=0, strides=None):
itemsize = dtype().itemsize
shape = tuple(np.array(shape).ravel().astype(np.uint64))
if strides is None:
# This magic came from http://stackoverflow.com/a/32874295
strides = itemsize * np.r_[1, np.cumprod(shape[::-1][:-1],
dtype=np.int64)][::-1]
self.shape = shape
self.dtype = dtype
self.buffer = buffer
self.offset = offset
self.strides = strides
self.base = None
self.flags = {'WRITEABLE': True,
'ALIGNED': buffer % (itemsize == 0
if buffer is not None
else True),
'OWNDATA': False,
'UPDATEIFCOPY': False,
'C_CONTIGUOUS': self.nbytes == strides[0] * shape[0],
'F_CONTIGUOUS': False,
'SPACE': 'cuda'}
class CTypes(object):
def __init__(self, parent):
self.parent = parent
@property
def data(self):
return self.parent.data
self.ctypes = CTypes(self)
if self.buffer is None:
self.buffer = raw_malloc(self.nbytes, space='cuda')
self.flags['OWNDATA'] = True
self.flags['ALIGNED'] = True
memset(self, 0)
else:
self.buffer += offset
评论列表
文章目录