File tree Expand file tree Collapse file tree 2 files changed +26
-0
lines changed
cuda_core/cuda/core/experimental Expand file tree Collapse file tree 2 files changed +26
-0
lines changed Original file line number Diff line number Diff line change 1212except ImportError :
1313 skip_tests = True
1414
15+ from cuda .core .experimental .utils import StridedMemoryView
1516from 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 )
Original file line number Diff line number Diff 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:
You can’t perform that action at this time.
0 commit comments