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

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

Recommended

Rでのtry関数によるエラー処理 by
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理wada, kazumi
7.5K views8 slides
大学3年生の僕に伝えたいことをつらつらと by
大学3年生の僕に伝えたいことをつらつらと大学3年生の僕に伝えたいことをつらつらと
大学3年生の僕に伝えたいことをつらつらとToshinori Sato
10.9K views44 slides
レコメンドアルゴリズムの基本と周辺知識と実装方法 by
レコメンドアルゴリズムの基本と周辺知識と実装方法レコメンドアルゴリズムの基本と周辺知識と実装方法
レコメンドアルゴリズムの基本と周辺知識と実装方法Takeshi Mikami
38.5K views105 slides
プログラミングコンテストでの動的計画法 by
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
91.6K views59 slides
マッチングサービスにおけるKPIの話 by
マッチングサービスにおけるKPIの話マッチングサービスにおけるKPIの話
マッチングサービスにおけるKPIの話cyberagent
70.9K views28 slides
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更) by
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)Ayako_Hasegawa
24.4K views64 slides

More Related Content

What's hot

最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング by
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリングmlm_kansai
67.5K views43 slides
不均衡データのクラス分類 by
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類Shintaro Fukushima
59K views34 slides
Tackling Complexity by
Tackling ComplexityTackling Complexity
Tackling ComplexityYoshitaka Kawashima
2.9K views16 slides
最適化超入門 by
最適化超入門最適化超入門
最適化超入門Takami Sato
174.7K views80 slides
機械学習モデルの判断根拠の説明 by
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明Satoshi Hara
97.9K views110 slides
最適輸送入門 by
最適輸送入門最適輸送入門
最適輸送入門joisino
11.5K views88 slides

What's hot(20)

最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング by mlm_kansai
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai67.5K views
最適化超入門 by Takami Sato
最適化超入門最適化超入門
最適化超入門
Takami Sato174.7K views
機械学習モデルの判断根拠の説明 by Satoshi Hara
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明
Satoshi Hara97.9K views
最適輸送入門 by joisino
最適輸送入門最適輸送入門
最適輸送入門
joisino11.5K views
バンディットアルゴリズム入門と実践 by 智之 村上
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践
智之 村上170.8K views
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem... by joisino
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
joisino3.4K views
Newman アルゴリズムによるソーシャルグラフのクラスタリング by Atsushi KOMIYA
Newman アルゴリズムによるソーシャルグラフのクラスタリングNewman アルゴリズムによるソーシャルグラフのクラスタリング
Newman アルゴリズムによるソーシャルグラフのクラスタリング
Atsushi KOMIYA86.8K views
【メタサーベイ】基盤モデル / Foundation Models by cvpaper. challenge
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge16.5K views
画像認識モデルを作るための鉄板レシピ by Takahiro Kubo
画像認識モデルを作るための鉄板レシピ画像認識モデルを作るための鉄板レシピ
画像認識モデルを作るための鉄板レシピ
Takahiro Kubo115.2K views
協力ゲーム理論でXAI (説明可能なAI) を目指すSHAP (Shapley Additive exPlanation) by 西岡 賢一郎
協力ゲーム理論でXAI (説明可能なAI) を目指すSHAP (Shapley Additive exPlanation)協力ゲーム理論でXAI (説明可能なAI) を目指すSHAP (Shapley Additive exPlanation)
協力ゲーム理論でXAI (説明可能なAI) を目指すSHAP (Shapley Additive exPlanation)
西岡 賢一郎858 views
イミュータブルデータモデル(入門編) by Yoshitaka Kawashima
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima185.8K views
AHC-Lab M1勉強会 論文の読み方・書き方 by Shinagawa Seitaro
AHC-Lab M1勉強会 論文の読み方・書き方AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方
Shinagawa Seitaro47.5K views
ドメイン適応の原理と応用 by Yoshitaka Ushiku
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用
Yoshitaka Ushiku5.5K views
Tensor コアを使った PyTorch の高速化 by Yusuke Fujimoto
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto7.8K views
機械学習で泣かないためのコード設計 2018 by Takahiro Kubo
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018
Takahiro Kubo28.9K views
ChatGPT 人間のフィードバックから強化学習した対話AI by Shota Imai
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai106K views

Viewers also liked

Cognitoハンズオン by
CognitoハンズオンCognitoハンズオン
CognitoハンズオンShinji Miyazato
1.7K views14 slides
Cache勉強会 by
Cache勉強会Cache勉強会
Cache勉強会Shinji Miyazato
1.8K views15 slides
あるキャッシュメモリの話 by
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話nullnilaki
3.8K views66 slides
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀 by
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀Insight Technology, Inc.
1.4K views18 slides
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二 by
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二Insight Technology, Inc.
11.1K views94 slides
MongoDBが遅いときの切り分け方法 by
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
34.8K views46 slides

Viewers also liked(20)

あるキャッシュメモリの話 by nullnilaki
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話
nullnilaki3.8K views
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀 by Insight Technology, Inc.
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二 by Insight Technology, Inc.
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二
MongoDBが遅いときの切り分け方法 by Tetsutaro Watanabe
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe34.8K views
MongoDB全機能解説1 by Takahiro Inoue
MongoDB全機能解説1MongoDB全機能解説1
MongoDB全機能解説1
Takahiro Inoue54.6K views
Chunked encoding を使った高速化の考察 by Yoshiki Shibukawa
Chunked encoding を使った高速化の考察Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa7.5K views
MySQLやSSDとかの話 前編 by Takanori Sejima
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
Takanori Sejima49.2K views
性能測定道 実践編 by Yuto Hayamizu
性能測定道 実践編性能測定道 実践編
性能測定道 実践編
Yuto Hayamizu55.2K views
MySQLやSSDとかの話 後編 by Takanori Sejima
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
Takanori Sejima39.2K views
Cephを用いたwordpressの構築[LT版] by Kat 0gm
Cephを用いたwordpressの構築[LT版] Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版]
Kat 0gm12.8K views
Advanced technic for OS upgrading in 3 minutes by Hiroshi SHIBATA
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutes
Hiroshi SHIBATA42K views
Prometheus触ってみた by Sho2010
Prometheus触ってみたPrometheus触ってみた
Prometheus触ってみた
Sho201012.1K views
性能測定道 事始め編 by Yuto Hayamizu
性能測定道 事始め編性能測定道 事始め編
性能測定道 事始め編
Yuto Hayamizu61.7K views
Web現場Meetup #2 圧倒的成長環境の作り方 by kaiba d
Web現場Meetup #2 圧倒的成長環境の作り方Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方
kaiba d1.4K views
スクラムを導入してみて一回挫折したけど再起させた話 by PIXTA Inc.
スクラムを導入してみて一回挫折したけど再起させた話スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話
PIXTA Inc.1.6K views
サービスのスケール化のための検索システム改善 by PIXTA Inc.
サービスのスケール化のための検索システム改善サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善
PIXTA Inc.1.9K views
ウェブエンジニアのための色の話 by Kazuyuki CHINDA
ウェブエンジニアのための色の話ウェブエンジニアのための色の話
ウェブエンジニアのための色の話
Kazuyuki CHINDA12.5K views
プロダクトに 1 から Vue.js を導入した話 by Shohei Okada
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada22.7K views

Recently uploaded

3Dプリンタでロボット作るよ#1_黎明編 by
3Dプリンタでロボット作るよ#1_黎明編3Dプリンタでロボット作るよ#1_黎明編
3Dプリンタでロボット作るよ#1_黎明編Yoshihiro Shibata
21 views7 slides
onewedge_companyguide1 by
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
12 views22 slides
lt.pptx by
lt.pptxlt.pptx
lt.pptxtomochamarika
72 views13 slides
how query cost affects search behavior translated in JP by
how query cost affects search behavior translated in JPhow query cost affects search behavior translated in JP
how query cost affects search behavior translated in JPTobioka Ken
9 views16 slides
Najah Matsuo Self Introduction by
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self IntroductionNajahMatsuo
7 views29 slides
図解で理解するvetKD by
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKDryoo toku
85 views22 slides

Recently uploaded(10)

3Dプリンタでロボット作るよ#1_黎明編 by Yoshihiro Shibata
3Dプリンタでロボット作るよ#1_黎明編3Dプリンタでロボット作るよ#1_黎明編
3Dプリンタでロボット作るよ#1_黎明編
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE112 views
how query cost affects search behavior translated in JP by Tobioka Ken
how query cost affects search behavior translated in JPhow query cost affects search behavior translated in JP
how query cost affects search behavior translated in JP
Tobioka Ken9 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self Introduction
NajahMatsuo7 views
図解で理解するvetKD by ryoo toku
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKD
ryoo toku85 views
AIで始めるRustプログラミング #SolDevHub by K Kinzal
AIで始めるRustプログラミング #SolDevHubAIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHub
K Kinzal22 views

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

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