注CUDAToolkitのバージョン3.2のリリースにより、NVIDIAはSDKではなくToolkitにルールファイルを含めるようになりました。したがって、この回答を2つに分割しました。ご使用のバージョンのツールキットに、正しい手順を使用してください。
注これらの手順は、Visual Studio 2005および2008で有効です。VisualStudio2010については、この回答を参照してください。
CUDATOOLKIT3.2以降
NvCudaRuntimeApi.rules
NVIDIAが提供するファイル(またはドライバーAPIを使用している場合)を使用することをお勧めしますNvCudaDriverApi.rules
。これはツールキットとともにリリースされ、最新のコンパイラフラグを使いやすい方法でサポートします。個人的には、VSウィザードの使用はお勧めしませんが、それは、本当に必要だとは思わないからです。
ルールファイル(Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults
ディレクトリにインストールされている)は、プロジェクト内の.cuファイルをコンパイルしてアプリケーションにリンクする方法をVisualStudioに「教えます」。
- 標準のMSウィザードを使用して新しいプロジェクトを作成します(例:空のコンソールプロジェクト)
- ホスト(シリアル)コードを.cまたは.cppファイルに実装します
- ラッパーとカーネルを.cuファイルに実装します
- 追加し
NvCudaRuntimeApi.rules
ます(プロジェクトを右クリックし、カスタムビルドルール、関連するボックスにチェックマークを付けます)。注1を参照してください。
- CUDAランタイムライブラリを追加します(プロジェクトを右クリックして[プロパティ]を選択し、 [リンカー]->[一般]で[追加のライブラリディレクトリ
$(CUDA_PATH)\lib\$(PlatformName)
に追加]および[リンカー]->[入力で追加の依存関係に追加]を選択します。注[2]および[3]を参照してください。cudart.lib
- 必要に応じて、CUDAインクルードファイルを検索パスに追加します。これは、.cppファイル(.cuファイルではなく)にCUDAファイルをインクルードする場合に必要です(プロジェクトを右クリックして[プロパティ]を選択し、[ C / C++]->[一般的な追加]を選択します。追加のインクルードディレクトリ
$(CUDA_PATH)\include
へ)、注[3]を参照してください。
- 次に、プロジェクトをビルドするだけで、.cuファイルが.objにコンパイルされ、リンクに自動的に追加されます
その他のヒント:
- CUDAランタイムと一致するように静的にロードされたCランタイムを使用するようにコード生成を変更します。プロジェクトを右クリックして[プロパティ]を選択し、C / C++->コード生成でランタイムライブラリを/MT(またはデバッグの場合は/ MTd、この場合はランタイムAPI->ホスト->ランタイムでミラーリングする必要があります)に変更します。ライブラリ)、注[4]を参照してください
- SDKに含まれているusertype.datファイルを使用して構文の強調表示を有効にします。のreadme.txtを参照してください。
<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8
また、次のレジストリエントリを使用してIntellisenseサポートを有効にすることをお勧めします(VS2008ではなくVS2005の9.0を8.0に置き換えます)。
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
ちなみに、可能であればキューティルを避けることをお勧めします。代わりに、独自のチェックを行ってください。CutilはNVIDIAでサポートされていません。これは、SDKの例を実際のプログラムとアルゴリズムの設計に集中させ、すべての例で同じことを繰り返さないようにするために使用されます(コマンドライン解析など)。あなたがあなた自身を書くならば、あなたははるかに良いコントロールを持ち、何が起こっているのかを知るでしょう。たとえば、関数が失敗した場合にcutilSafeCall
ラッパーが呼び出しますexit()
。実際のアプリケーション(サンプルではなく)は、おそらく失敗をよりエレガントに処理する必要があります。
CUDATOOLKIT3.1以前
NVIDIAが提供するファイルをSDKで使用しCuda.rules
ます。これはツールキットと一緒にリリースされ、最新のコンパイラフラグをフレンドリーな方法でサポートします。個人的には、VSウィザードの使用はお勧めしませんが、それは、本当に必要だとは思わないからです。
ルールファイル(SDKのC \ commonディレクトリ内)は、プロジェクト内の.cuファイルをコンパイルしてアプリケーションにリンクする方法をVisualStudioに「教えます」。
- 標準のMSウィザードを使用して新しいプロジェクトを作成します(例:空のコンソールプロジェクト)
- ホスト(シリアル)コードを.cまたは.cppファイルに実装します
- ラッパーとカーネルを.cuファイルに実装します
- 追加
Cuda.rules
(プロジェクトを右クリックして[カスタムビルドルール] 、ルールファイルを参照し、チェックマークが付いていることを確認します)
- CUDAランタイムライブラリを追加します(プロジェクトを右クリックして[プロパティ]を選択し、 [リンカー]-> [一般]で[追加のライブラリディレクトリ
$(CUDA_LIB_PATH)
に追加]を選択し、 [リンカー]->[入力で追加の依存関係に追加]を選択します。以下の注[2]を参照してください。cudart.lib
- 必要に応じて、CUDAインクルードファイルを検索パスに追加します。これは、(。cuファイルではなく).cppファイルにCUDAファイルをインクルードする場合に必要です(プロジェクトを右クリックして[プロパティ]を選択し、[ C / C++]->[一般的な追加]を選択します。追加
$(CUDA_INC_PATH)
のインクルードディレクトリへ)
- 次に、プロジェクトをビルドするだけで、.cuファイルが.objにコンパイルされ、リンクに自動的に追加されます
その他のヒント:
- 静的にロードされたCランタイムを使用してCUDAランタイムと一致するようにコード生成を変更し、プロジェクトを右クリックして[プロパティ]を選択し、C / C++->コード生成でランタイムライブラリを/MT(またはデバッグの場合は/ MTd)に変更します。これをCUDAビルドルール->ハイブリッドCUDA/C ++オプションでミラーリングする必要がある場合は、注[4]を参照してください。
- SDKに含まれているusertype.datファイルを使用して構文の強調表示を有効にします。のreadme.txtを参照してください。
<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8
また、次のレジストリエントリを使用してIntellisenseサポートを有効にすることをお勧めします(VS2008ではなくVS2005の9.0を8.0に置き換えます)。
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
ちなみに、可能であればキューティルを避けることをお勧めします。代わりに、独自のチェックを行ってください。CutilはNVIDIAでサポートされていません。これは、SDKの例を実際のプログラムとアルゴリズムの設計に集中させ、すべての例で同じことを繰り返さないようにするために使用されます(コマンドライン解析など)。あなたがあなた自身を書くならば、あなたははるかに良いコントロールを持ち、何が起こっているのかを知るでしょう。たとえば、関数が失敗した場合にcutilSafeCall
ラッパーが呼び出しますexit()
。実際のアプリケーション(サンプルではなく)は、おそらく失敗をよりエレガントに処理する必要があります。
ノート
- Toolkitバージョン固有のルールファイルを使用することもできます
NvCudaRuntimeApi.v3.2.rules
。これは、%CUDA_PATH%でCUDA Toolkitを探す代わりに、%CUDA_PATH_V3_2%を探すことを意味します。つまり、システムにCUDA Toolkitの複数のバージョンをインストールし、さまざまなプロジェクトでさまざまなバージョンをターゲットにすることができます。注[3]も参照してください。
- ルールファイルは、CUDAコードのコンパイル設定を追加するだけなので、C /C++のコンパイルとリンカーの設定を変更することはできません。したがって、この手順を手動で行う必要があります。すべての構成でそれを行うことを忘れないでください!
- 特定のCUDAToolkitバージョンで安定させたい場合は、CUDA_PATHをCUDA_PATH_V3_2に置き換える必要があります。注1も参照してください。
- Cランタイムのバージョンが一致しないと、さまざまな問題が発生する可能性があります。特に、LIBCMT(たとえば)に関するエラーがある場合、
LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
または標準ライブラリ関数の複数定義されたシンボルがある場合は、これが最初の疑いです。