• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Cache-Oblivious データ構造入門 @DSIRNLP#5
 

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

on

  • 8,944 views

 

Statistics

Views

Total Views
8,944
Views on SlideShare
6,027
Embed Views
2,917

Actions

Likes
38
Downloads
51
Comments
0

11 Embeds 2,917

http://d.hatena.ne.jp 2564
https://twitter.com 288
http://feedly.com 47
http://www.feedspot.com 9
http://s.deeeki.com 3
http://tweetedtimes.com 1
http://digg.com 1
http://reader.aol.com 1
http://translate.googleusercontent.com 1
http://www.google.co.jp 1
https://tweetdeck.twitter.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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