diff --git a/.github/actions/check-doc-links/action.yml b/.github/actions/check-doc-links/action.yml index c08b2750c94..7bde3fbdd48 100644 --- a/.github/actions/check-doc-links/action.yml +++ b/.github/actions/check-doc-links/action.yml @@ -16,7 +16,7 @@ inputs: description: "check allows up to 10 rate-limited URLs; cache-warm warns on all link failures" default: check -# Callers provide Python 3.10+ on PATH; the helpers use only its standard library. +# Callers provide Python 3.11+ on PATH; the helpers use only its standard library. runs: using: composite steps: diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml index 0a2bc7b2d22..a894387aec2 100644 --- a/.github/workflows/build-wheel.yml +++ b/.github/workflows/build-wheel.yml @@ -442,14 +442,7 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - # TODO: remove allow-prereleases once 3.15 is officially supported - allow-prereleases: ${{ startsWith(matrix.python-version, '3.15') }} - - - name: Enable Scientific Python Nightly Wheels for Python 3.15 - if: ${{ (env.TEST_BINDINGS == 'true' || env.TEST_CORE == 'true') && startsWith(matrix.python-version, '3.15') }} - run: | - echo "PIP_EXTRA_INDEX_URL=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" >> "$GITHUB_ENV" - echo "PIP_ONLY_BINARY=numpy" >> "$GITHUB_ENV" + allow-prereleases: ${{ startsWith(matrix.python-version, '3.16') }} - name: verify free-threaded build if: ${{ (env.TEST_BINDINGS == 'true' || env.TEST_CORE == 'true') && endsWith(matrix.python-version, 't') }} diff --git a/.github/workflows/test-wheel-linux.yml b/.github/workflows/test-wheel-linux.yml index e4ac5cf8282..8afa3412184 100644 --- a/.github/workflows/test-wheel-linux.yml +++ b/.github/workflows/test-wheel-linux.yml @@ -110,8 +110,6 @@ jobs: fail-fast: false matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} runs-on: "${{ matrix.FLAVOR || 'linux' }}-${{ matrix.ARCH }}-gpu-${{ matrix.GPU }}-${{ matrix.RUNNER_DRIVER }}-${{ matrix.GPU_COUNT }}" - # TODO: remove continue-on-error once 3.15 is officially supported - continue-on-error: ${{ startsWith(matrix.PY_VER, '3.15') }} # The build stage could fail but we want the CI to keep moving. if: ${{ github.repository_owner == 'nvidia' && !cancelled() }} # Our self-hosted runners require a container @@ -329,19 +327,11 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.PY_VER }} - # TODO: remove allow-prereleases once 3.15 is officially supported - allow-prereleases: ${{ startsWith(matrix.PY_VER, '3.15') }} + allow-prereleases: ${{ startsWith(matrix.PY_VER, '3.16') }} env: # we use self-hosted runners on which setup-python behaves weirdly (Python include can't be found)... AGENT_TOOLSDIRECTORY: "/opt/hostedtoolcache" - - name: Enable Scientific Python Nightly Wheels for Python 3.15 - if: ${{ (env.TEST_BINDINGS == 'true' || env.TEST_CORE == 'true' || env.TEST_PYTHON == 'true') && - startsWith(matrix.PY_VER, '3.15') }} - run: | - echo "PIP_EXTRA_INDEX_URL=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" >> "$GITHUB_ENV" - echo "PIP_ONLY_BINARY=numpy" >> "$GITHUB_ENV" - - name: Set up mini CTK if: ${{ matrix.LOCAL_CTK == '1' }} uses: ./.github/actions/fetch_ctk diff --git a/.github/workflows/test-wheel-windows.yml b/.github/workflows/test-wheel-windows.yml index 79eff0d6e62..edb49f6634b 100644 --- a/.github/workflows/test-wheel-windows.yml +++ b/.github/workflows/test-wheel-windows.yml @@ -101,8 +101,6 @@ jobs: fail-fast: false matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} if: ${{ github.repository_owner == 'nvidia' && !cancelled() }} - # TODO: remove continue-on-error once 3.15 is officially supported - continue-on-error: ${{ startsWith(matrix.PY_VER, '3.15') }} runs-on: "windows-${{ matrix.ARCH }}-gpu-${{ matrix.GPU }}-${{ matrix.RUNNER_DRIVER }}-${{ matrix.GPU_COUNT }}" steps: - name: Enable Git symlinks (Windows, must precede checkout) @@ -311,16 +309,7 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.PY_VER }} - # TODO: remove allow-prereleases once 3.15 is officially supported - allow-prereleases: ${{ startsWith(matrix.PY_VER, '3.15') }} - - - name: Enable Scientific Python Nightly Wheels for Python 3.15 - if: ${{ (env.TEST_BINDINGS == 'true' || env.TEST_CORE == 'true' || env.TEST_PYTHON == 'true') && - startsWith(matrix.PY_VER, '3.15') }} - shell: bash --noprofile --norc -xeuo pipefail {0} - run: | - echo "PIP_EXTRA_INDEX_URL=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" >> "$GITHUB_ENV" - echo "PIP_ONLY_BINARY=numpy" >> "$GITHUB_ENV" + allow-prereleases: ${{ startsWith(matrix.PY_VER, '3.16') }} - name: Verify LongPathsEnabled run: | diff --git a/ci/ci-pipeline.mmd b/ci/ci-pipeline.mmd index 317f088916f..b085fa869bc 100644 --- a/ci/ci-pipeline.mmd +++ b/ci/ci-pipeline.mmd @@ -34,7 +34,7 @@ flowchart TB direction LR B1["linux-64
(Self-hosted)"] ~~~ B2["linux-aarch64
(Self-hosted)"] ~~~ B3["win-64
(GitHub-hosted)"] end - BUILD_DETAILS["Python versions: 3.10, 3.11, 3.12, 3.13, 3.14
CUDA version: 13.0.0 (build-time)
Components: cuda-core, cuda-bindings,
cuda-pathfinder, cuda-python"] + BUILD_DETAILS["Python versions: 3.11, 3.12, 3.13, 3.14, 3.15
CUDA version: 13.0.0 (build-time)
Components: cuda-core, cuda-bindings,
cuda-pathfinder, cuda-python"] end subgraph ARTIFACTS["ARTIFACT STORAGE"] diff --git a/ci/tools/download-wheels b/ci/tools/download-wheels index 20f31fb73d5..58e8a213226 100755 --- a/ci/tools/download-wheels +++ b/ci/tools/download-wheels @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 @@ -56,13 +56,6 @@ do continue fi - # TODO: remove the Python 3.15 exclusion once 3.15 is officially supported - # exclude pre-release Python (3.15) wheels from releasing - if [[ "${p}" == *python315* ]]; then - echo "Skipping pre-release Python artifact: $p" - continue - fi - # If we're not downloading "all", only process matching component if [[ "$COMPONENT" != "all" && "$p" != ${COMPONENT}* ]]; then continue diff --git a/cuda_bindings/pixi.toml b/cuda_bindings/pixi.toml index e865be3afb0..0c7c58c2050 100644 --- a/cuda_bindings/pixi.toml +++ b/cuda_bindings/pixi.toml @@ -21,7 +21,6 @@ pytest-repeat = "*" pyglet = ">=2.1.9" numpy = "*" packaging = "*" -tomli = "*" matplotlib = "*" [feature.test.pypi-dependencies] diff --git a/cuda_bindings/pyproject.toml b/cuda_bindings/pyproject.toml index 2914151f4bb..c9147a28e8a 100644 --- a/cuda_bindings/pyproject.toml +++ b/cuda_bindings/pyproject.toml @@ -27,6 +27,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Environment :: GPU :: NVIDIA CUDA", ] dynamic = ["version", "readme"] @@ -54,7 +55,6 @@ test = [ "pytest-github-actions-annotate-failures==0.4.2", "pyglet==2.1.14", "packaging>=24", - "tomli>=2; python_version < '3.11'", ] test-ft = [ "pytest-run-parallel==0.10.0", diff --git a/cuda_core/AGENTS.md b/cuda_core/AGENTS.md index ec590d57604..12cb85d483a 100644 --- a/cuda_core/AGENTS.md +++ b/cuda_core/AGENTS.md @@ -224,8 +224,8 @@ below are for contributors. Reviewers and agents should flag violations. lock, and when a lock must stay held call `p_`, keep the status, and report after the lock is released (`deviceptr_import_ipc` is the model). - **Rollback failure**: the original exception propagates; the failed rollback - is attached to it with `attach_rollback_failure()` (a PEP 678 note on - Python 3.11+, reported out-of-band on 3.10), or chained with + is attached to it with `attach_rollback_failure()` (a PEP 678 note), + or chained with `raise ... from` when a second exception must be raised. Catching everything (bare `except:` or `except BaseException:`) is acceptable only for rollback-then-`raise` blocks, where the rollback must also run for diff --git a/cuda_core/cuda/core/_cpp/rt/DESIGN.md b/cuda_core/cuda/core/_cpp/rt/DESIGN.md index ed4ac14a154..ac165527707 100644 --- a/cuda_core/cuda/core/_cpp/rt/DESIGN.md +++ b/cuda_core/cuda/core/_cpp/rt/DESIGN.md @@ -388,8 +388,7 @@ observes the caller's context. When restoration fails after the operation succeeded, the creation is undone and the restoration status is returned. When both fail, the operation status is returned. Either way the helper records a thread-local detail keyed to the returned status (`take_last_error_detail(status)`) that -`_check_driver_error` attaches to the raised `CUDAError` as a PEP 678 note -(appended to the message on Python 3.10), so the user learns that the caller's +`_check_driver_error` attaches to the raised `CUDAError` as a PEP 678 note, so the user learns that the caller's context was not restored, which context is current and, for a double failure, why restoration failed. Keying the detail to its status narrows, but does not remove, misattribution: a caller that drops the status (an empty handle raised @@ -428,7 +427,7 @@ exactly one of these; none is ever dropped. | Cython, on a path that can raise | `HANDLE_RETURN(status)` | Raises `CUDAError`. A restoration detail recorded by the C++ helper becomes a note on the exception. | | Cython, after a handle constructor returned an empty handle | `HANDLE_RETURN(get_last_error())`, immediately | Same. Transitional: #2760 makes constructors return the status instead. | | C++, a helper that runs an operation in another context | Return the `CUresult`; `exit_context` records the restoration detail | Cython raises it. Transitional: #2760 returns the restoration status as a second out-parameter. | -| Cython, inside an `except` block whose rollback failed | `attach_rollback_failure(op, status, detail)` | Adds a note to the exception being handled. Reports instead if nothing is being handled or notes do not exist (Python 3.10). | +| Cython, inside an `except` block whose rollback failed | `attach_rollback_failure(op, status, detail)` | Adds a note to the exception being handled. Reports instead if nothing is being handled. | | C++, a deleter or deferred cleanup | A `pw_*` wrapper, or `report_cuda_error()` / `report_message()` | Emits `CUDAWarning`. Never raises. | | Cython or Python, a `__dealloc__` or destructor-path callback | `warnings.warn(msg, CUDAWarning, stacklevel=2)` | Same. | | A CUDA callback thread | Nothing that needs the GIL. Hand the work to the deferred-cleanup queue with `Py_AddPendingCall` | CUDA forbids driver calls there, and acquiring the GIL there can deadlock with a GIL holder blocked in a driver call. GIL-free C API that only schedules work is fine. | diff --git a/cuda_core/cuda/core/_memory/_copy_enums.py b/cuda_core/cuda/core/_memory/_copy_enums.py index 7cad3ced62a..7a50d89ff11 100644 --- a/cuda_core/cuda/core/_memory/_copy_enums.py +++ b/cuda_core/cuda/core/_memory/_copy_enums.py @@ -6,11 +6,11 @@ import dataclasses from collections.abc import Sequence +from enum import StrEnum from cuda.core._device import Device from cuda.core._host import Host from cuda.core._utils.cuda_utils import driver -from cuda.core._utils.pycompat import StrEnum __all__ = ["CopyOptions", "MemcpyOverlapMode", "MemcpySrcAccessOrder"] diff --git a/cuda_core/cuda/core/_utils/cuda_utils.pyx b/cuda_core/cuda/core/_utils/cuda_utils.pyx index 5cd09802619..941faea4d0f 100644 --- a/cuda_core/cuda/core/_utils/cuda_utils.pyx +++ b/cuda_core/cuda/core/_utils/cuda_utils.pyx @@ -167,13 +167,8 @@ cdef object _NVRTC_SUCCESS = nvrtc.nvrtcResult.NVRTC_SUCCESS cdef inline void _attach_detail(exc, str detail): - # PEP 678 notes (Python 3.11+) keep the detail separable from the message; - # older interpreters get it appended to the message instead. - add_note = getattr(exc, "add_note", None) - if add_note is not None: - add_note(detail) - else: - exc.args = (f"{exc.args[0]} ({detail})", *exc.args[1:]) + # PEP 678 notes keep the detail separable from the message. + exc.add_note(detail) cpdef inline int _check_driver_error(cydriver.CUresult error) except?-1 nogil: diff --git a/cuda_core/cuda/core/_utils/pycompat.py b/cuda_core/cuda/core/_utils/pycompat.py index 8604bb8625b..f03825c7ea5 100644 --- a/cuda_core/cuda/core/_utils/pycompat.py +++ b/cuda_core/cuda/core/_utils/pycompat.py @@ -7,9 +7,8 @@ """ import sys -from enum import StrEnum -__all__ = ["BufferProtocol", "StrEnum"] +__all__ = ["BufferProtocol"] if sys.version_info >= (3, 12): diff --git a/cuda_core/cuda/core/system/typing.py b/cuda_core/cuda/core/system/typing.py index a3888005bff..21148ef1b86 100644 --- a/cuda_core/cuda/core/system/typing.py +++ b/cuda_core/cuda/core/system/typing.py @@ -2,9 +2,10 @@ # # SPDX-License-Identifier: Apache-2.0 +from enum import StrEnum + from cuda.bindings import nvml as _nvml from cuda.bindings._internal._fast_enum import FastEnum as _FastEnum -from cuda.core._utils.pycompat import StrEnum __all__ = [ "AddressingMode", diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index 96dce380d8a..af77a5b468c 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -292,11 +292,6 @@ cuda-version = "*" numpy = "*" cuda-bindings = "*" cuda-pathfinder = "*" -# Conda-forge ships per-Python variants of backports.strenum (real impl on -# <3.11, no-op stub on >=3.12); pixi-build doesn't accept PEP 508-style -# `python_version` selectors in [package.target.], so list it -# unconditionally and let the solver pick the right variant. -"backports.strenum" = "*" [target.linux.tasks.build-cython-tests] cmd = ["$PIXI_PROJECT_ROOT/tests/cython/build_tests.sh"] diff --git a/cuda_core/pyproject.toml b/cuda_core/pyproject.toml index 79e8a8a6673..fd1a8647cef 100644 --- a/cuda_core/pyproject.toml +++ b/cuda_core/pyproject.toml @@ -41,6 +41,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Implementation :: CPython", "Environment :: GPU :: NVIDIA CUDA", "Environment :: GPU :: NVIDIA CUDA :: 12", @@ -78,8 +79,7 @@ test = [ "docutils==0.23", # Required by tests/test_graphics.py; pinned to match cuda_bindings. "pyglet==2.1.14", - # TODO: remove the Python 3.15 guard once 3.15 is officially supported - "cffi==2.0.0; python_version < '3.15'", + "cffi==2.0.0", ] # TODO: drop the Windows 3.15 guard once ml-dtypes publishes cp315 Windows wheels ml-dtypes = ["ml-dtypes>=0.5.4,<0.6.0; sys_platform != 'win32' or python_version < '3.15'"] diff --git a/cuda_core/tests/graph/test_graph_builder.py b/cuda_core/tests/graph/test_graph_builder.py index bb5cf3c1418..fbea7e7a571 100644 --- a/cuda_core/tests/graph/test_graph_builder.py +++ b/cuda_core/tests/graph/test_graph_builder.py @@ -4,7 +4,6 @@ """GraphBuilder stream capture tests.""" import gc -import sys import time import weakref @@ -273,26 +272,19 @@ def test_graph_join_failure_survives_failing_close(init_cuda): Joining a builder from another capture is refused by the driver, which also invalidates that capture, so closing it afterwards fails. The cleanup must still close the remaining builders and raise the join error; the - failed close is attached to it as a note (Python 3.11+) or reported as a - CUDAWarning (Python 3.10). + failed close is attached to it as a note. """ - has_notes = sys.version_info >= (3, 11) root = Device().create_graph_builder().begin_building() root, fork = root.split(2) other1 = Device().create_graph_builder().begin_building() other2 = Device().create_graph_builder().begin_building() with pytest.raises(CUDAError, match="^CUDA_ERROR_STREAM_CAPTURE_MERGE") as excinfo: - if has_notes: - GraphBuilder.join(root, other1, other2, fork) - else: - with pytest.warns(CUDAWarning, match="CUDA_ERROR_STREAM_CAPTURE_INVALIDATED"): - GraphBuilder.join(root, other1, other2, fork) + GraphBuilder.join(root, other1, other2, fork) assert other1.is_closed and other2.is_closed and fork.is_closed - if has_notes: - (note,) = excinfo.value.__notes__ - assert "cuStreamEndCapture failed while closing a graph builder" in note - assert "CUDA_ERROR_STREAM_CAPTURE_INVALIDATED" in note + (note,) = excinfo.value.__notes__ + assert "cuStreamEndCapture failed while closing a graph builder" in note + assert "CUDA_ERROR_STREAM_CAPTURE_INVALIDATED" in note # The refused wait invalidated the root's capture as well; ending it # raises the driver error and the builder still closes cleanly. diff --git a/cuda_core/tests/test_enum_coverage.py b/cuda_core/tests/test_enum_coverage.py index d8dc7bf84e7..c46760f7b40 100644 --- a/cuda_core/tests/test_enum_coverage.py +++ b/cuda_core/tests/test_enum_coverage.py @@ -8,7 +8,6 @@ # compatible cuda.bindings version. import inspect -import sys from enum import StrEnum from typing import Any @@ -387,7 +386,6 @@ def test_wrapper_covers_all_binding_members(binding, str_enum, mapping, binding_ ) -@pytest.mark.skipif(sys.version_info < (3, 11), reason="Requires Python 3.11+ for StrEnum") @pytest.mark.parametrize( "module", _MODULES, diff --git a/cuda_core/tests/test_error_handling.py b/cuda_core/tests/test_error_handling.py index 48fbc9d37ce..bfbec2ed0cf 100644 --- a/cuda_core/tests/test_error_handling.py +++ b/cuda_core/tests/test_error_handling.py @@ -14,7 +14,6 @@ """ import ctypes -import sys import warnings from contextlib import contextmanager @@ -43,9 +42,6 @@ INVALID_VALUE = int(driver.CUresult.CUDA_ERROR_INVALID_VALUE) DEINITIALIZED = int(driver.CUresult.CUDA_ERROR_DEINITIALIZED) -# PEP 678 exception notes; on 3.10 the same information lands in the message. -HAS_NOTES = sys.version_info >= (3, 11) - thread_unsafe_context_fault = pytest.mark.thread_unsafe( reason="injects a thread-local restoration fault and mutates the CUDA context stack" ) @@ -101,10 +97,9 @@ def test_create_stream_raises_when_context_cannot_be_restored(init_cuda): assert "could not be restored" in text assert "CUDA_ERROR_INVALID_CONTEXT" in text assert "Device.set_current()" in text - if HAS_NOTES: - # The explanation is a note, separable from the driver error message. - assert "could not be restored" not in str(excinfo.value) - assert any("could not be restored" in note for note in excinfo.value.__notes__) + # The explanation is a note, separable from the driver error message. + assert "could not be restored" not in str(excinfo.value) + assert any("could not be restored" in note for note in excinfo.value.__notes__) # As documented, a failed restoration leaves the device's context current. assert current_context_handle() == int(dev.context.handle) assert current_context_handle() == int(dev.context.handle) @@ -303,28 +298,20 @@ def as_bytes(buffer): @pytest.mark.agent_authored(model="claude-fable-5-1") def test_rollback_failure_is_attached_to_the_propagating_exception(): """A failed rollback inside an except block becomes a note on the exception being - handled (Python 3.11+); on 3.10, or with no exception being handled, it is reported - as a CUDAWarning. CUDA_ERROR_DEINITIALIZED is neither attached nor reported.""" + handled; with no exception being handled, it is reported as a CUDAWarning. CUDA_ERROR_DEINITIALIZED is neither attached nor reported.""" with pytest.raises(RuntimeError) as excinfo: try: raise RuntimeError("primary failure") except RuntimeError: - if HAS_NOTES: - with assert_no_cuda_warning(): - _attach_rollback_failure_for_testing(INVALID_VALUE) - else: - with pytest.warns(CUDAWarning, match="cuTestOperation failed while testing"): - _attach_rollback_failure_for_testing(INVALID_VALUE) + with assert_no_cuda_warning(): + _attach_rollback_failure_for_testing(INVALID_VALUE) with assert_no_cuda_warning(): _attach_rollback_failure_for_testing(DEINITIALIZED) raise exc = excinfo.value assert str(exc) == "primary failure" - if HAS_NOTES: - assert len(exc.__notes__) == 1 - assert "cuTestOperation failed while testing: CUDA_ERROR_INVALID_VALUE" in exc.__notes__[0] - else: - assert not hasattr(exc, "__notes__") + assert len(exc.__notes__) == 1 + assert "cuTestOperation failed while testing: CUDA_ERROR_INVALID_VALUE" in exc.__notes__[0] # With no exception being handled there is nothing to attach to. with pytest.warns(CUDAWarning, match="cuTestOperation failed while testing"): _attach_rollback_failure_for_testing(INVALID_VALUE) diff --git a/cuda_pathfinder/pyproject.toml b/cuda_pathfinder/pyproject.toml index b9ea13773c7..00a6f60bb1f 100644 --- a/cuda_pathfinder/pyproject.toml +++ b/cuda_pathfinder/pyproject.toml @@ -54,8 +54,7 @@ cu13 = [ "nvidia-nvshmem-cu13<3.7; sys_platform != 'win32'", ] host = [ - # TODO: remove the Python 3.15 guard once 3.15 is officially supported - "nvidia-cutlass; python_version < '3.15'", + "nvidia-cutlass", "nvpl-fft; platform_system == 'Linux' and platform_machine == 'aarch64'", ] diff --git a/cuda_pathfinder/tests/test_find_nvidia_headers.py b/cuda_pathfinder/tests/test_find_nvidia_headers.py index 9f10dc2bacf..ec114372b88 100644 --- a/cuda_pathfinder/tests/test_find_nvidia_headers.py +++ b/cuda_pathfinder/tests/test_find_nvidia_headers.py @@ -16,7 +16,6 @@ import importlib.metadata import os import re -import sys from pathlib import Path import pytest @@ -286,18 +285,7 @@ def test_find_in_system_install_dirs_expands_program_files_and_prefers_newest_cu assert located_hdr_dir.found_via == "supported_install_dir" -# TODO: remove the Python 3.15 guard once 3.15 is officially supported -_CUTLASS_SKIP = pytest.mark.skipif( - sys.version_info >= (3, 15), - reason="nvidia-cutlass not available on Python 3.15 (scipy missing)", -) -_NON_CTK_HEADER_PARAMS = [ - pytest.param(name, marks=_CUTLASS_SKIP) if name in ("cutlass", "cute") else name - for name in SUPPORTED_HEADERS_NON_CTK -] - - -@pytest.mark.parametrize("libname", _NON_CTK_HEADER_PARAMS) +@pytest.mark.parametrize("libname", SUPPORTED_HEADERS_NON_CTK) def test_locate_non_ctk_headers(info_summary_append, libname): hdr_dir = find_nvidia_header_directory(libname) located_hdr_dir = locate_nvidia_header_directory(libname) diff --git a/cuda_python/pyproject.toml b/cuda_python/pyproject.toml index b611ebf3721..5b0a55dc99f 100644 --- a/cuda_python/pyproject.toml +++ b/cuda_python/pyproject.toml @@ -27,6 +27,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Implementation :: CPython", "Environment :: GPU :: NVIDIA CUDA", "Environment :: GPU :: NVIDIA CUDA :: 12", diff --git a/cuda_python_test_helpers/pyproject.toml b/cuda_python_test_helpers/pyproject.toml index 183fa463f7b..5ed4346b410 100644 --- a/cuda_python_test_helpers/pyproject.toml +++ b/cuda_python_test_helpers/pyproject.toml @@ -15,7 +15,6 @@ license = "Apache-2.0" requires-python = ">=3.11" dependencies = [ "packaging>=24", - "tomli>=2; python_version < '3.11'", ] classifiers = [ "Programming Language :: Python :: 3 :: Only", diff --git a/samples/cuda_bindings/0_Introduction/clockNvrtc/README.md b/samples/cuda_bindings/0_Introduction/clockNvrtc/README.md index c06e2f01918..4a2f608d96e 100644 --- a/samples/cuda_bindings/0_Introduction/clockNvrtc/README.md +++ b/samples/cuda_bindings/0_Introduction/clockNvrtc/README.md @@ -61,7 +61,7 @@ Waives on 32-bit ARM (``armv7l``), where the sample isn't supported. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md index 182f00d8d0f..a809f112461 100644 --- a/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md +++ b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md @@ -63,7 +63,7 @@ reference on the host. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md b/samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md index 7d6820b108f..3fc57dbc207 100644 --- a/samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md +++ b/samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md @@ -75,7 +75,7 @@ Waives with exit code 2 when: - Linux (system-scope atomics on managed memory are not supported on Windows here) - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md index aa8828c0980..7cfd4c1bb18 100644 --- a/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md +++ b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md @@ -63,7 +63,7 @@ prerequisite for most driver-API patterns). ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md b/samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md index 42ce94c2d54..6c197b234b4 100644 --- a/samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md +++ b/samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md @@ -75,7 +75,7 @@ support VMM, and on devices that don't report - Linux x86-64 or Windows (not supported on macOS, ARMv7, aarch64, or sbsa) - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md index 95474dfcb64..d3235eb437e 100644 --- a/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md +++ b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md @@ -64,7 +64,7 @@ Waives on Darwin (Metal-only) and on GPUs without memory-pool support. ### Software - CUDA Toolkit 11.3 or newer (feature gate for `MEMORY_POOLS_SUPPORTED`) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md index 90b69c75e02..255f1d35507 100644 --- a/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md +++ b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md @@ -65,7 +65,7 @@ when you're programmatically building a graph without a driving stream. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md index 8108cb6a154..d1fd484dc2c 100644 --- a/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md +++ b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md @@ -70,7 +70,7 @@ async-copy machinery that ``cuda.core``'s newer APIs sit on top of. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md index 839573ab6dc..81b36c468e1 100644 --- a/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md +++ b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md @@ -74,7 +74,7 @@ support. - Linux (not supported on Darwin, QNX, or armv7l) - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md index 27f3c67539a..9bea77b3ed3 100644 --- a/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md +++ b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md @@ -61,7 +61,7 @@ printed as ``N/A`` rather than failing the sample. - CUDA Toolkit 13.0 or newer (only for the accompanying NVML library; no CUDA runtime is used) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) ## Installation diff --git a/samples/cuda_bindings/extra/isoFdModelling/README.md b/samples/cuda_bindings/extra/isoFdModelling/README.md index 6ee6f98a528..11226f81199 100644 --- a/samples/cuda_bindings/extra/isoFdModelling/README.md +++ b/samples/cuda_bindings/extra/isoFdModelling/README.md @@ -69,7 +69,7 @@ non-interactive run. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` - `matplotlib` (optional) diff --git a/samples/cuda_bindings/extra/jitProgram/README.md b/samples/cuda_bindings/extra/jitProgram/README.md index e30632fae66..045a411330c 100644 --- a/samples/cuda_bindings/extra/jitProgram/README.md +++ b/samples/cuda_bindings/extra/jitProgram/README.md @@ -66,7 +66,7 @@ The kernel is the standard single-precision AXPY: ``out = a * x + y``. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.4.0) - `numpy` diff --git a/samples/cuda_core/binarySearch/README.md b/samples/cuda_core/binarySearch/README.md index a9fa1876e96..a3ba2dd1fef 100644 --- a/samples/cuda_core/binarySearch/README.md +++ b/samples/cuda_core/binarySearch/README.md @@ -55,7 +55,7 @@ diverge on present values). Results are verified against ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-cccl` (>=1.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/blockwiseSum/README.md b/samples/cuda_core/blockwiseSum/README.md index 19fcc922770..fe8f70d53c5 100644 --- a/samples/cuda_core/blockwiseSum/README.md +++ b/samples/cuda_core/blockwiseSum/README.md @@ -58,7 +58,7 @@ for (size_t i = tid; i < N; i += stride) { ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - See `requirements.txt` for Python packages ## Installation diff --git a/samples/cuda_core/blurImageUnifiedMemory/README.md b/samples/cuda_core/blurImageUnifiedMemory/README.md index da5b0028cce..38549cd5fce 100644 --- a/samples/cuda_core/blurImageUnifiedMemory/README.md +++ b/samples/cuda_core/blurImageUnifiedMemory/README.md @@ -104,7 +104,7 @@ When returning a zero-copy view, the caller must close the buffers after use (e. ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` package (13.0.0+) - `cuda-core` package (>=1.0.0) - `numpy` package (>=2.3.2) diff --git a/samples/cuda_core/copyImageArraytoGPU/README.md b/samples/cuda_core/copyImageArraytoGPU/README.md index 4c4a100ad86..b1db08c087d 100644 --- a/samples/cuda_core/copyImageArraytoGPU/README.md +++ b/samples/cuda_core/copyImageArraytoGPU/README.md @@ -55,7 +55,7 @@ Copy image arrays between CPU and GPU memory using the modern `cuda.core` API wi ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - NumPy 2.3.2 or newer (required for DLPack support) - `cuda-python` package (>=13.0.0+) - `cuda-core` package (>=1.0.0) diff --git a/samples/cuda_core/cudaComputeLambdas/README.md b/samples/cuda_core/cudaComputeLambdas/README.md index 3ef683b353a..190486e6bfe 100644 --- a/samples/cuda_core/cudaComputeLambdas/README.md +++ b/samples/cuda_core/cudaComputeLambdas/README.md @@ -57,7 +57,7 @@ The sample exercises three algorithm families: - CUDA Toolkit 13.0 or newer (cuda.compute compiles ops to LTO-IR via Numba, which needs the toolkit's `nvvm` and `libdevice`). -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-cccl` (>=1.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/cudaGraphs/README.md b/samples/cuda_core/cudaGraphs/README.md index 0452cec1ba5..54837bd16a8 100644 --- a/samples/cuda_core/cudaGraphs/README.md +++ b/samples/cuda_core/cudaGraphs/README.md @@ -67,7 +67,7 @@ place without paying the cost of rebuilding the executable graph. ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/customPyTorchKernel/README.md b/samples/cuda_core/customPyTorchKernel/README.md index 5d767f143a4..defc05017a2 100644 --- a/samples/cuda_core/customPyTorchKernel/README.md +++ b/samples/cuda_core/customPyTorchKernel/README.md @@ -8,7 +8,7 @@ This sample demonstrates how to add a custom GPU operation to PyTorch using the - NVIDIA GPU with Compute Capability 7.0+ - CUDA Toolkit 13.0+ -- Python 3.10+ +- Python 3.11+ - PyTorch 2.0+ - cuda-python >= 13.0.0 - cuda-core >=1.0.0 diff --git a/samples/cuda_core/customTensorFlowKernel/README.md b/samples/cuda_core/customTensorFlowKernel/README.md index 06e0d4d765c..98358970e80 100644 --- a/samples/cuda_core/customTensorFlowKernel/README.md +++ b/samples/cuda_core/customTensorFlowKernel/README.md @@ -19,7 +19,7 @@ Learn how to add a custom GPU operation to TensorFlow using `cuda.core` with `tf - NVIDIA GPU with Compute Capability 7.0+ - CUDA Toolkit 13.0+ -- Python 3.10+ +- Python 3.11+ - TensorFlow 2.10+ - cuda-python >= 13.0.0 - cuda-core >=1.0.0 (required for LEGACY_DEFAULT_STREAM) diff --git a/samples/cuda_core/deviceQuery/README.md b/samples/cuda_core/deviceQuery/README.md index d89359744f4..d24c3309b29 100644 --- a/samples/cuda_core/deviceQuery/README.md +++ b/samples/cuda_core/deviceQuery/README.md @@ -100,7 +100,7 @@ The sample has two output modes: ### Software: - CUDA Toolkit 13.0 or newer (recommended; matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` package (>=13.0.0) - `cuda-core` package (>=1.0.0) diff --git a/samples/cuda_core/fftSignalAnalysis/README.md b/samples/cuda_core/fftSignalAnalysis/README.md index 87c84913b6b..21c0f6e6f78 100644 --- a/samples/cuda_core/fftSignalAnalysis/README.md +++ b/samples/cuda_core/fftSignalAnalysis/README.md @@ -58,7 +58,7 @@ cp.cuda.Stream.from_external(stream).use() ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - See `requirements.txt` for Python packages ## Installation diff --git a/samples/cuda_core/glInteropFluid/README.md b/samples/cuda_core/glInteropFluid/README.md index d6b9badbaa5..a483436a0df 100644 --- a/samples/cuda_core/glInteropFluid/README.md +++ b/samples/cuda_core/glInteropFluid/README.md @@ -42,7 +42,7 @@ introduced in cuda-core 1.1. ### Software - CUDA Toolkit 13.0 or newer (matches ``cuda-python`` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `numpy` (>=1.24) diff --git a/samples/cuda_core/glInteropMipmapLod/README.md b/samples/cuda_core/glInteropMipmapLod/README.md index c3a47b22bd4..96013a67e17 100644 --- a/samples/cuda_core/glInteropMipmapLod/README.md +++ b/samples/cuda_core/glInteropMipmapLod/README.md @@ -37,7 +37,7 @@ The sample: ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `numpy` (>=1.24) diff --git a/samples/cuda_core/glInteropPlasma/README.md b/samples/cuda_core/glInteropPlasma/README.md index d01cd709551..c3b9c443421 100644 --- a/samples/cuda_core/glInteropPlasma/README.md +++ b/samples/cuda_core/glInteropPlasma/README.md @@ -65,7 +65,7 @@ Each frame: ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `numpy` (>=2.3.2) diff --git a/samples/cuda_core/greenContext/README.md b/samples/cuda_core/greenContext/README.md index a1ab7101ca9..f602a0349b0 100644 --- a/samples/cuda_core/greenContext/README.md +++ b/samples/cuda_core/greenContext/README.md @@ -93,7 +93,7 @@ partition. The reference row lets you separate those two effects: - NVIDIA driver >= 12.4 - CUDA Toolkit 13.0 or newer. -- Python 3.10 or newer. +- Python 3.11 or newer. - `cuda-core` (`>=1.0.0`) ## Installation diff --git a/samples/cuda_core/ipcMemoryPool/README.md b/samples/cuda_core/ipcMemoryPool/README.md index 65351e4e1e6..64b4191a973 100644 --- a/samples/cuda_core/ipcMemoryPool/README.md +++ b/samples/cuda_core/ipcMemoryPool/README.md @@ -66,7 +66,7 @@ round-trip test: - Linux x86_64 (POSIX file-descriptor IPC handles are not available on Windows or macOS) - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/jitLtoLinking/README.md b/samples/cuda_core/jitLtoLinking/README.md index 234d364c834..6c84f158ffd 100644 --- a/samples/cuda_core/jitLtoLinking/README.md +++ b/samples/cuda_core/jitLtoLinking/README.md @@ -69,7 +69,7 @@ mode are verified against a NumPy reference. ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/kernelNsysProfile/README.md b/samples/cuda_core/kernelNsysProfile/README.md index 2979fe8d7a0..c0f85c9f76a 100644 --- a/samples/cuda_core/kernelNsysProfile/README.md +++ b/samples/cuda_core/kernelNsysProfile/README.md @@ -16,7 +16,7 @@ This sample demonstrates how to profile custom CUDA C++ kernels compiled and lau - NVIDIA GPU with Compute Capability 7.0+ - CUDA Toolkit 13.0+ -- Python 3.10+ +- Python 3.11+ - Packages: `numpy`, `cuda-python`, `cuda-core`, `cupy-cuda13x`, `nvtx` (see `requirements.txt`; NumPy >=2.3.2) **Install:** diff --git a/samples/cuda_core/launchConfigTuning/README.md b/samples/cuda_core/launchConfigTuning/README.md index 849744d3a31..6c6194fb687 100644 --- a/samples/cuda_core/launchConfigTuning/README.md +++ b/samples/cuda_core/launchConfigTuning/README.md @@ -83,7 +83,7 @@ elapsed_ms = (end_event - start_event) / n_iterations ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - See `requirements.txt` for Python packages ### Platform Support: diff --git a/samples/cuda_core/launchConfigTuning/requirements.txt b/samples/cuda_core/launchConfigTuning/requirements.txt index c9685b2f67a..326e8c9eab4 100644 --- a/samples/cuda_core/launchConfigTuning/requirements.txt +++ b/samples/cuda_core/launchConfigTuning/requirements.txt @@ -1,5 +1,5 @@ # Launch Configuration Tuning Sample Requirements -# Requires Python 3.10+, CUDA Toolkit 13.0+ +# Requires Python 3.11+, CUDA Toolkit 13.0+ cuda-python>=13.0.0 cuda-core>=1.0.0 diff --git a/samples/cuda_core/matrixMulSharedMem/README.md b/samples/cuda_core/matrixMulSharedMem/README.md index 06e95689371..9081c499f93 100644 --- a/samples/cuda_core/matrixMulSharedMem/README.md +++ b/samples/cuda_core/matrixMulSharedMem/README.md @@ -49,7 +49,7 @@ Demonstrates efficient matrix multiplication using nvmath-python APIs and custom ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - See requirements.txt for package dependencies ## Installation diff --git a/samples/cuda_core/memoryResources/README.md b/samples/cuda_core/memoryResources/README.md index 6089f8d4fa1..b3aff8e112e 100644 --- a/samples/cuda_core/memoryResources/README.md +++ b/samples/cuda_core/memoryResources/README.md @@ -76,7 +76,7 @@ result is verified on the host. ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/multiGPUGradientAverage/README.md b/samples/cuda_core/multiGPUGradientAverage/README.md index c7144941177..9e5b58cce61 100644 --- a/samples/cuda_core/multiGPUGradientAverage/README.md +++ b/samples/cuda_core/multiGPUGradientAverage/README.md @@ -15,7 +15,7 @@ This sample demonstrates gradient averaging across multiple GPUs using MPI and c ## Prerequisites -- Python 3.10+ +- Python 3.11+ - CUDA Toolkit 13.0+ - Standard MPI implementation (OpenMPI, MPICH, or Intel MPI) - Multiple NVIDIA GPUs (tested with 2+ GPUs) diff --git a/samples/cuda_core/pageRank/README.md b/samples/cuda_core/pageRank/README.md index 63ad39f8c4d..146bde5ce63 100644 --- a/samples/cuda_core/pageRank/README.md +++ b/samples/cuda_core/pageRank/README.md @@ -65,7 +65,7 @@ Demonstrates GPU-accelerated PageRank computation for graph analysis using RAPID ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - See requirements.txt for package dependencies ### Platform Support: diff --git a/samples/cuda_core/parallelHistogram/README.md b/samples/cuda_core/parallelHistogram/README.md index 2820102d599..139951028ac 100644 --- a/samples/cuda_core/parallelHistogram/README.md +++ b/samples/cuda_core/parallelHistogram/README.md @@ -62,7 +62,7 @@ atomicAdd(&histogram[data[i]], 1); // Thread-safe increment ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - See `requirements.txt` for Python packages ## Installation diff --git a/samples/cuda_core/parallelHistogram/requirements.txt b/samples/cuda_core/parallelHistogram/requirements.txt index c72b8b41779..7a80cf35a37 100644 --- a/samples/cuda_core/parallelHistogram/requirements.txt +++ b/samples/cuda_core/parallelHistogram/requirements.txt @@ -1,5 +1,5 @@ # Parallel Histogram with Atomics Sample Requirements -# Requires Python 3.10+, CUDA Toolkit 13.0+ +# Requires Python 3.11+, CUDA Toolkit 13.0+ cuda-python>=13.0.0 cuda-core>=1.0.0 diff --git a/samples/cuda_core/parallelReduction/README.md b/samples/cuda_core/parallelReduction/README.md index 7ca010f245f..757d029a4a0 100644 --- a/samples/cuda_core/parallelReduction/README.md +++ b/samples/cuda_core/parallelReduction/README.md @@ -50,7 +50,7 @@ if (tid % (2 * s) == 0) { // Don't do this! ### Software - CUDA Toolkit 13.0+ -- Python 3.10+ +- Python 3.11+ - `cuda-python` (13.0.0+) - `cuda-core` (>=1.0.0) - `cuda-cccl` (1.0.0+) diff --git a/samples/cuda_core/persistentProgramCache/README.md b/samples/cuda_core/persistentProgramCache/README.md index 44bbf185d16..1544907b85e 100644 --- a/samples/cuda_core/persistentProgramCache/README.md +++ b/samples/cuda_core/persistentProgramCache/README.md @@ -69,7 +69,7 @@ kernel = module.get_kernel(KERNEL_NAME) ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/prefixSum/README.md b/samples/cuda_core/prefixSum/README.md index 6542dbf36ec..d84d729d4b1 100644 --- a/samples/cuda_core/prefixSum/README.md +++ b/samples/cuda_core/prefixSum/README.md @@ -19,7 +19,7 @@ Demonstrates parallel prefix sum (scan) algorithms using cuda.compute with cuda. ### Software - CUDA Toolkit 13.0+ -- Python 3.10+ +- Python 3.11+ - `cuda-python` (13.0.0+) - `cuda-core` (>=1.0.0) - `cuda-cccl` (1.0.0+) diff --git a/samples/cuda_core/prefixSum/requirements.txt b/samples/cuda_core/prefixSum/requirements.txt index b05c5375317..b1c5b79c6a5 100644 --- a/samples/cuda_core/prefixSum/requirements.txt +++ b/samples/cuda_core/prefixSum/requirements.txt @@ -1,5 +1,5 @@ # Prefix Sum Sample Requirements -# Requires Python 3.10+, CUDA Toolkit 13.0+ +# Requires Python 3.11+, CUDA Toolkit 13.0+ cuda-python>=13.0.0 cuda-core>=1.0.0 diff --git a/samples/cuda_core/processCheckpoint/README.md b/samples/cuda_core/processCheckpoint/README.md index 621e172f3ed..0ae20c132ea 100644 --- a/samples/cuda_core/processCheckpoint/README.md +++ b/samples/cuda_core/processCheckpoint/README.md @@ -97,7 +97,7 @@ running ---------> locked ------------> checkpointed -----------> locked ------- - Linux (the CUDA checkpoint API is Linux-only). - NVIDIA driver with CUDA process checkpoint support. - CUDA Toolkit 13.0 or newer. -- Python 3.10 or newer. +- Python 3.11 or newer. - `cuda-core >= 1.0.0`. On non-Linux platforms and integrated GPUs, the sample prints a diagnostic diff --git a/samples/cuda_core/reduction/README.md b/samples/cuda_core/reduction/README.md index 0f2a0056ea9..4bd93944f98 100644 --- a/samples/cuda_core/reduction/README.md +++ b/samples/cuda_core/reduction/README.md @@ -29,7 +29,7 @@ Two-stage parallel reduction: each GPU block sums its chunk in **shared memory** ## Requirements - NVIDIA GPU, CUDA-capable driver; **CUDA Toolkit 13+** (for toolchain alignment with `cuda-core`) -- **Python 3.10+** +- **Python 3.11+** ```bash pip install -r requirements.txt diff --git a/samples/cuda_core/reductionMultiBlockCG/README.md b/samples/cuda_core/reductionMultiBlockCG/README.md index 825e3506621..0fadd1b067a 100644 --- a/samples/cuda_core/reductionMultiBlockCG/README.md +++ b/samples/cuda_core/reductionMultiBlockCG/README.md @@ -22,7 +22,7 @@ Single-kernel, two-stage reduction using **Cooperative Groups** and `grid.sync() ## Requirements -- NVIDIA GPU, **Pascal or newer**; **CUDA Toolkit 13+**; **Python 3.10+** +- NVIDIA GPU, **Pascal or newer**; **CUDA Toolkit 13+**; **Python 3.11+** - NVRTC must see **`cooperative_groups.h`** and **CCCL** headers (`cuda/std/*`) ```bash diff --git a/samples/cuda_core/simpleMultiGpu/README.md b/samples/cuda_core/simpleMultiGpu/README.md index 523c14689db..2250d9e575d 100644 --- a/samples/cuda_core/simpleMultiGpu/README.md +++ b/samples/cuda_core/simpleMultiGpu/README.md @@ -56,7 +56,7 @@ input buffers, so the kernels see fully-materialized data. ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/simpleP2P/README.md b/samples/cuda_core/simpleP2P/README.md index 980ca09db1e..b12ddfc4dc5 100644 --- a/samples/cuda_core/simpleP2P/README.md +++ b/samples/cuda_core/simpleP2P/README.md @@ -82,7 +82,7 @@ This sample demonstrates peer-to-peer (P2P) memory access between multiple GPUs 1. **Two or more NVIDIA Graphics Cards** with CUDA support and P2P capability 2. **CUDA Drivers** installed on your system 3. **CUDA Toolkit 13.0+** installed on your system -4. **Python 3.10 or newer** +4. **Python 3.11 or newer** 5. **Proper PCIe topology** (GPUs should be on same PCIe root complex for best performance) **Note**: This sample will gracefully exit if fewer than 2 GPUs are detected or if P2P is not supported between any GPU pair. diff --git a/samples/cuda_core/simplePrint/README.md b/samples/cuda_core/simplePrint/README.md index 1e2550f1c66..79c1d5f3cff 100644 --- a/samples/cuda_core/simplePrint/README.md +++ b/samples/cuda_core/simplePrint/README.md @@ -66,7 +66,7 @@ CUDA Python (cuda.core), Numba CUDA, Kernel Compilation, Printf in Kernels, Mult ### Software: - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` package (13.0+) - `cuda-core` package (>=1.0.0) - `numba-cuda` package (0.24.0+, for Pythonic kernel authoring) diff --git a/samples/cuda_core/simpleZeroCopy/README.md b/samples/cuda_core/simpleZeroCopy/README.md index cf8a38d3d28..7f7a4421cd6 100644 --- a/samples/cuda_core/simpleZeroCopy/README.md +++ b/samples/cuda_core/simpleZeroCopy/README.md @@ -52,7 +52,7 @@ This sample demonstrates zero-copy access using **`cuda.core`** to compile and l ## Requirements 1. **NVIDIA GPU** and a **driver** compatible with your installed `cuda-python` / `cuda-core` wheels. -2. **Python 3.10 or newer** +2. **Python 3.11 or newer** 3. Install **`pip install -r requirements.txt`** (NumPy, `cuda-python`, `cuda-core`). A **system** CUDA Toolkit is not strictly required if the process can load the driver/runtime; use `LD_LIBRARY_PATH` in *How to run* if you hit missing-library errors. **Install packages:** diff --git a/samples/cuda_core/streamingCopyComputeOverlap/README.md b/samples/cuda_core/streamingCopyComputeOverlap/README.md index 7ecdc142dd7..5a02ebeaab9 100644 --- a/samples/cuda_core/streamingCopyComputeOverlap/README.md +++ b/samples/cuda_core/streamingCopyComputeOverlap/README.md @@ -43,7 +43,7 @@ Stream 2: [H2D][Compute][D2H] ## Requirements - CUDA Toolkit 13.0+ -- Python 3.10+ +- Python 3.11+ - `cuda-python`, `cuda-core`, `numpy` ## Installation diff --git a/samples/cuda_core/streamingCopyComputeOverlap/requirements.txt b/samples/cuda_core/streamingCopyComputeOverlap/requirements.txt index 0b19f485db2..5855f6dfb3e 100644 --- a/samples/cuda_core/streamingCopyComputeOverlap/requirements.txt +++ b/samples/cuda_core/streamingCopyComputeOverlap/requirements.txt @@ -1,5 +1,5 @@ # Streaming Copy Compute Overlap Sample Requirements -# Requires Python 3.10 or newer +# Requires Python 3.11 or newer cuda-python>=13.0.0 cuda-core>=1.0.0 diff --git a/samples/cuda_core/stridedMemoryViewConstructors/README.md b/samples/cuda_core/stridedMemoryViewConstructors/README.md index f2d298721c7..eb1e4d9ba35 100644 --- a/samples/cuda_core/stridedMemoryViewConstructors/README.md +++ b/samples/cuda_core/stridedMemoryViewConstructors/README.md @@ -58,7 +58,7 @@ kernel. ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/stridedMemoryViewCpu/README.md b/samples/cuda_core/stridedMemoryViewCpu/README.md index 80277b3e078..2e13194ccf4 100644 --- a/samples/cuda_core/stridedMemoryViewCpu/README.md +++ b/samples/cuda_core/stridedMemoryViewCpu/README.md @@ -65,7 +65,7 @@ tour lives in ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `numpy` (>=2.3.2) diff --git a/samples/cuda_core/stridedMemoryViewGpu/README.md b/samples/cuda_core/stridedMemoryViewGpu/README.md index ddd0a08715b..4fffbba8b38 100644 --- a/samples/cuda_core/stridedMemoryViewGpu/README.md +++ b/samples/cuda_core/stridedMemoryViewGpu/README.md @@ -60,7 +60,7 @@ The constructor tour lives in ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/systemInfo/README.md b/samples/cuda_core/systemInfo/README.md index e8acdcfac02..31a684d38d3 100644 --- a/samples/cuda_core/systemInfo/README.md +++ b/samples/cuda_core/systemInfo/README.md @@ -61,7 +61,7 @@ Import stable symbols from the top-level `cuda.core` package (not `cuda.core.exp ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.12 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) diff --git a/samples/cuda_core/textureSample/README.md b/samples/cuda_core/textureSample/README.md index 725034bf424..6e1f3e26fc5 100644 --- a/samples/cuda_core/textureSample/README.md +++ b/samples/cuda_core/textureSample/README.md @@ -29,7 +29,7 @@ blend of texels ``(0, 0)`` and ``(1, 0)``. ### Software - CUDA Toolkit 13.0 or newer -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `numpy` (>=1.24) diff --git a/samples/cuda_core/threadBlockCluster/README.md b/samples/cuda_core/threadBlockCluster/README.md index e8764518ab1..c75d9fd9123 100644 --- a/samples/cuda_core/threadBlockCluster/README.md +++ b/samples/cuda_core/threadBlockCluster/README.md @@ -70,7 +70,7 @@ The sample **waives itself** when: - CUDA Toolkit 13.0 or newer with `cooperative_groups.h` in its `include/` directory. Set `CUDA_PATH` or `CUDA_HOME`. -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `numpy` (>=2.2.5) diff --git a/samples/cuda_core/tmaTensorMap/README.md b/samples/cuda_core/tmaTensorMap/README.md index 6ab4be27ce3..f975ee9e38f 100644 --- a/samples/cuda_core/tmaTensorMap/README.md +++ b/samples/cuda_core/tmaTensorMap/README.md @@ -71,7 +71,7 @@ The sample: ### Software - CUDA Toolkit 13.0 or newer with libcudacxx (cccl) headers -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0) diff --git a/samples/cuda_core/vectorAdd/README.md b/samples/cuda_core/vectorAdd/README.md index 3d3e843547b..0ebba45abff 100644 --- a/samples/cuda_core/vectorAdd/README.md +++ b/samples/cuda_core/vectorAdd/README.md @@ -74,7 +74,7 @@ Import stable symbols from the top-level package (not `cuda.core.experimental`). ### Software - CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) -- Python 3.10 or newer +- Python 3.11 or newer - `cuda-python` (>=13.0.0) - `cuda-core` (>=1.0.0) - `cupy-cuda13x` (>=14.0.0)