@@ -63,37 +63,41 @@ def test_make_buffer(mem_type: MemoryType) -> None:
6363
6464
6565@skip_if_no_pinned
66- def test_buffer_protocol_pinned_host (pinned_br : BufferResource ) -> None :
66+ def test_host_view_pinned_host (pinned_br : BufferResource ) -> None :
6767 size = 256
6868 stream = Stream ()
6969 reservation , _ = pinned_br .reserve (
7070 MemoryType .PINNED_HOST , size , allow_overbooking = False
7171 )
7272 buf = pinned_br .make_buffer (size , stream , reservation )
7373
74- mv = memoryview (buf )
75- assert len (mv ) == size
76- assert mv .format == "B"
77-
7874 data = np .arange (size , dtype = np .uint8 )
79- np .frombuffer (mv , dtype = np .uint8 )[:] = data
80- assert np .array_equal (np .frombuffer (memoryview (buf ), dtype = np .uint8 ), data )
75+ with buf .host_view () as mv :
76+ assert len (mv ) == size
77+ np .frombuffer (mv , dtype = np .uint8 )[:] = data
78+
79+ with buf .host_view () as mv :
80+ assert np .array_equal (np .frombuffer (mv , dtype = np .uint8 ), data )
8181
8282
83- def test_buffer_protocol_host () -> None :
83+ def test_host_view_host () -> None :
8484 size = 256
8585 mr = rmm .mr .CudaMemoryResource ()
8686 br = BufferResource (mr , memory_limits = {MemoryType .HOST : size * 4 })
8787 stream = Stream ()
8888 reservation , _ = br .reserve (MemoryType .HOST , size , allow_overbooking = False )
8989 buf = br .make_buffer (size , stream , reservation )
9090
91- mv = memoryview (buf )
92- assert len (mv ) == size
93- assert mv .format == "B"
91+ data = np .arange (size , dtype = np .uint8 )
92+ with buf .host_view () as mv :
93+ assert len (mv ) == size
94+ np .frombuffer (mv , dtype = np .uint8 )[:] = data
95+
96+ with buf .host_view () as mv :
97+ assert np .array_equal (np .frombuffer (mv , dtype = np .uint8 ), data )
9498
9599
96- def test_buffer_protocol_rejects_device () -> None :
100+ def test_host_view_rejects_device () -> None :
97101 size = 1024
98102 mr = rmm .mr .CudaMemoryResource ()
99103 br = BufferResource (mr , memory_limits = {MemoryType .DEVICE : size * 4 })
@@ -102,4 +106,19 @@ def test_buffer_protocol_rejects_device() -> None:
102106 buf = br .make_buffer (size , stream , reservation )
103107
104108 with pytest .raises (TypeError , match = "host buffers" ):
105- memoryview (buf )
109+ buf .host_view ()
110+
111+
112+ def test_host_view_lock_released_on_error () -> None :
113+ size = 256
114+ mr = rmm .mr .CudaMemoryResource ()
115+ br = BufferResource (mr , memory_limits = {MemoryType .HOST : size * 4 })
116+ stream = Stream ()
117+ reservation , _ = br .reserve (MemoryType .HOST , size , allow_overbooking = False )
118+ buf = br .make_buffer (size , stream , reservation )
119+
120+ with pytest .raises (RuntimeError ), buf .host_view ():
121+ raise RuntimeError ("intentional" )
122+
123+ with buf .host_view ():
124+ pass
0 commit comments