DO または PARALLEL DO ディレクティブの SCHEDULE 節は、DO ループの繰返しをチーム内のスレッドに分割し、振り分ける方法を決定するスケジューリング・アルゴリズムを指定します。SCHEDULE 節は、現在の DO または PARALLEL DO ディレクティブにのみ適用されます。
SCHEDULE 節内では、スケジュールの型と、オプションとしてチャンクサイズを指定します。チャンクとは、スレッドに振り分けられた連続する繰返しのグループです。チャンクサイズは、スカラ整数式でなければなりません。
次のリストでは、スケジュールの型とチャンクサイズがスケジューリングに与える影響を説明します:
STATIC
繰返しは、チャンクにより指定されたサイズに分割されます。分割された繰返しは、ラウンドロビン方式 (総当り) でスレッド番号の順番にチームのスレッドへ静的に振り分けられます。
チャンクが指定されていない場合、最初に繰返しの回数をチーム内のスレッド数で割って、連続する繰返しの断片に分割します。それぞれの断片は、ループの実行が開始される前に、スレッドに振り分けられます。
DYNAMIC
繰返しは、チャンクにより指定されたサイズに分割されます。各スレッドが、現在振り分けられている繰返しの断片を終了すると、そのスレッドに対し、次の断片が動的に振り分けられます。
チャンクが指定されていない場合、デフォルトは 1 です。
GUIDED
チャンクサイズは、振り分けが行われるたびに指数関数的に減少します。チャンクは、毎回振り分けられる最小の繰返し回数を指定します。残りの繰返し回数がチャンクサイズよりも少なくなると、残りが振り分けられます。
チャンクが指定されていない場合、デフォルトは 1 です。
RUNTIME
スケジューリングに関する決定は、実行時まで延期されます。スケジュールの型とチャンクサイズは、OMP_SCHEDULE 環境変数を使用して、実行時に指定できます。
RUNTIME の指定時には、チャンクサイズを指定することはできません。
次のリストは、使用されるスケジュールの型の優先度を示します:
現在の DO または PARALLEL DO ディレクティブの SCHEDULE 節で指定されたスケジュールの型
現在の DO または PARALLEL DO ディレクティブの型が RUNTIME の場合、OMP_SCHEDULE 環境変数に指定されたデフォルト値
コンパイラのデフォルトのスケジュールの型である STATIC
次のリストは、使用されるチャンクサイズの優先度を示します:
現在の DO または PARALLEL DO ディレクティブの SCHEDULE 節で指定されたチャンクサイズ
スケジュールの型が RUNTIME の場合、OMP_SCHEDULE 環境変数で指定された値
スケジュールの型が DYNAMIC および GUIDED の場合、デフォルト値 1
現在の DO または PARALLEL DO ディレクティブのスケジュールの型が STATIC の場合、チーム内のスレッド数により分割されたループの繰返し空間