Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その2 プロジェクト設定
その1でインストールを行いましたので、次にVisual C++の設定を行い、その後サンプルプログラムを作成・実行してみます。
VC6時代は全体に影響する設定が大半だった記憶があります。そのため、プロパティ画面からは設定せず(画面で設定してしまうと他のプロジェクトにも影響を与えてしまうので)、プロジェクトごとに起動用バッチファイルを作成し、そこに必要な環境変数などを設定して…というようなことを行っていました。
一方、現在のバージョンでは、プロジェクトごとに必要な設定はプロジェクト単位でしか設定できないような方針が採られているようです。この方針はVC++2008とVC++2010の差異としても現れ、現在Web上で多く説明されている2008用のインストール方法説明ではうまくいかない箇所がありました。
グローバル設定
Visual C++ 2010 Express の全体に影響する設定を行います。
- Visual C++ 2010 Express を起動します。
- ツール > 設定 > 上級者用の設定 を選択します。
…これくらいでしょうか。
CUDAサンプルプロジェクトの作成と設定
- ファイル > 新規作成 > プロジェクト... で”新しいプロジェクト”ダイアログを開き、”空のプロジェクト”を選択、名前を”HelloCUDA”としてOKボタンを押し、新しいプロジェクトを作成します。
- ソリューションエクスプローラーでHelloCUDAを選択し、 プロジェクト > ビルドのカスタマイズ... メニューを選択します。
- CUDA 4.0 にチェックをつけ、OKボタンを押します。
これで簡単なプロジェクトが作成できました。続いて実行するcuファイルを作っておきましょう。書籍CUDA by Example(Amazon)のサンプルコードがこちらからダウンロードできます(Download source code for the book's examples (.zip)のリンク)ので、これを解凍し、chapter03\simple_kernel_params.cuをプロジェクトに取り込みます。インクルードファイルも必要なので、全体を解凍しておきましょう。
- ソリューションエクスプローラーでHelloCUDAプロジェクトのソースフォルダを右クリックし 追加 > 既存の項目... を選択します。
- simple_kernel_params.cu ファイルを選択します。
これでビルドする準備はできました。一応.cuファイルがビルド対象になっているか確認しておきましょう。
- ソリューションエクスプローラーでmyFirstKernel.cuを右クリックし”プロパティ”を選択します。
- ビルドから除外: いいえ、項目の種類: CUDA C/C++ となっていることを確認し、ダイアログを閉じます。
前述してきた手順と異なる順番で設定した場合(ビルドのカスタマイズを後から行った場合)は、.cuファイルがビルド対象になっていないかもしれません。その場合は上のような設定に変更しておきましょう。
プロジェクトプロパティ設定
- ソリューションエクスプローラで作成したHelloCUDAプロジェクトを右クリックしプロパティを選択します。
- ダイアログ左上にある“構成”プルダウンメニューで”すべての構成”を選択します。
プロジェクトプロパティはこのダイアログで設定します。”すべての構成”を選択したのは、今回変更するものはRelease用/Debug用バイナリ双方で同一項目に対して同一値を設定するためです(Release用とDebug用それぞれ個別に設定しても良いですが、2度手間になりますので)。以降ではこのダイアログを開く都度この設定を行ってください。
x64バイナリ出力設定
その1でもリンクしたページ、「方法 : Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定する」に記載されている設定です。
- プロジェクトプロパティダイアログ右上にある“構成マネージャー...”ボタンを押し、構成マネージャーダイアログを表示させます。
- ”プラットフォーム”プルダウンメニューで”<新規作成...>”を選択します。
- “新しいプラットフォーム”プルダウンメニューで”x64”を選択しOKボタンを押します。
- 構成マネージャーダイアログを閉じます。
CUDAの方の設定も変更しておきます。
- 構成プロパティ > CUDA C/C++ > Common ツリーメニューを選択します。
- Target Machine Platform 項目値を “64bit(—machine 64)” に設定します。
実行完了後コマンドプロンプトを閉じない設定
Visual Studio 2008 までとは異なり、Visual Studio 2010 ではデバッグなしで開始(Ctrl+F5)で実行した場合でも、デフォルトではプログラムが終了するとコマンドプロンプトが閉じてしまいます。コンソール出力した結果が見えませんのでこの動作を変更します。
- 構成プロパティ > リンカー > システム ツリーメニューを選択します。
- サブシステム項目値を “コンソール(/SUBSYSTEM:CONSOLE)” にします。
Windows SDK 使用設定
- 構成プロパティ > 全般 ツリーメニューを選択します。
- プラットフォーム ツールセット の項目値を “Windows7.1SDK” に変更します。
インクルードパス等設定
[追記: この設定を行わなくてもライブラリのリンクは正常に行えました。未確認ですがどこかで自動的にパスが設定されているのでしょう。従ってこの設定は必要無いと思います。[追記: nvcc.exe と同じ階層にあるnvcc.profileですね。]]
[追記2: こちらで説明している通り、インテリセンスを効かすためにはインクルードディレクトリの設定が必要です。]
- 構成プロパティ > VC++ディレクトリ ツリーメニューを選択し、実行可能ファイルディレクトリのプルダウンメニューから “<編集...>”を選択します。
- 表示されたダイアログで $(CUDA_BIN_PATH) を追加した後、OKボタンを押しダイアログを閉じます。
- 同様にインクルードディレクトリでは $(CUDA_INC_PATH) 、ライブラリディレクトリでは $(CUDA_LIB_PATH) を追加します。
なお、これらの環境変数は、先のCUDA Toolkit インストール時に自動で設定されています。
リンクライブラリ設定
- 構成プロパティ > リンカー > 入力 ツリーメニューを選択します。
- 追加の依存ファイル のプルダウンメニューから “<編集...>”を選択します。
- cudart.lib と入力した後OKボタンを押しダイアログを閉じます。
Compute Capability 2.1 対応コード生成
これは必須ではないですが、せっかくGTS 450を選んだのですから設定しておきます(カーネル関数(GPU用コード)の中でprintfできたりメリットもあるようですし)。
- 構成プロパティ > CUDA C/C++ > Device ツリーメニューを選択します。
- Code Generation から <編集...> を選択します。
- “親またはプロジェクトの既定値から継承”のチェックを外し、入力欄に “compute_20,sm_21” を設定しOKボタンでダイアログを閉じます。
nvcc.exeのヘルプを読むと、compute_20はvirtual architectureの指定、sm_21はreal architectureの指定、だそうですがvirtual/realが何を指しているのかイマイチ分かっていませんのでそれっぽいのを指定しています。
設定は以上です。この後、Ctrl+F5を推せばビルド、プログラムが実行されます。
参考:
« Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その1 インストール | トップページ | gpucomputingsdk_4.0.17_win_64.exe がインストールできないのはウイルスバスターのせいだった »
コメント
この記事へのコメントは終了しました。
« Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その1 インストール | トップページ | gpucomputingsdk_4.0.17_win_64.exe がインストールできないのはウイルスバスターのせいだった »
はじめまして。この手順を見てVisualStudio2010で同じように環境を整えてみたのですがerror MSB3721でエラーが出てビルドできませんでした。解決方法をご存じないでしょうか。よろしくお願いいたします。
投稿: | 2011/08/26 00:32
"MSB3721 CUDA"で検索してみると、確かに同様の症状が出ている環境はたくさんあるようですね。
解決策っぽいのは
http://forums.nvidia.com/index.php?showtopic=199986&st=0&p=1236543entry1236543
でしょうか。ただその後の返信ではそれでも直らない、ともあるようですが。
VCで実行して原因が分からない場合、コマンドプロンプトで同じコマンドを実行すれば、より詳細なエラーメッセージが得られる場合もあります(今回の場合もそうである、とは限りませんが)。
個人的に興味がありますので、もし差し支え無ければ、ファイル一式送っていただけないでしょうか。
( http://www.axfc.net/uploader/ のような無料アップローダ使用して頂くか、本ページ右上のリンク「メール送信」に私のメールアドレスがあります。)
ただし、私がVC2010使用し始めたのはこの件からなので超初心者です。
ですから解決できるとは限りません…その点ご留意を。
投稿: 雪羽 | 2011/08/26 05:34
ありがとうございます。作成したファイルをアップロードしました。
http://www1.axfc.net/uploader/Sc/so/268816
自分もVisualStudioはほとんど使っていない初心者です。よろしくお願いいたします。
投稿: | 2011/08/26 12:23
あ、あ~!すみません…
上のエントリの例に出している"myFirstKernel.cu"は、ダウンロード直後の状態では完全なソースコードではありませんでした
(トレーニング用なので、ところどころ穴埋めしないといけない)。
http://developer.nvidia.com/cuda-example-introduction-general-purpose-gpu-programming
からリンクされている書籍CUDA by Exampleのサンプルコード
http://developer.nvidia.com/sites/default/files/akamai/cuda/files/cuda_by_example.zip
の、
chapter03/simple_kernel_params.cu
に読み替えて試してみてください。
エントリの記述も修正しておきます…
投稿: 雪羽 | 2011/08/27 01:59
コードを変えて試してみたところ実行できました。これからもいろいろと参考にさせていただきます。ありがとうございました。
投稿: | 2011/08/28 00:37
こんにちは。
こちらを参考にCUDA開発環境を整えていたのですが、
HelloCUDAプロジェクトのソースファイルにsimple_kernel_params.cuを追加するところで、
「~simple_kernel_params.cu の名前は無効です。」
というエラーが出ます。
その1のインストールのところからこちらの指示通りにやってきたつもりだったのですが、なにがだめだったのでしょうか?
こちらと違う点といえば、GPUがTeslaC2075であるために、ドライバーのバージョンが276.28であることくらいだと思うのですが・・・
知恵を貸して頂ければ幸いです。
投稿: | 2011/11/23 23:51
こんにちは。
> 「~simple_kernel_params.cu の名前は無効です。」
> というエラーが出ます。
これが原因だ、と断定することはできないのですが…
もしかすると、ファイルパスにVisual Studioでは許容されていない文字が含まれている、とかなのかもしれません。
解凍したフォルダを、(例えば)C:\直下に置いて再度試してみても同じエラーになるでしょうか。
投稿: 雪羽 | 2011/11/24 12:21
はじめまして。上記の手順、大変参考になりました。
いざプログラムを実行したところ、以下のようなエラーが出ました。
matrix_gpu.cu(5) : fatal error C1083: Cannot open include file: 'cutil_inline.h': No such file or directory
cutil_inline.hが見つからないからPATHを通してくれ、ということだと理解し、「インクルードパス等設定」の「追記2」を参考に、PATHの設定を行いましたが、一向に同じエラーが発生します。
プログラムのソースはこのページにある、Matrix_GPUです。
http://www.gdep.jp/page/view/218
原因が何かわかりますでしょうか?
また、Visual Studioの設定についてなのですが、以上に挙げられている「プロジェクトプロパティ設定」はVisual Studioをたちあげる度に設定するものなのですか?
それとも、一度保存したプロジェクトには設定内容が保存されているのでしょうか?
新規にプロジェクトを作る度に上記の設定を行っているので、設定内容が保存されないのかなと思ったのですが・・・。
よろしくお願いいたします。
投稿: | 2011/12/29 19:22