無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

書籍をつつく109−インテルスレッディング・ビルディング・ブロック。読み方に気をつけよう!

今日パラレルについて書いていてこの本を思い出したピヨ♪
インテル スレッディング・ビルディング・ブロック ―マルチコア時代のC++並列プログラミング
現時点でTBBに関してお勧めできる本はこれしかないピヨッ。


【目次】
日本語版の出版に寄せて
監訳者まえがき
推薦の言葉 −本書に対する賞賛の声
本書に寄せて
TBB開発責任者から
まえがき

1章 なぜスレッディング・ビルディング・ブロックなのか?
 1.1 概要
 1.2 利点
  1.2.1 ネイティブスレッド/MPIとの比較
  1.2.2 OpenMPとの比較
   1.2.3 再帰分割、タスクスチールとアルゴリズム

2章 並列思考
2.1 並列思考の要素
2.2 分解
 2.2.1 データの並列処理
  2.2.2 タスクの並列処理
  2.2.3 パイプライン化(タスクとデータ両方の並列処理)
  2.2.4 混合ソリューション
  2.2.5 並列処理の実現
2.3 スケーリングとスピードアップ
 2.3.1 アプリケーションにどれだけの並列処理があるか?
2.4 スレッドとは?
 2.4.1 スレッドのプログラム
  2.4.2 並列状態における安全性
 2.5 排他制御とロック
2.6 正当性
2.7 抽象化
2.8 パターン
2.9 直感による判断

3章 基本的なアルゴリズム
3.1 ライブラリーの初期化と終了
3.2 ループの並列化
 3.2.1 parallel_for
  3.2.2 parallel_reduce
  3.2.3 高度なトピック:異なる種類の反復空間
 3.2.4 parallel_scan
3.3 再帰的な範囲指定
  3.3.1 分割可能コンセプト
  3.3.2 Rangeコンセプト
  3.3.3 Partitionerコンセプト
  3.3.4 再帰的なテンプレート
3.4 ループのまとめ

4章 高度なアルゴリズム
4.1 ストリーム用の並列アルゴリズム
 4.1.1 完了までの並列化:parallel_while
  4.1.2 組み立てラインでの作業:パイプライン
  4.1.3 parallel_sort

5章 コンテナー
5.1 concurrent_queue
 5.1.1 デバッグ目的のconcurrent_queue上での反復
  5.1.2 キューを使用すべきではない状況
5.2 concurrent_vector
  5.2.1 ベクトル全体の操作
  5.2.2 並列操作
  5.2.3 並列反復
  5.2.4 キャパシティー
  5.2.5 イテレーター
5.3 concurrent_hash_map
  5.3.1 HashCompareの詳細
  5.3.2 テーブル全体の操作
  5.3.3 同時アクセス
  5.3.4 並列操作:find、insert、erase
  5.3.5 並列反復
  5.3.6 キャパシティー
  5.3.7 イテレーター

6章 スケーラブルなメモリー割り当て
6.1 制限
6.2 メモリー割り当ての問題
6.3 メモリー・アロケーター
 6.3.1 どのライブラリーをアプリケーションにリンクすればいいか
  6.3.2 C++ STLテンプレート・クラスへのアロケーター引数の使用
6.4 malloc、new、deleteの置換
 6.4.1 malloc、free、realloc、callocの置換
  6.4.2 newとdeleteの置換
  6.4.3 Allocatorコンセプト
  6.4.4 モデル型

7章 排他制御
7.1 排他制御を使用すべき状況
7.2 mutexの概要
 7.2.1 mutexの特性
  7.2.2 リーダー/ライターmutex
  7.2.3 アップグレード/ダウングレード
  7.2.4 ロックの問題
7.3 mutexのインターフェイス
  7.3.1 Mutexコンセプト
  7.3.2 ReaderWriterMutexコンセプト
7.4 アトミック操作
   7.4.1 atomicにコンストラクターがない理由
   7.4.2 メモリーの一貫性とフェンス

8章 タイミング

9章 タスク・スケジューラー
9.1 タスクベースのプログラミングが適切ではない場合
9.2 ネイティブスレッドより優れている点
 9.2.1 オーバーサブスクリプション
  9.2.2 フェア・スケジューリング
  9.2.3 コーディングのオーバーヘッド
  9.2.4 ロード・インバランス
  9.2.5 移植性
9.3 ライブラリーの初期化
9.4 フィボナッチ数のサンプルプログラム
9.5 タスク・スケジューリングの概要
9.6 タスク・スケジューリングの動作
9.7 推奨するタスク回帰パターン
 9.7.1 ブロックスタイルと子
  9.7.2 継続渡しスタイルと子
9.8 スケジューラーの活用
 9.8.1 再帰連鎖反応
  9.8.2 継続渡し
9.9 タスク・スケジューラーのインターフェイス
9.10 タスク・スケジューラーのまとめ

10章 成功への秘訣
10.1 成功への重要なステップ
10.2 緩和直列実行
10.3 メソッドとライブラリーの安全な並列化
10.4 デバッグとリリース
10.5 効率に関する考察
10.6 デバッグ機能を利用する
 10.6.1 TBB_DO_ASSERTマクロ
  10.6.2 TBB_DO_ASSERTを含むプログラムを出荷しない
  10.6.3 TBB_DO_THREADING_TOOLSマクロ
  10.6.4 デバッグ・ライブラリーとリリース・ライブラリー
10.7 その他のスレッドパッケージとの併用
10.8 命名規則
 10.8.1 tbb名前空間
  10.8.2 tbb::internal名前空間
  10.8.3 _ _TBBプリフィックス

11章 コードの例題
11.1 Aha !(なるほど!)
11.2 その他の重要なポイント
11.3 parallel_forのコードの例題
 11.3.1 ParallelAverage
  11.3.2 地震波
  11.3.3 行列乗算
  11.3.4 ParallelMerge
  11.3.5 SubstringFinder
11.4 ライフゲーム
 11.4.1 実装
  11.4.2 オートマトン
  11.4.3 オートマトン:実装
  11.4.4 アプリケーションの拡張
  11.4.5 参考文献
11.5 parallel_reduceのコードの例題
 11.5.1 ParallelSum
  11.5.2 粒度を指定する必要のないParallelSum
  11.5.3 ParallelPrime
  11.6 CountStrings: concurrent_hash_mapの使用
  11.7 クイックソート:タスクスチールの視覚化
  11.8 高速な行列乗算(Strassen)
  11.9 高度なタスク・プログラミング
   11.9.1 メインプログラムで並列に大きなタスクを開始する
    11.9.2 2つの出入り口:パイプラインの同じタスクから2つ供給する
  11.10 パケット処理パイプライン
   11.10.1 インターネット・デバイス用の並列プログラミング
    11.10.2 ローカル・ネットワーク・ルーターの例
    11.10.3 ローカル・ネットワーク・ルーター用に
         パイプライン化されたコンポーネント
    11.10.4 実装
    11.10.5 フィルタークラス
 11.11 メモリー割り当て
   11.11.1 newとdeleteの置換
   11.11.2 malloc、calloc、realloc、freeの置換
   11.12 ゲームのスレッド化のコードの例題
    11.12.1 スレッド化アーキテクチャー:
         物理計算+レンダリング
     11.12.2 スケーラビリティーで重要なこと
     11.12.3 フレームループ
     11.12.4 ドメイン分解データ構造の必要性
     11.12.5 スレッドではなくタスクで考える
     11.12.6 ロードバランスとタスクスチール
     11.12.7 物理計算スレッド間の同期
     11.12.8 コードの例題の実際のゲームへの統合
     11.12.9 パフォーマンスの測定方法
  11.13 相互作用の物理計算と更新のコード
    11.14 オープン・ダイナミクス・エンジン(Open Dynamics Engine)
       11.14.1 hotspotの調査
       11.14.2 最初のソリューションの改善
       11.14.3 コードの例題

12章 歴史と関連プロジェクト
12.1 ライブラリー
12.2 言語
12.3 プラグマ
12.4 汎用プログラミング
 12.4.1 汎用プログラミングのコンセプト
  12.4.2 汎用プログラミングの擬似署名
  12.4.3 汎用プログラミングのモデル
12.5 キャッシュ
12.6 タイムスライスのコスト
12.7 ラムダ関数の紹介
12.8 参考文献

索引


目次を見ての通り、この本はTBBについて網羅的に詳しい説明があるいい本ピヨ♪だけど、一つ難点があるんだ。それは・・・読みにくい事だっピヨッ!この本を読むコツを掴まないと分かり難いとボクは感じたんだ・・・
その時苦心して編み出したのが第11章とサンプルコードを基点として読むという方法ピヨ♪つまり、先にサンプルコードをダウンロードしておいて、第11章とサンプルコードを読んで、適宜他の章を読んだらいいという事ピヨ。
よく読んだら、この本にもそれを示唆する文章があったんだけど、初めてこの本を読んだらそんなのわかんないとボクは思う。それさえ注意すればこの本はかなりいい本ピヨ♪
でも一つ残念な事があったピヨォ。それはTBBの実装についての解説がない点ピヨ。オライリーだから期待したんだけどな・・・TBBは非常に興味深い技術だから、続刊でもいいから実装を解説した本が欲しいピヨ。
別窓 | 書籍レビュー | コメント:0 | トラックバック:0 | ∧top | under∨
<<中の人の徒然草233 | 無差別に技術をついばむ鳥 | 中の人の徒然草232>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |