- スカラ並列プログラミング チューニング・ガイド 別冊
- チューニング事例集 第一版(2006/10/30発行)
|
本文 [502KB] |
【目次】
- はじめに
- 1. スカラSMP計算機のチューニング
- 1.1 ハードウェア構成
- 1.2 キャッシュ機能
- 1.2.1 キャッシュの仕組み
- 1.2.2 キャッシュとキャッシュライン
- 1.2.3 キャッシュアクセス
- 1.2.4 キャッシュインデックス競合
- 1.3 プリフェッチ機能
- 1.4 TLB機能
- 1.5 ラージページ機能
- 1.6 性能特性とチューニングのポイント
- 2. メモリアクセス負荷/キャッシュ競合の削減
- 2.1 配列の形状は2のべき乗を避ける
- 2.2 参照するメモリの局所性を高める
- 2.3 リストアクセスしている配列を再構成する
- 2.4 配列を連続アクセスするようにループ交換する
- 2.5 FALSE SHARINGを解決する(自動並列化)
- 2.6 FALSE SHARINGを解決する(OpenMP)
- 2.7 ループ分割を変更する(OpenMP)
- 2.8 メモリアクセスを局所化する
- 2.9 TLB不足を解決する
- 2.10 ループの分割方法を変える(OpenMP)
- 2.11 配列のストライドアクセスを連続アクセスにする(1)
- 2.12 配列のストライドアクセスを連続アクセスにする(2)
- 2.13 配列のストライドアクセスを連続アクセスにする(3)
- 2.14 配列のストライドアクセスを連続アクセスにする(4)
- 3. 同期コストの削減
- 3.1 ループをタイル化して同期コストを削減する
- 4. スレッド間CPU負荷の分散
- 4.1 ループを一重化する
- 4.2 ループ分割方法を変更する(OpenMP)
- 5. プロセス間CPU負荷の分散
- 5.1 ループ分割方法を変更する(XPFortran)
- 6. 通信コストの改善
- 6.1 プロセス間通信コストの削減
- 7. 並列化率の向上
- 7.1 並列化粒度を大きくする
- 7.2 部分的に並列化できるループを並列化する
- 7.3 ループを分配する
- 7.4 ループをタイトリ(直列入れ子)にする
- 7.5 ループを細分する
- 7.6 ループをピーリングする
- 7.7 飛び出しのあるループを並列化する(OpenMP)
- 7.8 IF文のあるループを並列化する
- 7.9 配列の定義引用関係を明らかにする
- 7.10 配列の添字の重なりを明らかにする
- 7.11 ポインタを並列化する
- 7.12 外部手続きがあるループを並列化する
- 7.13 配列をプライベート化して外側ループで並列化する
- 7.14 総和などのリダクション演算を並列化する
- 7.15 メモリ参照回数を減らす
- 7.16 アンローリングする
- 7.17 並列化範囲を拡大する
- 7.18 粒度が十分にあるループを効率よく並列化する
- 7.19 粒度が小さいループは並列化を抑止する
- 7.20 ループ長を考慮して並列化する
- 7.21 PARALLEL指示のオーバヘッドを削減する(OpenMP)
- 8. 演算器の実行効率を高める
- 8.1 ループ融合
- 8.2 ループ変形
- 8.3 ループ傾斜
- 8.4 ループ繰り返し回数
- 8.5 端点IF
- 8.6 ループオーバヘッド削減
- 8.7 演算数削減
- 8.8 単純IF化
- 8.9 不変式の移動
- 8.10 配列代入文の融合
- 8.11 IF文の条件が成立する確率に偏り
- 8.12 多重DOループ
- 8.13 プリフェッチ機能を使用する
- 索引
|
|