インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド
指定されたループの最初でスカラー変数を無条件で初期化します。これにより、ベクトライザーが各反復においてこれらの変数をプライベート化し、ループをベクトル化できるようになります。すべての変数はソースコードの変更前と変更後で同じ値を参照するようにしなければなりません。
次の例について考えてみます。
subroutine foo(a, n) integer n do i=1,n if (a(i) .gt. 0) then b = a(i) a(i) = 1 / a(i) endif if (a(i) .gt. 1) then a(i) = a(i) + b endif enddo end
この例では、変数 b のプライベート化に失敗したため、コンパイラーはこのループをベクトル化できません。 ベクトル化は、b の値が使用される各反復で b への代入が行われる場合にサポートされます。 そのため、ベクトル化するための 1 つの方法として、すべての反復で代入を行うようにします。
安全であることが分かっている場合は、次のようにプログラムコードを変更します。
subroutine foo(a, n) integer n real a(n), b do i=1,n b = a(i) if (a(i) .gt. 0) then a(i) = 1 / a(i) endif if (a(i) .gt. 1) then a(i) = a(i) + b endif enddo end