Cache obliviousの話

1,648 views
1,556 views

Published on

過去に話したスライドの一部抜粋。
データの出典元はここ http://www.1024cores.net/home/parallel-computing/cache-oblivious-algorithms

Published in: Software
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

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

No notes for slide

Cache obliviousの話

  1. 1. Cache Obliviousの話 @kumagi
  2. 2. 科学と工学? • どう違うの? • ある工学者は言った。 「3以上の奇数は素数」 – 3,5,7が素数 – 9は誤差 – 11,13と素数だから5/6≒87%の精度で正しい!
  3. 3. これはひどい
  4. 4. 特に • コンピュータの上は科学だよ派 – 世界は数学に身を任せればだいたい上手くいくよ • コンピュータの上は工学だよ派 – 世界は人力と経済と物理の果ての妥協だよ
  5. 5. 個人的な好み→工学 • 「コンピュータ工学の世界に難問は2つしかな い。キャッシュの揮発と、変数の命名だ」 – 「珠玉のプログラミング」で読んだ – すごく工学っぽくて好きな言葉 • 逆に科学の人たち無限サイズのL1キャッシュ を想定し過ぎ – それで生み出される「計算量的には速いけど実 測は遅いアルゴリズム達」
  6. 6. 計算量ェ… • 計算量の議論は「無限の大きさを扱う場合」 を仮定している
  7. 7. Sorry! • 1000京円つぎ込もうが! • 100PBぐらいの大きさで! • 3Ghzぐらいの速度で! • 1クロックで動くL1キャッシュは作れない!
  8. 8. うちゅうのほうそくがみだれない! • いかにプロセスが微細化してCPUが高性能化 してもCPUを流れる信号の速度は限界がある • 100年後のコンピュータであってもキャッシュ の階層構造からは逃れられない!
  9. 9. 結果として • 無限のデータを相手にするプログラムは絶対 キャッシュミスする – そしてプリフェッチが間に合わない時にキャッシュ ミスが全体を律速する – 時間計算量だけを相手にしてる場合じゃない! – 理論値と実測値の差を埋めるには?
  10. 10. キャッシュ構造をアルゴリズムに埋め込む • キャッシュへのアクセスを細かくチューニング したアルゴリズムを適宜作ればいいのでは? • キャッシュ階層は今後も変わり続けるから 延々と追従していくつもり?
  11. 11. ケーススタディ • 長ーい配列から • (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
  12. 12. ケーススタディ • まとめるとこんな感じに計算していくのが普通 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….) + +
  13. 13. ケーススタディ • 並列化すればいい 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
  14. 14. 結果 • 縦軸が時間(下ほど速い)、横軸がコア数 • 赤線が理論速度、青線が実測 F a s t Core
  15. 15. 遅い!
  16. 16. そこでCache Oblivious! • Oblivious = ぼんやりとした • キャッシュの階層構造を想定しながらも、その 具体的なサイズや遅延時間は仮定しないア ルゴリズム設計技法 • 個人的に注目しているホットな分野 • 再帰的に分割統治するアルゴリズムが多い
  17. 17. Cache Oblivious • キャッシュ階層を簡略化してモデル化する – ライトバック・ライトスルーは気にしない – フルセットアソシアティブを仮定 – サイズや転送速度や階層数に仮定を置かない • CPUに近いほど高速で小型になる – むしろHDDすらも磁気テープやS3に対するキャッ シュとして考える
  18. 18. Cache Oblivious • モデル図はこんな感じ
  19. 19. Cache Oblivious • キャッシュに収まるよう問題を切り分ける
  20. 20. どうなるの? A B C D E F G H I J K L M N O P Q ABCDEFGHIJKL Task
  21. 21. どうなるの? A B C D E F G H I J K L M N O P Q ABCDEFGHIJKL 1/4Task 1/4Task 1/4Task 1/4Task 分割!
  22. 22. どうなるの? A B C D E F G H I J K L M N O P Q ABCDEFGHIJKL 1/16 Task 1/4Task 1/4Task 1/4Task 1/16 Task 1/16 Task 1/16 Task 分割!
  23. 23. どうなるの? A B C D E F G H I J K L M N O P Q ABCDEFGHIJKL 1/64 Task 1/4Task 1/4Task 1/4Task 1/16 Task 1/16 Task 1/16 Task 1/64 Task 1/64 Task 1/64 Task 分割!
  24. 24. 充分切り分けたら足していく • AA+AB+BA+BB A B AB 1/64 Task • AC+AD+DA+DB C D AB 1/64 Task • CA+CB+DA+DB A B CD 1/64 Task • CC+CD+DC+DD C D CD 1/64 Task + + +
  25. 25. 結果 • 緑が理論値、黄色が実測値 F a s t Core
  26. 26. すごい!!
  27. 27. どこに感動したのか • これまで工学分野で相手にしてきた問題であ る「キャッシュ構造への最適化」 • モデル化して「科学の問題」に変えた • 数式が現れてなんか怖くなったけど
  28. 28. 他にも • Cache Obliviousな – Sort – 行列転置 – 行列積 – 2分木(van Emde Boas) – B木 – グラフ – 線形リスト – まだまだ調べ中
  29. 29. Cache Oblivious on Hadoop • 巨大なクラスタ環境では各マシンのメモリや CPUが揃っていない事の方が普通 – つまりCache Awareなアルゴリズムを組み上げる コストが高い – これはCache Obliviousの時代が来るのでは? (個人の感想であり効果・効能を約束する物ではありません)

×