1

メソッドをPythonに公開するためにコンパイルparallel.cupython_wrapper.cpppython_wrapper.cpp使用したいと思います。 私は と の両方が初めてです。 彼らのマニュアルとグーグルから、私は彼らに話をさせる方法を見つけることができませんでした. いくつかのサイトは、私は次のようなことをすべきだと言っていますBoost.pythonparallel.cu
cudaBoost.python

nvcc -o parallel.cu
g++ -o python_wrapper.cpp
g++ parallel.o python_wrapper.o

Boost.pythonしかし、コードをコンパイルする唯一の方法は、 bjam. に統合する
試みがありましたが、機能させることができませんでした。nvccbjam

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を含める必要があります。 また、可能であれば、標準のコマンド ライン駆動のコンパイル プロセスに固執したいと思います。Boostthrust.cu

4

2 に答える 2

3

CUDA 関数を使用して静的または動的ライブラリを作成し、リンクします。つまり、nvcc を使用してライブラリを作成し、別の手順で g++ を使用して Python モジュールを作成し、ライブラリにリンクします。

于 2012-05-30T05:04:51.190 に答える
1

nvccでコンパイルされたコードとg++でコンパイルされたコードを統合するために、.cuファイルに保存されているcudaソースの新しいコンパイルルールを.oに定義しました。

コンパイル.cuするルールは、Jamrootからインポート.oしたファイルに保存されます。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
:
;

cudacudartそしてcublas通常通りに宣言された通常のcudalibsであること。

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