Repository: NVIDIA/cuda-python
Pull request #547: Various documentation improvements 
Author: login: leofang
Labels: name: documentation
description: Improvements or additions to documentation
name: P1
description: Medium priority - Should do
name: cuda.bindings
description: Everything related to the cuda.bindings module
Created: 2025-04-05T00:15:52Z | Merged: 2025-04-07T18:30:21Z

- Close #532
- Close #537
- Fix #522 (which mixed up `cuda.cooperative` and `cuda.parallel`)
- Improve cuda.core/bindings installation guides
- Add missing release note entries
- Consolidate `cuda.bindings` installation instructions 
- Fix hyperlinks to nvJitLink/NVVM API references 
- Misc fixes

Linked issue #532: Document static library source build requirement
https://github.com/NVIDIA/cuda-python/pull/517 added static runtime as a source build dependency. We should document how to find it.

Something like
- Env variable LIBRARY_PATH set to CUDA_HOME/lib64
- If you get CUDA through conda, you need to install the cuda-cudart-static package
Linked issue comments: user: login: leofang
created_at: 2025-03-25T19:21:22Z
body: I can take over this!
author_association: MEMBER

Diff:
diff --git a/README.md b/README.md
index 3639857f21f..25b3b87af01 100644
--- a/README.md
+++ b/README.md
@@ -4,12 +4,13 @@ CUDA Python is the home for accessing NVIDIA’s CUDA platform from Python. It c
 
 * [cuda.core](https://nvidia.github.io/cuda-python/cuda-core/latest): Pythonic access to CUDA Runtime and other core functionalities
 * [cuda.bindings](https://nvidia.github.io/cuda-python/cuda-bindings/latest): Low-level Python bindings to CUDA C APIs
-* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc.
-* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package providing CUB's reusable block-wide and warp-wide primitives for use within Numba CUDA kernels
+* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package providing CCCL's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
+* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package for easy access to CCCL's highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc, that are callable on the *host*
+* [numba.cuda](https://nvidia.github.io/numba-cuda/): Numba's target for CUDA GPU programming by directly compiling a restricted subset of Python code into CUDA kernels and device functions following the CUDA execution model.
 
 For access to NVIDIA CPU & GPU Math Libraries, please refer to [nvmath-python](https://docs.nvidia.com/cuda/nvmath-python/latest).
 
-CUDA Python is currently undergoing an overhaul to improve existing and bring up new components. All of the previously available functionalities from the cuda-python package will continue to be available, please refer to the [cuda.bindings](https://nvidia.github.io/cuda-python/cuda-bindings/latest) documentation for installation guide and further detail.
+CUDA Python is currently undergoing an overhaul to improve existing and bring up new components. All of the previously available functionalities from the `cuda-python` package will continue to be available, please refer to the [cuda.bindings](https://nvidia.github.io/cuda-python/cuda-bindings/latest) documentation for installation guide and further detail.
 
 ## cuda-python as a metapackage
 
@@ -37,9 +38,4 @@ The list of available interfaces are:
 * CUDA Runtime
 * NVRTC
 * nvJitLink
-
-## Supported Python Versions
-
-All `cuda-python` subpackages follows CPython [End-Of-Life](https://devguide.python.org/versions/) schedule for supported Python version guarantee.
-
-Before dropping support there will be an issue raised as a notice.
+* NVVM
diff --git a/cuda_bindings/DESCRIPTION.rst b/cuda_bindings/DESCRIPTION.rst
index 5dd065e4deb..8a925f2ddc9 100644
--- a/cuda_bindings/DESCRIPTION.rst
+++ b/cuda_bindings/DESCRIPTION.rst
@@ -1,26 +1,7 @@
-*******************************************************
+****************************************
 cuda.bindings: Low-level CUDA interfaces
-*******************************************************
+****************************************
 
-`cuda.bindings` is a standard set of low-level interfaces, providing full coverage of and access to the CUDA host APIs from Python. Checkout the `Overview <https://nvidia.github.io/cuda-python/cuda-bindings/latest/overview.html>`_ for the workflow and performance results.
+`cuda.bindings` is a standard set of low-level interfaces, providing full coverage of and 1:1 access to the CUDA host APIs from Python. Checkout the `Overview <https://nvidia.github.io/cuda-python/cuda-bindings/latest/overview.html>`_ for the workflow and performance results.
 
-Installation
-============
-
-`cuda.bindings` can be installed from:
-
-* PyPI
-* Conda (conda-forge/nvidia channels)
-* Source builds
-
-Differences between these options are described in `Installation <https://nvidia.github.io/cuda-python/cuda-bindings/latest/install.html>`_ documentation. Each package guarantees minor version compatibility.
-
-Runtime Dependencies
-====================
-
-`cuda.bindings` is supported on all the same platforms as CUDA. Specific dependencies are as follows:
-
-* Driver: Linux (450.80.02 or later) Windows (456.38 or later)
-* CUDA Toolkit 12.x
-
-Only the NVRTC and nvJitLink redistributable components are required from the CUDA Toolkit, which can be obtained via PyPI, Conda, or local installers (as described in the CUDA Toolkit `Windows <https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html>`_ and `Linux <https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html>`_ Installation Guides).
+For the installation instruction, please refer to the `Installation <https://nvidia.github.io/cuda-python/cuda-bindings/latest/install.html>`_ page.
diff --git a/cuda_bindings/README.md b/cuda_bindings/README.md
index b468fb0ec24..47233f61217 100644
--- a/cuda_bindings/README.md
+++ b/cuda_bindings/README.md
@@ -1,27 +1,12 @@
 # `cuda.bindings`: Low-level CUDA interfaces
 
-`cuda.bindings` is a standard set of low-level interfaces, providing full coverage of and access to the CUDA host APIs from Python. Checkout the [Overview](https://nvidia.github.io/cuda-python/cuda-bindings/latest/overview.html) for the workflow and performance results.
+`cuda.bindings` is a standard set of low-level interfaces, providing full coverage of and access to the CUDA host APIs from Python. Checkout the [Overview page](https://nvidia.github.io/cuda-python/cuda-bindings/latest/overview.html) for the workflow and performance results.
 
 `cuda.bindings` is a subpackage of `cuda-python`.
 
 ## Installing
 
-`cuda.bindings` can be installed from:
-
-* PyPI
-* Conda (conda-forge/nvidia channels)
-* Source builds
-
-Differences between these options are described in [Installation](https://nvidia.github.io/cuda-python/cuda-bindings/latest/install.html) documentation. Each package guarantees minor version compatibility.
-
-## Runtime Dependencies
-
-`cuda.bindings` is supported on all the same platforms as CUDA. Specific dependencies are as follows:
-
-* Driver: Linux (450.80.02 or later) Windows (456.38 or later)
-* CUDA Toolkit 12.x
-
-Only the NVRTC and nvJitLink redistributable components are required from the CUDA Toolkit, which can be obtained via PyPI, Conda, or local installers (as described in the CUDA Toolkit [Windows](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html) and [Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html) Installation Guides).
+Please refer to the [Installation page](https://nvidia.github.io/cuda-python/cuda-bindings/latest/install.html) for instructions and required/optional dependencies.
 
 ## Developing
 
diff --git a/cuda_bindings/docs/build_docs.sh b/cuda_bindings/docs/build_docs.sh
index 8ace0b33073..ffeece9da84 100755
--- a/cuda_bindings/docs/build_docs.sh
+++ b/cuda_bindings/docs/build_docs.sh
@@ -17,7 +17,7 @@ fi
 # version selector or directory structure.
 if [[ -z "${SPHINX_CUDA_BINDINGS_VER}" ]]; then
     export SPHINX_CUDA_BINDINGS_VER=$(python -c "from importlib.metadata import version; \
-                                                 ver = '.'.join(str(version('cuda-python')).split('.')[:3]); \
+                                                 ver = '.'.join(str(version('cuda-bindings')).split('.')[:3]); \
                                                  print(ver)" \
                                       | awk -F'+' '{print $1}')
 fi
diff --git a/cuda_bindings/docs/source/conf.py b/cuda_bindings/docs/source/conf.py
index bf9c08472cb..5ea8b444340 100644
--- a/cuda_bindings/docs/source/conf.py
+++ b/cuda_bindings/docs/source/conf.py
@@ -18,7 +18,7 @@
 # -- Project information -----------------------------------------------------
 
 project = "cuda.bindings"
-copyright = "2021-2024, NVIDIA"
+copyright = "2021-2025, NVIDIA"
 author = "NVIDIA"
 
 # The full version, including alpha/beta/rc tags
@@ -30,7 +30,14 @@
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
-extensions = ["sphinx.ext.autodoc", "sphinx.ext.napoleon", "myst_nb", "enum_tools.autoenum"]
+extensions = [
+    "sphinx.ext.autodoc",
+    "sphinx.ext.napoleon",
+    "sphinx.ext.intersphinx",
+    "myst_nb",
+    "enum_tools.autoenum",
+    "sphinx_copybutton",
+]
 
 nb_execution_mode = "off"
 numfig = True
@@ -85,6 +92,16 @@
 # so a file named "default.css" will overwrite the builtin "default.css".
 html_static_path = ["_static"]
 
+# skip cmdline prompts
+copybutton_exclude = ".linenos, .gp"
+
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/3/", None),
+    "numpy": ("https://numpy.org/doc/stable/", None),
+    "nvvm": ("https://docs.nvidia.com/cuda/libnvvm-api/", None),
+    "nvjitlink": ("https://docs.nvidia.com/cuda/nvjitlink/", None),
+}
+
 suppress_warnings = [
     # for warnings about multiple possible targets, see NVIDIA/cuda-python#152
     "ref.python",
diff --git a/cuda_bindings/docs/source/install.md b/cuda_bindings/docs/source/install.md
index 9c557062119..175e304e619 100644
--- a/cuda_bindings/docs/source/install.md
+++ b/cuda_bindings/docs/source/install.md
@@ -4,11 +4,13 @@
 
 `cuda.bindings` supports the same platforms as CUDA. Runtime dependencies are:
 
+* Linux (x86-64, arm64) and Windows (x86-64)
+* Python 3.9 - 3.13
 * Driver: Linux (450.80.02 or later) Windows (456.38 or later)
-* CUDA Toolkit 12.x
+* Optionally, NVRTC, nvJitLink, and NVVM from CUDA Toolkit 12.x
 
 ```{note}
-Only the NVRTC and nvJitLink redistributable components are required from the CUDA Toolkit, which can be obtained via PyPI, Conda, or local installers (as described in the CUDA Toolkit [Windows](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html) and [Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html) Installation Guides).
+The optional CUDA Toolkit components can be installed via PyPI, Conda, OS-specific package managers, or local installers (as described in the CUDA Toolkit [Windows](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html) and [Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html) Installation Guides).
 ```
 
 Starting from v12.8.0, `cuda-python` becomes a meta package which currently depends only on `cuda-bindings`; in the future more sub-packages will be added to `cuda-python`. In the instructions below, we still use `cuda-python` as example to serve existing users, but everything is applicable to `cuda-bindings` as well.
@@ -44,13 +46,17 @@ $ conda install -c conda-forge cuda-python
 ### Requirements
 
 * CUDA Toolkit headers[^1]
+* CUDA Runtime static library[^2]
 
 [^1]: User projects that `cimport` CUDA symbols in Cython must also use CUDA Toolkit (CTK) types as provided by the `cuda.bindings` major.minor version. This results in CTK headers becoming a transitive dependency of downstream projects through CUDA Python.
 
+[^2]: The CUDA Runtime static library (`libcudart_static.a` on Linux, `cudart_static.lib` on Windows) is part of the CUDA Toolkit. If using conda packages, it is contained in the `cuda-cudart-static` package.
+
 Source builds require that the provided CUDA headers are of the same major.minor version as the `cuda.bindings` you're trying to build. Despite this requirement, note that the minor version compatibility is still maintained. Use the `CUDA_HOME` (or `CUDA_PATH`) environment variable to specify the location of your headers. For example, if your headers are located in `/usr/local/cuda/include`, then you should set `CUDA_HOME` with:
 
 ```console
 $ export CUDA_HOME=/usr/local/cuda
+$ export LIBRARY_PATH=$CUDA_HOME/lib64:$LIBRARY_PATH
 ```
 
 See [Environment Variables](environment_variables.md) for a description of other build-time environment variables.
diff --git a/cuda_bindings/docs/source/module/nvjitlink.rst b/cuda_bindings/docs/source/module/nvjitlink.rst
index 79f5cd1063a..973cd5c4472 100644
--- a/cuda_bindings/docs/source/module/nvjitlink.rst
+++ b/cuda_bindings/docs/source/module/nvjitlink.rst
@@ -1,3 +1,5 @@
+.. default-role:: cpp:any
+
 nvjitlink
 =========
 
diff --git a/cuda_bindings/docs/source/module/nvvm.rst b/cuda_bindings/docs/source/module/nvvm.rst
index 502d20ea185..33da86a64ec 100644
--- a/cuda_bindings/docs/source/module/nvvm.rst
+++ b/cuda_bindings/docs/source/module/nvvm.rst
@@ -1,3 +1,5 @@
+.. default-role:: cpp:any
+
 nvvm
 ====
 
diff --git a/cuda_bindings/docs/source/overview.md b/cuda_bindings/docs/source/overview.md
index bfd027b5f4c..1168d926f5a 100644
--- a/cuda_bindings/docs/source/overview.md
+++ b/cuda_bindings/docs/source/overview.md
@@ -205,7 +205,7 @@ argument on either host or device. Since we already prepared each of our argumen
 construction of our final contiguous array is done by retrieving the `XX.ctypes.data`
 of each kernel argument.
 
-```{code-cell} python
+```python
 args = [a, dX, dY, dOut, n]
 args = np.array([arg.ctypes.data for arg in args], dtype=np.uint64)
 ```
diff --git a/cuda_bindings/docs/source/release/11.8.7-notes.rst b/cuda_bindings/docs/source/release/11.8.7-notes.rst
index 8f1257d0b79..e951db91cbb 100644
--- a/cuda_bindings/docs/source/release/11.8.7-notes.rst
+++ b/cuda_bindings/docs/source/release/11.8.7-notes.rst
@@ -9,3 +9,9 @@ Highlights
 
 * The ``cuda.bindings.nvvm`` Python module was added, wrapping the
   `libNVVM C API <https://docs.nvidia.com/cuda/libnvvm-api/>`_.
+
+
+Bug fixes
+---------
+
+* Fix segfault when converting char* NULL to bytes
diff --git a/cuda_bindings/docs/source/release/12.X.Y-notes.rst b/cuda_bindings/docs/source/release/12.X.Y-notes.rst
index f3a29d462c0..d6b903e2e7d 100644
--- a/cuda_bindings/docs/source/release/12.X.Y-notes.rst
+++ b/cuda_bindings/docs/source/release/12.X.Y-notes.rst
@@ -11,5 +11,19 @@ Highlights
   `libNVVM C API <https://docs.nvidia.com/cuda/libnvvm-api/>`_.
 * Source build error checking added for missing required headers
 * Statically link CUDA Runtime instead of reimplementing it
-* Fix performance hint warnings raised by Cython 3
 * Move stream callback wrappers to the Python layer
+* Return code construction is made faster
+
+Bug fixes
+---------
+
+* Fix segfault when converting char* NULL to bytes
+
+
+Miscellaneous
+-------------
+
+* Benchmark suite is updated
+* Improvements in the introductory code samples
+* Fix performance hint warnings raised by Cython 3
+* Improvements in the Overview page
diff --git a/cuda_core/docs/source/install.md b/cuda_core/docs/source/install.md
index 6f59324c937..46745b72186 100644
--- a/cuda_core/docs/source/install.md
+++ b/cuda_core/docs/source/install.md
@@ -12,7 +12,7 @@ dependencies are as follows:
 
 [^1]: Including `cuda-python`.
 
-`cuda.core` supports Python 3.9 - 3.12, on Linux (x86-64, arm64) and Windows (x86-64).
+`cuda.core` supports Python 3.9 - 3.13, on Linux (x86-64, arm64) and Windows (x86-64).
 
 ## Installing from PyPI
 
@@ -22,8 +22,8 @@ $ pip install cuda-core[cu12]
 ```
 and likewise use `[cu11]` for CUDA 11.
 
-Note that using `cuda.core` with NVRTC or nvJitLink installed from PyPI via `pip install` is currently
-not supported. This will be fixed in a future release.
+Note that using `cuda.core` with NVRTC or nvJitLink installed from PyPI via `pip install` requires
+`cuda.bindings` 12.8.0+ or 11.8.6+.
 
 ## Installing from Conda (conda-forge)
 
diff --git a/cuda_python/docs/source/conf.py b/cuda_python/docs/source/conf.py
index 8b2d757c410..fe6e934dc35 100644
--- a/cuda_python/docs/source/conf.py
+++ b/cuda_python/docs/source/conf.py
@@ -95,4 +95,5 @@
 .. _cuda.bindings: {CUDA_PYTHON_DOMAIN}/cuda-bindings/latest
 .. _cuda.cooperative: https://nvidia.github.io/cccl/cuda_cooperative/
 .. _cuda.parallel: https://nvidia.github.io/cccl/cuda_parallel/
+.. _numba.cuda: https://nvidia.github.io/numba-cuda/
 """
diff --git a/cuda_python/docs/source/index.rst b/cuda_python/docs/source/index.rst
index 78b81a18d5e..9a492d1ef69 100644
--- a/cuda_python/docs/source/index.rst
+++ b/cuda_python/docs/source/index.rst
@@ -6,8 +6,9 @@ multiple components:
 
 - `cuda.core`_: Pythonic access to CUDA runtime and other core functionalities
 - `cuda.bindings`_: Low-level Python bindings to CUDA C APIs
-- `cuda.cooperative`_: A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc.
-- `cuda.parallel`_: A Python package providing CUB's reusable block-wide and warp-wide primitives for use within Numba CUDA kernels
+- `cuda.cooperative`_: A Python package providing CCCL's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
+- `cuda.parallel`_: A Python package for easy access to CCCL's highly efficient and customizable parallel algorithms, like ``sort``, ``scan``, ``reduce``, ``transform``, etc, that are callable on the *host*
+- `numba.cuda`_: Numba's target for CUDA GPU programming by directly compiling a restricted subset of Python code into CUDA kernels and device functions following the CUDA execution model.
 
 For access to NVIDIA CPU & GPU Math Libraries, please refer to `nvmath-python`_.
 
@@ -30,5 +31,6 @@ be available, please refer to the `cuda.bindings`_ documentation for installatio
    cuda.bindings <https://nvidia.github.io/cuda-python/cuda-bindings/latest>
    cuda.cooperative <https://nvidia.github.io/cccl/cuda_cooperative>
    cuda.parallel <https://nvidia.github.io/cccl/cuda_parallel>
+   numba.cuda <https://nvidia.github.io/numba-cuda/>
    conduct.md
    contribute.md


Reviews:
user: login: leofang
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-05T00:16:32Z
user: login: kkraus14
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-07T14:59:14Z
user: login: leofang
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T15:10:38Z
user: login: leofang
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T15:14:35Z
user: login: leofang
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T15:28:47Z
user: login: kkraus14
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-07T17:01:36Z
user: login: vzhurba01
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T17:35:59Z
user: login: rwgk
body: Nice!

The only super tiny thing that stood out to me: maybe keep nvJitLink, NVRTC, NVVM in lexicographical order? — It doesn't matter much for just three items, but might be helpful if we add more.
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T17:47:28Z

Review comments:
diff_hunk: @@ -44,13 +44,17 @@ $ conda install -c conda-forge cuda-python
 ### Requirements
 
 * CUDA Toolkit headers[^1]
+* static CUDA runtime[^2]
path: cuda_bindings/docs/source/install.md
user: login: leofang
body: cc @isvoid for vis
created_at: 2025-04-05T00:16:31Z
author_association: MEMBER
diff_hunk: @@ -4,12 +4,13 @@ CUDA Python is the home for accessing NVIDIA’s CUDA platform from Python. It c
 
 * [cuda.core](https://nvidia.github.io/cuda-python/cuda-core/latest): Pythonic access to CUDA Runtime and other core functionalities
 * [cuda.bindings](https://nvidia.github.io/cuda-python/cuda-bindings/latest): Low-level Python bindings to CUDA C APIs
-* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc.
-* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package providing CUB's reusable block-wide and warp-wide primitives for use within Numba CUDA kernels
+* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package providing CUB's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
+* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc, that are callable on the *host*.
path: README.md
user: login: kkraus14
body: It's a bit funky that `cuda.cooperative` refers to `CUB` but `cuda.parallel` doesn't refer to Thrust. Let's just align both to CCCL?
```suggestion
* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package providing CCCL's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package for easy access to CCCL's highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc, that are callable on the *host*
```
created_at: 2025-04-07T14:46:38Z
author_association: COLLABORATOR
diff_hunk: @@ -4,12 +4,13 @@ CUDA Python is the home for accessing NVIDIA’s CUDA platform from Python. It c
 
 * [cuda.core](https://nvidia.github.io/cuda-python/cuda-core/latest): Pythonic access to CUDA Runtime and other core functionalities
 * [cuda.bindings](https://nvidia.github.io/cuda-python/cuda-bindings/latest): Low-level Python bindings to CUDA C APIs
-* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc.
-* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package providing CUB's reusable block-wide and warp-wide primitives for use within Numba CUDA kernels
+* [cuda.cooperative](https://nvidia.github.io/cccl/cuda_cooperative/): A Python package providing CUB's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
+* [cuda.parallel](https://nvidia.github.io/cccl/cuda_parallel/): A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc, that are callable on the *host*.
+* [numba.cuda](https://nvidia.github.io/numba-cuda/): Numba's CUDA target for writing CUDA SIMT kernels in Python.
path: README.md
user: login: kkraus14
body: ```suggestion
* [numba.cuda](https://nvidia.github.io/numba-cuda/): Numba's target for CUDA GPU programming by directly compiling a restricted subset of Python code into CUDA kernels and device functions following the CUDA execution model.
```
created_at: 2025-04-07T14:48:31Z
author_association: COLLABORATOR
diff_hunk: @@ -85,6 +92,16 @@
 # so a file named "default.css" will overwrite the builtin "default.css".
 html_static_path = ["_static"]
 
+# skip cmdline prompts
+copybutton_exclude = ".linenos, .gp"
+
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/3/", None),
+    "numpy": ("https://numpy.org/doc/stable/", None),
+    "nvvm": ("https://docs.nvidia.com/cuda/libnvvm-api/", None),
+    "nvjitlink": ("https://docs.nvidia.com/cuda/nvjitlink/", None),
path: cuda_bindings/docs/source/conf.py
user: login: kkraus14
body: Any reason to add nvrtc or the CUDA runtime / driver APIs here?
created_at: 2025-04-07T14:51:37Z
author_association: COLLABORATOR
diff_hunk: @@ -44,13 +44,17 @@ $ conda install -c conda-forge cuda-python
 ### Requirements
 
 * CUDA Toolkit headers[^1]
+* static CUDA runtime[^2]
path: cuda_bindings/docs/source/install.md
user: login: kkraus14
body: Does it make more sense to call this the `CUDA Runtime Static Library`? Also `Runtime` is capitalized in NVIDIA docs, so capitalizing here.
```suggestion
* CUDA Runtime static library[^2]
```
created_at: 2025-04-07T14:54:03Z
author_association: COLLABORATOR
diff_hunk: @@ -44,13 +46,17 @@ $ conda install -c conda-forge cuda-python
 ### Requirements
 
 * CUDA Toolkit headers[^1]
+* static CUDA runtime[^2]
 
 [^1]: User projects that `cimport` CUDA symbols in Cython must also use CUDA Toolkit (CTK) types as provided by the `cuda.bindings` major.minor version. This results in CTK headers becoming a transitive dependency of downstream projects through CUDA Python.
 
+[^2]: The static CUDA runtime (`libcudart_static.a` on Linux, `cudart_static.lib` on Windows) is part of CUDA Toolkit. If CUDA is installed from conda, it is contained in the `cuda-cudart-static` package.
path: cuda_bindings/docs/source/install.md
user: login: kkraus14
body: > If CUDA is installed from conda

This is a bit ambiguous because of drivers vs libraries. Tried to make it clearer here.

```suggestion
[^2]: The CUDA Runtime static library (`libcudart_static.a` on Linux, `cudart_static.lib` on Windows) is part of the CUDA Toolkit. If using conda packages, it is contained in the `cuda-cudart-static` package.
```
created_at: 2025-04-07T14:55:37Z
author_association: COLLABORATOR
diff_hunk: @@ -44,13 +46,17 @@ $ conda install -c conda-forge cuda-python
 ### Requirements
 
 * CUDA Toolkit headers[^1]
+* static CUDA runtime[^2]
 
 [^1]: User projects that `cimport` CUDA symbols in Cython must also use CUDA Toolkit (CTK) types as provided by the `cuda.bindings` major.minor version. This results in CTK headers becoming a transitive dependency of downstream projects through CUDA Python.
 
+[^2]: The static CUDA runtime (`libcudart_static.a` on Linux, `cudart_static.lib` on Windows) is part of CUDA Toolkit. If CUDA is installed from conda, it is contained in the `cuda-cudart-static` package.
+
 Source builds require that the provided CUDA headers are of the same major.minor version as the `cuda.bindings` you're trying to build. Despite this requirement, note that the minor version compatibility is still maintained. Use the `CUDA_HOME` (or `CUDA_PATH`) environment variable to specify the location of your headers. For example, if your headers are located in `/usr/local/cuda/include`, then you should set `CUDA_HOME` with:
 
 ```console
 $ export CUDA_HOME=/usr/local/cuda
+$ export LIBRARY_PATH=$CUDA_HOME/lib64:$LIBRARY_PATH
path: cuda_bindings/docs/source/install.md
user: login: kkraus14
body: Note for the future: we really shouldn't need to set these when things are installed in standard locations.
created_at: 2025-04-07T14:56:24Z
author_association: COLLABORATOR
diff_hunk: @@ -6,8 +6,9 @@ multiple components:
 
 - `cuda.core`_: Pythonic access to CUDA runtime and other core functionalities
 - `cuda.bindings`_: Low-level Python bindings to CUDA C APIs
-- `cuda.cooperative`_: A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc.
-- `cuda.parallel`_: A Python package providing CUB's reusable block-wide and warp-wide primitives for use within Numba CUDA kernels
+- `cuda.cooperative`_: A Python package providing CUB's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
+- `cuda.parallel`_: A Python package for easy access to highly efficient and customizable parallel algorithms, like ``sort``, ``scan``, ``reduce``, ``transform``, etc, that are callable on the *host*
path: cuda_python/docs/source/index.rst
user: login: kkraus14
body: ```suggestion
- `cuda.cooperative`_: A Python package providing CCCL's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
- `cuda.parallel`_: A Python package for easy access to CCCL's highly efficient and customizable parallel algorithms, like ``sort``, ``scan``, ``reduce``, ``transform``, etc, that are callable on the *host*
```
created_at: 2025-04-07T14:58:44Z
author_association: COLLABORATOR
diff_hunk: @@ -6,8 +6,9 @@ multiple components:
 
 - `cuda.core`_: Pythonic access to CUDA runtime and other core functionalities
 - `cuda.bindings`_: Low-level Python bindings to CUDA C APIs
-- `cuda.cooperative`_: A Python package for easy access to highly efficient and customizable parallel algorithms, like `sort`, `scan`, `reduce`, `transform`, etc.
-- `cuda.parallel`_: A Python package providing CUB's reusable block-wide and warp-wide primitives for use within Numba CUDA kernels
+- `cuda.cooperative`_: A Python package providing CUB's reusable block-wide and warp-wide *device* primitives for use within Numba CUDA kernels
+- `cuda.parallel`_: A Python package for easy access to highly efficient and customizable parallel algorithms, like ``sort``, ``scan``, ``reduce``, ``transform``, etc, that are callable on the *host*
+- `numba.cuda`_: Numba's CUDA target for writing CUDA SIMT kernels in Python
path: cuda_python/docs/source/index.rst
user: login: kkraus14
body: ```suggestion
- `numba.cuda`_: Numba's target for CUDA GPU programming by directly compiling a restricted subset of Python code into CUDA kernels and device functions following the CUDA execution model.
```
created_at: 2025-04-07T14:59:10Z
author_association: COLLABORATOR
diff_hunk: @@ -85,6 +92,16 @@
 # so a file named "default.css" will overwrite the builtin "default.css".
 html_static_path = ["_static"]
 
+# skip cmdline prompts
+copybutton_exclude = ".linenos, .gp"
+
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/3/", None),
+    "numpy": ("https://numpy.org/doc/stable/", None),
+    "nvvm": ("https://docs.nvidia.com/cuda/libnvvm-api/", None),
+    "nvjitlink": ("https://docs.nvidia.com/cuda/nvjitlink/", None),
path: cuda_bindings/docs/source/conf.py
user: login: leofang
body: Currently the two codegens set different expectations regarding API doc generation. The codegen used by driver/runtime/nvrtc regenerates the entire C API references in the docs (with signatures adjusted to match Python), whereas the codegen used by nvvm/nvjitlink generates basic docs with a `see also` link to the corresponding C API. The addition of these links here contain proper `objects.inv` that allows cross-linking, e.g.
https://nvidia.github.io/cuda-python/pr-preview/pr-547/cuda-bindings/latest/module/nvjitlink.html#cuda.bindings.nvjitlink.create
The see also link works.
created_at: 2025-04-07T15:10:38Z
author_association: MEMBER
diff_hunk: @@ -85,6 +92,16 @@
 # so a file named "default.css" will overwrite the builtin "default.css".
 html_static_path = ["_static"]
 
+# skip cmdline prompts
+copybutton_exclude = ".linenos, .gp"
+
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/3/", None),
+    "numpy": ("https://numpy.org/doc/stable/", None),
+    "nvvm": ("https://docs.nvidia.com/cuda/libnvvm-api/", None),
+    "nvjitlink": ("https://docs.nvidia.com/cuda/nvjitlink/", None),
path: cuda_bindings/docs/source/conf.py
user: login: leofang
body: (FWIW regarding `objects.inv`, it's a binary that is generated by Sphinx and can be i[ntrospected by the intersphinx plugin](https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#showing-all-links-of-an-intersphinx-mapping-file).)
created_at: 2025-04-07T15:14:35Z
author_association: MEMBER
diff_hunk: @@ -44,13 +46,17 @@ $ conda install -c conda-forge cuda-python
 ### Requirements
 
 * CUDA Toolkit headers[^1]
+* static CUDA runtime[^2]
 
 [^1]: User projects that `cimport` CUDA symbols in Cython must also use CUDA Toolkit (CTK) types as provided by the `cuda.bindings` major.minor version. This results in CTK headers becoming a transitive dependency of downstream projects through CUDA Python.
 
+[^2]: The static CUDA runtime (`libcudart_static.a` on Linux, `cudart_static.lib` on Windows) is part of CUDA Toolkit. If CUDA is installed from conda, it is contained in the `cuda-cudart-static` package.
+
 Source builds require that the provided CUDA headers are of the same major.minor version as the `cuda.bindings` you're trying to build. Despite this requirement, note that the minor version compatibility is still maintained. Use the `CUDA_HOME` (or `CUDA_PATH`) environment variable to specify the location of your headers. For example, if your headers are located in `/usr/local/cuda/include`, then you should set `CUDA_HOME` with:
 
 ```console
 $ export CUDA_HOME=/usr/local/cuda
+$ export LIBRARY_PATH=$CUDA_HOME/lib64:$LIBRARY_PATH
path: cuda_bindings/docs/source/install.md
user: login: leofang
body: Yes, at some point we should revisit the build-time search behavior. Currently we limit to full explicitness at build time (no implicit auto-discovery behind users' back), while the ongoing path finder project (#451) focuses on run-time use cases. Once the path finder is mature we can consider using it at build time too (cc @rwgk for vis).

FWIW though, right now it is not as bad as it seems. If CUDA is installed via Linux system pkg mgr or conda, we need at most `$CUDA_HOME` defined. The system or conda compiler knows where the static library is. So this is required really only for CUDA installed to non-default locations.

BTW, Python projects can be built against CUDA wheels, as long as they don't contain device code that needs to be compiled by nvcc. I've enabled this for `cuquantum-python`/`nvmath-python`, and it's quite handy actually. It's only a matter of time that we also propagate this capability to `cuda-bindings`. The only downside is that if the C libraries are not yet public, building against public C wheels does not work for obvious reasons and we need a fallback (i.e. the current behavior).
created_at: 2025-04-07T15:28:46Z
author_association: MEMBER

PR comments:
user: login: copy-pr-bot[bot]
created_at: 2025-04-05T00:15:56Z
body: This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities [here](https://docs.gha-runners.nvidia.com/cpr/vetters).

Contributors can view more details about this message [here](https://docs.gha-runners.nvidia.com/cpr/contributors).

author_association: CONTRIBUTOR
user: login: leofang
created_at: 2025-04-05T00:54:25Z
body: /ok to test
author_association: MEMBER
user: login: github-actions[bot]
created_at: 2025-04-05T01:13:05Z
body: Doc Preview CI
:---:
| <p></p> :rocket: View preview at <br> https://nvidia.github.io/cuda-python/pr-preview/pr-547/ <br>
| <br> https://nvidia.github.io/cuda-python/pr-preview/pr-547/cuda-core/ <br>
| <br> https://nvidia.github.io/cuda-python/pr-preview/pr-547/cuda-bindings/ <br><br>
| <h6><br> Preview will be ready when the GitHub Pages deployment is complete. <br><br></h6>
<!-- Sticky Pull Request Commentpr-preview -->
author_association: NONE
user: login: leofang
created_at: 2025-04-06T19:22:32Z
body: /ok to test
author_association: MEMBER
user: login: leofang
created_at: 2025-04-06T20:15:41Z
body: /ok to test
author_association: MEMBER
user: login: leofang
created_at: 2025-04-07T01:18:17Z
body: /ok to test
author_association: MEMBER
user: login: leofang
created_at: 2025-04-07T01:36:37Z
body: /ok to test
author_association: MEMBER
user: login: leofang
created_at: 2025-04-07T17:22:48Z
body: /ok to test
author_association: MEMBER
user: login: github-actions[bot]
created_at: 2025-04-07T18:49:56Z
body: Doc Preview CI
:---:
Preview removed because the pull request was closed or merged.
<!-- Sticky Pull Request Commentpr-preview -->
author_association: NONE