2012年3月アーカイブ

前回の失敗の要因

前回の失敗をT君と相談したところ,問題点はCUDAのダイナミックリンクライブラリ命名方法にあることがわかった.なんと,CUDAではdll名そのものにバージョン番号が含まれているのである(一般的にはフォルダ名にバージョン番号を入れると思うのだが・・).CWFLのビルド時には,CUDAのインポートライブラリを読み込む.この(バージョン番号を含んでいる)ライブラリ名が実行時に呼び出すdll名になる.つまり,CWFLのビルドに用いたCUDAと同じバージョンのCUDAでしかCWFLは実行できないことになる.今回インストールしようとしているのはCUDA 4.0でビルドしたCWFLなので,前回インストールしたCUDA 4.1では実行できないのである.

CWFLの配布という点からすると,これはかなりやっかいな問題である.CUDAのバージョンが変わる毎にCWFLを再ビルドして配布し,インストールしてもらう必要がある.いまのところ解決策は思いつかないので,とりあえず,CWFL配布時にはCUDAのバージョンを指定することにする.

第3日目

CUDA 4.1のアンインストール

今回はCuda4.0対応のビルド済みのCWFLを試すことにする.そのため,前回一度インストールしたCUDAのファイルをアンインストールした.CUDAはバージョンごとにインストールディレクトリが異なるので,特にアンインストールする必要はないと思われるが,念のためである.まず,CUDA Toolkit 4.1をアンインストール.次にGPU Computing SDK 4.1をアンインストールしようとしたところ,やや,「指定されたモジュールが見つかりません」というエラーが出るではないか! 一応,前回確かめておいたGPU Computing SDK 4.1のインストールポイントを調べたところ,そのまますべてのファイルが残っている.

CUDA 4.0のインストール

アンインストールのトラブルはとりあえず無視して,CUDA Toolkit Archiveに行き,4.0の関連ファイルをダウンロードした.前回と同じWindows 64bitで, 

  • CUDA Toolkit 4.0
  • GPU Computering SDK 4.0
  • Developer Drivers 4.0

である.Toolkitのインストールの種類も前回と同様「Complete」とした.

インストールポイントは,予想できる通り,4.1が4.0に代わっているだけである.つまり,

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0
  • C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0

となっていた.SDK4.1のアンインストールができなかったので,PATHを調べると4.1へのPATHも残っていた.特に問題ないが,一応,手動で消しておくことにした.この段階で,C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\bin\win64\Releaseに入っているビルド済みのCUDAサンプルプログラムからbandwidthTest.exeを試してみたところ,問題なく実行できた.

Visual Studioの設定

次にVisual Studioの「ツール>オプション>プロジェクトおよびソリューション>VC++ディレクトリ」のインクルードディレクトリの設定も変更する.前回の設定から4.1→4.0とするだけであり,具体的には下記のとおりにする.

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include
  • C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\CUDALibraries\common\inc

CWFLを用いたサンプルソースのコンパイルテスト

sample.bmpCWFLを用いる適当なサンプルソースをT君の研究フォルダから拾い,コンパイルを試してみた.問題なく,ビルドができる.ここまでは,前回もたどりついたところである.さらに実行を試みる.

OKである! 円形開口の回折像を計算するサンプルソースであったが,右図のとおり,問題なく計算できている.

(注) 用いたサンプルソースでは4倍拡張を行っていないため,若干だが,円状畳み込みによるエイリアシングが発生している.WFLでも4倍拡張を行わないと同じ結果になる.

院生T君もいよいよ卒業で残すとこ後一か月である.彼の「作品」であるCuda WaveField Lib(CWFL)やWaveField Graphics Lib(WFGL)をこのサイトにアップロードする前に,やはりまずは自分のコンピュータに入れて試してみる必要がある.卒論・修論の大騒ぎのシーズンも終わったので,あわてて,これらのライブラリを自分のPCにインストールすることにした.

第1日目

GPUの取り付け(交換)

これはGTX-280(古い方).新しいGTX-580はぼぼ同じサイズだが,残念なことにわずかに厚い.まずは,GPUそのものをインストールする必要がある.昔むかし,そもそもT君が研究室に来る前に自分でGPUを試していた頃,GTX280なる当時最先端のGPUをPCに入れてある.しかし,CWFLはComputeCapability2.0を要求する仕様となっているので,これではダメ.最新のGTX580に入れ替えることにする.

GPU,特に高性能のGPUは,電力を大食いする.しかし幸い,GTX280を入れた時に電源を大型のものに換装してあるので,その点は大丈夫のハズである.しかし・・・,入れようとしたGTX580は,わずかだがGTX280よりデカい! なんとHDDと干渉してうまくPCI-Eに刺さらないではないか.泣く泣く,HDDの場所を入れ替えることにする.しかも,RAID1でペアとなっている別のHDDとのケーブルの関係上,一つのHDDの場所替えではダメで二つ変える必要がある.PCの中身をちょこっといじるだけのつもりだったのが,作業が大掛かりになってしまった.念のため行ったHDDのバックアップに時間がかかったため帰宅が深夜に(涙).

第2日目

CWFLのインストール

いろいろと他に仕事があり,なかなか続きができなかった(大学の教員はなかなか忙しいのです).まず何はともあれ,研究室のサーバーにあるCWFLのセットアップを起動.インストールは問題なく進んだが,あれ,マニュアルはインストーラに入ってないのだな.これは改良が必要かも.

CUDA関係のいろいろをインストール

CWFL自体がライブラリであるが,下請けのCUDAライブラリを呼び出すので,使用するためにはCUDAライブラリもインストールする必要がある.まずは,CUDAのサイト(http://developer.nvidia.com/)に行く.Toolsメニューから「CUDA Toolkit & SDK」というページに移動.今回,CUDA Toolkit 4.1のWindows 64bitというのをダウンロードした.Windowsが,「ダウンロード数が少なくて危険」とのたまうが無視.いきなりmsiファイルなので,これを実行.インストールの種類を「Typcal」,「Custom」,「Complete」の3種類から選ばなければならないが,とりあえず,Completeを選択.

 T君のマニュアルではGPU Computering SDKも必要とあるので,続いてこれをダウンロード&インストール.こちらのインストールにはやたら長い時間がかかった.CUDAのサイトにはさらにDeveloper Driversというのが置いてあるが,これが必要とはマニュアルには書いていない.しかし,一応念のため,ダウンロードしておいた.なお,CWFLはWFLと協調して動作するため,WFL3以上を事前にインストールしておくことは当然必要である.

インストールポイントを調べてみると,CUDA Toolkitは「\Program Files\NVIDIA GPU Computing Toolkit」に,CUDA Computing SDKは「\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1」となっており異なった場所にインストールされている.しかし,ダイナミックリンクライブラリの呼出しに必要なPATHの設定はToolkitのインストーラが自動的にやっていてくれているので簡単であった.

CWFLを用いたプログラムをコンパイルするためにはCUDAのランタイムAPI等のヘッダファイルが必要であるが,そのディレクトリを設定しないと,そのままではVisual Studioから呼び出せない.そこで,Visual Studioの「ツール>オプション>プロジェクトおよびソリューション>VC++ディレクトリ」から,インクルードディレクトリを設定する.今回のインストールでは,

  1. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\include
  2. C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\CUDALibraries\common\inc

の二つのインクルードディレクトリの設定が必要であった.この辺りはかなり煩雑である.Nvidiaもインクルードディレクトリぐらい統一しておいてくれたら好いのに・・・とぼやく.

ここまでで,CWFLのサンプルソースのコンパイルは通るようになった.しかし,実行すると,「dllが呼び出せない」エラーが出る.あれれ,必要なPATHはCUDAのインストーラが設定してくれたのじゃないの??とまたぼやく.やはり,Developer Driversが必要なのかと考え,先ほどダウンロードしておいたファイルを実行してインストール.が,しかし,やはりダメである.必要なDLLが呼び出せない.

とりあえず,ここで一旦ギブアップ.

このアーカイブについて

このページには、2012年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2012年1月です。

次のアーカイブは2012年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。