我想汇编parallel.cu
和python_wrapper.cpp
,其中python_wrapper.cpp
使用Boost.python
将parallel.cu
中的方法公开给python。
我是cuda
和Boost.python
的新手
从他们的手册和谷歌,我找不到如何让他们说话
有些网站说,我应该做点像
nvcc -o parallel.cu
g++ -o python_wrapper.cpp
g++ parallel.o python_wrapper.o
但我知道编译Boost.python
代码的唯一方法是使用bjam
已经尝试将nvcc
集成到bjam
中,但我无法让它们发挥作用。
parallel.cuh
__global__ void parallel_work();
int do_parallel_work();
python_wrapper.cpp
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include "parallel.cuh"
BOOST_PYTHON_MODULE(parallel_ext){
using namespace boost::python;
def("parallel", do_parallel_work);
}
如何编译这些文件?
我听说过PyCuda
,但我需要在Boost
个文件中加入thrust
和.cu
库。
另外,如果可能的话,我想坚持使用标准的命令行驱动的编译过程。
答案 0 :(得分:3)
使用CUDA函数创建一个静态或动态库并将其链接。也就是说,使用nvcc创建库,然后在单独的步骤中使用g ++在库中创建Python模块和链接。
答案 1 :(得分:1)
为了整合用nvcc编译的代码和用g ++编译的代码,我刚刚为cuda源定义了一个新的编译规则,存储在.cu文件中.o
将.cu
编译为.o
的规则存储在我从Jamroot导入的nvcc.jam
文件中。
以下是我的nvcc.jam文件
import type ;
type.register CUDA : cu ;
import generators ;
generators.register-standard nvcc.compile : CUDA : OBJ ;
actions compile
{
"/usr/local/cuda/bin/nvcc" -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_30,code=\"sm_30,compute_30\" -m64 --compiler-options -fno-strict-aliasing -I. -I/usr/local/cuda/include -I/home/user/GPU/SDK/C/common/inc -I/home/user/GPU/SDK/shared/inc -DUNIX -O2 -o $(<) -c $(>)
}
显然,由于cuda安装路径是硬编码的,所以它有点像黑客,但它可以满足我的需求。我希望从NVidia SDK分发相当(希望更干净)的bjam扩展。
在主项目文件中,我可以使用.cpp和.cu文件定义编译规则,如:
exe testdraw
:
gpu/drawable.cu
gpu/testdraw.cpp
gpu/cudacommon.cu
gpu/host.cpp
gpu/opencl.cpp
gpu/opencl24.cpp
png
z
cl
libboost_program_options
cuda
cudart
cublas
:
;
cuda
,cudart
和cublas
是通常宣布的通常的cuda lib。
lib cudart : : <name>cudart ;
lib cuda : : <name>cuda ;
lib cublas : : <name>cublas ;