このサイトについて(このエントリは常にTOPです)

2007年10月29日

研究関係の資料やらなんやらを公開するためのwebサイトです。

なるべく嘘は書かないつもりでいますが、プログラムのネタなどは理解し切れていない事項を掲載する可能性があることをお断りしておきます。何かお気づきの点がありましたらお気軽に突っ込みをいれてやってください。

情報の転載については出典の明記さえしていただければご自由にどうぞ。ただし情報が間違っていた場合の責任は負えませんのでご了承ください。

wiki形式の方がまとめやすいことはwikiにまとめています。あわせてご利用ください。

もしもどのエントリにつければいいのかわからないコメントなどがあれば、このエントリにお願いします。

NVIDIA Parallel Nsightを導入してみた

2010年6月21日

とりあえずのメモであり、設定の漏れなどがある可能性は否定できません。暫定。

NVIDIA Parallel Nsightとは?

VisualStudioに統合されたCUDAデバッガ。実際にCUDA対応のGPUを用いるハードウェアデバッガ。一時期NVIDIA Nexusという名前で発表されていたモノ。商標やら何やらの都合で名称変更したのかな?

使い方(導入準備編)

Betaプログラムに無料登録するとダウンロード可能になる。

HostとMonitorが組になっており、HostがVisualStudioと統合された環境、MonitorがGPUにアクセスするプログラム。両方同じPCに導入するローカルでバッグと、それぞれ個別に導入するリモートデバッグが可能。HostもMonitorもWindowsが必要なことを考えるとローカルデバッグの方がやりやすそうな気がするけど、実はローカルデバッグを行うにはGPUが2枚必要。1枚がCUDA対応ならOKなのは救いだが、物理的に2枚のGPUが刺さらないような環境の人はご愁傷様と言わざるを得ない。

使い方(使用準備編)

VisualStudio2008(以下VS2k8)とNVIDIAドライバとHostとMonitorをインストールする。ToolkitやSDKは不要、というかNsightに最新版が入っている。

(実際にToolkitとSDKが入っていない環境を使ったわけではないので、もしかしたら間違っているかも?)

インストールは単純にインストーラを実行するだけでOKだが、後述するようにインストール後の設定は必要。

インストールするとスタートメニューに「NVIDIA Parallel Nsight 1.0」および「NVIDIA Parallel Nsight Monitor 1.0」というフォルダが追加される。前者に「User Guide」が含まれているのでこれに従えば良い、が、全部英語で悔しい人もいると思うので簡単に解説しておく。

(Installation and Setup EssentialsとWalkthroughを斜め読みすれば何とかなるので、できれば読んで欲しい。)

簡単に説明すると、以下のような準備作業が必要:

  1. VS2k8とドライバとHostとMonitorの導入(済)
  2. Minitorを起動しオプションをいじる
  3. Hostを起動しオプションをいじる

それから、GPUの接続にはちょっと注意が必要。

使い方(GPU接続編)

1つのGPUに表示とデバッグを行わせると、不具合が起きる……かもしれない。ので、回避する。

デバッグに使いたいGPUもDVIでモニタにつないだ状態で起動し、NVIDIA コントロールパネルで出力を切る。運用を間違えるとディスプレイがもったいない気はするが、なんとかする。

このへんは「UserGuide」の「How To: Setup Local Headless GPU Debugging」に絵が付いているので、英語がわからなくてもそちらを見た方が良い。(メニュー項目さえ読み替えれば良いので。)

ついでに、Aeroが有効な状態だとデバッグできないようなので、Windows7ベーシックテーマを使うように設定するなどして回避しておく。(個人的にAlt+Tabがしょんぼりになるのが嫌なのだが……。)

使い方(Monitor設定編)

(UserGuideではHostが先なんだけど、気にしない。)

Monitorを起動すると、UAC警告・防火壁設定あたりが出た後にタスクトレイにアイコンが増える。右クリックから「Options…」を選ぶと設定画面が出る。

左のツリーで「Security」を選び、右のEnabled secure serverをTrueにする。リモートデバッグを行う場合はEnable per machine permissions等もいじる……はずなのだが、一度Trueで接続確認したあとはFalseにしてもつながってしまった。Trueだと接続コントロールあり、Falseだと接続コントロール無し=誰でもつながれる、かも?

それから「General」の「WDDM TDR enabled」はFalseにしておくこと。これはおそらく「ドライバによるGPUアプリ強制n秒殺し」回避だと思われる。

Monitorの設定はこれだけ。ポップアップで再起動を促されることもあるので、その際は素直に右クリックメニューから終了して起動し直すべし。

使い方(Host設定編)

Hostの設定というか、そもそもデバッグするプログラム(VS208プロジェクト)が必要なのだが、とりあえず全般的な設定から。

VS2k8を起動するとMonitor同様のアイコンやNsightと書かれたメニュー追加されているのに気がつくはず。Nsightメニューから「Nsight Options…」を選んで設定ダイアログを出し、GeneralのSecurityのEnable secure connectionをTrueにしておく。

プロジェクトファイルは

C:\ProgramData\NVIDIA Nsight 1.0\Samples\CUDA\Debugging\Matrix Multiply

にある行列積を使ってみる。

matrixMul_vc90.vcprojを開けば良い。

ソリューションエクスプローラでプロジェクト名を右クリックするとNsight User Propertiesというメニュー項目があるので選択し、設定ダイアログを出す。

Launch OptionsのConnection name:にMonitorのアドレス(IPでも名前でも、ネットワーク的に理解可能ならOK)を記入する。ローカルデバッグならlocalhostでOK。

実行編

メニューのNsightからStart CUDA Debuggingを選べばOK。

うまくいかない場合はHost側=VS2k8の出力やらMonitorのポップアップやらでエラーが見えるはずなので、なんとかする。

Nsightメニュー内にある「Enable CUDA Kernel Launch Debugging」が有効ならGPU kernel内の変数トレースも可能。メモリダンプ的なことも可能。

「CUDA Debug Focus…」を選んで出てくるGUIを使えばBlockやThreadを選んで変数をチェックすることも可能。

「New Analysis Activity」を選んで出てくるGUIを使えばプロファイリングも可能。(非常に大雑把に言うと、適当にオプションをいじって下の方にあるLaunchを押せばOK。)

その他注意点など

リモートデバッグ時には実際にアプリが動くのはMonitor側になるわけだが、ここでEnterを押したら終わるようなプログラムを動かすと、ちゃんとMonitor側で押してあげないと駄目になるわけで、手元にMonitorが無いと残念なことになる。

だいたいこんなかんじです。

久々にサンプルプログラムなどを公開

2010年6月8日

職場の発刊物に書いた記事のサンプルプログラムを公開した。内容的には非常に初歩的で薄っぺらだが、一応。

今実装などしているものが少し落ち着いたら続きも公開したいところだが、、、。

公開先→スパコンニュース

近況報告

2009年10月19日

最近ちっとも更新していない大島です.

お誘いを受けて職場を異動しました.なかなかこのページに書くのにちょうど良いネタがありません.しばらくは,日々のネタは「向こうのサイト」に,学会発表等の情報はwikiに書くつもりでいます.

以上,近況報告終わり.

投稿テスト

2009年6月29日

投稿テスト by iPhone

WindowsでCUDAを使うための方法に関するメモ

2009年5月13日

はじめに

新年度になり,新たにCUDAに関する研究を行ってみたいという学生が増えてくるだろうということで,ざっとメモしておきます.

ちなみにLinuxを用いる場合はこちら.(記述が古いですが,まぁ大枠は一緒でしょう.)

ここでは最低限の環境としてビデオカードを無視した内容を記述します.CUDA対応GPUが搭載されていなくても大丈夫です.なお,OSはWindowsXP Professionalを想定しています.他のWindowsの場合は適宜読み替えてください.

準備:必要なソフトウェアの導入

CUDA Toolkit(CUDAツールキット)

CUDA SDK code samples(CUDA SDKコードサンプル)

VisualStudio(VisualC++)2008

ToolkitとSDKは[http://www.nvidia.com/object/cuda_get.html:title=]からダウンロードし,順番にを実行してインストールしましょう.(日本語サイトを利用する場合はこちら:[http://www.nvidia.co.jp/object/cuda_get_jp.html:title=].私は習慣的に本家を利用していますが,おそらくどちらでも大丈夫.)

CUDA対応GPUを搭載しているPCの場合はついでにドライバも導入しておきましょう.

VisualStudioは,持っていない場合は[http://www.microsoft.com/japan/msdn/vstudio/Express/:title=]からVisualC++2008ExpressEditionを入手しましょう.無料で利用できます.(大学生・大学院生の場合は先生や事務に問い合わせると無料で上位の製品が使えたりすることもあるようです.)

CUDA ToolkitはデフォルトでC:\CUDAにインストールされます.

CUDA SDK code samplesはデフォルトでC:\Document and Settings\All Users\の中にインストールされますが,ここではC:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDKにインストールしたとして話を進めます.(少し前のバージョンまではこちらでした.)

VisualStudioはデフォルトでC:\Program Files\Microsoft Visual 9.0にインストールされます.

インストールが終わったら,コマンドプロンプトを開き(ファイル名を指定して実行からcmd.exe),nvcc(nvcc.exe)とcl(cl.exe)が実行できることを確認しましょう.実行できない場合はそれぞれのパス(C:\CUDA\binおよびC:\Program Files\Microsoft Visual Studio 9.0\VC\bin)を環境変数PATHに追加してください.(詳細な操作手順はweb検索すればすぐにわかるので説明しません.)

なお,nvccが実行できない場合はCUDA_BIN_PATH,CUDA_INC_PATH,CUDA_LIB_PATH(それぞれC:\CUDA以下のbin,include,lib)なども追加されていないかもしれません.(再インストールした方が良いかも?)

clは実行するとmspdb80.dllが無いなどと言った警告が出るかもしれませんが,ここでは無視して構いません.

以上で準備が整いました.

コードの記述とコンパイル,実行

それでは実際にコードを記述しコンパイルしてみることにします.

今回は先ほどインストールしたCUDA SDK code samplesに含まれているプログラムを利用してみます.

C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects

以下に多数のサンプルがインストールされており,それぞれ.slnファイルが同梱されています.

C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects\deviceQuery\deviceQuery_vc90.sln

を開いてビルドすれば実行ファイルが生成され,実行すればCUDA対応GPUが搭載されていなくてもデバイスエミュレーションで動きます.(GPUの性能がコマンドプロンプトにテキスト表示されます.)

また,deviceQuery.cppを別の作業フォルダにコピーし,拡張子をcuに変更し,コマンドプロンプトから

>nvcc deviceQuery.cu -I”C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\common\inc” -L”C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\common\lib” -lcutil32 -o deviceQuery

とすれば実行ファイルdeviceQuery.exeが作成されます.

こうして作成されたdeviceQuery.exeは実行しようとするとcutil32.dllが無いと怒られてしまうので,実行前に

C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\common\lib\cutil32.dll

C:\Windows\sytem32

以下にコピーしておきましょう.

おわりに

以上,CUDAに触れるための方法を簡単にまとめてみました.テキストばかりで書いてしまいましたが,難しいところは特に無いと思います.

ちなみにこの記事は私が実際にVM上のWindowsXP Professionalでやったことのメモなので,うまく動かないということはそうそう無いと思いますが,何か記述抜けなどがあるかもしれないので,不具合などありましたら気軽にコメントで指摘してやってください.

今回のプログラム(deviceQuery)はGPUの情報を取得するだけのプログラムであり,この段階ではまだGPUは何も計算していません.実際に計算させる方法については,また機会があれば書くかも?(過去に書いた記事がカバーしている上に,それこそサンプルを見れば良い気がするのであまり必要性は感じませんが.)

Pages: 1 2 3 4 5 6 Next