cache obliviousの話

29
Cache Oblivious のの @kumagi

Upload: kumazaki-hiroki

Post on 17-Jan-2017

3.256 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Cache obliviousの話

Cache Obliviousの話@kumagi

Page 2: Cache obliviousの話

科学と工学?• どう違うの?• ある工学者は言った。  「 3以上の奇数は素数」– 3,5,7が素数– 9は誤差– 11,13と素数だから 5/6 87%≒ の精度で正しい!

Page 3: Cache obliviousの話

これはひどい

Page 4: Cache obliviousの話

特に• コンピュータの上は科学だよ派–世界は数学に身を任せればだいたい上手くいくよ

• コンピュータの上は工学だよ派–世界は人力と経済と物理の果ての妥協だよ

Page 5: Cache obliviousの話

個人的な好み→工学• 「コンピュータ工学の世界に難問は2つしかない。キャッシュの揮発と、変数の命名だ」–「珠玉のプログラミング」で読んだ–すごく工学っぽくて好きな言葉

• 逆に科学の人たち無限サイズの L1キャッシュを想定し過ぎ–それで生み出される「計算量的には速いけど実測は遅いアルゴリズム達」

Page 6: Cache obliviousの話

計算量ェ…• 計算量の議論は「無限の大きさを扱う場合」を仮定している

Page 7: Cache obliviousの話

Sorry!• 1000京円つぎ込もうが!• 100PBぐらいの大きさで!• 3Ghzぐらいの速度で!• 1クロックで動く L1キャッシュは作れない!

Page 8: Cache obliviousの話

うちゅうのほうそくがみだれない!• いかにプロセスが微細化して CPUが高性能化しても CPUを流れる信号の速度は限界がある• 100年後のコンピュータであってもキャッシュの階層構造からは逃れられない!

Page 9: Cache obliviousの話

結果として• 無限のデータを相手にするプログラムは絶対キャッシュミスする–そしてプリフェッチが間に合わない時にキャッシュミスが全体を律速する–時間計算量だけを相手にしてる場合じゃない!–理論値と実測値の差を埋めるには?

Page 10: Cache obliviousの話

キャッシュ構造をアルゴリズムに埋め込む• キャッシュへのアクセスを細かくチューニングしたアルゴリズムを適宜作ればいいのでは?

• キャッシュ階層は今後も変わり続けるから延々と追従していくつもり?

Page 11: Cache obliviousの話

ケーススタディ• 長ーい配列から

• (A*A)+(A*B)+(A*C)+(A*D)…..+ +(B*A)+(B*B)+(B*C)+(B*D)…..+ +(C*A)+(C*B)+(C*C)+(C*D)….という値を並列化して高速に求めたいとする。

A B C D E F G H I J K L M N O P Q

Page 12: Cache obliviousの話

ケーススタディ• まとめるとこんな感じに計算していくのが普通

A B C D E F G H I J K L M N O P Q

A*(A+B+C+D+E+F+G+H+I….)

B C D E F G H I J K L M N O P QA

B*(A+B+C+D+E+F+G+H+I….)

C D E F G H I J K L M N O P QBA

C*(A+B+C+D+E+F+G+H+I….)

+

+

Page 13: Cache obliviousの話

ケーススタディ• 並列化すればいい

A B C D E F G H I J K L M N O P Q

A*(A+B+C+D+E+F+G+H+I….)

B C D E F G H I J K L M N O P QA

B*(A+B+C+D+E+F+G+H+I….)

+

+C D E F G H I J K L M N O P QBA

C*(A+B+C+D+E+F+G+H+I….)

CPU1

CPU2

CPU3

Page 14: Cache obliviousの話

結果• 縦軸が時間(下ほど速い)、横軸がコア数• 赤線が理論速度、青線が実測

Fast

Core

Page 15: Cache obliviousの話

遅い!

Page 16: Cache obliviousの話

そこで Cache Oblivious!• Oblivious = ぼんやりとした• キャッシュの階層構造を想定しながらも、その具体的なサイズや遅延時間は仮定しないアルゴリズム設計技法• 個人的に注目しているホットな分野• 再帰的に分割統治するアルゴリズムが多い

Page 17: Cache obliviousの話

Cache Oblivious

• キャッシュ階層を簡略化してモデル化する–ライトバック・ライトスルーは気にしない–フルセットアソシアティブを仮定–サイズや転送速度や階層数に仮定を置かない• CPUに近いほど高速で小型になる

–むしろ HDDすらも磁気テープや S3に対するキャッシュとして考える

Page 18: Cache obliviousの話

Cache Oblivious

• モデル図はこんな感じ

Page 19: Cache obliviousの話

Cache Oblivious

• キャッシュに収まるよう問題を切り分ける

Page 20: Cache obliviousの話

どうなるの?A B C D E F G H I J K L M N O P QA

BC

DE

FG

HI

JK

L

Task

Page 21: Cache obliviousの話

どうなるの?A B C D E F G H I J K L M N O P QA

BC

DE

FG

HI

JK

L

1/4Task 1/4Task

1/4Task 1/4Task分割!

Page 22: Cache obliviousの話

どうなるの?A B C D E F G H I J K L M N O P QA

BC

DE

FG

HI

JK

L

1/16Task 1/4Task

1/4Task 1/4Task

1/16Task

1/16Task

1/16Task

分割!

Page 23: Cache obliviousの話

どうなるの?A B C D E F G H I J K L M N O P QA

BC

DE

FG

HI

JK

L

1/64Task

1/4Task

1/4Task 1/4Task

1/16Task

1/16Task

1/16Task

1/64Task

1/64Task

1/64Task

分割!

Page 24: Cache obliviousの話

充分切り分けたら足していく• AA+AB+BA+BB

A BAB 1/64

Task

• AC+AD+DA+DBC DA

B 1/64Task

• CA+CB+DA+DBA BC

D 1/64Task

• CC+CD+DC+DDC DC

D 1/64Task

+ +

+

Page 25: Cache obliviousの話

結果• 緑が理論値、黄色が実測値

Fast

Core

Page 26: Cache obliviousの話

すごい!!

Page 27: Cache obliviousの話

どこに感動したのか• これまで工学分野で相手にしてきた問題である「キャッシュ構造への最適化」

• モデル化して「科学の問題」に変えた• 数式が現れてなんか怖くなったけど

Page 28: Cache obliviousの話

他にも• Cache Obliviousな– Sort–行列転置–行列積– 2分木( van Emde Boas)– B木–グラフ–線形リスト–まだまだ調べ中

Page 29: Cache obliviousの話

Cache Oblivious on Hadoop

• 巨大なクラスタ環境では各マシンのメモリや CPUが揃っていない事の方が普通–つまり Cache Awareなアルゴリズムを組み上げるコストが高い–これは Cache Obliviousの時代が来るのでは?   (個人の感想であり効果・効能を約束する物ではありません)