インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド
次の例について考えてみます。
void foo(float *a, int m, int n) {
int i;
for (i=0; i<n; i++) {
a[i] = a[i+m]+1;
}
return;
}subroutine foo(a, m, n)
real a(n)
do i=1,n
a(i) = a(i+m) + 1
enddo
end
この例では、m についてのより詳しい情報がないと、コンパイラーはこのループを並列化できません。 例えば、m がマイナスの場合、各反復は前の反復に依存します。 m が n よりも大きいことが分かっていれば、ループを並列化できます。
安全であることが分かっている場合は、次のように宣言子を追加できます。
subroutine foo(a, m, n)
real a(n)
!dir$ parallel
do i=1,n
a(i) = a(i+m) + 1
enddo
end