Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

情報科学における18のメタテクニック

46,866 views

Published on

情報科学でよく使われるメタテクニックについての紹介です。取り上げたのはキャッシング、[ノン]ブロッキング、プロファイリング、パイプライニング、投機的実行、条件の緩和、Eager/Lazy、フィルタリング、再利用、並列化、結合/分離、多階層/クラスター化、先読み/先取り、動的適応、複製、仮想化、チェックポイント、トランザクションの計18個です。

Published in: Engineering

情報科学における18のメタテクニック

  1. 1. Kanazawa Institute of Technology 情報科学における 18のメタテクニック 2015年4月30日 金沢工業大学 情報工学科 中野 淳 http://www.nakanolab.net/
  2. 2. K.I.T.情報科学における18のメタテクニック 1. キャッシング 2. ブロッキング vs. ノンブロッキング 3. プロファイリング 4. パイプライニング 5. 投機的実行(予測) 6. 条件の緩和 7. すぐやる vs. 先延ばし 8. フィルタリング 9. 再利用 10. 並列化 11. 結合 vs. 分離 12. 多階層、クラスター化 13. 先読み、先取り 14. 動的(適応) 15. 複製 16. 仮想化 17. チェックポイント、 スナップショット 18. トランザクション 長いこと情報科学に関わってきて、似たような技法が分野をまたがって繰り返し現 れているのを見てきました。ここではそれらの技法を「メタテクニック」と称して 紹介します。全部で18個ありますが順番に意味はありません。また、取り上げた 例は若干コンピューターアーキテクチャーに偏っていることをお断りしておきます。 2情報科学における18のメタテクニック
  3. 3. K.I.T. #1 Caching #2 Blocking vs. Non-blocking #3 Profiling #4 Pipelining #5 Speculation #6 Relaxation #7 Eager vs. Lazy #8 Filtering #9 Reuse #10 Parallelization #11 Coupling vs. Decoupling #12 Hierarchy, Clustering #13 Lookahead, Prefetch #14 Dynamic Adaptation #15 Replication #16 Virtualization #17 Checkpoints, Snapshots #18 Transaction 3情報科学における18のメタテクニック
  4. 4. K.I.T.#1 キャッシング(Caching)  着想  空間的ローカリティーの利用  時間的ローカリティーの利用  80:20 の法則  例  データキャッシュ  命令キャッシュ: 静的、動的(Pentium 4 のトレースキャッシュ)  ファイルシステムや DBMS のバッファーキャッシュ  Web ブラウザーのキャッシュ  プロキシーサーバー  メモ化(Memoization)  LZW 圧縮アルゴリズム(高頻度のデータ並びを辞書に登録) 4情報科学における18のメタテクニック
  5. 5. K.I.T.#2 ブロッキング vs. ノンブロッキング  着想  何かを待っている時間を有効活用する  例  マルチタスク(OS のスケジューラー)  マルチスレッド  非同期 I/O  MPI(Message Passing Interface)における非同期通信(通信と 計算のオーバーラップ)  プロセッサーにおける命令の out-of-order 実行  キャッシュミス時であっても、別のキャッシュラインの読み込みを 許可する(MSHR: Miss Status Holding Register) 5情報科学における18のメタテクニック
  6. 6. K.I.T.#3 プロファイリング  着想  実行時の情報を有効活用して、実行の最適化  例  プログラムの高速化にあたっては、一番時間をくっている部分 (ホットスポット)からとりかかる(gprof などを利用)  コンパイラの研究に多くの例がみられる(コードのレイアウトの 最適化を行う Spike など) 6情報科学における18のメタテクニック
  7. 7. K.I.T.#4 パイプライニング  着想  より高いスループット  例  プロセッサーのパイプライン(フェッチ、デコード、実行、メモリ アクセス、レジスタへのライトバック) A B C D A B C D タスク 時間 時間 洗濯 乾燥 折畳み 逐次的洗濯 パイプライン化された洗濯 出典: http://www.cs.berkeley.edu/~pattrsn/252S01/ 7情報科学における18のメタテクニック
  8. 8. K.I.T.#5 投機的実行(予測)  着想  自分はラッキーだと信じて 山を張ってみる  例  分岐予測  データのプリフェッチ  関数の返り値の予測  メインスレッドのキャッシュミスによる遅延を隠蔽するための 投機的ヘルパースレッド 8情報科学における18のメタテクニック
  9. 9. K.I.T.#6 条件の緩和(Relaxation)  着想  制約条件を除いてみたらどうなるかを考える  例  マルチプロセッサーシステムの relaxed memory consistency » Sequential consistency はプログラマーにとっては都合がよいが、 アーキテクチャー上の最適化を阻む » そこでプログラマーの利便性を多少犠牲にして性能向上をはかった (Write Buffer など)  分散ハッシュテーブルの eventual consistency 9情報科学における18のメタテクニック
  10. 10. K.I.T. #1 Caching #2 Blocking vs. Non-blocking #3 Profiling #4 Pipelining #5 Speculation #6 Relaxation #7 Eager vs. Lazy #8 Filtering #9 Reuse #10 Parallelization #11 Coupling vs. Decoupling #12 Hierarchy, Clustering #13 Lookahead, Prefetch #14 Dynamic Adaptation #15 Replication #16 Virtualization #17 Checkpoints, Snapshots #18 Transaction 10情報科学における18のメタテクニック
  11. 11. K.I.T.#7 すぐやる vs. 先延ばし(Eager vs. Lazy)  着想  すぐやる » 後で必ず必要になるとわかっているときや、 » 今すぐやっても安全でコストも安いとき  先延ばしする » 上記が当てはまらないときは、本当に必要になるまでやらない  例  要求ページング(先延ばし)  Copy on write(先延ばし)  フィボナッチヒープ等、償却計算量の低減を目指したデータ構造 (先延ばし)  Java の Just-in-time コンパイラ(両方ありうる)  MPI (Message Passing Interface) のプロトコル (udp的 vs. tcp的) » Eager: 受け手の準備状況によらずデータを送りつける(小さい msg) » Rendezvous: ちゃんとネゴシエーションしてからデータを送る(大きい msg) 11情報科学における18のメタテクニック
  12. 12. K.I.T.#8 フィルタリング  着想  より深く潜っていく必要があるかないかを素早く判断  例  キャッシュ階層 » L1 キャッシュ → L2 キャッシュ → メインメモリー  Bloom filter 12情報科学における18のメタテクニック
  13. 13. K.I.T.#9 再利用(Reuse)  着想  同じことの繰り返しを避ける » もし f(x) の計算コストが高くて、しかも頻繁に必要になるならば、一度 だけ計算して結果を覚えておく(時間とスペースのトレードオフ)  例  メモ化(Memoization)  Dynamic Instruction Reuse (Sodani and Sohi, ISCA 1997) 13情報科学における18のメタテクニック
  14. 14. K.I.T.#10 並列化  着想  2倍の計算資源を使って、時間を半分に短縮 » 現実には Amdahl の法則に留意  例  SMP  マルチコア  クラスター  MapReduce 14情報科学における18のメタテクニック
  15. 15. #11 結合 vs. 分離(Coupling vs. Decoupling)  着想  分離することによって相互依存性を下げ、 個々の部品の自由度をアップ  例  キャッシュ » L1 キャッシュ: データキャッシュと命令キャッシュに分離 » L2 キャッシュ: 通常データと命令の両方を格納  ソフトウェア工学ではしばしば分離が好まれる » インターフェースと実装の分離(オブジェクト指向) » ポリシーとメカニズムの分離(コンピューターネットワーク) » SDN (Software Defined Networking) における control plane と data plane » TCP/IP の階層構造(物理層、データリンク層、ネットワーク層、 トランスポート層、アプリケーション層) » データベースにおけるリレーションの正規化 15情報科学における18のメタテクニック
  16. 16. K.I.T.#12 多階層、クラスター化  着想  いろいろなものをきちんと整理  例  キャッシュ階層  ファイルシステム  TCP/IP 16情報科学における18のメタテクニック
  17. 17. K.I.T. #1 Caching #2 Blocking vs. Non-blocking #3 Profiling #4 Pipelining #5 Speculation #6 Relaxation #7 Eager vs. Lazy #8 Filtering #9 Reuse #10 Parallelization #11 Coupling vs. Decoupling #12 Hierarchy, Clustering #13 Lookahead, Prefetch #14 Dynamic Adaptation #15 Replication #16 Virtualization #17 Checkpoints, Snapshots #18 Transaction 17情報科学における18のメタテクニック
  18. 18. #13 先読み、先取り(Lookahead, Prefetching)  着想  必要なものが必要な時に手元にあるようにする  例  メモリーからのデータのプリフェッチ  キャッシュライン 18情報科学における18のメタテクニック
  19. 19. K.I.T.#14 動的(適応)  着想  実行中にも実行時情報を利用(⇔ プロファイリング)  例  Java の Just-in-time コンパイラ  LLVM の動的最適化  Web サーバー群のロードバランサー(Load Balancer) 19情報科学における18のメタテクニック
  20. 20. K.I.T.#15 複製(Replication)  着想  より良いローカリティと信頼性  例  ディスクのミラー化  分散データベースにおけるレプリケーション  分散ハッシュテーブルにおけるレプリカ  CDN (Content Delivery Network): Akamai 社など  GFS (Google File System) 20情報科学における18のメタテクニック
  21. 21. K.I.T.#16 仮想化(Virtualization)  着想  物理的制限を超える  リダイレクト  例  仮想メモリー  仮想デバイス  仮想マシン  仮想ファイルシステム  データベースのビュー (View)  Windows のショートカットや UNIX のシンボリックリンク 仮想的幻想 物理的実体 21情報科学における18のメタテクニック
  22. 22. K.I.T.#17 チェックポイント、スナップショット  着想  障害や人的ミスに対する備え » ただし Output commit problem に留意  例  データベース  Copy on write 22情報科学における18のメタテクニック
  23. 23. K.I.T.#18 トランザクション(Transaction)  着想  複数の操作を不可分のものとして扱う  例  データベース  トランザクショナルメモリー » 性能と正確さのトレードオフ • ロックを駆使して正確で速いプログラムを書くことは可能では あるが、熟練を要する • トランザクショナルメモリーを使えば、多少のオーバーヘッドは あるものの、安全なプログラムが書きやすくなる 23情報科学における18のメタテクニック
  24. 24. K.I.T.まとめ 1. キャッシング 2. ブロッキング vs. ノンブロッキング 3. プロファイリング 4. パイプライニング 5. 投機的実行(予測) 6. 条件の緩和 7. すぐやる vs. 先延ばし 8. フィルタリング 9. 再利用 10. 並列化 11. 結合 vs. 分離 12. 多階層、クラスター化 13. 先読み、先取り 14. 動的(適応) 15. 複製 16. 仮想化 17. チェックポイント、 スナップショット 18. トランザクション 18のメタテクニックを列挙してきましたが、実際に自分の問題に適用する上では、  エンジニアリングでは何事にもトレードオフがつきものであることと、  "Devil is in the details." であることを忘れずに! ここに書いたことは特効薬ではなく、あくまでも "Food for Thought" くらいに思ってください。 24情報科学における18のメタテクニック

×