-par_threshold{n} オプションは、並列ループ実行の有効性に基づいて、ループの自動並列化のしきい値を設定します。n の値は 0 から 100 までを設定できます。デフォルト値は 100 です。-par_threshold{n} オプションは、コンパイル時に計算量が確定できないループに使用します。
n に使用する値には、次の意味があります。
n = 100。コンパイラ分析データに基づいてパフォーマンス・ゲインが予測される場合にのみ並列化が実行されます。これはデフォルトです。-par_threshold{n} がコマンドラインで指定されていないか、n の値が指定されないまま使用されている場合に、この値が使用されます。
n = 0、-par_threshold0 は指定されます。ループは、計算量に関わらず自動並列化を行います。つまり、常に並列化します。
1 から 99 の値は、有効な速度の向上の可能性の比率を表します。例えば、n=50 の場合、並列実行された場合にコードの速度が向上する可能性が 50 パーセントの場合に並列化を行います。
コンパイラは、作成された複数のスレッドのオーバーヘッドとスレッド間を共有できるワーク量のバランスをとろうとするヒューリスティックを適用します。
-par_report{0|1|2|3}オプションは、自動パラレライザの診断レベル 0、1、2、3 を次のように制御します。
-par_report0 = 診断情報を表示しません。
-par_report1 = 正常に自動並列化されたループを表示します。 (デフォルト) 並列ループに対して "LOOP AUTO-PARALLELIZED" メッセージを出力します。
-par_report2 = 正常に自動並列化されたループおよび自動並列化が失敗したループを表示します。
-par_report3 = 2 と同じです。また、自動並列化を妨げる、実証された依存および推測された依存についての追加情報を示します (並列化されない理由)。
次の例は、コマンドからの結果として -par_report3 により生成された出力を示しています。
ifort -c -parallel -par_report3 myprog.f90
ここで、myprog.f90 は、次のとおりです:
program myprog
integer a(10000), q
C Assumed side effects
do i=1,10000
a(i) = foo(i)
enddo
C Actual dependence
do i=1,10000
a(i) = a(i-1) + i
enddo
end
-par_report 出力の例
program myprog
procedure: myprog
serial loop: line 5: not a parallel candidate
due to statement at line 6
serial loop: line 9
flow data dependence from line 10 to line
10, due to "a"
12 Lines Compiled
-par_threshold0 は、コンパイラが計算量が十分でないと想定しているかどうかを確認します。
-par_report3 で診断を表示します。
!DIR$PARALLEL ディレクティブで想定されたデータ依存を排除します。
-ipo を使用して、推定される関数の呼び出しへの副作用を回避します。