2012-06-14

インストールメモ: Visual C++ Express 2008 & CUDA 4.2 on Windows XP 32 bit

色々と苦労したので、メモ。動かそうとしてるのは、『はじめてのCUDAプログラミング』のサンプルコード ( http://www.kohgakusha.co.jp/support/cuda/index.html )。

入れるものは、
・Visual C++ Express 2008
・ドライバ
・CUDA 4.2 Toolkit
・CUDA 4.2 SDK
なんだけど、ドライバは既に最新版を入れていた(CUDA ZONEにあるやつはちょっと古くて、入れたら表示がおかしくなった…ので最新版入れなおした)。

最初は VC++ Express 2010 を後に入れてしまって、うまくいかず、順番が悪いのかと思って、一旦全部アンインストールしてから、VC++ を先にいれてみた(しかも2010でなくわざと2008)けど変わらず。後になってみると、VC++ のバージョンはたぶん関係なかったと思う。

あちこちのウェブページで、「{SDKのディレクトリ}\common\cuda.rules があるからそれを VC++ のフォルダにぶち込んどけ」ってあるんだけど、そもそも cuda.rules なんて存在してないんだが…。ちょっと調べたら、どうやら CUDA 4 から NvCudaRuntimeApi.rules に名前が変わったぽい?これは、自分の環境では、

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\extras\visual_studio_integration\rules\

にあった。で、これを

C:\Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\

にコピーしてみた。ところが、cuda.rules という名前での存在を前提にしているのか、やはり怒られるので、NvCudaRuntimeApi.rules を同じディレクトリで複製して、cuda.rules に単純にリネームしてみた。

それをDebugモードでとりあえずビルドしてみるが、エラーで動かない(どうでもいいが、学部4年の時にVisual Fortran使ってたのを思い出した…懐かしい。Debugだと引っかかるけどReleaseだといけてしまう、とかあったなー)cutil.h が無いと言っている。

C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\common\inc\

にあったのでこれを

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\

にコピー。まだだめ。cutil32D.lib が見つからないと言っている。ソースコードと同じディレクトリに cutil32D.dll はあるけど、別物。探した結果、

C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\common\lib\Win32\

にある4つのライブラリ (.lib) を、

C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

にコピーしてみたら、動いたっぽい。ただ、CUDA SDKに入っていたサンプルコードのうち、一番かっこよさそうな nbody が動かない…なんなの…

…ていうか、いちいちコピーとかするより SDK のディレクトリを PATH に追加した方がいいんじゃ…
⇒ どうやら VC++ Express 内でそういうのができるようで、
http://others2.blog.so-net.ne.jp/2010-09-12
の通りに設定してみた。ただし、「\lib」の後にさらに「\Win32」を追加した。

それから、CUDA VS Wizard ( http://sourceforge.net/projects/cudavswizard/files/ 32bit版はこっちから回りこまないといけない)も入れてみたが、サンプルが実行時にエラーになる。「cutil32D.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。」とのエラーダイアログ。これについては、
http://turi2.net/cont/program/cuda_build_development_environment.html
を参考にして(ただし C:\CUDA ではないので、そこは C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\ に読み替える。こんなことならインストール時に変えときゃよかった…長いよ…)、

C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\common\lib\Win32\

にあった cutil32.dllcutil32D.dll を、

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\

にコピーしたら、動いた。

---
これでやっと C/C++ の CUDA ができるようになったようだけど(nbody以外)、自分がやりたいのはどっちかというと Fortran なわけで…。やっぱり OpenACC に期待かなぁ。明日の講習会には行ってみるけど、どれほど参考になるか…(Cの話をダダダーっとされて頭真っ白になるんだろうなぁ、とは思う)。

講演会の資料 見るとCとかそういう問題じゃなくてデータがとかメモリがとかそういう段階でついていけなさそう…行って意味あるかなぁ。むしろディスカウントしてる OpenACC compiler 買って自分でやってみるのがいいよなぁ。…あ、Linux only か…。でも買うしか無いなこれは。先生に相談しないで自腹で。それから説得のコース。

[2012-06-18追記] 説得に成功した。新たに購入予定だったうちの一台をCPU特化からGPU特化へ変更。GPGPUに向いてはいない、という情報もあるが、GTX 680あたりを積む予定。

そういえば CAPS の OpenACC compiler は、C++ はサポートしてないな。webiner の最後でも質問に答えてそう言っていた。まぁ Fortran あるのが嬉しいわけだから自分としてはいいんだけど、C++ の人的にはなんとかしてよってなるんだろうな。

----
ところで、今回、Visual * Redistributable ってやつも全部一度アンインストールしてから、avira も悪さしてるかも?という情報があったので avira の停止→アンインストールしようとしたらできなくなった。どうやら avira は Visual C++ 2010 Redistributable を自動的に入れてる模様。実際、avira 再インストールしたら直後に Visual C++ 2010 Redistributable の Microsoft Update が来た。


No comments: