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