スケジュールの型とチャンクサイズの設定

DO または PARALLEL DO 宣言子の SCHEDULE 節は、DO ループの繰り返しをチーム内のスレッドに分割し、振り分ける方法を決定するスケジューリング・アルゴリズムを指定します。SCHEDULE 節は、現在の DO または PARALLEL DO 宣言子にのみ適用されます。

SCHEDULE 節内では、スケジュールの型と、オプションとしてチャンクサイズを指定します。チャンクとは、スレッドに振り分けられた連続する繰り返しのグループです。チャンクサイズは、スカラー整数式でなければなりません。

次のリストでは、スケジュールの型とチャンクサイズがスケジューリングに与える影響を説明します。

スケジュールの型

説明

STATIC

繰り返しは、チャンクにより指定されたサイズに分割されます。分割された繰り返しは、ラウンドロビン方式 (総当り) でスレッド番号の順番にチームのスレッドへ静的に振り分けられます。

チャンクが指定されていない場合、最初に繰り返しの回数をチーム内のスレッド数で割って、連続する繰り返しの断片に分割します。それぞれの断片は、ループの実行が開始される前に、スレッドに振り分けられます。

DYNAMIC

繰り返しは、チャンクにより指定されたサイズに分割されます。各スレッドが、現在振り分けられている繰り返しの断片を終了すると、そのスレッドに対し、次の断片が動的に振り分けられます。チャンクが指定されていない場合、デフォルトは 1 です。

GUIDED

チャンクサイズは、振り分けが行われるたびに指数関数的に減少します。チャンクは、毎回振り分けられる最小の繰り返し回数を指定します。残りの繰り返し回数がチャンクサイズよりも少なくなると、残りが振り分けられます。チャンクが指定されていない場合、デフォルトは 1 です。

AUTO

SCHEDULE(AUTO) が指定されると、スケジューリングに関する決定はコンパイラーが行います。チーム内のスレッドへの反復のマッピングはコンパイラーが選択します。

RUNTIME

スケジューリングに関する決定は、実行時まで延期されます。スケジュールの型とチャンクサイズは、OMP_SCHEDULE 環境変数を使用して、実行時に指定できます。RUNTIME の指定時には、チャンクサイズを指定することはできません。

次のリストは、使用されるスケジュールの型の優先度を示します。


  1. 現在の DO または PARALLEL DO 宣言子の SCHEDULE 節で指定されたスケジュールの型

  2. 現在の DO または PARALLEL DO 宣言子の型が RUNTIME の場合、OMP_SCHEDULE 環境変数に指定されたデフォルト値

  3. コンパイラーのデフォルトのスケジュールの型である STATIC

次のリストは、使用されるチャンクサイズの優先度を示します。