OpenMP* ループ・スケジュール

同カテゴリーの次の記事

OpenMP* 関連のヒント

この記事は、インテル® ソフトウェア・サイトに掲載されている「OpenMP* Loop Scheduling」の日本語参考訳です。


parallel for 構文を使用して、次のように OpenMP* ランタイムをスケジュールするように指示します。

#pragma omp parallel for schedule(kind [, chunk])

次の表のように、4 つの異なるループ・スケジュールのタイプ (kind) を OpenMP* ランタイムに渡すことができます。オプションの引数 (chunk) は、正の整数で指定します。

Kind

説明

static

ループを同じ大きさのチャンク、または (ループの反復数がスレッド数にチャンクサイズを掛けた値で割り切れない場合は) できるだけ同じ大きさのチャンクに分割します。デフォルトでは、チャンクサイズはループ反復数を利用可能なスレッド数で割った値です。

反復をインターリーブするにはチャンクを 1 に設定します。

dynamic

内部の作業キューを使用して、ループ反復のチャンク・サイズ・ブロックを各スレッドに渡します。スレッドが終了すると、作業キューの一番上から次のブロックを取得します。

デフォルトでは、チャンクサイズは 1 です。このスケジュール方式には余分なオーバーヘッドがかかるため、使用する際は注意してください。

guided

dynamic スケジュールに似ていますが、大きなチャンクサイズから開始して、徐々に小さくしていき、反復間の負荷不均衡を軽減します。オプションの chunk パラメーターは、使用するチャンクサイズの最小値を指定します。

デフォルトでは、チャンクサイズはループ反復数を利用可能なスレッド数で割った値とほぼ同じです。

auto

schedule (auto) が指定されると、スケジュールに関する決定はコンパイラーが行います。チーム内のスレッドへの反復の割り当てはコンパイラーが選択します。

runtime

OMP_SCHEDULE 環境変数を使用して、3 つのループ・スケジュールのいずれを指定します。

OMP_SCHEDULE は、書式指定された文字列で、parallel 構造にそのまま渡されます。

詳細は、『インテル® コンパイラー XE ユーザー・リファレンス・ガイド』の「OpenMP* を使用したワークシェア」を参照してください。

次のステップ

この記事は、「Programming and Compiling for Intel® Many Integrated Core Architecture」の一部「OpenMP* Loop Scheduling」の翻訳です。インテル® Xeon Phi™ コプロセッサー上にアプリケーションを移植し、チューニングを行うには、各リンクのトピックを参照してください。アプリケーションのパフォーマンスを最大限に引き出すために必要なステップを紹介しています。

「効率良い並列化」に戻る

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事