クリプキクローネ日記帳

ある種の音楽と数学とランニングはミニマルなところが似ていると思う。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

GPU並列図形処理入門 - CUDA・OpenGLの導入と活用 [乾正和(著)] (技術評論社)

けっこう前ですが、GPUの使い方の本を読みました。
OpenGLとCUDAの基本的なことが書いてあります。
分かりやすくてスムーズに読めました。

この本と関係ないですが、OpenGLには組込み向けのOpenGLESというのがあります。
なのでそれを使って、ランニングで走った軌跡を3次元で表示するAndroidアプリを作りました。
OpenGLは空間の座標変換がたくさんあって、仕組みを読む分にはすごくおもしろいんですが、
実際に実装するとちょっとしたことでもいろいろ定義しないといけないので面倒です。
そしてそのアプリのソースコードも今回のHDD故障で消えてしまいました。残念すぎる。
不完全なインストールパッケージだけサーバー上にあげていて生きているという皮肉。


まず、OpenGLについて。
OpenGLはただ表示をサポートするだけのライブラリだと思っていたけど、
うまいこと使うとデータの解析のようなこともできそうなのがおもしろい。GPGPUっぽい。
例えば、与えられた点群からそれぞれ円錐を下ろすと最寄りの点で平面を区切ったボロノイ図ができる。
普通は辺や頂点をグラフ理論的に扱う必要があるけど、用途によっては絵としてのボロノイ図だけで十分かもしれない。
そんなときはOpenGLを使おう、って絶対そんなの気づかない。

ボールエンドカッターの軌跡の計算もおもしろかった。
ポリゴンの世界はオイラーの式(辺とか頂点の数の方)が大活躍ですね。

後半はCUDAについて。
CUDAはnVIDIAのGPU限定なのが残念だけど、これはこれで最適化されていていいんだろうな。
この本はプログラミングの本だけど、CUDAの最初のところで
GPUのアーキテクチャの簡単な説明もあってとてもありがたい。
ストリーミングマルチプロセッサ(SM)の中にストリーミングプロセッサ(SP)がたくさんあって、
全体でグローバルなグローバルメモリと、SM内でシェアされるシェアードメモリがあって、
グリッドという2次元配列の各要素がブロックという3次元配列に割り振られていて、
各ブロックは同一SMで処理され、そしてブロックの各要素が別スレッドによって処理されるらしい。
勘弁してください。
コンセプトはすごくシンプルなのに言葉が紛らわしい。

コーディングのお作法は余計な概念がなくて分かりやすい。
まずcudaMallocして
ホスト(CPU)側のメモリからデバイス(GPU)側のメモリにデータをコピー(cudaMemcpy)して、
デバイス側の関数(__global__ void d_xxx())を呼び出して、
ホスト側のメモリにコピー(cudaMemcpy)して戻す。
そしてcudaFreeする。
デバイス関数の書き方はまさに並列計算という感じで楽しい。
ブロックとスレッドのインデックスからうまいことそのスレッドの計算対象を見つけなければならない。

本当にシンプルな並列演算なら分かりやすいけど、
シェアードメモリ(__shared__)を使ったり
同期(__syncthreads())をとったりするとすぐに複雑怪奇になる気配。
あっさり書いてあるけど。
こわい。

その先はこれぞGPGPUという感じで画像と何の関係もない数値解析の例がいくつか出てくるんだけど、
そもそもベースとなる手法をちゃんと理解できていないのであまり感激できず。
ルンゲ・クッタ法を用いた粒子法解析や拡散方程式がよく分かっていればもっと楽しいんだろうな。

でもGPUの扱い方の雰囲気を感じ取れてよかった。
グリッドやブロックのサイズがダイレクトにGPUの構造とリンクしていて、
あ、それありなんだ、とちょっとびっくり。
なんでもかんでもOSやバーチャルマシンに隠蔽されてしまう世の中なのに。
実際にはうまいことモジュールを分離するんだろうな。
でもブロックとグリッドの分け方は本来やりたい計算内容次第でもあるから分離も難しそう。

そしてここまで書いておきながらCUDAの動くパソコンを持っていないという残念っぷり。
パソコン買おう。
  1. 2016/10/04(火) 22:44:05|
  2. | トラックバック:0
  3. | コメント:0
<<深層学習 [岡谷貴之(著)] (講談社) | ホーム | Linuxデビュー>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://myumbrella.blog42.fc2.com/tb.php/331-af6a9780
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。