CuVec
Unifying Python/C++/CUDA memory: Python buffered array ↔️ `std::vector` ↔️ CUDA managed memory
Install / Use
/learn @AMYPAD/CuVecREADME
CuVec
Unifying Python/C++/CUDA memory: Python buffered array ↔ C++11 std::vector ↔ CUDA managed memory.
|Version| |Downloads| |Py-Versions| |DOI| |Licence| |Tests| |Coverage|
.. contents:: Table of contents :backlinks: top :local:
Why
Data should be manipulated using the existing functionality and design paradigms of each programming language. Python code should be Pythonic. CUDA code should be... CUDActic? C code should be... er, Clean.
However, in practice converting between data formats across languages can be a pain.
Other libraries which expose functionality to convert/pass data formats between these different language spaces tend to be bloated, unnecessarily complex, and relatively unmaintainable. By comparison, ``cuvec`` uses the latest functionality of Python, C/C++11, and CUDA to keep its code (and yours) as succinct as possible. "Native" containers are exposed so your code follows the conventions of your language. Want something which works like a ``numpy.ndarray``? Not a problem. Want to convert it to a ``std::vector``? Or perhaps a raw ``float *`` to use in a CUDA kernel? Trivial.
- Less boilerplate code (fewer bugs, easier debugging, and faster prototyping)
- Fewer memory copies (faster execution)
- Lower memory usage (do more with less hardware)
Non objectives
--------------
Anything to do with mathematical functionality. The aim is to expose functionality, not (re)create it.
Even something as simple as setting element values is left to the user and/or pre-existing features - for example:
- Python: ``arr[:] = value``
- NumPy: ``arr.fill(value)``
- CuPy: ``cupy.asarray(arr).fill(value)``
- C++: ``std::fill(vec.begin(), vec.end(), value)``
- C & CUDA: ``memset(vec.data(), value, sizeof(T) * vec.size())``
Install
Requirements:
-
Python 3.8 or greater (e.g. via
Anaconda or Miniconda <https://docs.conda.io/projects/conda/en/latest/user-guide/install/download.html#anaconda-or-miniconda>_, or viapython3-dev) -
(optional)
CUDA SDK/Toolkit <https://developer.nvidia.com/cuda-downloads>_ (including drivers for an NVIDIA GPU)- note that if the CUDA SDK/Toolkit is installed after CuVec, then CuVec must be re-installed to enable CUDA support
.. code:: sh
pip install cuvec
Usage
See `the usage documentation <https://amypad.github.io/CuVec/#usage>`_ and `quick examples <https://amypad.github.io/CuVec/#examples>`_ of how to upgrade a Python ↔ C++ ↔ CUDA interface.
See also `NumCu <https://github.com/AMYPAD/NumCu>`_, a minimal stand-alone Python package built using CuVec.
External Projects
For integration into Python, C++, CUDA, CMake, pybind11, and general SWIG projects, see the external project documentation <https://amypad.github.io/CuVec/#external-projects>.
Full and explicit example modules using the CPython API <https://github.com/AMYPAD/CuVec/tree/main/cuvec/src/example_cpython>, pybind11 API <https://github.com/AMYPAD/CuVec/tree/main/cuvec/src/example_pybind11>, and SWIG <https://github.com/AMYPAD/CuVec/tree/main/cuvec/src/example_swig> are also provided.
Contributing
See `CONTRIBUTING.md <https://github.com/AMYPAD/CuVec/blob/main/CONTRIBUTING.md>`_.
Licence
~~~~~~~
|Licence| |DOI|
Copyright:
- `Casper O. da Costa-Luis <https://github.com/casperdcl>`_
- `Contributors <https://github.com/AMYPAD/cuvec/graphs/contributors>`_
.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.4446211.svg
:target: https://doi.org/10.5281/zenodo.4446211
.. |Licence| image:: https://img.shields.io/pypi/l/cuvec.svg?label=licence
:target: https://github.com/AMYPAD/CuVec/blob/main/LICENCE
.. |Tests| image:: https://img.shields.io/github/actions/workflow/status/AMYPAD/CuVec/test.yml?branch=main&logo=GitHub
:target: https://github.com/AMYPAD/CuVec/actions
.. |Downloads| image:: https://img.shields.io/pypi/dm/cuvec?logo=pypi&logoColor=white
:target: https://pypi.org/project/cuvec
.. |Coverage| image:: https://codecov.io/gh/AMYPAD/CuVec/branch/main/graph/badge.svg
:target: https://codecov.io/gh/AMYPAD/CuVec
.. |Version| image:: https://img.shields.io/pypi/v/cuvec.svg?logo=python&logoColor=white
:target: https://github.com/AMYPAD/CuVec/releases
.. |Py-Versions| image:: https://img.shields.io/pypi/pyversions/cuvec.svg?logo=python&logoColor=white
:target: https://pypi.org/project/cuvec
Related Skills
node-connect
349.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
109.5kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
109.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
349.2kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
