Skip to main content

CuVec

Unifying Python/C++/CUDA memory: Python buffered array ↔ C++11 std::vector ↔ CUDA managed memory.

Version Downloads Py-Versions DOI Licence Tests Coverage

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.7 or greater (e.g. via Anaconda or Miniconda, or via python3-dev)

  • (optional) CUDA SDK/Toolkit (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

pip install cuvec

Usage

See the usage documentation and quick examples of how to upgrade a Python ↔ C++ ↔ CUDA interface.

See also 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. Full and explicit example modules using the CPython API, pybind11 API, and SWIG are also provided.

Contributing

See CONTRIBUTING.md.

Licence

Licence DOI

Copyright:

Metadata

Release files for cuvec 6.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cuvec 6.0.1
File Size Uploaded
cuvec-6.0.1.tar.gz 27.7 kB Details

Release files / cuvec-6.0.1.tar.gz

Download URL cuvec-6.0.1.tar.gz
Size 27.7 kB
Tags Source
SHA-256 checksum
How to use checksums
bd6c1e4f3704372e9e60fa9234e9c420620bef1376e774903ded004959ae0e29
BLAKE2b-256 checksum
How to use checksums
a42102926a148a63c48f415dafbcfe4bc2e45134e82c66cc9e6cdde4870cb12b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

6.0.1 This release

1 release file

6.0.0

1 release file

5.0.1

1 release file

5.0.0

1 release file

4.1.1

1 release file

4.1.0

1 release file

4.0.0

1 release file

3.0.0

1 release file

2.12.0

1 release file

2.11.4

1 release file

2.11.3

1 release file

2.11.2

1 release file

2.11.1

1 release file

2.11.0

1 release file

2.10.0

1 release file

2.9.0

1 release file

2.8.0

1 release file

2.7.7

1 release file

2.7.6

1 release file

2.7.5

1 release file

2.7.4

1 release file

2.7.3

1 release file

2.7.2

1 release file

2.7.1

1 release file

2.7.0

1 release file

2.6.0

1 release file

2.5.0

1 release file

2.4.0

1 release file

2.3.1

1 release file

2.3.0

1 release file

2.2.0

1 release file

2.1.2

1 release file

2.1.1

1 release file

2.1.0

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.0.0

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page