日記

そのうちGPUでポインタが扱えるようになるだと!?

【後藤弘茂のWeekly海外ニュース】CPUとGPUのメモリ空間を統一するAMDの「hUMA」アーキテクチャを読んでビビった。

正直今まで、「AMDのHSAってUMAに毛が生えた程度のものをベースにするんでしょ」と思ってた。
まぁその「毛が生えた程度」でも、かゆいところに手が届く的な改良ならイイよねって思ってた。
コンピュータの世界では、ちょっとした改良でそれ以上の効果を得る事が出来る場合が少なくないし。

しかしAMDは「毛が生えた程度」なんて生やさしい改良ではなく、CPUとGPUのプログラミングモデルの統合に真っ向から挑戦してるみたいだ。

GPUでポインタが使えるようになるとどうなるか?

最新の情報を追ってるわけじゃないので、少し情報が古いかもしれないが、
例えば現在GPUで本格的にレイトレース処理を実装する場合、ざっくり言うとCPUの場合と同じく一様グリッドや八分木やBVHなどで空間・ポリゴンを分割して、レイとポリゴンとの当たり判定の回数を減らす工夫がなされるのが普通だと思う。
(実際の処理単位はCPUの場合とはまったく変わってくると思うけど、概念の概念レベルでは同じと言っていいだろう。)
しかしGPUはポインタを扱えないし、固定回数のループしか処理出来ない。
そこでGPUでは、テクスチャアクセスのインデックス計算を工夫してポインタの代わりにしたり、複数パス実行することでその数が事前に決まってないポリゴンとの当たり判定処理を行ったりしている。
当然そのような処理を可能にするために、GPU向けにデータ構造の変換をやってあげたりしなきゃいけない。

簡単に書くとそう大した事じゃないように思えるかもしれないが、これが実際に実装する側として考えると、非常にめんどくさいし、非常に難しいし、非常にややこしいし、非常にわかりずらい。
これが、GPUでポインタが扱えるようになると劇的に楽になると思われる。
ループ回数は固定のままでも、例えばBVHの分割の深さを8固定とかにしとけば、(用語の使い方が怪しいが)1パスでSIMD的にポインタを辿って葉ノードを探索する事も可能だろうからシェーダプロセッサの並列性も犠牲にならないだろう。
(ただ、探索で見つかった葉ノードが参照する、不特定多数のポリゴン群の処理は相変わらず苦手なままだろうから、その部分だけは何か特殊な工夫が必要になる事は変わらないと思う。)
当然現状でも事前にデータ構造を工夫すれば同じような事は可能だけど、その事前の工夫が必須で無くなる点に価値がある。

もちろんポインタを使うということはランダムアクセス具合が増しやすくなるという事でもあるので、何も考えずに使ったらGPUの性能は発揮できないだろう。
(GPUの演算性能は最終的にメモリ帯域がボトルネックになる場合が多い。)

ただ、ポインタが使えないせいで「GPUに合わせたデータ構造を用意するためのややこしい前処理」や「GPUの柔軟性の無さを補うための複数パスの処理」や「GPUの処理結果をまとめるためのめんどくさい処理」が発生してる場合、ポインタが使えるようになるだけでそれらの処理が不要になるため、何も考えずに実装しても高速化してしまう場合も少なくないかもしれない。

今までHSAに対してはゲーム機を除いて、生暖かい目で見守ろうと思ってたけど、積極的に応援したくなった。

あと今回の内容とは少しズレるけど、GPUで仮想メモリを使えるようになるってのも驚いた。
実際それに頼ってたら性能的にかなり厳しくなると思うので、これは実用的機能というよりは、メモリ空間統合のためCPUに合わせただけだと思う。
ただ、GPUでポインタも使えるし仮想メモリも使えるとなったら、ブートローダ+αだけCPUで処理して、あとは割り込み処理以外のかなりの部分がGPU上で動作するOSなんてのも実用的かどうかは別として可能なんじゃないかと思う。
これはまた一部が熱狂しそうな話だ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください