如何在不使用distutils的情况下创建Python C扩展?

时间:2017-11-29 22:44:21

标签: python cuda

我正在尝试创建一个用CUDA C编写的Python扩展。我不认为distutils支持使用nvcc编译器,所以我想学习Python C扩展如何在不使用distutils的情况下创建,并调整该方法以构建用CUDA C编写的扩展。

我使用Windows并且在使用distutils时,我发现构建扩展会产生.exp,.lib,.obj和.pyd文件。我猜测.exp,.lib和.obj文件以某种方式组合到.pyd文件中,但不知道如何。

1 个答案:

答案 0 :(得分:1)

我能够通过以下示例创建一个使用CUDA的Cython扩展:

https://github.com/saullocastro/programming/tree/master/cuda/cython/naive_add

基本上,您使用nvcc在命令行中编译CUDA代码以生成.lib文件。然后在制作Cython扩展时使用该.lib文件,就像它是从C编译一样。这样,distutils仍然可以用于构建扩展,但是在CUDA代码由nvcc手动编译之后。

我必须做的一个小改动是在命令中添加numpy include目录来构建扩展。这是我使用的命令:

python setup.py build_ext -i -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -I"C:\Anaconda\Lib\site-packages\numpy\core\include" -lcudart -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" --force clean