前回の失敗の要因
前回の失敗を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を用いたサンプルソースのコンパイルテスト
CWFLを用いる適当なサンプルソースをT君の研究フォルダから拾い,コンパイルを試してみた.問題なく,ビルドができる.ここまでは,前回もたどりついたところである.さらに実行を試みる.
OKである! 円形開口の回折像を計算するサンプルソースであったが,右図のとおり,問題なく計算できている.
(注) 用いたサンプルソースでは4倍拡張を行っていないため,若干だが,円状畳み込みによるエイリアシングが発生している.WFLでも4倍拡張を行わないと同じ結果になる.