高速化プログラミング入門


高速化プログラミング入門


カットシステム


著者:北山洋幸


はじめに

第1章 高速化の基礎
1.1 CPU概論
1.1.1 CPUとは
1.1.2 命令とデータで分類
1.1.3 ヘテロジニアスとホモジニアスによる分類
1.1.4 RISCとCISCによる分類
1.1.5 スカラーとベクトルによる分類
1.2 メモリ概論
1.2.1 メモリの構成
1.2.2 キャッシュメモリ
1.2.3 メモリと高速化の関係
1.3 並列化概論
1.3.1 並列処理と逐次処理
1.3.2 逐次と並列
1.3.3 並列化する目的
1.3.4 なぜ並列化するか
1.3.5 並列化の詳細
1.4 並列化の分類
1.4.1 命令・データによる分類
1.4.2 メモリの分散・共有による分類
1.4.3 プロレス・スレッドによる分類
1.5 並列化の限界
1.6 並列化の課題
1.6.1 オーバーヘッド
1.6.2 データアクセス競合
1.6.3 複雑化
1.6.4 ポータビリティの喪失
1.6.5 スケーラビリティの喪失
1.7 時間軸と高速化

第2章 単純な高速化
2.1 コンパイラオプション
2.2 コンパイラを変えてみる
2.3 初歩的な最適化
2.3.1 括弧でくくる
2.3.2 除算を避ける
2.3.3 除算を減らす
2.3.4 整数の乗除算
2.3.5 半精度浮動小数点数
2.3.6 インライン展開
2.3.7 一時変数を用いた最適化

第3章 ループの高速化
3.1 ループアンロール
3.2 ベンチマークに使用したシステム

第4章 キャッシュメモリ
4.1 2次元配列の総和
4.2 2次元配列への書き込み
4.3 サブブロックへ分割
4.3.1 2次元配列の総和
4.4 プリフェッチ

第5章 並列化
5.1 配列に係数を乗ずる
5.1.1 ブロックで分割
5.2 OpenMP概論
5.2.1 単純な例
5.2.2 ループを並列化
5.2.3 セクションを並列化
5.2.4 まとめ
5.3 OpenMPに対応したプログラムのビルド方法

第6章 ベクトル化
6.1 逐次処理
6.2 ベクトル化・128ビット
6.2.1 イントリンシックの解説
6.3 ベクトル化・256ビット
6.3.1 イントリンシックの解説
6.4 アライメント
6.5 アセンブリ言語で開発
6.6 Visual C++とイントリンシック
6.6.1 イントリンシックを使用したSSE命令で記述したプログラム
6.7 Visual C++でアセンブラ
6.7.1 32ビット環境
6.7.2 64ビット環境
6.7.3 呼び出し規約とレジスタ
6.8 SIMD命令とメモリ管理
6.8.1 イントリンシックを使用した変数の宣言
6.8.2 アライメント
6.8.3 初期化
6.8.4 メモリの動的割り付け

第7章 データの整列
7.1 行列を並び替え
7.2 3Dベクトルの正規化(AOS、SOA)
7.2.1 AOSとSOA
7.2.2 AOSからSOAへのシャッフル
7.2.3 128ビットベクトル命令でAOSからSOAへのシャッフル
7.2.4 256ビットベクトル命令でAOSからSOAへのシャッフル
7.2.5 一般化した正規化関数

第8章 並列化とベクトル化の融合
8.1 逐次処理
8.2 128ビット
8.3 256ビット
8.4 ブロックで分割

第9章 並列化とキャッシュ
9.1 ループで分割
9.2 ブロックで分割
9.3 OpenMPの共有変数とプライベート変数
9.3.1 共有変数
9.3.2 プライベート変数
9.3.3 ループのインデックス
9.4 OpenMPの指示文
9.4.1 parallel構文
9.4.2 for構文
9.4.3 sections構文
9.4.4 parallel for構文
9.4.5 parallel sections構文
9.5 指示句
9.5.1 shared指示句
9.5.2 private指示句
9.5.3 firstprivate指示句
9.5.4 reduction指示句

第10章 水平演算
10.1 配列の総和
10.1.1 逐次処理
10.2 並列化
10.3 ベクトル化
10.3.1 128ビット
10.3.2 256ビット
10.4 並列化とベクトル化の融合
10.5 最大値
10.5.1 逐次処理
10.5.2 並列化
10.5.3 ベクトル化
10.5.4 イントリンシックの解説
10.5.5 並列化とベクトル化の融合

第11章 フィルタ
11.1 積和でフィルタ
11.1.1 逐次
11.1.2 並列化
11.1.3 実行方法
11.1.4 Cpfmクラス
11.1.5 ベクトル化
11.1.6 スペクトル
11.2 FFTでフィルタ
11.2.1 重畳加算法(オーバーラップアッド法)
11.2.2 スペクトル
11.3 fftw3について
11.3.1 インストール
11.4 実験データ作成や評価
11.4.1 テキストをWAVファイルへ変換
11.4.2 クラスの説明
11.4.3 プログラム本体の説明
11.4.4 使用法
11.4.4 WAVファイルをテキストへ変換

索引

書籍目次

Posted by shi-n