忍者ブログ
いろいろ楽しんで、挑戦しています。
2017/06/24 [14:26:16] (Sat)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2015/07/23 [11:06:45] (Thu)

@koguchitです。どうもです。


レイトレはわくわくしますね。




今回でレイトレ合宿3!!!の11回目のアドベントカレンダーということで、張り切って記事を書いてみたいと思います。


https://sites.google.com/site/raytracingcamp3/
今回はGPU実装の最適化について考えてみたいと思います。


※そもそもGPUを使わずにCPUのみで実装を考えている方には不要かもしれません。とはいえ、GPU実装を考えてみるときに役に立つかも、という感じで軽く目を通していただければと思います。




半導体、特にGPUは目覚ましい進化を遂げてきましたが、ムーアの法則などの成長予測もいよいよ怪しくなってきました。


とはいえ、依然としてGPUの性能進化は継続しており、どのように扱うのか勘所を知っておくとGPUを早く動かすことができます。逆にいうと、うまく扱えないとGPUの性能が出ない場合があるのです。




GPUには大きく3つの特徴があります。


1)近似した描画理論


2)長大なパイプライン


3)並列性


1についてはレイトレ合宿に来る方には解説はいらないくらいと思いますが、概念的にレンダリング方程式を近似・工夫した、基本的に1次の反射、焼きこみを前提にした2次の反射までをベースにした構成をとっています。


2について、1を実際に具現化するためにGPUは長大なパイプラインを構成しています。CPUよりもかなり長いです。このためGPUは構造的にボトルネックが発生しがちです。


3について、三角形やピクセルという独立性の高いデータを扱うようにすることで演算機器を並列に配置し、高速に演算が可能になっています。





これらを構成するためにGPUアーキテクチャに様々なバリエーションがありますが、近年はシェーダ構成が主になり、ソフトウェア自由度が増えてきました。以 前は決まった処理しかできない固定機能パイプライン構成だったのに、シェーダができて、なおかつ必要なシェーダステージを選択することができるのです。記法に気を付ければGPUの演算機能を存分に任意の計算に使えるということになります。




ここで、実際にどのように最適化を進めるべきなのか、2つの方針を紹介します。


実践的なアプローチと理論的なアプローチです。



前者の場合にはすでにできているプログラムについて適用します。組むだけ組んでしまって、実際にはどの部分がボトルネックなのかをフレーム単位からバッチ単位、機能ブロック単位に解析し、対処を行います。


対して、後者の場合には、実装するGPUのキャッシュ・演算器・メモリ・固定演算機能等の構成に合わせて高速な結果が出るようなアルゴリズムを選択・設計していくものです。
実際には前者でやりたいことを高速に実現するために、GPUを使うことが多いと思いますが、後者の場合にはGPUが最も最適に動作し、出力に差をつけることができます。



以下に実測ベース最適化で使う解析フローの例を示します。DX11のパイプラインをベースにしています。



今回は概要のみのご紹介ですが、もう少し図とか入れて解説した話題をCG WORLD8月号からプチ連載していますので興味を持たれた方はご覧になってみてくださいね。理論ベース最適化など詳細な話題も含めてGPU GEMSという本にもまとめる予定です。
※ドラフトでいいのでもう少し詳しく見てみたいという方がもしいらしたら、メールかダイレクトメッセージでご連絡ください。




ちなみにですが、
NVIDIA のGTX980などにはボクセルコーントレーシングの加速固定機能ハードウェアなどが入っています。またimagination社などはレイトレGPUを発表しています。


個人的に、もっとレイトレやCG表現をを加速できるGPU機能を見つけたいと思っています。
超並列で高性能なGPUを活かせる新しい機能があったらおもしろいですね。




私は今回、残念ながらプログラムのみのリモート参加にいたします。
結果を楽しみにしています。


みなさんおいしいBBQや温泉、楽しんでくださいね。


それでは。





以下補足:


GPU最適化について、以下などにまとまっていたりします。 NVIDIA GPU Programming Guide, http://www.nvidia.co.jp/object/gpu_programming_guide.html



ちなみに、CPU最適化については以下などがあります。各社の命令種やそのレイテンシの情報がまとまっています。http://www.agner.org/optimize/




参考:各社公式GPU仕様書




AMD Developer Central, Developer Guides, Manuals & ISA Documents, Radeon Southern Islands Acceleration, (2012)
http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/




nVIDIA, White Paper NVIDIA Geforce GTX 980, (2014), http://international.download.nvidia.com/geforce-com/international/pdfs/GeForce_GTX_980_Whitepaper_FINAL.PDF




Intel, Linux Graphics 2014 Intel Processors based on the Bay Trail Platform Intel Open Source Graphics Programmer’s Reference Manual (PRM)for the 2014 IntelR Atom? Processors, Celeron? Processors, and Pentium? Processors based on the Bay Trail platform (Valleyview graphics), Volume 5: Memory Views, “Linear vs. Tiled Storage”  (2014), https://01.org/linuxgraphics/documentation/2014-intel-processors-based-bay-trail-platform




Imagination, PowerVR Documentation http://community.imgtec.com/developers/powervr/documentation/




Qualcomm, Adreno OpenGL ES Developer Guide
https://developer.qualcomm.com/mobile-development/maximize-hardware/mobile-gaming-graphics-adreno/tools-and-resources

PR
2015/07/23 [10:57:49] (Thu)
テスト2が失敗している?
2015/07/23 [10:56:38] (Thu)
これでレイトレ合宿のアドベントカレンダーが書けるかな。
2015/07/23 [10:55:34] (Thu)
しばらくぶりなのでちゃんと書けるかテスト
2013/11/28 [09:53:28] (Thu)
3dnchu.com/archives/gimpel3d-gpl
面白い
カメラからの入力とか応用できそう
[1] [2] [3] [4] [5] [6
  HOME   : Next  »
ブログ内検索
プロフィール
HN:
KGussan
HP:
性別:
男性
スライド
カウンター
アクセス解析
バーコード
最新記事のフィルム
忍者ブログ [PR]