JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C ユーザーガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  C コンパイラの紹介

2.  C コンパイラ実装に固有の情報

3.  C コードの並列化

3.1 並列化の概要

3.2 OpenMP に対する並列化

3.2.1 OpenMP の実行時の警告の処理

3.2.2 環境変数

3.2.3 並列コードでの restrict の使用

3.3 データの依存性と干渉

3.3.1 並列実行モデル

3.3.2 固有スカラーと固有配列

3.3.3 ストアバック

3.3.4 縮約変数

3.4 処理速度の向上

3.4.1 アムダールの法則

3.4.1.1 オーバーヘッド

3.4.1.2 ガスタフソンの法則

3.5 負荷バランスとループのスケジューリング

3.5.1 静的 (チャンク) スケジューリング

3.5.2 セルフスケジューリング

3.5.3 ガイド付きセルフスケジューリング

3.6 ループの変換

3.6.1 ループの分散

3.6.2 ループの融合

3.6.3 ループの交換

3.7 別名と並列化

3.7.1 配列およびポインタの参照

3.7.2 制限付きポインタ

3.8 メモリーバリアー組み込み関数

4.  lint ソースコード検査プログラム

5.  型に基づく別名解析

6.  ISO C への移行

7.  64 ビット環境に対応するアプリケーションへの変換

8.  cscope: 対話的な C プログラムの検査

A.  機能別コンパイラオプション

B.  C コンパイラオプションリファレンス

C.  ISO/IEC C 99 の処理系定義の動作

D.  C99 の機能

E.  ISO/IEC C90 の処理系定義の動作

F.  ISO C データ表現

G.  パフォーマンスチューニング

H.  Oracle Solaris Studio C: K&R C と ISO C の違い

索引

3.5 負荷バランスとループのスケジューリング

並列ループの繰り返しを複数のスレッドに分散する作業を「ループのスケジューリング」といいます。速度向上を最大化するために、作業はスレッド間に均等に分散し、あまりに多くのオーバーヘッドを課さないようにすべきです。コンパイラは、異なる状況に合わせて、いくつかの種類のスケジューリングをすることができます。

3.5.1 静的 (チャンク) スケジューリング

最良の結果を得るために、ループの個々の繰り返しで実行される作業が同じときは、システム上の異なるスレッド間に均等に作業を分割してください。この方法を静的スケジューリングといいます。

例 3-13 静的スケジューリング用の良いループ

for (i=1; i < 1000; i++) {
    sum += a[i]*b[i];       /* S1 */
}

静的スケジューリング (チャンクスケジューリングともいう) では、各スレッドは同じ回数の繰り返しを実行します。4 スレッドでは、各スレッドは 250 個の繰り返しを取得します。割り込みが発生せず、各スレッドが同じ速度で進行する場合、すべてのスレッドが同時に完了します。

3.5.2 セルフスケジューリング

各繰り返しで実行される作業が変化するときは、静的スケジューリングは通常、よい負荷バランスを実現しません。静的スケジューリングでは、すべてのスレッドが、同じ回数の繰り返しを処理します。マスタースレッドを除くすべてのスレッドは、実行を終了すると、次の並列部分が検出されるまで待つことになります。残りのプログラムの実行はマスタースレッドが行います。セルフスケジューリングでは、各スレッドは異なる小さなチャンクの繰り返しを取得し、割り当てられたチャンクの完了後、同じループからさらにチャンクを獲得しようとします。

3.5.3 ガイド付きセルフスケジューリング

ガイド付きセルフスケジューリング (Guided Self Scheduling、GSS) では、各スレッドは、連続的により小さな数のチャンクを取得します。各繰り返しで作業量が異なるような場合には、GSS によって、負荷のバランスが保たれるようになります。