GPUの中を覗く!Visual StudioでCUDAをデバッグ

CUDAを利用したGPU側の処理をデバッグしようと思ったのですが、古い環境での記事しか見つからなかったのでメモしておきます。
と言っても私の環境も最新ではなく、window7, Visual Studio 2010, CUDA Toolkit v5.0, Nsight Visual Studio Edition 3.1で実行しました。

CUDAが利用できるグラフィックボードかどうかチェック

まずはここからCUDAを利用できるグラフィックボードかどうかチェックして下さい。
グラフィックボードの確認はコンピューターのプロパティからデバイスマネージャーを開き、ディスプレイアダプタで確認して下さい。

CUDA Toolkitをインストール

CUDA Toolkitをここからダウンロードしてインストールして下さい。
古いバージョンはこっちにあります。

Nsight Visual Studio Editionをインストール

Nsight Visual Studio Editionはここからダウンロードできます。

まずは右上のlog inを押してユーザー登録後、ログインして下さい。
ログインできたら、中央下にある"Download it now!"のすぐ下にある"Free Nsight Visual Studio Edition Registered Developer Account Required"
を押してデベロッパーアカウントを登録する必要があります。この登録は申請してから少し時間が経って承認されます。私は5分くらいで承認メールが届きました。
承認されたら"Download it now!"を押してSTEPに従ってNsight Visual Studio Editionをインストールして下さい。

Visual StudioからCUDAで書かれたプログラムを実行

準備が出来たらVisual Studioを起動し、ファイル/メニュー/新規作成/プロジェクトを押してNVIDIAのCUDA用プロジェクトを作成して下さい。

いつも通りにとりあえずデバッグ

既にサンプルプログラムが用意されているのでビルドしてデバッグ実行したら
CPU側の処理は普通にデバッグ実行できると思います。

下図では__global__ void addKernel()関数の中がGPU側で処理されるのですが、
この中にブレークポイントを設置しようとしてもスコープ外に外されてしまい変数の値を確認できません。

GPU側の処理をデバッグ

GPU側の処理をデバッグするには、メニュー/Nsight/Start CUDA Debuggingを実行します。
そうすれば下図のようにGPU側の処理もデバッグ実行できるようになります。
ただし、この際はCPU側の処理の部分がデバッグできなくなるようです。

ブロックやスレッドを変更したい場合は、メニュー/Nsight/Windows/CUDA Debug Focusをデバッグ中に押して下さい。

昔の環境に比べて間単にデバッグ実行できるようになったと思います。