Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Cache obliviousの話

5.624 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Software
  • Login to see the comments

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の時代が来るのでは? (個人の感想であり効果・効能を約束する物ではありません)

×