LinuxでCUDAのプロファイラを使う方法のメモ
マルチポスト元→http://exth.net/~tgbt/wordpress/2010/01/23/2844/
後輩某氏に聞かれたので、せっかくだからまとめておく。
WindowsならVisualProfilerで簡単なんだけどね。
環境はCUDA_2.3。/usr/local/cuda/doc/CUDA_Profiler_2.3.txtに書かれている内容の日本語抜粋だと思ってくれればOK。
実際の使い方
- 環境変数CUDA_PROFILEに1を設定する。
- 必要に応じて環境変数CUDA_PROFILE_LOGにプロファイル出力先を設定する。設定しなければカレントディレクトリの./cuda_profile.log.に出力される。複数GPUの場合は%dとかで制御できる模様。
- 必要に応じて環境変数CUDA_PROFILE_CSVを設定する。1にするか0にするかで出力ファイルの書式が変わる。取り込んで使うときはお好みのものを使いましょう。
- 環境変数CUDA_PROFILE_CONFIGに設定ファイルのパスを指定する。この設定ファイルに書かれている項目のプロファイル情報が、前述の出力先ファイルに吐かれることになる。
CUDA_PROFILE_CONFIGで指定した設定ファイルには、プロファイル項目を改行区切りで並べておけば良い。ただし、最大4つしか指定できない。(後者のカーネル実行カウンタが4つで、前者のオプションは全部OKかも?)
- オプション
- timestamp : カーネルの実行やデータ転送の時刻。(単位はなんだろう?)
- gridsize : GridあたりのBlock数
- threadblocksize : BlockあたりのThread数
- dynsmemperblock : 動的に確保された、BlockあたりのSharedMemoryの大きさ
- stasmemperblock : 静的に確保された、BlockあたりのSharedMemoryの大きさ
- regperthread : Threadあたりのレジスタ使用数
- memtransferdir : メモリ転送の方向、0だとホストからGPU、1だとGPUからCPU
- memtransfersize : メモリコピーのバイト数
- streamid : ストリームのID
- カーネル実行カウンタ
- gld_incoherent : コアレスドでないGlobalMemory読み込みの回数
- gld_coherent : コアレスドなGlobalMemory読み込みの回数
- gld_32b : 32byte単位のGlobalMemory読み込み回数
- gld_64b : 64byte単位のGlobalMemory読み込み回数
- gld_128b : 128byte単位のGlobalMemory読み込み回数
- gld_request : GlobalMemory読み込み回数
- gst_incoherent : コアレスドでないGlobalMemory書き込み回数
- gst_coherent : コアレスドなGlobalMemory書き込み回数
- gst_32b : 32byte単位のGlobalMemory書き込み回数
- gst_64b : 64byte単位のGlobalMemory書き込み回数
- gst_128b : 128byte単位のGlobalMemory書き込み回数
- gst_request : GlobalMemory書き込み回数--local_load : LocalMemory読み込み回数
- local_store : LocalMemory書き込み回数
- branch : Threadあたりの分岐回数
- divergent_branch : Threadあたりのdivergentな分岐回数
- instructions : 実行された命令数
- warp_serialize : SharedMemoryやConstantMemoryのアドレスコンフリクトによりwarpがシリアライズされた回数
- cta_launched : Threadが実行された回数
ちょっと翻訳を勘違いしているのとかあったらごめんなさい。あと、めんどくさくて実行確認してませんごめんなさい(酷い