cuvec 6.0.0

Creator: bradpython12

Last updated:

Add to Cart

Description:

cuvec 6.0.0

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


Table of contents

Why

Non objectives


Install
Usage
External Projects
Contributing
Licence



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

Copyright:

Casper O. da Costa-Luis
Contributors

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.