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。

必要な知識

環境変数の設定方法。
bashならexport HOGE=FUGA、tcshならsetenv HOGE FUGA。詳しくはググれ。

実際の使い方

  1. 環境変数CUDA_PROFILEに1を設定する。
  2. 必要に応じて環境変数CUDA_PROFILE_LOGにプロファイル出力先を設定する。設定しなければカレントディレクトリの./cuda_profile.log.に出力される。複数GPUの場合は%dとかで制御できる模様。
  3. 必要に応じて環境変数CUDA_PROFILE_CSVを設定する。1にするか0にするかで出力ファイルの書式が変わる。取り込んで使うときはお好みのものを使いましょう。
  4. 環境変数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が実行された回数


ちょっと翻訳を勘違いしているのとかあったらごめんなさい。あと、めんどくさくて実行確認してませんごめんなさい(酷い