2011年12月度GPUコンピューティング勉強会

日時:2011年12月15日(木) 午後13時より午後16時まで(12時半受付開始) 場所:パソコン工房秋葉原本店2F カンファレンスルーム    東京都千代田区外神田3-1-16 ダイドーリミテッドビル2F 続きを読む
1
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

近頃よくやる "Hello World" 循環転送。 ホストにメモリがあって、GPU にメモリがある。メモリを転送して戻すだけの例題。 ビルドの例でソースの説明はしません。  #gpgpu

2011-12-15 13:34:58
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

CUDA 使うヒトの多くは今あるものを流用するのが多いと思います(講師談)、もとからあるソースに手を加えてカンタンなデモをすると。 (VSいらんやん、エディタで書いてコンソールでやったらええやん、と思う。) #gpgpu

2011-12-15 13:37:07
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

// Nsight リリースノーツに出てることを注意事項で話されるのもどうかと。もしや VSそのものを扱うのが初めての方向けの説明ということ?  #gpgpu

2011-12-15 13:39:08
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

// Nsight 使うまでもない実演や。 んー、コマンドプロんプロでじゅうぶん問題ないレベル。 nvcc 叩けば良かろうかと。  #gpgpu

2011-12-15 13:40:37
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

Compute Capability の指定、対象となるデバイスにあわせて指定。 わからんかったら全部打っとけばいい。 // ん? nvcc でコンパイルオプション書くのをそのままやろ? 開発経験豊富な方ではなさそうに聞こえる。 大丈夫か?  #gpgpu

2011-12-15 13:43:15
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

ホスト側オプション (VSコンパイラ)、ライブラリの指定、 cudart.lib を追加(大体普通の人が使ってるのはランタイム)、VS使うだけでカンタンに環境出来ると。 // 質問あれば?と聞かれても質問する要素がない。  #gpgpu

2011-12-15 13:45:14
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

// 初心者向けに、もう少し丁寧に解説したほうがいいと思うな。 体系的に NVIDIA スキルをキャッチアップするなら、この説明は微妙やと思う。  #gpgpu

2011-12-15 13:46:08
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

GPU は CPU につながった外部演算装置。 M/B と GPU 間は PCI Express 2.0 で接続されてる。最近は CPU の中のDRAM/GPU機能を包含してて OpenCL で開発できるようになっている。 #gpgpu

2011-12-15 13:48:18
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

典型的な実行例。CPUでプログラム開始し、GPUへデータ転送、GPUプログラム実行依頼・・・。GPU上のプログラムはカーネル、数万スレッドで並列動作 MAssively parallel という、並列度の階層構造 GPUアーキテクチャに依存している。  #gpgpu

2011-12-15 13:50:04
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

カーネル実行の階層。GPU -> Grid -> Block -> Thread 、次は Warp (重要度が低い、設計度が低い, 32 GPU thread) の集合 Block , SM 。 // 入門書読んだほうが確実に分かり易い、説明少し微妙。  #gpgpu

2011-12-15 13:52:47
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

高速なプログラムを書くときに重要な粒度は Warp である。Block はダイナミックに変更可能。 GPU内部の並列プロセッサ(SM) 、コアが並列で動くように設計されてるからユニファイドで構成されている? // んん? 少しツッコミどころあるがスルーしよう。  #gpgpu

2011-12-15 13:55:35
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

SM 内部のSFU は昔の FPU みたいな演算器と思ってくださいと。最近面白いのは L1 Cache。CPU みたいに使えるようになっている、今日は説明しませんけど。 // えらい大雑把。まぁ1時間やし、いいか。  #gpgpu

2011-12-15 13:57:26
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

プログラミングの基礎。ホストプログラミング、カーネルプログラミング、コンパイル+実行。 // 説明が全部「こんな感じ」 で話されてる。これは新手の IT 漫才をやろうとしているのだろうか。  #gpgpu

2011-12-15 13:59:14
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

// 説明がエレガントではないんだけど、完全に正しくもない。昔の Remote Procedure Call みたいなのがあったという説明が明確に間違っている。 なんだろ、、そろそろツライ、が最後まで聞いてみたい。  #gpgpu

2011-12-15 14:00:14
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

cudaMemcpy() でよく間違うのは、ホスト側のポインタを書いてしまうだと? // それは間違わないだろう、100歩譲っても。設計せずにソースを書くと言うことならわかるけど。変数定義を設計していれば陥らない。  #gpgpu

2011-12-15 14:01:53
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

メモリはホストとデバイスの2種類。 HostToDevice, DevicetoDevice, DevicetoHost ・・・この説明が出来るなら、先ほどの陥り易いバグはバグではない。 // もう少し自身を持って話されたほうがいい。  #gpgpu

2011-12-15 14:03:10
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

カーネル呼び出しと、デバイス同期。 // プログラムの構造が変わったから名前が変わる? SDK 触ったことあっても、DDK 経験ないんかな?  #gpgpu

2011-12-15 14:04:55
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

CUDA カーネルの書き方、CUDAデバイスコードについて // 説明の前後で矛盾がある、なんだろな、ここでは設計をしっかりしろと仰るのに、先ほどの説明はないな。  #gpgpu

2011-12-15 14:07:11
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

// CUDAソースファイルの説明は、スライドの文言を説明を読み上げるだけ。 「こそあど」や抽象的な説明は弱そうだ。  #gpgpu

2011-12-15 14:08:21
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

プログラム例。 配列の和。 c[i] = a[i] + b[i] // 説明を端折ってることについて説明があった。イチから教えると 5h 要するんだそうだ。 最初に用語定義をしてから講習すればいいのに。本当に開発経験者ならね。  #gpgpu

2011-12-15 14:10:42
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

// 来場者数 30名くらい、スーツ3割、カジュアル7割。 ぱっと見、退屈そうな受講雄者は半分以上。たぶん、皆さん気持ちは同じはず。  #gpgpu

2011-12-15 14:12:36
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

配列の和、ホストコードの説明のあとのカーネル設計について // 説明がシリアル過ぎる。 なぜコードにスレッド指定しているのかの説明が正しくない。 もう少し並列度がある説明にすればいいのに。ソースの説明しないなら。  #gpgpu

2011-12-15 14:14:47
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

大阪ではここでいろいろな話題があって質問だらけで面白かったと。 // ふぅん  #gpgpu

2011-12-15 14:15:51
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

VS でソース見せて説明中。 // VS が良い働きをしている、上に グローバルスコープと出ているのに、そこからヒントを得られずに理論が弱い持論展開なのか、、、もったいない。  #gpgpu

2011-12-15 14:17:48
斉藤之雄 / 社会福祉士 😺🗯 @yukio_saitoh

ブロック辺りの最大スレッド数の制限があるので、複数のブロックを並べることでスケール。 // なぜ、並列にすると性能が出るという説明がなく、OpenCL から概念を拝借というが、説明が2次元的というか。  #gpgpu

2011-12-15 14:21:37