跳转到主要内容

统一Python/C++/CUDA内存:Python缓冲数组 -> C++11 `std::vector` -> CUDA托管内存

项目描述

统一Python/C++/CUDA内存:Python缓冲数组 ↔ C++11 std::vector ↔ CUDA托管内存。

Version Downloads Py-Versions DOI Licence Tests Coverage

为什么

应使用每种编程语言的现有功能和技术规范来操作数据。Python代码应该是Python风格的。CUDA代码应该是… CUDActic? C代码应该是… 哎,干净。

然而,在实践中,在语言之间转换数据格式可能会很痛苦。

其他库在转换/传递不同语言空间之间数据格式时,往往体积庞大、结构复杂且难以维护。相比之下,cuvec利用了Python、C/C++11和CUDA的最新功能,以使代码尽可能简洁。暴露“本地”容器,使代码遵循您语言的约定。想要像numpy.ndarray一样的功能?没问题。想要转换成std::vector?或者可能是用于CUDA内核的原始float *?简单。

  • 更少的模板代码(更少错误,更容易调试,更快原型设计)

  • 更少的内存拷贝(更快执行)

  • 更低的内存使用(用更少的硬件做更多的事)

非目标

与数学功能相关的一切。目标是暴露功能,而不是(重新)创建功能。

即使是设置元素值这样的简单操作,也留给用户和/或现有功能——例如

  • 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())

安装

需求

  • Python 3.7或更高版本(例如通过Anaconda或Miniconda,或通过python3-dev

  • (可选) CUDA SDK/ Toolkit(包括NVIDIA GPU的驱动程序)

    • 注意:如果CUDA SDK/ Toolkit是在安装CuVec之后安装的,则必须重新安装CuVec以启用CUDA支持

pip install cuvec

用法

请参阅使用文档快速示例,了解如何升级Python ↔ C++ ↔ CUDA接口。

另请参阅NumCu,这是一个使用CuVec构建的最小独立Python包。

外部项目

有关将其集成到Python、C++、CUDA、CMake、pybind11和通用SWIG项目中的信息,请参阅外部项目文档。还提供了使用CPython APIpybind11 APISWIG的完整和明确的示例模块。

贡献

请参阅CONTRIBUTING.md

许可

Licence DOI

版权

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定该选择哪一个,请了解更多关于安装包的信息。

源代码分发

cuvec-6.0.0.tar.gz (27.6 kB 查看哈希值)

上传时间 源代码

由以下支持