# CUDA Bindings

CUDA Built-in Target deprecation notice

The CUDA target built-in to Numba is deprecated, with further development moved to the NVIDIA numba-cuda package. Please see Built-in CUDA target deprecation and maintenance status.

Numba supports two bindings to the CUDA Driver APIs: its own internal bindings based on ctypes, and the official NVIDIA CUDA Python bindings. Functionality is equivalent between the two bindings.

The internal bindings are used by default. If the NVIDIA bindings are installed, then they can be used by setting the environment variable `NUMBA_CUDA_USE_NVIDIA_BINDING` to `1` prior to the import of Numba. Once Numba has been imported, the selected binding cannot be changed.

## Per-Thread Default Streams

Responsibility for handling Per-Thread Default Streams (PTDS) is delegated to the NVIDIA bindings when they are in use. To use PTDS with the NVIDIA bindings, set the environment variable `CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM` to `1` instead of Numba’s environmnent variable `NUMBA_CUDA_PER_THREAD_DEFAULT_STREAM`.

See also

The Default Stream section in the NVIDIA Bindings documentation.

## Roadmap

In Numba 0.56, the NVIDIA Bindings will be used by default, if they are installed.

In future versions of Numba:

- The internal bindings will be deprecated.

- The internal bindings will be removed.

At present, no specific release is planned for the deprecation or removal of the internal bindings.