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

HistoPyramid Stream Compaction

1,043 views

Published on

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

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,043
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

HistoPyramid Stream Compaction

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

×