Cache-Oblivious データ構造入門 @DSIRNLP#5

10,482
-1

Published on

Published in: Technology
0 Comments
44 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,482
On Slideshare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
71
Comments
0
Likes
44
Embeds 0
No embeds

No notes for slide

Cache-Oblivious データ構造入門 @DSIRNLP#5

  1. 1. 2014/01/11 @ DSIRNLP 5 Cache-Oblivious データ構造入門 秋葉 拓哉 (@iwiwi)
  2. 2. アウトライン 1. B-Tree が何故使われるのか? (復習) 2. Cache-Oblivious の考え方と意義 3. Cache-Oblivious 探索木 (vEB Layout) 4. 世の中の Cache-Oblivious 事例 Cache-Oblivious データ構造入門 (@iwiwi) 3
  3. 3. MySQL の索引のデータ構造は? http://dev.mysql.com/doc/refman/5.1/ja/mysql-indexes.html Cache-Oblivious データ構造入門 (@iwiwi) !!! 4
  4. 4. MySQL の索引のデータ構造は? B-Tree! MySQL に限らず多くのデータベースシステムは B-Tree を使います Cache-Oblivious データ構造入門 (@iwiwi) 5
  5. 5. MySQL の索引のデータ構造は? なんで B-Tree? 普通の二分探索木じゃだめ? Cache-Oblivious データ構造入門 (@iwiwi) 6
  6. 6. なぜ B-Tree? と http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Memory_module_DDRAM_20-03-2006.jpg http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Hdd_medalist.jpg があるから Cache-Oblivious データ構造入門 (@iwiwi) 7
  7. 7. なぜ B-Tree メモリは高速 でも小さい ディスクは遅い でも大きい 大規模なデータベースは ディスクに保存されていて メモリに読み込みながら処理をする. Cache-Oblivious データ構造入門 (@iwiwi) 8
  8. 8. B-Tree のデータ構造 普通の二分探索木 B-Tree 多分木になってる (最大の分岐数 m) Cache-Oblivious データ構造入門 (@iwiwi) 9
  9. 9. なぜ B-Tree の方が良いか? 大事な前提(若干雑) 1. ディスクの読み込み時間 >> 計算時間 2. ディスクである箇所を読み込むと周辺も含 めてそこそこ大きく読まれる 前提より • ディスクを読み込む回数だけを考える – 普段の議論:「O(ほげ) 時間」 – 今回の議論:「ディスクI/O 𝑂(ほげ) 回」 • 一度に読み込まれるサイズを 𝐵 とおく Cache-Oblivious データ構造入門 (@iwiwi) 10
  10. 10. データの探索にかかる I/O 回数 二分探索木 • 𝑂 log 𝑛 回 一回の I/O で 2 分岐 B-Tree • 𝑂 log 𝐵 𝑛 回 一回の I/O で Θ(𝐵) 分岐! ↑ノードのサイズをブロックサイズ 𝐵に合わせる B-Tree のほうが log 𝐵 倍ぐらい早い これは平気で 10 倍とかになるので大違い! Cache-Oblivious データ構造入門 (@iwiwi) 11
  11. 11. このように ディスクとメモリを使うなら そのことを意識したデータ構造を 使う必要がある! Cache-Oblivious データ構造入門 (@iwiwi) 12
  12. 12. ちなみに メモリとキャッシュメモリ間でも 似たようなことを考えないといけない より一般に,「メモリ階層」を意識しないといけない (↓こういうやつ) レジスタ L1 L2 L3 メモリ ディスク テープ? Cache-Oblivious データ構造入門 (@iwiwi) 13
  13. 13. Cache-Oblivious とは Cache-Oblivious データ構造入門 (@iwiwi) 14
  14. 14. Cache-Oblivious Cache-oblivious = キャッシュを忘れて Cache-Oblivious データ構造入門 (@iwiwi) 15
  15. 15. Cache-Oblivious えっ!? 忘れてしまうの? Cache-Oblivious データ構造入門 (@iwiwi) 16
  16. 16. Cache-Oblivious えっ!? 忘れてしまうの? Cache-Oblivious データ構造入門 (@iwiwi) 17
  17. 17. Cache-Aware vs. Cache-Oblivious Cache-Aware = 普通 ブロックのサイズ 𝐵 を事前に 知っていて,それを使ってデータ構造を設計する (例:B-Tree) Cache-Oblivious = 縛りプレイ ブロックのサイズ 𝐵 を知らないことにする! 知らないなりに頑張る 𝐵 がどんな値であったとしてもいい感じになるよう頑 張る ※本当はメモリサイズ 𝑀 というパラメータもあって,同様にそれも知らない ことにする.今回は出てこないので省略 Cache-Oblivious データ構造入門 (@iwiwi) 18
  18. 18. Cache-Aware vs. Cache-Oblivious 計算機の動きの前提は同じ • 読み込みの回数を計算量とする • 一回に 𝐵 バイト読み込まれる やりたいことも同じ (例:探索木) ただし,Cache-Oblivious データ構造は 𝑩 の値を使ってはいけない (つまり𝐵の値を事前に知らない) Cache-Oblivious データ構造入門 (@iwiwi) 19
  19. 19. Cache-Oblivious でない例 B-Tree は Cache-Oblivious ではない ↑ノードのサイズをブロックに合わせる ブロックサイズ 𝐵 を知らないと 何分木にしていいかわからない! ブロックサイズ 𝐵 を使ってデータ構造を設計している Cache-Oblivious データ構造入門 (@iwiwi) 20
  20. 20. なんでそんなことをするのか? Cache-Oblivious データ構造の利点 1つめ: ブロックサイズに合わせたパラメータ調整を環境 ごとに行う必要がない! ポータブル,手軽に使える Cache-Oblivious データ構造入門 (@iwiwi) 21
  21. 21. なんでそんなことをするのか? Cache-Oblivious データ構造の利点 2つめ: 全てのメモリ階層ギャップに最適化される • ディスク ⇔ メモリ・・・ 𝐵Mem • メモリ ⇔ キャッシュ・・・𝐵Cache どんな 𝐵 の値でも性能が出る → どこのギャップに関しても良い性能! Cache-Oblivious データ構造入門 (@iwiwi) 22
  22. 22. なんでそんなことをするのか? Cache-Oblivious データ構造の利点 2つめ: 全てのメモリ階層ギャップに最適化される データの大きさによってボトルネックは変わる • メモリに収まる? → 𝐵Cache • 収まらない? → 𝐵Mem 扱うデータのサイズによらず高性能なプログラム にできる Cache-Oblivious データ構造入門 (@iwiwi) 23
  23. 23. そんな都合の良いものが作れるの? 作れるんです! Cache-Oblivious データ構造入門 (@iwiwi) 24
  24. 24. Cache-Oblivious 探索木 (vEB Layout) Cache-Oblivious データ構造入門 (@iwiwi) 25
  25. 25. 二分探索木があります Cache-Oblivious データ構造入門 (@iwiwi) 26
  26. 26. 以降,三角形を二分探索木と思って下さい Cache-Oblivious データ構造入門 (@iwiwi) 27
  27. 27. でかい二分探索木をイメージして下さい 𝑛 ノード Cache-Oblivious データ構造入門 (@iwiwi) 28
  28. 28. このツリーをディスクによさげに保存する 𝑛 ノード 高さ ℎ = log 2 𝑛 ディスク Cache-Oblivious データ構造入門 (@iwiwi) 29
  29. 29. 高さがだいたい半分のところで切る 高さ ℎ/2 Cache-Oblivious データ構造入門 (@iwiwi) 30
  30. 30. 上半分は約 𝒏 ノードの木になる 約 𝒏 ノード Cache-Oblivious データ構造入門 (@iwiwi) 高さ ℎ/2 31
  31. 31. 切れ目(=上半分の木の葉)には約 𝒏 ノード 約 𝑛 ノード 約 𝒏 Cache-Oblivious データ構造入門 (@iwiwi) 32
  32. 32. 下半分にぶら下がってる木も約 𝒏 ノード 約 𝑛 ノード 高さ ℎ/2 約 𝑛 ノード Cache-Oblivious データ構造入門 (@iwiwi) 33
  33. 33. それが約 𝒏 個ある 約 𝑛 ノード …… 約 𝑛 ノード …… 約 𝒏個 Cache-Oblivious データ構造入門 (@iwiwi) 34
  34. 34. 約 𝒏 ノード × 約 𝒏 個 𝑇0 …… 𝑇1 𝑇2 𝑇 Cache-Oblivious データ構造入門 (@iwiwi) 𝑛 35
  35. 35. それぞれの木を連続部分に保存! 𝑇0 …… 𝑇1 𝑇2 ディスク 𝑇0 𝑇 𝑇1 Cache-Oblivious データ構造入門 (@iwiwi) 𝑛 𝑇2 … 𝑇 𝑛 36
  36. 36. それぞれの木はどうやって保存? 約 𝒏 ノード ディスク Cache-Oblivious データ構造入門 (@iwiwi) 37
  37. 37. それぞれの木はどうやって保存? 約 𝒏 ノード 再帰的に同じことをする! またこのツリーを上下に分割 ディスク Cache-Oblivious データ構造入門 (@iwiwi) 38
  38. 38. こうやってツリーを保存することを vEB Layout 𝑇0 (vEB = Van Emde Boas) と呼びます …… 𝑇1 𝑇2 ディスク 𝑇0 𝑇 𝑇1 Cache-Oblivious データ構造入門 (@iwiwi) 𝑛 𝑇2 … 𝑇 𝑛 39
  39. 39. vEB Layout の性質 Cache-Oblivious である! 再帰してるだけ.ブロックサイズ 𝐵 は出てこなかった. 𝐵 を全く知らずに構築したのに……なんと 要素の探索が I/O 𝑂 log 𝐵 𝑛 回でできる! ↑ 𝑩 を知ってて作った B-Tree と性能が一致! (オーダー記号に隠れた定数倍を除いて) (𝐵 : ブロックのサイズです ← 忘れた人むけ) Cache-Oblivious データ構造入門 (@iwiwi) 40
  40. 40. vEB Layout の性質 Cache-Oblivious である! 再帰してるだけ.ブロックサイズ 𝐵 は出てこなかった. 𝐵 を全く知らずに構築したのに……なんと 要素の探索が I/O 𝑂 log 𝐵 𝑛 回でできる! ↑ 𝑩 を知ってて作った B-Tree と性能が一致! (オーダー記号に隠れた定数倍を除いて) 最悪の場合でも I/O 回数は (𝐵 : ブロックのサイズですlog 𝐵 𝑛 回 2 + 4 ← 忘れた人むけ) Cache-Oblivious データ構造入門 (@iwiwi) 41
  41. 41. 計算量 𝑶 𝐥𝐨𝐠 𝑩 𝒏 回の読み込みでできる理由 ツリーのサイズ:𝑛, 𝑛, 4 𝑛, 8 𝑛, 16 𝑛, … … いつかサイズは 𝐵 以下になる そしてその時,少なくとも 𝐵 サイズが 𝐵 以下になったら一気に読み込まれる → 結局多分木みたいに動作する( Ω 𝐵 分木) Cache-Oblivious データ構造入門 (@iwiwi) 42
  42. 42. ちなみに:Cache-Oblivious 関係ない話 木でこういう分割をするのは, vEB Tree というデータ構造でも使う vEB Tree はキーの値の範囲の条件下で • 検索が 𝑶 𝐥𝐨𝐠 𝐥𝐨𝐠 𝒏 時間 でできるおもしろデータ構造です http://en.wikipedia.org/wiki/Van_Emde_Boas_tree Cache-Oblivious データ構造入門 (@iwiwi) 43
  43. 43. 世の中の Cache-Oblivious 事例 Cache-Oblivious データ構造入門 (@iwiwi) 44
  44. 44. 他の Cache-Oblivious データ構造・アルゴリズム データ構造 • 動的な探索木 (CO B-Tree) – さっきのは静的な木だったので実際に動的にしようと思うと もっと複雑なものが必要 • 順位キュー • リスト • …… アルゴリズム • • • • ソート (Funnel Sort) FFT,行列乗算 グラフ探索 …… いっぱい あります! Cache-Oblivious データ構造入門 (@iwiwi) 45
  45. 45. Cache-Oblivious は本当に実用的か? 利点もあるけど,浸透しにくい 問題点1: 複雑すぎる物が多い 理論屋さんがオーダー記法での計算量だけを考えて作っている実装し たくないものが多い 問題点2: Cache-Aware に中々勝てない 定数倍の差はあり実測では速度で負けてしまう Cache-Oblivious データ構造入門 (@iwiwi) 46
  46. 46. 事例 TokuDB MySQL, MariaDB 用ストレージエンジン Fractal Tree™ Index なるものを使うらしい Cache-Oblivious データ構造入門 (@iwiwi) 47
  47. 47. Fractal Tree™ Index Wikipedia 公式 Cache-Oblivious データ構造入門 (@iwiwi) 48
  48. 48. 事例 𝑇0 …… 𝑇1 𝑇2 𝑇 𝑛 確かにフラクタルっぽい(?) (※実際には Fractal Tree Index は vEB Layout より複雑なことをしています) Cache-Oblivious データ構造入門 (@iwiwi) 49
  49. 49. 論文 (MIT CSAIL) Cache-Oblivious Streaming B-trees Michael A. Bender, Martin Farach-Colton, Jeremy T. Fineman, Yonatan Fogel, Bradley Kuszmaul, and Jelani Nelson SPAA’07 Cache-Oblivious String B-Trees Michael A. Bender, Martin Farach-Colton, and Bradley C. Kuszmaul PODS’06 Concurrent Cache-Oblivious B-Trees Michael A. Bender, Jeremy T. Fineman, Seth Gilbert, and Bradley C. Kuszmaul SPAA’05 Cache-Oblivious データ構造入門 (@iwiwi) 50
  50. 50. 論文 (MIT CSAIL) Cache-Oblivious Streaming B-trees Michael A. Bender, Martin Farach-Colton, Jeremy T. Fineman, Yonatan Fogel, Bradley Kuszmaul, and Jelani Nelson SPAA’07 Chief Scientist CTO Chief Architect Cache-Oblivious String B-Trees Michael A. Bender, Martin Farach-Colton, and Bradley C. Kuszmaul PODS’06 Concurrent Cache-Oblivious B-Trees Michael A. Bender, Jeremy T. Fineman, Seth Gilbert, and Bradley C. Kuszmaul SPAA’05 MIT の Cache-Oblivious 研究ガチ勢の起業! Cache-Oblivious データ構造入門 (@iwiwi) 51
  51. 51. 使っているっぽい雰囲気? TokuDB の公式サイトにあるスライド http://www.tokutek.com/wp-content/uploads/2011/11/how-fractal-trees-work.pdf Cache-Oblivious データ構造入門 (@iwiwi) 52
  52. 52. まとめ • メモリ階層を意識したデータ構造 • Cache-Oblivious の考え方 • 基礎的テク:ツリーの vEB Layout • 世の中の事例と課題 ありがとうございましたm(__)m Cache-Oblivious データ構造入門 (@iwiwi) 53
  53. 53. おまけ:van Emde Boas の発音 https://www.youtube.com/watch?v=AjFtTQevtq0#t=14m15 Peter van Emde Boas と友人である Erik D. Demaine (MIT) による発音が YouTube で聞けます Cache-Oblivious データ構造入門 (@iwiwi) 54
  54. 54. 謝辞 @kumagi さんのご意見をもとに発表時からスライド を改訂しています,ありがとうございます. @tmaehara さんに “van Emde Boas” さんの発音情報 を教えてもらいました,ありがとうございます. Cache-Oblivious データ構造入門 (@iwiwi) 55
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×