[Paper, PGV09] Wait-Free Shared-Memory Irradiance Cache

by syoyo

Wait-Free Shared-Memory Irradiance Cache
Piotr Dubla , Kurt Debattista , Luís Paulo Santos and Alan Chalmers.
http://www.cgv.tugraz.at/CGV/People/people/behnke/PGV09/057-064.pdf

放射照度キャッシュ(irradiance cache)の計算をマルチスレッドで行うときに, キャッシュデータの一貫性を保つために同期処理に単純なロックベースの手法を使うのではなくて wait-free(lock-free) な手法を使うことで、スケーラブルに処理できるようになったよ、という論文.

放射照度キャッシュ自体はあまり好きではないのですが、lock free 系と CG 系の技術が融合した良い例だと思って取り上げてみることにしました.

放射照度キャッシュは間接照明の計算を近似でアクセラレートする手法です. 最近では vray や PRMan などにも放射照度キャッシュが搭載されていますね.

モノによっては 10x ~ 100x の速度アップになるという魅惑の手法なのですが, しかし、その一方で本質的にキャッシュシステムなので分散レンダリングをするときに難しいことになったり、もっと切実な欠点としてはしみのようなアーティファクトが出やすいという問題があります.

元々の実装も面倒くさいし、アーティファクトを消すために品質も上げようとするとこれまた実装が難しくなるので、個人的には好きな手法ではありません.

元々の放射照度キャッシュの技法を発案したひととこの前話す機会があったのですが、彼も「ああ GI 計算に使う目的で発案したもんじゃねーし(意訳)」なんてのたまってましたしね. 🙂

さておき, 本論文は, 放射照度キャッシュデータの共有化(複数スレッドからアクセスされても一貫性を保つ)の問題を lock free の手法を用いて解決した最初の技法であると述べています.

そして, たしかに wait-free 手法では lock ベースの手法に比べてスレッド数に対してスケーラブルにパフォーマンスが向上しているのですが… しかし lock ベースでは, 放射照度キャッシュデータへの read と write の度に毎度ロックをかけるという恐ろしい実装になっています(ええ、read のたびにです!). いや、さすがにそれはパフォーマンスが出ねーのはそうだろうよ、とツッコミたくなります.

あと、放射照度キャッシュの品質については言及されていないのが気になりますね. Wait-free になってスケーラブルになったとしても、各スレッドの計算順序はバラバラなので、キャッシュの作り方に影響が出て(insertion のタイミングなど)、レンダリングする度に結果が変わるということになるはずです(通常の放射照度キャッシュでもピクセルのスキャンの方法によって結果が変わるのと同じ). そのような条件の考察もあるとうれしかった.

ちなみに、論文の画像を拡大するとやっぱり放射照度キャッシュらしいアーティファクトが見て取れます.これでアーティファクトも出ないような技法なら、最強になると思うのですが.

Advertisements