インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド
指定されたループの最初でスカラー変数を無条件で初期化できるかどうか確認します。できる場合は、初期化を行うようにコードを変更するか (標準的なアドバイス)、parallel 宣言子の private 節に変数をリストします (高度なアドバイス)。 これにより、パラレライザーが各反復においてこれらの変数をプライベート化し、ループを並列化できるようになります。
次の例について考えてみます。
subroutine foo (A, B, cond1, cond2) integer, parameter :: N = 100000 integer I real(8) A(N), B(N), T logical cond1, cond2 do I = 1, N if (cond1) T = i + 1 if (cond2) T = i - 1 A(I) = T end do end
この例では、より詳しい情報がなければ変数 t をプライベート化できないため、コンパイラーはこのループを並列化しません。 cond1 と cond2 のいずれか、または両方が true であることが分かっている場合、t を使用するすべての反復において t を使用する前に同じ反復で書き込みが行われることをパラレライザーに知らせることができます。 この 1 つの方法として、各反復の最初で t に値を代入します。
安全であることが分かっている場合は、次のようにプログラムコードを変更します。
subroutine foo (A, B, cond1, cond2) integer, parameter :: N = 100000 integer I real(8) A(N), B(N), T logical cond1, cond2 do I = 1, N T = 0 if (cond1) T = i + 1 if (cond2) T = i - 1 A(I) = T end do end