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

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

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

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

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

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

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

チャンクが指定されていない場合、デフォルトは 1 です。

チャンクサイズは、振り分けが行われるたびに指数関数的に減少します。チャンクは、毎回振り分けられる最小の繰返し回数を指定します。残りの繰返し回数がチャンクサイズよりも少なくなると、残りが振り分けられます。

チャンクが指定されていない場合、デフォルトは 1 です。

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

RUNTIME の指定時には、チャンクサイズを指定することはできません。

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

  1. 現在の DO または PARALLEL DO ディレクティブの SCHEDULE 節で指定されたスケジュールの型

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

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

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

  1. 現在の DO または PARALLEL DO ディレクティブの SCHEDULE 節で指定されたチャンクサイズ

  2. スケジュールの型が RUNTIME の場合、OMP_SCHEDULE 環境変数で指定された値

  3. スケジュールの型が DYNAMIC および GUIDED の場合、デフォルト値 1

  4. 現在の DO または PARALLEL DO ディレクティブのスケジュールの型が STATIC の場合、チーム内のスレッド数により分割されたループの繰返し空間