使用 cuda 的 cython 扩展

Posted

技术标签:

【中文标题】使用 cuda 的 cython 扩展【英文标题】:cython extensions using cuda 【发布时间】:2014-06-04 22:08:46 【问题描述】:

我有一个作为 C++ 类的 conv net 实现。该类构建在生成 CUDA 代码的模板库 (mshadow) 之上,因此它采用头文件的形式。因此,它只能在使用 nvcc 编译的文件中使用。我现在正在尝试将这个类包装在 Python 中,以便更轻松地加载和保存参数、数据等。

如何使用 Cython 包装 C++ 类?我查看了npcuda-example,它演示了如何围绕 C++ 类编写包装 pyx 文件。不幸的是,在此示例中,pyx 文件编译为 cpp 文件。这对我不起作用,因为我需要在 pyx 文件中包含类头并使用 nvcc 编译它。

我相信我可以使用 npcuda-example 中的 setup.py,如果有某种方法可以强制包装器 pyx 文件编译为 cu 文件,以便在 distutils 尝试编译扩展时调用 nvcc。

有什么想法吗?

【问题讨论】:

【参考方案1】:

在 npcuda-example 中,wrapper.pyx 将通过定义结合 *.cu

cdef extern from "src/manager.hh"

我猜这正是你想要的?

【讨论】:

以上是关于使用 cuda 的 cython 扩展的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Cython 扩展时未定义的符号

通过pickle保存cython扩展

Cython 扩展模块类方法不可见/命名 提及时出错

继承自 int 的 Cython 扩展类型导致 MemoryError

Cython初窥

Cython 对进口有啥作用?