Skip to content
Open
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
5 changes: 3 additions & 2 deletions cuda_core/cuda/core/_stream.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -522,13 +522,14 @@ cdef inline bint Stream_handle_is_default_token(cydriver.CUstream s) noexcept no

These tokens carry no context of their own; they refer to whatever context
is current, so nothing resolved from one may be cached on the object.
The NULL stream (handle 0) is such a token too.
"""
cdef uintptr_t h = <uintptr_t>s
return h == <uintptr_t>cydriver.CU_STREAM_LEGACY or h == <uintptr_t>cydriver.CU_STREAM_PER_THREAD
return h == 0 or h == <uintptr_t>cydriver.CU_STREAM_LEGACY or h == <uintptr_t>cydriver.CU_STREAM_PER_THREAD


cdef inline bint Stream_is_default_token(Stream self) noexcept nogil:
"""Return True when this stream is CU_STREAM_LEGACY or CU_STREAM_PER_THREAD."""
"""Return True when this stream is the NULL stream, CU_STREAM_LEGACY or CU_STREAM_PER_THREAD."""
return Stream_handle_is_default_token(as_cu(self._h_stream))


Expand Down
7 changes: 7 additions & 0 deletions cuda_core/docs/source/release/1.3.0-notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,13 @@ Fixes and enhancements
``repr`` now shows ``U`` for unified operands.
(`#2649 <https://github.com/NVIDIA/cuda-python/issues/2649>`__)

- A :class:`Stream` over the NULL stream (handle 0), such as
``Stream.from_handle(0)``, no longer caches the first context and device it
observes. Like ``LEGACY_DEFAULT_STREAM`` and ``PER_THREAD_DEFAULT_STREAM``
since 1.2.0, it now resolves ``Stream.context``, ``Stream.device``,
``Stream.resources`` and ``Stream.record()`` against the current context.
(`#3242 <https://github.com/NVIDIA/cuda-python/issues/3242>`__)

Deprecations
------------

Expand Down
12 changes: 12 additions & 0 deletions cuda_core/tests/test_green_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
ProgramOptions,
SMResource,
SMResourceOptions,
Stream,
WorkqueueResource,
WorkqueueResourceOptions,
launch,
Expand Down Expand Up @@ -560,6 +561,17 @@ def test_stream_and_event_track_green_context(self, green_ctx):
stream.sync()
event.sync()

@pytest.mark.agent_authored(model="claude-opus-5-5")
def test_null_stream_follows_current_context(self, init_cuda, green_ctx):
stream = Stream.from_handle(0)
assert stream.context == init_cuda.context

with use_context(init_cuda, green_ctx):
assert stream.context == green_ctx
assert stream.record().context == green_ctx

assert stream.context == init_cuda.context

@pytest.mark.agent_authored(model="gpt-5.6")
def test_device_receiver_targets_stored_green_context(self, init_cuda, green_ctx):
primary_ctx = init_cuda.context
Expand Down
Loading