忙しいあなたの代わりに、史上最強の「良い本・良い暮らし」のご提案

1冊の本に出会うことで、人生が大きく変わることがあります。良い品物に出会ったことで幸せになれることもあります。とはいっても、多様な商品があふれる中で、より価値の高いものを選び出すのは大変です。そこでこのブログでは、忙しいあなたの代わりに、史上最強の「良い本・良いくらし」の提案をさせていただきます。

IT関係 / 分析

スポンサードリンク
 

---------------------------------------------------------------------------------------
なぜ、並行 / 並列化が必要なのか?
----------------------------------------------------------------------------------------

これまで、コンピュータの性能は、18ヶ月ごとに2倍になっていました。

しかし集積化が進んだ結果、ゲート長が短くなり、
量子効果によって、電子がリークするスケールになりました。
これを制御するのが今のところ困難な状況です。

このため、ワンプロセッサのクロック性能を上げていく戦略から、
複数のコアを1つのプロセッサに詰め込む「数の作戦」にシフトしています。

例えると、新入社員時代は1人で仕事をしていたけど、
1人でできる仕事量の限界に気づきました。
そこで、部下を持ち、仕事を適切に分割して、
うまく仕事が進むよう、割り振るようにしました。
その結果、トータルの成果を上げることに成功しました。

これが逐次実行のプログラムから、
マルチコア・マルチスレッドのプログラムへのシフトへの動機です。

現在では、クロック周波数の性能を引き出すのは限界にきているので、
マルチコアを使いこなす術が、ソフトウェアの性能を引き出す上で重要になっています。

---------------------------------------------------------------------------------------
どんな「ポイント」に気をつければいいか?
----------------------------------------------------------------------------------------

逐次処理に基づいたソフトウェア開発・アルゴリズム設計から、
  • 「並行処理に適した並行アルゴリズム」とはどのようなものか?
  • また、それを活かしたソフトウェア開発とはどのようなものか?
について学ぶ必要があります。

また、並行ソフトウェアの設計・開発には、特定のプログラミング言語や手法によらない
  • テクニック
  • トリック
  • ツール
  • 落とし穴
もあります。

並行プログラミングを習得する上で、必須となる知識を網羅し、

一般的な定石はもちろん、あまり知られていない達人技も紹介されています。

----------------------------------------------------------------------------------------
だいたい、どんなことが書いてあるか?
----------------------------------------------------------------------------------------

まず第1章で
  • 並列?並行?その違いは?について
  • スレッド化の4ステップや並行プログラムの背景
  • 分散メモリ / 共有メモリプログラミングと実行モデルの相違点
などがまとめられます。

第2章で、じゃあどうやって並行化するの?ってとこを、
タスク分解」「データ分解」という2つの設計モデルとして示されます。

でもいきなりうまくいくわけではありません。
第3章では、遭遇しやすい問題やスレッドエラーなどの防止策を処方してくれます。

5章では、いくつかのスレッドライブラリを紹介します。
  • OpenMP
  • Intelスレッディング・ビルディング・ブロック
  • POSIX スレッド
  • Windowsスレッドライブラリ
などが解説されます。

さらに、MapReduceフレームワークの解説や自作方法なども第7章で説明されます。

8, 9, 10章では、一般的なアルゴリズムの中から、
ソート・サーチ・グラフアルゴリズムを取り上げ、その並行化が解説されています。

11章では、並行プログラムを効率的に作成するためのツールが紹介されます。
これにより、スレッドエラー性能ボトルネックの検出がやりやすくなります。

----------------------------------------------------------------------------------------
具体的には、どんな構成になっているか
----------------------------------------------------------------------------------------

Ther Art of Concurrency和訳書籍への推薦文
訳者まえがき
まえがき

1章 速くしたい人、手を挙げて!

1.1 さまざまな疑問
1.2 スレッド化の4つのステップ
1.3 並列アルゴリズムの背景
1.4 共有メモリプログラミングと分散メモリプログラミング
1.5 並行プログラミングへのアプローチ

2章 並行か非並行か? それが問題だ

2.1 並行アルゴリズム設計モデル
2.2 並列化不可能?

3章 正当性の検証と性能測定

3.1 並列アルゴリズムの検証
3.2 例題:クリティカルセッション問題
3.3 性能指標(現状把握)

4章 マルチスレッドアプリケーション設計の8つのルール

4.1 ルール①:真に独立した処理を特定する
4.2 ルール②:並行性はより上位で実装する
4.3 ルール③:コア数増加に備えスケーラビリティ対応を早期に計画する
4.4 ルール④:スレッドセーフなライブラリを使用する
4.5 ルール⑤:適切なスレッドモデルを採用する
4.6 ルール⑥:実行順序を前提としない
4.7 ルール⑦:ローカル変数を使用する、できなければロックで保護する
4.8 ルール⑧:並行性向上のためのアルゴリズム変更を恐れない
4.9 まとめ

5章 スレッドライブラリ

5.1 抽象化ライブラリ
5.2 明示的スレッドライブラリ
5.3 その他のスレッドライブラリ
5.4 特定分野のライブラリ

6章 並列和とプリフィクススキャン

6.1 並列和
6.2 プリフィクススキャン
6.3 セレクション
6.4 章のまとめとして

7章 MapReduce

7.1 並行map処理
7.2 並行reduce処理
7.3 MapReduceの応用
7.4 MapReduceの一般的並行性

8章 ソート

8.1 バブルソート
8.2 奇偶転置ソート
8.3 シェルソート
8.4 クイックソート
8.5 基数ソート

9章 サーチ

9.1 未ソートデータ
9.2 バイナリサーチ

10章 グラフアルゴリズム

10.1 深さ優先探索
10.2 全頂点対最短経路
10.3 最小スパニングツリー

11章 スレッド対応ツール

11.1 デバッガ
11.2 性能解析ツール
11.3 その他のツール
11.4 前へ進め、そして打ち勝て

用語解説
Photo Credits
索引

コラム目次
2分で分かる並行プログラミング入門
観点別設計スコアカード
デッドロックを発生させる4つの条件
プリフィクススキャンを用いた配列のパッキング
総当たり方式でルービックキューブ問題は解けるか

となっています。

----------------------------------------------------------------------------------------

読者としてプログラマを想定していて、
「プログラミングやアルゴリズムの基礎」があると理解しやすいと思います。

ソースコードはC言語で示されていて、具体的に理解することができます。
もちろん他のJavaやC#などでも同じように使うことができます。


 並行プログラミングの知識は当たり前のものになりつつあります。
Think Parallel or Perish ー 並列思考しなければ、滅びてしまいます。 
(Ther Art of Concurrency和訳書籍への推薦文より) 
GUIプログラミング、オブジェクト指向に続く、
ソフトウェア開発の新しい革新の波「並行 / 並列化」を乗りこなすのに最適の1冊です。

----------------------------------------------------------------------------------------
他に以下のような書籍もございます
----------------------------------------------------------------------------------------









ちょっとひと息に、栄養豊富なミックスナッツはいかがでしょうか
 集中力の持続・疲労回復に効果的です



スポンサードリンク
 
このエントリーをはてなブックマークに追加 mixiチェック

コメント

コメントフォーム
評価する
  • 1
  • 2
  • 3
  • 4
  • 5
  • リセット
  • 1
  • 2
  • 3
  • 4
  • 5
  • リセット

トラックバック

↑このページのトップヘ