インテル® 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