编译Boost.python和cuda代码

编译Boost.python和cuda代码,boost,cuda,boost-python,bjam,nvcc,Boost,Cuda,Boost Python,Bjam,Nvcc,我想编译parallel.cu和python\u wrapper.cppwherepython\u wrapper.cpp使用Boost.python向python公开parallel.cu中的方法。 我对cuda和Boost.python都是新手 从他们的手册和谷歌上,我找不到如何让他们说话。 一些网站说,我应该做类似的事情 nvcc -o parallel.cu g++ -o python_wrapper.cpp g++ parallel.o python_wrapper.o 但是我知道编

我想编译
parallel.cu
python\u wrapper.cpp
where
python\u wrapper.cpp
使用
Boost.python
向python公开
parallel.cu
中的方法。
我对
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);
}
#包括
#包括
#包括“parallel.cuh”
BOOST_PYTHON_模块(并行扩展){
使用名称空间boost::python;
def(“并行”,做并行工作);
}
如何编译这些文件?
我听说过
PyCuda
,但我需要在我的
.cu
文件中包含
Boost
asch
库。

另外,如果可能的话,我希望坚持标准的命令行驱动编译过程。

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

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

为了集成使用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
cudart
cublas
是通常声明的cuda libs

lib cudart : : <name>cudart ;
lib cuda : : <name>cuda ;
lib cublas : : <name>cublas ;
lib-cudart::cudart;
lib-cuda::cuda;
lib-cublas::cublas;

为了集成使用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
cudart
cublas
是通常声明的cuda libs

lib cudart : : <name>cudart ;
lib cuda : : <name>cuda ;
lib cublas : : <name>cublas ;
lib-cudart::cudart;
lib-cuda::cuda;
lib-cublas::cublas;

是的,NVCC预处理器不能正确处理复杂的C++模板构造,而Boost是最难说明的代码,它不能用NVCC引导来编译。是的,NVCC预处理器不能正确处理复杂的C++模板构造。boost是最臭名昭著的无法使用nvcc steerage编译的代码示例。在没有bjam的情况下编译boost.Python代码是很有可能的(我认为这比尝试使用bjam更容易)。基本上,您只需要编译一个链接到Python和Boost.Python共享库的共享库,并使用指向Python和Boost.Python头的include路径。我建议使用已经存在的库将CUDA与Python集成。仔细看看PyCUDA。另外,看一看ArrayFire(这是我的工作)。谷歌“gpu python”。这些会有帮助吗?在没有bjam的情况下编译Boost.Python代码是完全可能的(我认为这比尝试使用bjam更容易)。基本上,您只需要编译一个链接到Python和Boost.Python共享库的共享库,并使用指向Python和Boost.Python头的include路径。我建议使用已经存在的库将CUDA与Python集成。仔细看看PyCUDA。另外,看一看ArrayFire(这是我的工作)。谷歌“gpu python”。那些会有帮助吗?