graphics.hatenablog.com

技術系テクニカルアーティストのあれこれ

High-Performance Software Rasterization on GPUs (1)

High-Performance Software Rasterization on GPUs

NVIDIA Research
Samuli Laine, Tero Karras

High Performance Graphics 2011
http://research.nvidia.com/publication/high-performance-software-rasterization-gpus


概要

えーマジハードウェア!?
D3D11 が許されるのは小学生までだよねーwww
キモーイww
キャハハwww

とか、まぁ、別にそこまでは言ってないけど、でも今時のレンダリングパイプラインってやっぱ自由度低いよね。データとか、ハードウェアが扱いやすいようにフォーマットしてあげなきゃなんないし、ROP とか、決まりきった演算しかできないし。しゃーないから自分でつくるかー、俺らには CUDA がある!

……っていう、わりとこう、漢らしい論文。

目標は3つ。

  1. 最新の GPU と本気で張り合えるソフトウェアラスタライザをつくって、評価すること
  2. 拡張性マシマシのグラフィックスパイプラインをソフトウェア実装すること
  3. 今後ソフトウェアパイプラインを発展させるにあたって、「どこをハードウェアに支援して欲しいか」を明らかにすること

最後のに注目。別に何が何でもソフトウェアってわけじゃなくて、ハードウェアのメリットを享受しつつ、最大限の自由度をパイプラインに与えるための研究なのだと。


関連研究

FreePipeMSR のLarrabee について。FreePipe は今回の論文との比較に使われてて、MSR のは、読んでないけど、たぶんタイルベースで今回のと似てる。Larrabee は以下略。
ていうか Larrabee って SIGGRAPH で発表されてたんだね、全然しらんかった。。


設計

まず、FreePipe で実現してなかった入力の順序性をきっちり守ること。先に入力された頂点群は先に処理する。今時のパイプラインはみんなそうなってるし、アルファブレンドとかを実現するためにも必要。

ターゲットは GTX 460、Streaming Multiprocessor (SM) が 15 個、各 SM に warp が 48 個、各 warp にスレッドが 32 個。複数の warp をまとめたものを CTA (Cooperative Thread Arrays) と呼ぶ。

諸々のバッファとかキューとかをソフトウェア実装するのはコスト高いから、貯めなきゃいけないデータはとりあえず一旦 DRAM に置くことにする。GPU はバンド幅が超広いから大丈夫。(けどここんとこ読んでて正直よくわからんかった。。)

ストールを減らすために、CTA 間の同期は一切取らない。それぞれの CTA が自分専用のキュー(データの出力先)を持ってて、そこにだけ書き込む。メモリアロケーションは atomic 操作が必要だから、できるだけやらない。

ラスタライズは、、ハードウェア実装にはちょっと勝てそうにない。同じようにパーフラグメント処理を実装しても駄目だし、がんばる。


(続く)