使用Cython封装C++和CUDA代码

5

我希望用Cython包装C++和CUDA代码。我看了npcuda-example(https://github.com/rmcgibbo/npcuda-example),并将setup.py更改如下:

ext = Extension('MyWrap',
            sources=['src/my_code.cu', 'python/my_wrap.pyx'],
            library_dirs=[CUDA['lib']],
            libraries=['cudart'],
            language='c++',
            runtime_library_dirs=[CUDA['lib']],
            # this syntax is specific to this build system
            # we're only going to use certain compiler args with nvcc and not with gcc
            # the implementation of this trick is in customize_compiler() below
            extra_compile_args={'clang++': ['-std=c++11','-O3'],
                                'nvcc': ['-std=c++11','-gencode','arch=compute_30,code=sm_30']},
            include_dirs = [numpy_include, CUDA['include'], 'src'],
            extra_link_args=["-std=c++11"])

我运行我的代码的setup.py文件,但是出现了一个nvcc错误"致命错误:未找到'mutex'文件"。我猜测"-std=c++11"选项无法通过nvcc编译器。那么我该如何包含c++11代码来包装c++和CUDA代码呢?


只是出于好奇:你为什么想要那个?如果你已经有了高性能的C++和CUDA代码,你为什么还需要cython呢? - Chiel
是的,我有C++和CUDA代码。 我想要制作我的代码的Python接口。 - nyatsui
我解决了这个问题。我使用的是Mac OS X和带有pyenv的Anaconda。distutils.util.get_platform()返回的是Mac OS X 10.5。然后我将Anaconda中的Python更改为系统默认的Python,就可以编译我的代码了。 - nyatsui
@nyatsui:如果这是你的解决方案,请将其添加为答案(回答自己的问题完全没有问题)。 - talonmies
1个回答

2
感谢您回答。 我解决了这个问题。在我的 Mac 上,命令“distutils.util.get_platform()”返回了 mac os x 10.5。因此,我将 python anaconda 改为系统默认 python,就可以编译 c++11 代码了。但是我不能编译我所有的代码。
按照 Saullo Castro 的答案,首先使用 CMake CUDA Package 的 CUDA_ADD_LIBRARY 将我的代码构建为库。然后我只用这个库编译 wrapper.pyx。然后我可以使用 cython 封装我的 c++ 代码。
谢谢!!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接