インテル® Fortran コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
次の例について考えてみます。
subroutine foo (A, B, C, n, m1, m2)
real (4) A(10000, 10), B(10000, 10), C(10000, 10)
integer n, m1, m2
real W(1000)
integer i, j
do i=1,n
do j=1,m1
W(j) = A(j,i) * B(j,i)
end do
do j=1,m2
C(j,i) = W(j) + 1.0
end do
end
この例では、確実に m1 >= m2 になるかどうか分からないため、コンパイラーはこのループを並列化しません。
m1 >= m2 であることが分かっており、ループ終了後に W の要素が書き込まれる前にフェッチされることがない場合、次の宣言子を使用できます。
安全であることが分かっている場合は、次のように宣言子を追加できます。
subroutine foo (A, B, C, n, m1, m2)
real (4) A(10000, 10), B(10000, 10), C(10000, 10)
integer n, m1, m2
real W(1000)
integer i, j
!DIR$ PARALLEL PRIVATE (W)
do i=1,n
do j=1,m1
W(j) = A(j,i) * B(j,i)
end do
do j=1,m2
C(j,i) = W(j) + 1.0
end do
end