2015-02-28

CUDA の Stream を使って多重データ転送

下記のページに Stream を使って多重データ転送する方法と
ベンチマークが載っている。

How to Overlap Data Transfers in CUDA C/C++ | Parallel Forall:
http://devblogs.nvidia.com/parallelforall/how-overlap-data-transfers-cuda-cc/

最初に全てのストリームでデータを転送してカーネルを実行する方法と
データを転送してカーネルを実行するのをストリーム数繰り返す方法とでは
デバイスによってパフォーマンスが違うようだ。

CUDA の Stream 間の同期方法

CUDA の Stream 間の同期方法が API を見ても分からなかったが、下記サイトを読むと、cudaEventRecord と cudaStreamWaitEvent を使えばいいようだ。

Declaring dependencies with cudaStreamWaitEvent - Cedric Augonnet:
http://cedric-augonnet.com/declaring-dependencies-with-cudastreamwaitevent/

Java で例えるなら、cudaEventRecord が Object#notifyAll で、cudaStreamWaitEvent が Object#wait になるだろうか。

私の個人的な感覚では、cudaEventRecord はイベント API に属さずにストリームの API に属した方が直感的ではないかと思う。

2015-02-27

CUDA セッションのタイムラインを見たい

Visual Studio 上で、実行される関数がどれくらい
時間がかかっているかを視覚化したタイムラインを見るには、
メニューの [Nsight]-[Start Performance Analysis...] を選択して、
[Trace Settings] の CUDA にチェックを入れて、
[Application Control] の [Launch] ボタンを押す。

プログラムの実行後にレポートが表示されるので、
[Session Overview] の [Timeline] を選択する。

タイムラインの時間軸をズームするには、
[Ctrl] を押しながらマウスのホイールを回す。

2015-02-26

CUDA 6.5 でプロジェクトを作って実行してみた

Windows 7 に Visual Studio Community 2013 と CUDA 6.5 をインストールする。
言語パックがエラーで導入できなかったので、英語のIDEのまま使用することにした。

Visual Studio を起動する。

メニューの [File]-[Project ...] を選択する。

[Templates] で [NVIDIA]-[CUDA 6.5] を選択し、[CUDA 6.5 Runtime] を選び、
[Name] にプロジェクト名、[Location] に配置フォルダを指定して [OK] を押す。

プロジェクトが作成され、kernel.cu ファイルが作成される。
kernel.cu ファイルには main 関数といくつかのサンプルコードがある。

メニューの [Debug]-[Start Debugging] からプログラムを実行する。

上手く動けば、設定を変更して、ソースコードを入力していく。

CUDA 6.5 のビルドで出る大量の warning C4819 を消す

Visual Studio 2013 の CUDA 6.5 でビルドすると、次のような警告が大量に出る。

1>c:\program files\nvidia gpu computing toolkit\cuda\v6.5\include\math_functions.h : warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss

これを表示しないようにするには、プロジェクトのプロパティを開き、
[CUDA C/C++]-[Command Line] の [Additional Options] に

-Xcompiler "/wd 4819"

を追加する。

Geforce GTX 9xx 用の CUDA

CUDA 6.5 をインストールして、設定の [Code Generation] に「compute_52,sm_52」を指定してビルドすると、次のエラーが出る。

nvcc fatal : Unsupported gpu architecture 'compute_52'.

GTX9xx 用に別の CUDA があるようなので、下記をダウンロードしてインストールするとビルドできるようになった。

CUDA Downloads For GeForce GTX9xx
https://developer.nvidia.com/cuda-downloads-geforce-gtx9xx

Visual Studio Community 2013 に CUDA 6.5 をインストール

Visual Studio Express 2013 for Windows Desktop に CUDA 6.5 をインストールして使おうとしたのだが、設定などが上手くいかない。

Visual Studio Community 2013 Update 4 に CUDA 6.5 をインストールしたら、すんなりいった。

無理に Visual Studio Express を使わずに、素直に Visual Studio Community 2013 を使えばいいようだ。