Skip to content

Commit 6cc78db

Browse files
committed
Don't recompute strides
1 parent 95f528d commit 6cc78db

File tree

1 file changed

+20
-15
lines changed

1 file changed

+20
-15
lines changed

cuda_core/cuda/core/experimental/_memoryview.pyx

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ cdef class StridedMemoryView:
9191

9292
# Memoized properties
9393
cdef tuple _shape
94-
cdef object _strides
94+
cdef tuple _strides
95+
cdef bint _strides_init # Has the strides tuple been init'ed?
9596
cdef object _dtype
9697

9798
def __init__(self, obj=None, stream_ptr=None):
@@ -121,20 +122,24 @@ cdef class StridedMemoryView:
121122
@property
122123
def strides(self) -> Optional[tuple[int]]:
123124
cdef int itemsize
124-
if self._strides is None and self.exporting_obj is not None:
125-
if self.dl_tensor != NULL:
126-
if self.dl_tensor.strides:
127-
self._strides = cuda_utils.carray_int64_t_to_tuple(
128-
self.dl_tensor.strides,
129-
self.dl_tensor.ndim
130-
)
131-
else:
132-
strides = self.metadata.get("strides")
133-
if strides is not None:
134-
itemsize = self.dtype.itemsize
135-
self._strides = cpython.PyTuple_New(len(strides))
136-
for i in range(len(strides)):
137-
cpython.PyTuple_SET_ITEM(self._strides, i, strides[i] // itemsize)
125+
if self._strides_init is False:
126+
if self.exporting_obj is not None:
127+
if self.dl_tensor != NULL:
128+
if self.dl_tensor.strides:
129+
self._strides = cuda_utils.carray_int64_t_to_tuple(
130+
self.dl_tensor.strides,
131+
self.dl_tensor.ndim
132+
)
133+
else:
134+
strides = self.metadata.get("strides")
135+
if strides is not None:
136+
itemsize = self.dtype.itemsize
137+
self._strides = cpython.PyTuple_New(len(strides))
138+
for i in range(len(strides)):
139+
cpython.PyTuple_SET_ITEM(
140+
self._strides, i, strides[i] // itemsize
141+
)
142+
self._strides_init = True
138143
return self._strides
139144

140145
@property

0 commit comments

Comments
 (0)