Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions cuda_core/cuda/core/_memory/_buffer.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# SPDX-License-Identifier: Apache-2.0

from libc.stdint cimport uintptr_t
from libcpp cimport bool as cpp_bool
from libcpp.atomic cimport atomic as std_atomic, memory_order_acquire, memory_order_release

from cuda.bindings cimport cydriver
from cuda.core._resource_handles cimport DevicePtrHandle
Expand All @@ -18,13 +20,13 @@ cdef struct _MemAttrs:

cdef class Buffer:
cdef:
DevicePtrHandle _h_ptr
MemoryResource _memory_resource
object _ipc_data
object _owner
_MemAttrs _mem_attrs
bint _mem_attrs_inited
object __weakref__
DevicePtrHandle _h_ptr
MemoryResource _memory_resource
object _ipc_data
object _owner
_MemAttrs _mem_attrs
std_atomic[cpp_bool] _mem_attrs_inited
object __weakref__
cdef public:
# Python code in _memory/_virtual_memory_resource.py needs to update
# this value, though it is technically private.
Expand Down
10 changes: 5 additions & 5 deletions cuda_core/cuda/core/_memory/_buffer.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ cdef class Buffer:
self._memory_resource = None
self._ipc_data = None
self._owner = None
self._mem_attrs_inited = False
self._mem_attrs_inited.store(False)

def __init__(self, *args, **kwargs) -> None:
raise RuntimeError("Buffer objects cannot be instantiated directly. "
Expand Down Expand Up @@ -126,7 +126,7 @@ cdef class Buffer:
self._memory_resource = mr
self._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None
self._owner = owner
self._mem_attrs_inited = False
self._mem_attrs_inited.store(False)
return self

@staticmethod
Expand Down Expand Up @@ -447,9 +447,9 @@ cdef class Buffer:
# ------------------------------
cdef inline void _init_mem_attrs(Buffer self):
"""Initialize memory attributes by querying the pointer."""
if not self._mem_attrs_inited:
if not self._mem_attrs_inited.load(memory_order_acquire):
_query_memory_attrs(self._mem_attrs, as_cu(self._h_ptr))
self._mem_attrs_inited = True
self._mem_attrs_inited.store(True, memory_order_release)


cdef inline int _query_memory_attrs(
Expand Down Expand Up @@ -597,7 +597,7 @@ cdef Buffer Buffer_from_deviceptr_handle(
buf._memory_resource = mr
buf._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None
buf._owner = None
buf._mem_attrs_inited = False
buf._mem_attrs_inited.store(False)
return buf


Expand Down
Loading