SlideShare a Scribd company logo
1 of 24
Download to read offline
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のメタテクニック

More Related Content

What's hot

データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門Satoru Ishikawa
 
Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用
Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用
Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用Yahoo!デベロッパーネットワーク
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) hamaken
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話NipponAlgorithm
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...NTT DATA Technology & Innovation
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話ichirin2501
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)NTT DATA OSS Professional Services
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタSatoyuki Tsukano
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionTetsutaro Watanabe
 

What's hot (20)

データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
 
Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用
Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用
Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
 
Apache Spark の紹介(前半:Sparkのキホン)
Apache Spark の紹介(前半:Sparkのキホン)Apache Spark の紹介(前半:Sparkのキホン)
Apache Spark の紹介(前半:Sparkのキホン)
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 

Viewers also liked

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

Viewers also liked (20)

Cognitoハンズオン
CognitoハンズオンCognitoハンズオン
Cognitoハンズオン
 
Cache勉強会
Cache勉強会Cache勉強会
Cache勉強会
 
あるキャッシュメモリの話
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話
 
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀
[20171031 db tech salon] クラウド移行をベトナムで!? by 株式会社インサイトテクノロジー 森 茂紀
 
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二
20170518_今さら聞けないHANAのハナシの基本のき by SAPジャパン株式会社 新久保浩二
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
MongoDB全機能解説1
MongoDB全機能解説1MongoDB全機能解説1
MongoDB全機能解説1
 
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
性能測定道 実践編
性能測定道 実践編性能測定道 実践編
性能測定道 実践編
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 
Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版] Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版]
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutes
 
Prometheus触ってみた
Prometheus触ってみたPrometheus触ってみた
Prometheus触ってみた
 
性能測定道 事始め編
性能測定道 事始め編性能測定道 事始め編
性能測定道 事始め編
 
Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方
 
スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話
 
サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善
 
ウェブエンジニアのための色の話
ウェブエンジニアのための色の話ウェブエンジニアのための色の話
ウェブエンジニアのための色の話
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 

情報科学における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のメタテクニック