1

我想编译parallel.cupython_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.
已经尝试集成nvccbjam中,但我无法让它们工作。

并行.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,但我需要在我的文件中包含Boostthrust库。 另外,如果可能的话,我想坚持一个标准的命令行驱动的编译过程。.cu

4

2 回答 2

3

使用 CUDA 函数创建静态或动态库并将其链接。也就是说,使用 nvcc 创建库,然后在单独的步骤中使用 g++ 创建 Python 模块并链接到库中。

于 2012-05-30T05:04:51.190 回答
1

为了整合使用 nvcc 编译的代码和使用 g++ 编译的代码,我刚刚为 cuda 源定义了一个新的编译规则,存储在 .cu 文件到 .o

要编译.cu的规则.o存储在nvcc.jam我从 Jamroot 导入的文件中。

下面是我的 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
:
;

cudacudart并且cublas是像往常一样声明的常用 cuda 库。

lib cudart : : <name>cudart ;
lib cuda : : <name>cuda ;
lib cublas : : <name>cublas ;
于 2012-12-07T10:18:07.627 回答