Your SlideShare is downloading. ×
  • Like
HistoPyramid Stream Compaction
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

HistoPyramid Stream Compaction

  • 549 views
Published

関西 GPGPU 勉強会 #2 (10/13/2012) …

関西 GPGPU 勉強会 #2 (10/13/2012)

HistoPyramid を使用した Stream Compaction 及び Marching Cubes への応用を紹介したスライドです.
内容の正確性は保証しません.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
549
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. HistoPyramidStream Compaction@dasyprocta関西 GPGPU 勉強会 #2
  • 2. Outline● Stream Compaction● HistoPyramid Algorithm● Example: Marching Cubes
  • 3. (c) Jeremy Vandel http://www.flickr.com/photos/jeremy_vandel/208714007/Stream Compaction
  • 4. Stream Compaction入力ストリームからいらない要素を取り除く● Stream Reduction● Stream Filtering
  • 5. Sequential Compaction● 逐次処理によるコンパクションfor (i = 0, j = 0; i < N; ++i) { if (input[i] is wanted) { output[j] = input[i]; ++j; }}* size(input) >= size(output)
  • 6. Compaction Presence or Absence● コンパクションなし ● コンパクションありfor (value in input) { wanted = compaction(input) if (value is wanted) { for (value is wanted) { process(value); process(value); } }}
  • 7. GPU Stream Compaction● Prefix Sum を利用したコンパクション Predicate 0 0 1 0 1 1 1 0 Prefix Sum (exclusive scan) 0 0 0 1 1 2 3 4 Scatter
  • 8. Stream Compaction LibraryThrust -> Reordering -> Stream Compaction● copy_if● remove● remove_if● unique● etc...
  • 9. Compaction Efficiency● CPU, GPU 間のデータ転送量の削減● カーネル実行数の削減● インアクティブスレッドの抑制
  • 10. Compaction EfficiencyCPU, GPU 間のデータ転送量の削減必要なデータのみの転送が可能に CPU GPU GPUへ転送 何らかの処理 CPU読み戻し
  • 11. Compaction Efficiencyカーネル実行数の削減処理する必要のあるデータのみカーネル割り当て
  • 12. Compaction Efficiencyインアクティブスレッドの抑制仕事をしないカーネルの排除void kernel(input) { if (input is unwanted) return; some works...}
  • 13. Performance Trade-off● コンパクション作成のオーバーヘッド● コンパクションのためのバッファ増● データが疎であるほど効果大● カーネル負荷が高いほど効果大
  • 14. Stream Compaction Application● 画像処理● ボリューム (空間) データ● ヘテロなストリームの均質化● etc...
  • 15. (c) jared http://www.flickr.com/photos/generated/1164823755/in/photostream/HistoPyramid Algorithm
  • 16. whats HistoPyramidshort for Histogram Pyramid● ミップマップライクなデータ構造を利用した コンパクション手法On-the-fly Point Clouds through Histogram Pyramids[Ziegler2006]
  • 17. Algorithm Outline1. Preprocess 入力データから Predicate 値を生成2. Buildup Phase Predicate 値によるピラミッドの構築3. Traversal Phase ピラミッドからのデータ取得
  • 18. Algorithm OutlinePredicate 値とは?データの扱い方を決定する値● value = 0 棄却する要素● value = 1 保持する要素● value > 1 複製する要素
  • 19. Preprocess Phase入力データを Predicate 値に変換Example: 入力データが 1 以下の場合に棄却 入力データ 0 8 1 0 4 2 5 0 Predicate 値 0 1 0 0 1 1 1 0
  • 20. Buildup Phaseピラミッドの構築ベースレベルからのリダクション● 加算による畳み込み 4 1 3 1 0 2 1 Predicate 値 0 1 0 0 1 1 1 0
  • 21. Buildup Phaseピラミッドデータ構造● 必要なバッファサイズ (2-1 リダクション) ベースレベルサイズ × 2 - 1● トップレベルの値 コンパクションされた有効値の数
  • 22. Buildup PhaseGPU 実装基本は Parallel Reduction● 各レベルのバッファを保存する必要ありカーネル最適化の参考Optimizing Parallel Reduction in CUDA [Harris]
  • 23. Traversal Phaseトップレベルからベースレベルへトップレベル値範囲のインデックスから入力データの有効インデックスを取得{ 0, 1, 2, 3 } 4 0,1,2,3 1 3{ 1, 4, 5, 6 } 1 0 2 1 0 1 0 0 1 1 1 0 1 4 5 6
  • 24. Traversal Phase探索範囲の決定Example: インデックス 2 を探索レベル降下時に属する範囲の先頭値を引く 4 key = 2 [0, 1) [1, 4) 1 3 key = 1 = 2-1 [0, 2) [2, 3) 2 1 key = 1 = 1-0 [0, 1) [1, 2) 1 5 1
  • 25. Traversal PhaseGPU 実装インデックス 1 つにカーネルを割り当て● トップレベル値の数のカーネル起動ピラミッドが大きくなるほど探索コスト大
  • 26. Algorithm Optimization● 4-1 リダクション● 5-1 リダクション
  • 27. Algorithm Optimizationトップレベルまでのリダクション回数● 2 要素を 1 つにまとめる場合 log2N● 4 要素を 1 つにまとめる場合 log4Nデータ数 N は底の累乗でなければならない
  • 28. Algorithm Optimization4-1 Reduction 1D Pyramid 11 1 4 3 3 0 1 0 0 1 1 1 1 0 1 1 1 1 0 1 1
  • 29. Algorithm Optimization4-1 Reduction 2D Pyramid 0 1 1 1 0 0 1 1 1 4 11 0 1 1 0 3 3 1 1 1 1● ミップマップライク● テクスチャキャッシュを考慮
  • 30. Algorithm Optimization5-1 Reduction ● 上位レベル値があれば下位レベル値は1つ必要無い ● 少しトリッキー 14 1 4 3 3 ?GPU-accelerated data expansion forthe Marching Cubes Algorithm [Dyken2010]
  • 31. Comparison with the OtherPrefix Sum コンパクションとの違い出力駆動と入力駆動の差● HistoPyramid ● Prefix Sum 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 2 1 1 3 4 0 0 0 1 1 2 3 4 頂点値による 4 スレッド Scatter による 8 スレッド
  • 32. (c) jurvetson http://www.flickr.com/photos/jurvetson/148925935/Example, Marching Cubes
  • 33. Marching Cubes立方体格子にポリゴンを貼るアルゴリズムMarching Cubes: A High Resolution 3D SurfaceConstruction Algorithm [Lorensen1987]
  • 34. 立方体パターン● 各セルは 0 ~ 5 枚のトライアングルを生成● 対称等を考慮して全 256 パターン
  • 35. Marching Cubesパターンの登録● セルとの接触判定● パターンをセルに登録
  • 36. Marching CubesHistoPyramid ベースレベルの生成● ポリゴンを貼るセル Value = 1● 空のセル Value = 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  • 37. Marching CubesHistoPyramid の構築 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0 3 3 0 0 1 0 0 1 0 0 0 2 1 3 0 6 6 26 0 1 0 0 1 1 1 1 2 1 2 3 5 9 0 1 1 0 0 0 0 1 0 2 2 2 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0● 有効セル数の算出
  • 38. Marching CubesHistoPyramid の探索 0 0 0 1 1 0 0 0入力値: 10 0 0 1 1 1 1 0 0 0 3 3 0 0 1 1 0 1 1 0 0 6 6 2 1 3 0 0 1 0 0 1 0 0 0 26 5 9 2 1 2 3 0 1 0 0 1 1 1 1 0 2 2 2 0 1 1 0 0 0 0 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 参照 入力値から セルパターンを取得
  • 39. Marching Cubes有効セル数を基に描画頂点バッファ生成 or ジオメトリシェーダー● 頂点バッファ生成 1. カーネルで GPU メモリに頂点バッファを生成 2. 3D API で頂点バッファを描画● ジオメトリシェーダー 1. 3D API でポイントリストとしてセルを描画 2. ジオメトリシェーダーでポリゴンを生成
  • 40. Marching Cubes3D APIOpenGL or DirectX● DrawIndirect 系 API GPU メモリのデータを引数にできるHistoPyramid のトップレベル値をCPU のリードバック無しで利用可能
  • 41. Marching Cubes on GPU 参考文献HistoPyramid を用いた Marching CubesHigh-speed Marching Cubes using Histogram Pyramids[Dyken2007]GPU-accelerated data expansionfor the Marching Cubes Algorithm[Dyken2010]
  • 42. Exploit the Massive Parallelism!