Compaq Fortran 並列コンパイラ指示文:基本実行時スケジューリング形式を設定します。スケジューリング形式は,プログラムの文脈には影響を与えませんが性能には影響を与える可能性があります。
形式
c$PAR MP_SCHEDTYPE = mode
c
次のいずれか:C (または c),!,* (「並列指示文の構文規則」を参照)
mode
以下のいずれか。
スレッドが使用可能になったら,残りの繰り返し中の次のチャンクの大きさが割り付けられることを指定します。この状況は,スレッドが繰り返しを巡って競争するというふうに表現されることがあります。残っている繰り返し数がチャンクの大きさの 1 つ分よりも少ない場合,次の使用可能なスレッドに残りのすべての繰り返しが割り付けられます。
DYNAMIC に似ていますが,割り付けられる繰り返し数がループの開始時には比較的大きく,より多くのスレッドが使用可能になるにつれて指数関数的に減っていきます。割り付けられる繰り返し数は,必ずしもチャンクの大きさでは割り切れません。
このスケジューリング形式では,チャンクの大きさは,スレッドが使用可能になったときに割り付けられる繰り返し数の最小値となります。未割付けの繰り返し数がチャンクの大きさ以下になったら,残りのすべての繰り返しが次の使用可能なスレッドに割り付けられます。
場合によっては,1 よりも大きいチャンクの大きさを設定することで,ループが終わりに近づいたときの実行効率を改善することができます。これにより,残っている少数の繰り返しを巡ってスレッドが競合することを防げられるからです。
繰り返しのチャンクをラウンドロビン方式でスレッドに割り付けることを指定します。
環境変数名では大文字と小文字は区別されますが,その値については大文字と小文字は区別されません。以下の環境変数を使用することができます。
MP_CHUNK - chunksize を指定します。chunksize は整定数です。
MP_SCHEDTYPE - 次のいずれかのモードを指定します:DYNAMIC,GSS,GUIDED,INTERLEAVE,INTERLEAVED,SIMPLE,または STATIC
個々のスレーブ・スレッドに,1 つの連続した繰り返しのグループを割り付けます。各スレッドにはほぼ同じ数の繰り返しが割り付けられます。
他の方式が指定されていなければ,基本スケジューリング形式として STATIC が使用されます。
chunksize についての詳細は,「CHUNK」を参照してください。
規則と振る舞い
MP_SCHEDTYPE 指示文は,Compaq Fortran プログラム中の任意の場所に置くことができます。同じプログラムに複数の MP_SCHEDTYPE 指示文が存在する場合,直前に現れた指示文が使用されます。
並列 DO ループに使用されるスケジューリング形式は,以下のように (この順序で) 決定されます。
現在の DO ループの PDO 指示文で指定されているスケジューリング形式
直前の MP_SCHEDTYPE 指示文で指定されているユーザー指定の基本設定
現在の DO ループのスケジューリング形式が RUNTIME ならば,環境変数 MP_SCHEDTYPE で指定されているユーザー指定の基本設定
コンパイラの基本設定である STATIC
DYNAMIC と GUIDED のスケジューリング形式は,ループの実行中にスレッドへの繰り返しの割付けを継続的に行うので,その管理のためにある程度のオーバヘッドが生じます。しかし,繰り返しの平均実行時間が DO ループ全体で一様でなければ,このオーバヘッドは負荷分散の改善によって打ち消されることがあります。
STATIC と INTERLEAVED の形式は,すべての繰り返しを事前にスレッドに割り付け,各スレッドがほぼ同じ数の繰り返しを受け取ることになります。繰り返しの平均実行時間が DO ループ全体で一様であれば,このどちらかの形式が最も効率的なスケジューリング形式となります。
次の形式も使用できます:c$MP_SCHEDULE = mode
関連情報
Compaq Fortran 並列コンパイラ指示文,OpenMP Fortran API コンパイラ指示文,Tru64 UNIX システム用の並列指示文