« Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その1 インストール | トップページ | gpucomputingsdk_4.0.17_win_64.exe がインストールできないのはウイルスバスターのせいだった »

2011/07/14

Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その2 プロジェクト設定

その1でインストールを行いましたので、次にVisual C++の設定を行い、その後サンプルプログラムを作成・実行してみます。

 

VC6時代は全体に影響する設定が大半だった記憶があります。そのため、プロパティ画面からは設定せず(画面で設定してしまうと他のプロジェクトにも影響を与えてしまうので)、プロジェクトごとに起動用バッチファイルを作成し、そこに必要な環境変数などを設定して…というようなことを行っていました。

一方、現在のバージョンでは、プロジェクトごとに必要な設定はプロジェクト単位でしか設定できないような方針が採られているようです。この方針はVC++2008とVC++2010の差異としても現れ、現在Web上で多く説明されている2008用のインストール方法説明ではうまくいかない箇所がありました。

 

グローバル設定

Visual C++ 2010 Express の全体に影響する設定を行います。

  1. Visual C++ 2010 Express を起動します。
  2. ツール > 設定 > 上級者用の設定 を選択します。

…これくらいでしょうか。

 

CUDAサンプルプロジェクトの作成と設定

  1. ファイル > 新規作成 > プロジェクト... で”新しいプロジェクト”ダイアログを開き、”空のプロジェクト”を選択、名前を”HelloCUDA”としてOKボタンを押し、新しいプロジェクトを作成します。
  2. ソリューションエクスプローラーでHelloCUDAを選択し、 プロジェクト > ビルドのカスタマイズ... メニューを選択します。
  3. CUDA 4.0 にチェックをつけ、OKボタンを押します。

01buildcuda

これで簡単なプロジェクトが作成できました。続いて実行するcuファイルを作っておきましょう。書籍CUDA by Example(Amazon)のサンプルコードがこちらからダウンロードできます(Download source code for the book's examples (.zip)のリンク)ので、これを解凍し、chapter03\simple_kernel_params.cuをプロジェクトに取り込みます。インクルードファイルも必要なので、全体を解凍しておきましょう。

  1. ソリューションエクスプローラーでHelloCUDAプロジェクトのソースフォルダを右クリックし 追加 > 既存の項目... を選択します。
  2. simple_kernel_params.cu ファイルを選択します。

02source2

これでビルドする準備はできました。一応.cuファイルがビルド対象になっているか確認しておきましょう。

  1. ソリューションエクスプローラーでmyFirstKernel.cuを右クリックし”プロパティ”を選択します。
  2. ビルドから除外: いいえ項目の種類: CUDA C/C++ となっていることを確認し、ダイアログを閉じます。

03cudabuildprop

前述してきた手順と異なる順番で設定した場合(ビルドのカスタマイズを後から行った場合)は、.cuファイルがビルド対象になっていないかもしれません。その場合は上のような設定に変更しておきましょう。

 

プロジェクトプロパティ設定

  1. ソリューションエクスプローラで作成したHelloCUDAプロジェクトを右クリックしプロパティを選択します。
  2. ダイアログ左上にある“構成”プルダウンメニューで”すべての構成”を選択します。

04all

プロジェクトプロパティはこのダイアログで設定します。”すべての構成”を選択したのは、今回変更するものはRelease用/Debug用バイナリ双方で同一項目に対して同一値を設定するためです(Release用とDebug用それぞれ個別に設定しても良いですが、2度手間になりますので)。以降ではこのダイアログを開く都度この設定を行ってください。

 

x64バイナリ出力設定

その1でもリンクしたページ、「方法 : Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定する」に記載されている設定です。

  1. プロジェクトプロパティダイアログ右上にある“構成マネージャー...”ボタンを押し、構成マネージャーダイアログを表示させます。
  2. ”プラットフォーム”プルダウンメニューで”<新規作成...>”を選択します。
  3. “新しいプラットフォーム”プルダウンメニューで”x64”を選択しOKボタンを押します。
  4. 構成マネージャーダイアログを閉じます。

05x64

CUDAの方の設定も変更しておきます。

  1. 構成プロパティ > CUDA C/C++ > Common ツリーメニューを選択します。
  2. Target Machine Platform 項目値を “64bit(—machine 64)” に設定します。

06cudax64

 

実行完了後コマンドプロンプトを閉じない設定

Visual Studio 2008 までとは異なり、Visual Studio 2010 ではデバッグなしで開始(Ctrl+F5)で実行した場合でも、デフォルトではプログラムが終了するとコマンドプロンプトが閉じてしまいます。コンソール出力した結果が見えませんのでこの動作を変更します。

  1. 構成プロパティ > リンカー > システム ツリーメニューを選択します。
  2. サブシステム項目値を “コンソール(/SUBSYSTEM:CONSOLE)” にします。

07console

 

Windows SDK 使用設定

  1. 構成プロパティ > 全般 ツリーメニューを選択します。
  2. プラットフォーム ツールセット の項目値を “Windows7.1SDK” に変更します。

08toolsetsdk

 

インクルードパス等設定

[追記: この設定を行わなくてもライブラリのリンクは正常に行えました。未確認ですがどこかで自動的にパスが設定されているのでしょう。従ってこの設定は必要無いと思います。[追記: nvcc.exe と同じ階層にあるnvcc.profileですね。]]

[追記2: こちらで説明している通り、インテリセンスを効かすためにはインクルードディレクトリの設定が必要です。]

  1. 構成プロパティ > VC++ディレクトリ ツリーメニューを選択し、実行可能ファイルディレクトリのプルダウンメニューから “<編集...>”を選択します。
  2. 表示されたダイアログで $(CUDA_BIN_PATH) を追加した後、OKボタンを押しダイアログを閉じます。
  3. 同様にインクルードディレクトリでは $(CUDA_INC_PATH) 、ライブラリディレクトリでは $(CUDA_LIB_PATH) を追加します。

なお、これらの環境変数は、先のCUDA Toolkit インストール時に自動で設定されています。

09include

 

リンクライブラリ設定

  1. 構成プロパティ > リンカー > 入力 ツリーメニューを選択します。
  2. 追加の依存ファイル のプルダウンメニューから “<編集...>”を選択します。
  3. cudart.lib と入力した後OKボタンを押しダイアログを閉じます。

10lib

 

Compute Capability 2.1 対応コード生成

これは必須ではないですが、せっかくGTS 450を選んだのですから設定しておきます(カーネル関数(GPU用コード)の中でprintfできたりメリットもあるようですし)。

  1. 構成プロパティ > CUDA C/C++ > Device ツリーメニューを選択します。
  2. Code Generation から <編集...> を選択します。
  3. “親またはプロジェクトの既定値から継承”のチェックを外し、入力欄に “compute_20,sm_21” を設定しOKボタンでダイアログを閉じます。

11codegen

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 がインストールできないのはウイルスバスターのせいだった »

コメント

はじめまして。この手順を見てVisualStudio2010で同じように環境を整えてみたのですがerror MSB3721でエラーが出てビルドできませんでした。解決方法をご存じないでしょうか。よろしくお願いいたします。

"MSB3721 CUDA"で検索してみると、確かに同様の症状が出ている環境はたくさんあるようですね。
解決策っぽいのは
http://forums.nvidia.com/index.php?showtopic=199986&st=0&p=1236543&#entry1236543
でしょうか。ただその後の返信ではそれでも直らない、ともあるようですが。

VCで実行して原因が分からない場合、コマンドプロンプトで同じコマンドを実行すれば、より詳細なエラーメッセージが得られる場合もあります(今回の場合もそうである、とは限りませんが)。


個人的に興味がありますので、もし差し支え無ければ、ファイル一式送っていただけないでしょうか。
( http://www.axfc.net/uploader/ のような無料アップローダ使用して頂くか、本ページ右上のリンク「メール送信」に私のメールアドレスがあります。)

ただし、私がVC2010使用し始めたのはこの件からなので超初心者です。
ですから解決できるとは限りません…その点ご留意を。

ありがとうございます。作成したファイルをアップロードしました。
http://www1.axfc.net/uploader/Sc/so/268816
自分もVisualStudioはほとんど使っていない初心者です。よろしくお願いいたします。

あ、あ~!すみません…
上のエントリの例に出している"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
に読み替えて試してみてください。
エントリの記述も修正しておきます…

コードを変えて試してみたところ実行できました。これからもいろいろと参考にさせていただきます。ありがとうございました。

こんにちは。

こちらを参考にCUDA開発環境を整えていたのですが、
HelloCUDAプロジェクトのソースファイルにsimple_kernel_params.cuを追加するところで、
「~simple_kernel_params.cu の名前は無効です。」
というエラーが出ます。

その1のインストールのところからこちらの指示通りにやってきたつもりだったのですが、なにがだめだったのでしょうか?
こちらと違う点といえば、GPUがTeslaC2075であるために、ドライバーのバージョンが276.28であることくらいだと思うのですが・・・

知恵を貸して頂ければ幸いです。

こんにちは。

> 「~simple_kernel_params.cu の名前は無効です。」
> というエラーが出ます。

これが原因だ、と断定することはできないのですが…
もしかすると、ファイルパスにVisual Studioでは許容されていない文字が含まれている、とかなのかもしれません。
解凍したフォルダを、(例えば)C:\直下に置いて再度試してみても同じエラーになるでしょうか。

はじめまして。上記の手順、大変参考になりました。
いざプログラムを実行したところ、以下のようなエラーが出ました。

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をたちあげる度に設定するものなのですか?
それとも、一度保存したプロジェクトには設定内容が保存されているのでしょうか?

新規にプロジェクトを作る度に上記の設定を行っているので、設定内容が保存されないのかなと思ったのですが・・・。

よろしくお願いいたします。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/18902/52207291

この記事へのトラックバック一覧です: Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その2 プロジェクト設定:

« Visual Studio 2010 Express と CUDA4.0でプログラムを実行してみる その1 インストール | トップページ | gpucomputingsdk_4.0.17_win_64.exe がインストールできないのはウイルスバスターのせいだった »

other sites

  • follow us in feedly
  • github
  • stackoverflow

ソフトウェアエンジニアとして影響を受けた書籍

  • Christain Bauer: HIBERNATE イン アクション

    Christain Bauer: HIBERNATE イン アクション
    理論と実践が双方とも素晴らしい製品であるHibernate。本書はそのプロダクトを書名に冠していますが、Hibernateを使うつもりがなく、ORマッピングの解説書として読むにしても十分な良書です。Second EditionとしてJava Persistence With Hibernateという書籍も出版されていますが、残念ながら現在のところ 和訳はされていません。-インアクションは2.xの、Java Persistence-は3.1の頃のものなので、最新版とはちょっと違うところもあることに注意。 (★★★★★)

  • アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版

    アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版
    クライアント/サーバシステムを構築する上で必要となる知識が総論されてます。Web技術者も、フレームワーク部分を開発するのであれば必読。 (★★★★★)

  • Joel Spolsky∥著: ジョエル・オン・ソフトウェア

    Joel Spolsky∥著: ジョエル・オン・ソフトウェア
    前述の書籍「ソフトウエア開発プロフェッショナル」をより砕いたもの、という感じでしょうか。 前書きではプログラマでなくSE向けの本のように書かれているが、プログラマが読んでも面白い本であると思われます。 SEになった新人(あるいはそういう会社に入る/入りたての人)にとっては、これからどういったことが仕事を遂行していく上で起こりえるのか、どのように考えて行なっていけばいいのか決定する助けになると思います。 元は″Joel on Software″というブログの記事で、web上でも一部日本語で読めます。 http://japanese.joelonsoftware.com/ (★★★)

  • ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか

    ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか
    問題解決(一昔前のの流行語で言うところの『ソリューション』)能力は、システムエンジニアのスキルとして備えるべきもののうちのひとつです。しかし、これは難しい。学校で出されるテストと違い、唯一の、(問題提出者が想定している)解を求めるだけが「問題解決」では無いからです。そもそも、何が問題なのか、それは本当に問題なのか、それは本当に解決すべき問題なのか、その問題解決方法は正しいのか、などを解決しなければ、「その解は正しいのか」に辿りつくことができません。この本の最も良いところのひとつは、本があまり厚くないこと。すぐに読めるし、何回も読み返す気になるでしょう。 (★★★★★)

  • スティーブ・マコネル: ソフトウエア開発プロフェッショナル

    スティーブ・マコネル: ソフトウエア開発プロフェッショナル
    コードコンプリートで有名なスティーブマコネルの著書。新人SEに読んで欲しい。個人として業界の中でどうあるべきか、組織としてどうあるべきか、SEのプロ意識とは?SEの心構え概論、といったところでしょうか。また、業界における資格の重要性についても説かれています。この業界では資格が特に軽んじられる傾向がありますが、この傾向はどんな弊害をもたらすのか、将来的にこの業界は資格に対してどのような姿勢で臨んでいくべきなのか。日経BP社では(他の出版社もだが)最近、似たような類いのあまり面白くない書籍が乱出版されていますが、この本は別格だと思うので安心して購入して欲しいと思います。 (★★★★★)

無料ブログはココログ