Skip to content

Commit 97798db

Browse files
committed
Fix #1043: Fix memory leak in StridedMemoryView
1 parent dbde2b4 commit 97798db

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

cuda_bindings/benchmarks/test_cupy.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
except ImportError:
1313
skip_tests = True
1414

15+
from cuda.core.experimental.utils import StridedMemoryView
1516
from kernels import kernel_string
1617

1718

@@ -197,3 +198,11 @@ def test_launch_latency_small_kernel_16_args(benchmark):
197198
with stream:
198199
benchmark(launch, kernel, args)
199200
stream.synchronize()
201+
202+
203+
# Ensure that memory views dellocate their reference to dlpack/cupy tensors
204+
@pytest.mark.skipif(skip_tests, reason="cupy is not installed")
205+
def test_strided_memory_view_leak(benchmark):
206+
for idx in range(1000):
207+
arr = cupy.zeros((1024, 1024, 1024), dtype=cupy.uint8)
208+
view = StridedMemoryView(arr, stream_ptr=-1)

cuda_core/cuda/core/experimental/_memoryview.pyx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,23 @@ cdef class StridedMemoryView:
105105
else:
106106
pass
107107

108+
def __dealloc__(self):
109+
if self.dl_tensor == NULL:
110+
return
111+
112+
if cpython.PyCapsule_IsValid(
113+
self.metadata, DLPACK_VERSIONED_TENSOR_USED_NAME):
114+
data = cpython.PyCapsule_GetPointer(
115+
self.metadata, DLPACK_VERSIONED_TENSOR_USED_NAME)
116+
dlm_tensor_ver = <DLManagedTensorVersioned*>data
117+
dlm_tensor_ver.deleter(dlm_tensor_ver)
118+
elif cpython.PyCapsule_IsValid(
119+
self.metadata, DLPACK_TENSOR_USED_NAME):
120+
data = cpython.PyCapsule_GetPointer(
121+
self.metadata, DLPACK_TENSOR_USED_NAME)
122+
dlm_tensor = <DLManagedTensor*>data
123+
dlm_tensor.deleter(dlm_tensor)
124+
108125
@property
109126
def shape(self) -> tuple[int]:
110127
if self._shape is None and self.exporting_obj is not None:

0 commit comments

Comments
 (0)