(作業サイズである がキャッシュサイズ M となるように) 理想のブロックサイズは M に依存するが M はコンピュータに依存する ライブラリの作者は R をハードコードすると、移植性が下がる R をプログラムの入力として受け取るようにすると、ユーザーは自分の コンピュータのキャッシュサイズを調べて使わなければいけなくなる……
先程のブロックサイズ R を M に合わせる例 ↕ Cache-Oblivious(縛りプレイ) キャッシュの構造を知らずに設計する 知らないなりに頑張る B, M がどのような値でもいい感じになるように頑張る Cache-Oblivious アルゴリズムができたら、そもそも B, M を使って いないので、どんなコンピュータでも、どのキャッシュ階層でも早くなる このページは https://www.slideshare.net/iwiwi/cacheoblivious-dsirnlp5 の表現をお借りしました。 One Fits All
二分探索のアルゴリズム: 前処理:集合の要素をソートする クエリ処理:属する可能性のある範囲を半分ずつに絞っていく 候補範囲が B より小さくなったら、あとは全てキャッシュ内で処理できる → キャッシュミス回数は Θ(log2 n - log2 B) 回 (大抵 n >> B なのでこれはだいたい log2 n 回) これは最適ではない
好きな理由: 問題設定を聞いたときの、そんなことできるんだ感 パラメータを含まない万能手法が存在するという理論の綺麗さ 解法のアイデアのシンプルさ(分割統治で常勝) CO はキャッシュの構造を知らなくてもキャッシュ活用する キャッシュ構造を知らなくてもキャッシュは最大限活用できる Take Home Message