27

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

編集:

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

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:致命的なエラーLNK1120:1つの未解決の外部
1>ビルドログは「file:// d:\ Stuff \ Programming \ VisualStudio2008 \ Projects \ CUDASandbox \ CUDASandbox \ x64 \ Debug\BuildLog.htm」に保存されました
1> CUDASandbox-2つのエラー、0つの警告
==========ビルド:0成功、1失敗、0最新、0スキップ==========
4

4 に答える 4

45

注CUDAToolkitのバージョン3.2のリリースにより、NVIDIAはSDKではなくToolkitにルールファイルを含めるようになりました。したがって、この回答を2つに分割しました。ご使用のバージョンのツールキットに、正しい手順を使用してください。

これらの手順は、Visual Studio 2005および2008で有効です。VisualStudio2010については、この回答を参照してください。


CUDATOOLKIT3.2以降

NvCudaRuntimeApi.rulesNVIDIAが提供するファイル(またはドライバー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()。実際のアプリケーション(サンプルではなく)は、おそらく失敗をよりエレガントに処理する必要があります。


ノート

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

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

新しいCUDAプログラムを開始する必要があるときは、常に「テンプレート」の例をSDKディレクトリからコピーして変更しました。新しく開始されないため、これは正確に探しているものではない可能性がありますがすべての正しいプロジェクト/ファイル名でVSでCUDA対応プロジェクトを動作させるための簡単な方法です...

  1. SDKから「テンプレート」の例のコピーを作成し、ディレクトリの名前を変更します。ディレクトリに必要なコンテンツは、ソースコードとVS.slnおよび.vcprojファイルのみです。
  2. .slnファイルと.vcprojファイルの両方の名前を変更します
  3. テキストエディタで.slnファイルを開き、ファイルの3行目のProject変数と.vcprojファイル名の名前を変更します。
  4. テキストエディタで.vcprojファイルを開き、ファイルの最初の数行でName変数とRootNamespace変数の名前を変更します。
  5. VSでプロジェクトを開き、プロパティページを開きます(ソリューションエクスプローラーペインでプロジェクト名を右クリックし、[プロパティ]を選択します)
  6. プロパティページで出力ファイル名を変更します([構成のプロパティ]->[リンカー]->[一般]の下)...ファイル名を変更する前に、[構成]プルダウンから[すべての構成]を選択し、[プラットフォーム]プルダウンから[ x64]を選択します-私は64ビットシステムを使用しているので、ダウンします
  7. プロパティページでプログラムデータベースファイル名を変更します([構成プロパティ]->[リンカー]->[デバッグ]の下)...ファイル名を変更する前に、プルダウンで[デバッグ]と[ x64]を選択します。
于 2011-05-05T21:40:55.880 に答える
3
  • CUDAVSウィザードをインストールします。VSをセットアップし、CUDAプロジェクトを「新しいプロジェクト」メニューに追加します。
  • x64コンパイラがインストールされていることを確認してください(VSインストール中にチェックする必要があります)。
  • x64 libs、includes、nvcc dir、および検索パスがあるかどうかを確認します。
  • CUDAテンプレートを使用して新しいプロジェクトを作成します。
  • プロジェクトタイプをx64に変更し、CUDA設定をネイティブ(nv cuda対応カードを使用している場合)に変更するか、それ以外の場合はエミュレーションを変更します。
  • テンプレートは、.cuファイルをnvccでコンパイルし、他のファイルをデフォルトのコンパイラでコンパイルするカスタムビルドルールを作成します。
  • vsがC/C ++コンパイラで.cuファイルをコンパイルしようとしている場合は、ソリューションエクスプローラでそのファイルをクリックし、そのファイルのコンパイルを無効にします(ファイルのアイコンの赤い点)

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

[編集]
ウィザードを使用したくない場合は、CUDA lib / include / nvccパスを手動で設定し、新しいCUDAプログラムごとにカスタムビルドルールを追加する必要があります。それを行う方法の追加情報については、トムの答えを見てください。

于 2010-01-12T07:55:15.043 に答える
3

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

于 2010-08-05T10:24:33.507 に答える