桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

名古屋CUDAトレーニング に参加

16時開始って事で、有休使ったりしなくても参加できそうだったので参加。

名古屋CUDAトレーニン
http://gpgpu.unitcom.co.jp/info20120725.html

    • 日時:2012/08/23 16:00〜18:00
    • 場所:タイムオフィス 名駅I 会議室

開会

定員20名だったけど満員近い参加者数だった。あと後で気が付いたけど、参加者に[twitter:@sakanazensen]さんがいらっしゃった。

名古屋大須グッドウィルとかと共催だったので、無料セミナーだけどちょっとお金かけてる感じだった。冷たいペットボトルのお茶のサービスが嬉しかったですね。

GPUコンピューティング入門 by エヌビディアジャパン 林さん

動画にある通り。

CUDAプログラミング入門 by 白山工業株式会社 森野さん

    • 今回の説明は「Fermi」以降のGPUをターゲットとした話
      • 「Fermi」以降のGPUではL1キャッシュを搭載し、それ以前とは比べものにならない位性能が良い。
    • Compute Capability
      • 「Fermi」は2.0
      • CC 3.0のGeforce GTX 680は単精度は速いが倍精度は遅い。
    • 装置構成
      • GPUはCPUに繋がった外部演算装置
    • CUDAカーネル
      • GPGPUにおいて、100万スレッドオーダーでの並列動作は当たり前。もっと負荷をかける程、CPUで演算したときよりもパフォーマンスが出る。
    • カーネル実行の階層
      • Grid : カーネル全体
        • Block : SM(Streaming Multi-Processor:SM数がGPU上での並列処理数となる)の実行単位。Blockサイズはカーネル毎に一定。
          • Warp : 高速化に重要となる粒度
            • Thread : 個々のGPUスレッド
      • CUDAではWarp単位でスレッド処理は並列実行されている
    • プログラミングの基礎
      • ホスト側とカーネル側の二つがある。
        • ホストとカーネル間のデータ転送が発生する事を考慮する。
      • プログラミング例:配列の和
        • 処理のイメージはOpenCLの概念が理解し易い
          • GlobalID : Grid内で一意 : GlobalID = BlockID * Block次元数 + LocalID
          • LocalID : Block内で一意
          • BlockID :
        • 実は、配列の和という例は最もシンプル且つ効率が悪い処理の例である。
      • サンプル : Magnify
        • 画像のクリック位置から一定範囲を拡大表示。それ以外はちょっと暗くする。
        • 画像の1PixelがGPUの1Threadとなる。
        • 画像をBlockの単位でタイル分けする。
          • このやり方は3Dでも使える
        • 逆計算を行うパターンは結構多い。
        • 1つGPUスレッドが1つの結果を出力するというパターンが得意なパターン。

質疑応答

    • Q. GPUの処理効率を計測するにはどうすれば良いか?
      • A. Geforce系ならOSSな監視ツールがあるのでそれを利用する。
      • A. Tesla系ならAPIがあるのでそれを利用する。
    • Q. 複数プロセスでGPGPU処理を呼び出す事は出来るか?
      • A. 現行製品では、CPU-GPU間のキューが一つしか無いので無理。Fermiの次のKeplerではMPI等での利用を考慮して、キューが16個になるのでそれならいける筈。

閉会

年内にもう一度イベントやるらしい。

参加しての感想等

基本AMD派(RADEON/FireGL)ですがGeforceは一応持っているのでCUDAの環境は作った事はあったけど結局使わずじまいだったので、初めてCUDAのソースコードを見たのですが、CUDAではホストとカーネルソースコードは同じファイルで管理できるんですねぇ。実装はしやすいですね。
色々と知らなかった事を知る事が出来たので参加して良かったですね。