Skip to content

Commit c7f85ff

Browse files
committed
Remove redundant Python-side peer access cleanup; fix peer access tests
- Remove __dealloc__ and close() override from DeviceMemoryResource that cleared peer access before destruction. The C++ RAII deleter already handles this for owned pools (nvbug 5698116 workaround). For non-owned pools (default device pool), clearing peer access on handle disposal was incorrect behavior. - Update peer access tests to use owned pools (DeviceMemoryResourceOptions()) instead of default pools. Default pools are shared and may have stale peer access state from prior tests, causing test failures. Made-with: Cursor
1 parent 2dd3d1a commit c7f85ff

2 files changed

Lines changed: 8 additions & 18 deletions

File tree

cuda_core/cuda/core/_memory/_device_memory_resource.pyx

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,20 +135,6 @@ cdef class DeviceMemoryResource(_MemPool):
135135
def __init__(self, device_id: Device | int, options=None):
136136
_DMR_init(self, device_id, options)
137137

138-
def __dealloc__(self):
139-
try:
140-
self.close()
141-
except Exception:
142-
pass
143-
144-
def close(self):
145-
"""Close the memory resource, revoking peer access before destruction."""
146-
# nvbug 5698116: clear peer access before pool destruction; also
147-
# needed for non-owned (default) pools to undo modifications.
148-
if self._peer_accessible_by:
149-
_DMR_set_peer_accessible_by(self, [])
150-
super().close()
151-
152138
def __reduce__(self):
153139
return DeviceMemoryResource.from_registry, (self.uuid,)
154140

cuda_core/tests/test_memory_peer_access.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import cuda.core
55
import pytest
6-
from cuda.core import DeviceMemoryResource
6+
from cuda.core import DeviceMemoryResource, DeviceMemoryResourceOptions
77
from cuda.core._utils.cuda_utils import CUDAError
88
from helpers.buffers import PatternGen, compare_buffer_to_constant, make_scratch_buffer
99

@@ -16,7 +16,8 @@ def test_peer_access_basic(mempool_device_x2):
1616
zero_on_dev0 = make_scratch_buffer(dev0, 0, NBYTES)
1717
one_on_dev0 = make_scratch_buffer(dev0, 1, NBYTES)
1818
stream_on_dev0 = dev0.create_stream()
19-
dmr_on_dev1 = DeviceMemoryResource(dev1)
19+
# Use owned pool to ensure clean initial state (no stale peer access).
20+
dmr_on_dev1 = DeviceMemoryResource(dev1, DeviceMemoryResourceOptions())
2021
buf_on_dev1 = dmr_on_dev1.allocate(NBYTES)
2122

2223
# No access at first.
@@ -51,7 +52,8 @@ def test_peer_access_property_x2(mempool_device_x2):
5152
# The peer access list is a sorted tuple and always excludes the self
5253
# device.
5354
dev0, dev1 = mempool_device_x2
54-
dmr = DeviceMemoryResource(dev0)
55+
# Use owned pool to ensure clean initial state (no stale peer access).
56+
dmr = DeviceMemoryResource(dev0, DeviceMemoryResourceOptions())
5557

5658
def check(expected):
5759
assert isinstance(dmr.peer_accessible_by, tuple)
@@ -97,7 +99,9 @@ def test_peer_access_transitions(mempool_device_x3):
9799
# Allocate per-device resources.
98100
streams = [dev.create_stream() for dev in devs]
99101
pgens = [PatternGen(devs[i], NBYTES, streams[i]) for i in range(3)]
100-
dmrs = [DeviceMemoryResource(dev) for dev in devs]
102+
# Use owned pools (with options) to ensure clean initial state.
103+
# Default pools are shared and may have stale peer access from prior tests.
104+
dmrs = [DeviceMemoryResource(dev, DeviceMemoryResourceOptions()) for dev in devs]
101105
bufs = [dmr.allocate(NBYTES) for dmr in dmrs]
102106

103107
def verify_state(state, pattern_seed):

0 commit comments

Comments
 (0)