web-dev-qa-db-ja.com

Visual Studio 2008で新しいCUDAプロジェクトを開始するにはどうすればよいですか?

これは非常に基本的な質問ですが、Visual Studio 2008で新しいCUDAプロジェクトを開始するにはどうすればよいですか? CUDA関連の問題に関する膨大な量のドキュメントを見つけましたが、新しいプロジェクトを開始する方法については何もありません。私はWindows 7 x64 Visual Studio 2008 C++を使用しています。基本的なプログラムをコンパイルして実行するために、本当に本当に基本的なHello Worldアプリを見つけたいと思っています。

編集:

私はあなたの手順トムを試してみました。コンソールアプリをセットアップしました。次に、デフォルトの.cppを削除し、それをドロップして、コンパイルするためにテンプレートプロジェクトから3つのファイルをコピーしました。それをコンパイルすると、stdafx.hが含まれていないとtemplate_gold.cppが不平を言ったので、それを含めました。ビルドはこれで失敗します:

 1> ------ビルドが開始されました:プロジェクト:CUDASandbox、構成:Debug x64 ------ 
 1>コンパイルしています... 
 1> template_gold。 cpp 
 1>リンクしています... 
 1> LIBCMT.lib(crt0.obj):エラーLNK2019:関数__tmainCRTStartup 
 1> D:\ Stuffで参照されている未解決の外部シンボルメイン\ Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe:fatal error LNK1120:1 unresolved externals 
 1> Build log was saved at "file:// d:\ Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm "
 1> CUDASandbox-2 error(s)、0 warning(s)
 ======= ===ビルド:0成功、1失敗、0最新、0スキップ========== 
27
Mr Bell

[〜#〜] note [〜#〜]CUDAツールキットのバージョン3.2のリリースに伴い、NVIDIAにはSDKとは対照的に、ツールキットを含むrulesファイル。したがって、私はこの答えを2つに分けました。使用しているツールキットのバージョンに合った正しい手順を使用してください。

[〜#〜] note [〜#〜]これらの手順は、Visual Studio 2005および2008に有効です。VisualStudioの場合2010参照 この答え


CUDA TOOLKIT 3.2以降

NVIDIAが提供する_NvCudaRuntimeApi.rules_ファイル(またはドライバーAPIを使用する場合は_NvCudaDriverApi.rules_)を使用することをお勧めします。これはツールキットでリリースされ、最新のコンパイラフラグをわかりやすくサポートしています。個人的には、VSウィザードを使用しないことをお勧めしますが、それは本当に必要だとは思わないからです。

ルールファイル(_Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults_ディレクトリにインストール)は、プロジェクト内の.cuファイルをコンパイルしてアプリケーションにリンクする方法をVisual Studioに「教えます」。

  • 標準のMSウィザードを使用して新しいプロジェクトを作成します(例:空のコンソールプロジェクト)
  • ホスト(シリアル)コードを.cまたは.cppファイルに実装する
  • ラッパーとカーネルを.cuファイルに実装する
  • _NvCudaRuntimeApi.rules_を追加します(プロジェクトを右クリックしますカスタムビルドルール、関連するボックスをチェックします)、注記 1 を参照してください
  • CUDAランタイムライブラリを追加します(プロジェクトを右クリックしてPropertiesを選択し、次にLinker-> General$(CUDA_PATH)\lib\$(PlatformName)AdditionalライブラリディレクトリおよびLinker-> Inputに_cudart.lib_をAdditional Dependencies)に追加します。注記[2]および[3]を参照してください
  • 必要に応じて、CUDAインクルードファイルを検索パスに追加します。CUDAファイルを.cppファイルに含める場合(.cuファイルではなく)、必要です(プロジェクトを右クリックしてプロパティを選択し、次にC/C++-> General$(CUDA_PATH)\includeAdditional Include Directories)に追加します。注記[3]を参照してください
  • 次に、プロジェクトをビルドすると、.cuファイルが.objにコンパイルされ、リンクに自動的に追加されます

その他のヒント:

  • 静的にロードされたCランタイムを使用してCUDAランタイムと一致するようにコード生成を変更します。プロジェクトを右クリックしてPropertiesを選択し、次にC/C++-> Code GenerationRuntime Libraryを/ MT(または/ MTdに変更します。デバッグの場合、これをランタイムAPI->ホスト->ランタイムライブラリ)にミラーリングする必要があります。注記[4]を参照してください
  • SDKに含まれているusertype.datファイルを使用して構文の強調表示を有効にします。_<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8_のreadme.txtを参照してください

また、次のレジストリエントリで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を避け、代わりに独自のチェックを行うことを推奨します。 CutilはNVIDIAでサポートされていません。これは、SDKの例を実際のプログラムとアルゴリズムの設計に焦点を合わせたままにし、すべての例で同じことを繰り返さないようにするために使用されます(例:コマンドラインの解析)。あなたがあなた自身のものを書くならば、あなたははるかに優れた制御を持ち、何が起こっているかを知るでしょう。たとえば、cutilSafeCallラッパーは、関数が失敗した場合にexit()を呼び出します。実際のアプリケーション(サンプルではなく)は、おそらくよりエレガントに失敗を処理する必要があります。


CUDA TOOLKIT 3.1以前

私は、SDKとともにNVIDIAによって提供される_Cuda.rules_ファイルを使用します。これは、ツールキットと一緒にリリースされ、フレンドリーな方法で最新のコンパイラフラグをサポートします。個人的には、VSウィザードを使用しないことをお勧めしますが、それは本当に必要だとは思わないからです。

ルールファイル(SDKのC\commonディレクトリにあります)は、プロジェクト内の.cuファイルをコンパイルしてアプリケーションにリンクする方法をVisual Studioに「教えます」。

  • 標準のMSウィザードを使用して新しいプロジェクトを作成します(例:空のコンソールプロジェクト)
  • ホスト(シリアル)コードを.cまたは.cppファイルに実装する
  • ラッパーとカーネルを.cuファイルに実装する
  • _Cuda.rules_を追加します(プロジェクトを右クリックしますカスタムビルドルール、ルールファイルを参照し、チェックされていることを確認します)
  • CUDAランタイムライブラリを追加します(プロジェクトを右クリックしてPropertiesを選択し、次にLinker-> General$(CUDA_LIB_PATH)AdditionalライブラリディレクトリおよびLinker-> Inputに_cudart.lib_をAdditional Dependencies)に追加します。以下の注[2]を参照してください
  • 必要に応じて、CUDAインクルードファイルを検索パスに追加します。CUDAファイルを.cppファイルに含める場合(.cuファイルではなく)、必要です(プロジェクトを右クリックしてプロパティを選択し、次にC/C++-> General$(CUDA_INC_PATH)Additional Include Directories)に追加します
  • 次に、プロジェクトをビルドすると、.cuファイルが.objにコンパイルされ、リンクに自動的に追加されます

その他のヒント:

  • 静的に読み込まれたCランタイムを使用してCUDAランタイムと一致するようにコード生成を変更し、プロジェクトを右クリックしてプロパティを選択し、次にC/C++->コード生成を変更しますランタイムライブラリ/MTに(またはデバッグの場合は/ MTd。この場合、これをCUDAビルドルール->ハイブリッドCUDA/C++オプションにミラーリングする必要があります)、注を参照[4]
  • SDKに含まれているusertype.datファイルを使用して構文の強調表示を有効にします。_<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8_のreadme.txtを参照してください

また、次のレジストリエントリで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を避け、代わりに独自のチェックを行うことを推奨します。 CutilはNVIDIAでサポートされていません。これは、SDKの例を実際のプログラムとアルゴリズムの設計に焦点を合わせたままにし、すべての例で同じことを繰り返さないようにするために使用されます(例:コマンドラインの解析)。あなたがあなた自身のものを書くならば、あなたははるかに優れた制御を持ち、何が起こっているかを知るでしょう。たとえば、cutilSafeCallラッパーは、関数が失敗した場合にexit()を呼び出します。実際のアプリケーション(サンプルではなく)は、おそらくよりエレガントに失敗を処理する必要があります。


[〜#〜]ノート[〜#〜]

  1. ツールキットバージョン固有のルールファイルを使用することもできます。 _NvCudaRuntimeApi.v3.2.rules_。これは、%CUDA_PATH%でCUDAツールキットを探す代わりに、%CUDA_PATH_V3_2%を探すことを意味します。つまり、システムに複数のバージョンのCUDAツールキットをインストールし、さまざまなプロジェクトでさまざまなバージョンをターゲットにすることができます。注[3]も参照してください。
  2. ルールファイルは、CUDAコードのコンパイル設定を追加するだけなので、C/C++コンパイルおよびリンカー設定を変更できません。したがって、この手順を手動で行う必要があります。すべての構成で必ず実行してください!
  3. 特定のCUDAツールキットバージョンで安定させる場合は、CUDA_PATHをCUDA_PATH_V3_2に置き換える必要があります。注 1 も参照してください。
  4. Cランタイムのバージョンが一致していないと、さまざまな問題が発生する可能性があります。特に、LIBCMT(例:_LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs_)または標準ライブラリ関数用に複数定義されたシンボルに関するエラーがある場合は、これが最初の疑いです。
45
Tom

なんて素晴らしい質問だ!そこにあるすべてのCUDAドキュメンテーションについて、これは私がいつも明らかな省略だと思っていたものです...実際、私はこの投稿を見つけて本当にうれしいです。なぜなら、CUDAをしばらく使用した後も、 t VSがCUDAプログラムを最初から作成するための公式の正しい方法を見つけました。

新しいCUDAプログラムを開始する必要があるときは、常にSDKディレクトリから "template"の例をコピーして変更しました。これは最初から始まっていないので、あなたが探しているものとは正確には一致しないかもしれませんが、CUDA対応にするための簡単な方法ですすべての正しいプロジェクト/ファイル名でVSで作業しているプロジェクト...

  1. SDKから "template"の例のコピーを作成し、ディレクトリの名前を変更します-にのみ必要なコンテンツディレクトリは、ソースコードとVS .slnおよび.vcprojファイルです。
  2. .slnファイルと.vcprojファイルの両方の名前を変更する
  3. テキストエディターで.slnファイルを開き、ファイルの3行目のProject変数と。vcprojファイル名を変更します
  4. テキストエディターで.vcprojファイルを開き、ファイルの最初の数行のNameおよびRootNamespace変数の名前を変更します。
  5. VSでプロジェクトを開き、プロパティページを開きます(ソリューションエクスプローラーペインでプロジェクト名を右クリックし、[プロパティ]を選択します)。
  6. プロパティページで出力ファイルの名前を変更(構成プロパティ->リンカ->一般)...ファイル名を変更する前に、 "すべての構成を選択します「構成プルダウンから、および "x64"プラットフォームプルダウンから、 64ビットシステム
  7. プロパティページのプログラムデータベースファイルの名前を変更(構成プロパティ->リンカ->デバッグの下)...ファイル名を変更する前に、 "デバッグを選択します"and" x64 "プルダウン。
4
tpm1510

このガイドをご覧になることをお勧めします: http://www.programmerfish.com/how-to-run-cuda-on-visual-studio-2008-vs08/

3
Salman Ul Haq
  • CUDA VSウィザードをインストールします。それはVSを設定し、CUDAプロジェクトを「新しいプロジェクト」メニューに追加します。
  • X64コンパイラがインストールされていることを確認してください(VSのインストール中に確認する必要があります)。
  • X64 libs、includes、nvcc dirが検索パスにあるかどうかを確認します。
  • CUDAテンプレートを使用して新しいプロジェクトを作成します。
  • プロジェクトタイプをx64に、CUDA設定をNative(nv cuda対応カードがある場合)またはエミュレーションに変更します。
  • テンプレートは、.vファイルをnvccでコンパイルし、他のファイルをデフォルトのコンパイラでコンパイルするカスタムビルドルールを作成します。
  • vsがC/C++コンパイラで.cuファイルをコンパイルしようとしている場合は、ソリューションエクスプローラーでそのファイルをクリックし、そのファイルのコンパイルを無効にします(ファイルのアイコンに赤いドット)

VS2008へのCUDAウィザードのインストールに関する追加情報は、 ここ および ここ にあります。

[編集]
ウィザードを使用しない場合は、CUDA lib/include/nvccパスを手動でセットアップし、新しいCUDAプログラムごとにカスタムビルドルールを追加する必要があります。詳細については、トムの回答をご覧ください。

3
beermann