VisualStudioのMFCプロジェクトにCUDAを組み込む

Visual Studioで作ったMFC(Microsoft Foundation Class)プロジェクトにCUDAを組み込む手順が少し面倒だったので,ここに記しておきます.
使用したVisual Studioのバージョンは2013で,CUDAのバージョンは7.0です.それぞれ,PCに既にインストールしている前提で説明します.

組み込みの例として,まず以下のようなGUIを作成します.
“Run”というボタンをクリックすると,GPUを使った並列計算が実行されるという非常にシンプルなものです.

MFC_CUDA1

これを作成するために,ダイアログベースでプロジェクトを作成しました.

MFC_CUDA2

ここで,CUDA関連のコードをコンパイルできるように,「ソリューションエクスプローラー」から,プロジェクトファイルを右クリックし,「ビルド依存関係」→「ビルドのカスタマイズ」を選択します.

MFC_CUDA3

そして,インストールされたバージョンのCUDAにチェックをつけ,「OK」をクリックします.

MFC_CUDA4

続いて,CUDA関連のコードを追加します.今回の例では,カーネル関数について記述した”kernel.cu”と”kernel.cuh”,そしてカーネル関数を実行する記述を書いた”kernel_test.cu”と”kernel_test.cuh”を追加しました.
それぞれ,以下に示します.このカーネル関数は2つの行列を加算するという極めて簡単なものです.

kernel.cu

kernel.cuh

kernel_test.cu

kernel_test.cuh

ここで注意点ですが,ソリューションエクスプローラーから”kernel.cu”と”kernel_test.cu”を右クリックし,「プロパティ」を選択します.
このとき,項目の種類が”CUDA C/C++”になっていなければ変更します.

MFC_CUDA5

これで,これらのファイルがCUDAのコンパイラによってコンパイルされます.カーネル関数に加え,カーネル関数を呼び出すファイルもCUDAコンパイラでコンパイルされる必要があるため,わざわざkernel_test.cuというファイルを作ったのでした.
そして,MFC側のファイルに”kernel_test.cuh”をインクルードし,”Run”ボタンのイベントハンドラにCuAddMatrix();を記述すれば,ボタンを押した瞬間,行列加算が並列実行されます.

ここで,コンパイルしてみるとうまくいくとおもいきや,うまくビルドできません.
例えば以下のようなエラーです.

error LNK2001: 外部シンボル “_cudaSetDevice@4” は未解決です。
調べてみると,以下のように“cudart.lib”をリンカの入力に追加する必要がありました.

MFC_CUDA6

ようやくビルドが通り,プログラムを実行して生成されたテキストファイルを確認してみると,正しく動作していることが確認できました.

・参考ページ

既存のVSプロジェクトにCUDAコードを追加する方法
CUDA対応メモ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">