私はCUDAを含むプロジェクトを始めるための助けを探しています。私の目標は、ネイティブg ++コンパイラーでコンパイルできるが、CUDAコードを使用するプロジェクトを持つことです。私はCUDAコードをnvccコンパイラでコンパイルする必要があることを理解していますが、私の理解から、CUDAコードをなんとかしてキュービンファイルまたはptxファイルにコンパイルできます。
私の質問は次のとおりです。
以下を想定します。
これらを含むいくつかの異なる投稿で問題を解決することができました。 64ビットマシンを使用して64ビットライブラリにリンクしていることを忘れないでください!それは一種の明白な継ぎ目ですが、私のような道化師にとって、それは私が忘れていたものです。私が現在使用しているメイクファイルは...です。このメイクファイルをダイジェストできれば、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
nvcc
コンパイラーと.cu
オプションを使用して(-c
として保存されている)cudacodeをコンパイルすることが最初にできることを願っています。 -Arch=sm_20
)を削除します。これにより、cudacode.o
が作成されました。次に、-o
オプションを指定してg ++コンパイラを使用し、lib64ライブラリにリンクし、-lcuda
および-lcudart
ライブラリをリンクして、main.cpp
をコンパイルし、cudacode.o
。これが誰かを助けることを願っています!
私の答え この最近の質問に対する はおそらくあなたが必要とするものを説明しています。
追加の注意事項:
.cu
を.cubin
または.ptx
ファイルにコンパイルする必要はありません。 .o
オブジェクトファイルにコンパイルし、g ++でコンパイルされた.cppファイルの.o
オブジェクトファイルとリンクする必要があります。cudaFunc.cu
に配置することに加えて、カーネルを起動するファイルにCまたはC++ラッパー関数を配置する必要があります(CUDAドライバーAPIを使用している場合を除きます。 。また、このラッパー関数のプロトタイプにヘッダーファイルを追加して、CUDAコードを呼び出す必要があるC++コードに含めることができます。次に、標準のg ++リンク行を使用してファイルをリンクします。コンパイル済みのcudaオブジェクトコードをg ++とリンクするのは面倒なことがわかりました。次のようにコンパイルしてみてください:
all:
nvcc cudafile.cu mainfile.cpp -o executable
clean: rm -rf *.o