@@ -7,10 +7,9 @@ from libc.stdint cimport uintptr_t
77from libc.string cimport memcpy
88
99from cuda.bindings cimport cydriver
10+ from cuda.core.experimental._memory._buffer cimport Buffer
1011from cuda.core.experimental._stream cimport default_stream
11- from cuda.core.experimental._utils.cuda_utils cimport (
12- HANDLE_RETURN,
13- )
12+ from cuda.core.experimental._utils.cuda_utils cimport HANDLE_RETURN
1413
1514import multiprocessing
1615import os
@@ -32,15 +31,27 @@ cdef cydriver.CUmemAllocationHandleType IPC_HANDLE_TYPE =
3231cdef is_supported():
3332 return IPC_HANDLE_TYPE != cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE
3433
35- cdef class IPCData:
36- """ Data members related to sharing memory pools via IPC."""
37- def __cinit__ (self ):
38- self ._alloc_handle = None
39- self ._is_mapped = False
4034
41- def __init__ (self , IPCAllocationHandle alloc_handle , bint mapped ):
35+ cdef class IPCDataForBuffer:
36+ """ Data members related to sharing memory buffers via IPC."""
37+ def __cinit__ (self , IPCBufferDescriptor ipc_descriptor , bint is_mapped ):
38+ self ._ipc_descriptor = ipc_descriptor
39+ self ._is_mapped = is_mapped
40+
41+ @property
42+ def ipc_descriptor (self ):
43+ return self ._ipc_descriptor
44+
45+ @property
46+ def is_mapped (self ):
47+ return self ._is_mapped
48+
49+
50+ cdef class IPCDataForMR:
51+ """ Data members related to sharing memory resources via IPC."""
52+ def __cinit__ (self , IPCAllocationHandle alloc_handle , bint is_mapped ):
4253 self ._alloc_handle = alloc_handle
43- self ._is_mapped = mapped
54+ self ._is_mapped = is_mapped
4455
4556 @property
4657 def alloc_handle (self ):
@@ -155,7 +166,7 @@ cdef IPCBufferDescriptor Buffer_get_ipc_descriptor(Buffer self):
155166 return IPCBufferDescriptor._init(data_b, self .size)
156167
157168cdef Buffer Buffer_from_ipc_descriptor(
158- cls , DeviceMemoryResource mr, IPCBufferDescriptor ipc_buffer , stream
169+ cls , DeviceMemoryResource mr, IPCBufferDescriptor ipc_descriptor , stream
159170):
160171 """ Import a buffer that was exported from another process."""
161172 if not mr.is_ipc_enabled:
@@ -166,13 +177,13 @@ cdef Buffer Buffer_from_ipc_descriptor(
166177 cdef cydriver.CUmemPoolPtrExportData data
167178 memcpy(
168179 data.reserved,
169- < const void * >< const char * > (ipc_buffer ._payload),
180+ < const void * >< const char * > (ipc_descriptor ._payload),
170181 sizeof(data.reserved)
171182 )
172183 cdef cydriver.CUdeviceptr ptr
173184 with nogil:
174185 HANDLE_RETURN(cydriver.cuMemPoolImportPointer(& ptr, mr._handle, & data))
175- return Buffer._init(< uintptr_t> ptr, ipc_buffer .size, mr, stream)
186+ return Buffer._init(< uintptr_t> ptr, ipc_descriptor .size, mr, stream, ipc_descriptor )
176187
177188
178189# DeviceMemoryResource IPC Implementation
@@ -200,7 +211,7 @@ cdef DeviceMemoryResource DMR_from_allocation_handle(cls, device_id, alloc_handl
200211 from .._device import Device
201212 self ._dev_id = Device(device_id).device_id
202213 self ._mempool_owned = True
203- self ._ipc_data = IPCData (alloc_handle, mapped = True )
214+ self ._ipc_data = IPCDataForMR (alloc_handle, True )
204215
205216 # Map the mempool into this process.
206217 cdef int handle = int (alloc_handle)
@@ -214,9 +225,6 @@ cdef DeviceMemoryResource DMR_from_allocation_handle(cls, device_id, alloc_handl
214225 registered = self .register(uuid)
215226 assert registered is self
216227
217- # Always close the file handle.
218- alloc_handle.close()
219-
220228 return self
221229
222230
0 commit comments