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

ドキュメントの情報

はじめに

1.  C コンパイラの紹介

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

3.  C コードの並列化

3.1 概要

3.1.1 使用例

3.2 OpenMP に対する並列化

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

3.3 環境変数

3.3.1 PARALLEL または OMP_NUM_THREADS

3.3.2 SUNW_MP_THR_IDLE

3.3.3 SUNW_MP_WARN

3.3.4 STACKSIZE

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

3.4 データの依存性と干渉

3.4.1 並列実行モデル

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

3.4.3 ストアバック変数の使用

3.4.4 縮約変数の使用

3.5 処理速度の向上

3.5.1 アムダールの法則

3.5.1.1 オーバーヘッド

3.5.1.2 ガスタフソンの法則

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

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

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

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

3.7 ループの変換

3.7.1 ループの分散

3.7.2 ループの融合

3.7.3 ループの交換

3.8 別名と並列化

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

3.8.2 制限付きポインタ

3.8.3 明示的な並列化およびプラグマ

3.8.3.1 直列プラグマ

3.8.3.2 並列プラグマ

for ループの入れ子

並列化の適切性

プロセッサの数

変数の分類

スレッド private 変数と shared 変数のデフォルトのスコープの規則

private 変数

shared 変数

readonly 変数

storeback 変数

savelast

reduction 変数

スケジューリングの制御

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

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.  K&R Solaris Studio C と Solaris Studio ISO C の違い

索引

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

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

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

ループの個々の繰り返しが実行する作業が同じである場合には、システムの複数のスレッドに均一に作業を分散すると効果があります。この方法を静的スケジューリングといいます。

例 3-13 静的スケジューリングに向いたループ

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

静的スケジューリング (チャンクスケジューリングともいう) では、各スレッドは同じ回数の繰り返しを実行します。たとえばスレッドの数が 4 であれば、前述の例では、各スレッドで 250 回の繰り返しが実行されます。割り込みが発生しないものと仮定し、各スレッドが同じ早さで作業を進行していくと、すべてのスレッドが同時に終了します。

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

各繰り返しで実行する作業が異なる場合、静的スケジューリングでは、一般に、よい負荷バランスを得ることができなくなります。静的スケジューリングでは、すべてのスレッドが、同じ回数の繰り返しを処理します。マスタースレッドを除くすべてのスレッドは、実行を終了すると、次の並列部分が検出されるまで待つことになります。残りのプログラムの実行はマスタースレッドが行います。セルフスケジューリングでは、各スレッドが異なる小さな繰り返しを処理し、割り当てられた処理が終了すると、同じループのさらに別の繰り返しを実行することになります。

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

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