51

CUDAを含むプロジェクトを始めるための助けを探しています。私の目標は、ネイティブのg ++​​コンパイラでコンパイルできるが、CUDAコードを使用するプロジェクトを作成することです。CUDAコードをnvccコンパイラでコンパイルする必要があることは理解していますが、私の理解から、CUDAコードをcubinファイルまたはptxファイルにコンパイルすることができます。

これが私の質問です:

  1. nvccを使用してcubinファイルまたはptxファイルにコンパイルするにはどうすればよいですか?-cか何かは必要ありませんか?
  2. どのファイルタイプを使用しますか?
  3. プロジェクトを正しくコンパイルしてリンクするためのg++コマンドとは何ですか?

次のように想定します。

  1. main関数が含まれ、cuda.hを含む「main.cpp」というファイルがあります。
  2. CUDAコードを含む「cudaFunc.cu」という別のファイルがあります。たとえば、main.cppに存在する2つの整数配列を追加したいとします。
4

3 に答える 3

61

これらの投稿を含むいくつかの異なる投稿で問題を解決することができました。64ビットマシンを使用して64ビットライブラリにリンクしている場合は、忘れないでください。それは明らかな継ぎ目ですが、私のようなピエロにとって、それは私が忘れていたものです。これが私が現在使用しているmakeファイルです...このmakeファイルをダイジェストできれば、cudaコードと他のG++コードの別々のコンパイルである私がやろうとしていたことを実行できるはずです。また、特定のバージョンでgcc、g ++コンパイラを使用する必要があることにも注意してください(私はg ++-4.4を使用しており、動作しています)とにかく、ここにmakeファイルがあります...

all: program

program: cudacode.o
    g++ -o program -L/usr/local/cuda/lib64 -lcuda -lcudart main.cpp  cudacode.o 

cudacode.o:
    nvcc -c -arch=sm_20 cudacode.cu 

clean: rm -f *.o program

うまくいけば、私が最初に行うことは、コンパイラとオプション.cuを使用して(として保存されている) cudacodeをコンパイルすることです(また、を削除することもできます)。これにより、が作成されました。次に、オプションを指定してg ++コンパイラを使用し、lib64ライブラリにリンクして、とライブラリをリンクし、コンパイルしてからをリンクします。これが誰かに役立つことを願っています!nvcc-c-arch=sm_20cudacode.o-o-lcuda-lcudartmain.cppcudacode.o

于 2012-02-29T19:18:18.680 に答える
17

この最近の質問に対する私の答えは、おそらくあなたが必要としているものを説明しています。

いくつかの追加の注意事項:

  1. またはファイルにコンパイル.cuする必要はありません。それをオブジェクトファイルにコンパイルしてから、g++でコンパイルされた.cppファイルのオブジェクトファイルとリンクする必要があります。.cubin.ptx.o.o
  2. cudaカーネルコードをに入れることに加えてcudaFunc.cu、カーネルを起動するCまたはC ++ラッパー関数もそのファイルに入れる必要があります(CUDAドライバーAPIを使用している場合を除きます。これは、ありそうもないことであり、推奨されません)。また、このラッパー関数のプロトタイプを含むヘッダーファイルを追加して、CUDAコードを呼び出す必要のあるC++コードにインクルードできるようにします。次に、標準のg++リンクラインを使用してファイルをリンクします。
于 2012-02-24T01:47:12.800 に答える
10

コンパイルされたcudaオブジェクトコードをg++にリンクするのは面倒な場合があることがわかりました。次のようにコンパイルしてみてください。

all:
nvcc cudafile.cu mainfile.cpp -o executable

clean: rm -rf *.o
于 2013-01-25T11:39:11.180 に答える