OpenCLでDFTやろうかなって思ったのですが,導入でハマったので忘備録を.
#OpenCL用のドライバをインストール
GPGPU用のドライバは各ベンダーで配布されています.
もし,GPUがNVIDIAであればNVIDIAの,AMDであればAMDのドライバを使います.
僕のマシンはNVIDIAが入っているので,NVIDIAのドライバを入れます.
昔はCUDA ToolkitとSDKは別々だったのですが,CUDA 6になった辺りから全部1つに統合されたみたいです.
下のリンクから該当する環境のインストーラを落としてください.
#環境変数の確認
ドライバのインストールが終わると,自動的にパスが通っていると思います.
重要なパスは以下の4つです.
- CUDA_PATH
- CUDA_INC_PATH
- CUDA_LIB_PATH
- CUDA_BIN_PATH
ところが,僕の環境だとCUDA_PATHしか設定されていませんでした.
とてもつらいです.
もし,CUDA~PATHが設定されていなければ,コマンドプロンプトを開いて以下のコマンドを実行するか,バッチファイルに保存して実行させるかどちらかを試してみてください.
setx /M CUDA_INC_PATH "%CUDA_PATH%\include"
setx /M CUDA_BIN_PATH "%CUDA_PATH%\bin"
setx /M CUDA_LIB_PATH "%CUDA_PATH%\lib"
ちなみに,CUDA_PATHのディレクトリは
インストール先/NVIDIA GPU Computing Toolkit\CUDA\v6.0
になっています.
#Visual Studioでパスを通す
適当なC++プロジェクトを開きます.
今回は設定の仕方なので,面倒くさい場合は空のプロジェクトを作るといいでしょう.
プロジェクトのプロパティを開いて,以下の3点の設定をします.
- インクルードディレクトリの設定
- ライブラリディレクトリの設定
- 依存ライブラリの設定
構成は「全ての構成」にしておいてください.
今回はお試しなのでDebugでもいいのですが,Releaseで設定し直すのが面倒くさいので,ライブラリ関係はなるべく全ての構成で設定すると楽です.
##インクルードディレクトリの設定
[構成プロパティ]-[C/C++]-[全般]を開いてください.
追加のインクルードディレクトリと言う項目がありますので,$(CUDA_INC_PATH)
と設定してください.
##ライブラリディレクトリの設定
[構成プロパティ]-[リンカー]-[全般]を開いてください.
追加のライブラリディレクトリがあるはずなので,$(CUDA_LIB_PATH)\Win32
と入力してください.
x64向けの設定方法は最後に書きます.
##依存ライブラリの設定
[構成プロパティ]-[リンカー]-[入力]を開いてください
追加の依存ファイルというのがあるので,そこにOpenCL.lib
と入力してください.
これでビルドの準備ができました.
#ビルドして実行してみる
以下のコードを入力してみて,何事もなければ成功です.
お疲れ様でした.
#include <CL\cl.h>
int main() {
cl_platform_id test;
cl_uint num;
cl_uint ok = 1;
clGetPlatformIDs(ok, &test, &num);
return 0;
}
#x64の設定をしたい場合
x64でビルドする場合は,また面倒くさい設定をしなければなりません.
まずは,今までの設定を全て終わらせている状態にしてください.
プロジェクトのプロパティを開いて,構成マネージャを立ち上げてください.
構成マネージャに「アクティブソリューションプラットフォーム」というプルダウンリストがあります.
これをこれをクリックすると,<新規作成>という項目があるので,それをクリックします.
すると,新しいソリューションプラットフォームというウィンドウが出てくるので,そこの「新しいプラットフォームを入力(ry」というリストボックスから,「x64」を選択し,OKボタンを押します.
また,プロジェクトのプロパティに戻るのですが,構成を「すべての構成」,プラットフォームを「x64」にしてください.
[構成プロパティ]-[リンカー]-[全般]の「追加のライブラリディレクトリ」ですが,これを$(CUDA_LIB_PATH)\x64
に変更してください.
ここからは独り言なのですが,もしかするとVisual Studioがもっと賢い子であれば,ライブラリディレクトリの子ディレクトリもプロジェクトに追加してくれると思うのですが,どうでしょう?