私は並列コンピューティングが初めてで、OpenMP を使用して、以前に取り組んだ逐次 Fortran プログラムを並列化しようとしています。私のメイン コードは次の例のようになります。
program main
use omp_lib
implicit none
integer :: i
double precision :: y , test , a(5)
common/y/y
external :: test
a=[1,2,3,4,5]
do i=1,5
y=a(i)
print*,test(2.d0)
end do
end program main
double precision function test(x)
implicit none
double precision :: y , x
common/y/y
test=y*x
return
end function
$OMP PARALLEL DO を使用しようとしていますが、グローバルに宣言され、関数「test」で使用される変数「y」に問題がありますが、各スレッド内で変更されます。関数「test」の引数として「y」を宣言せずに、このようなコードを並列化するにはどうすればよいですか?
また、各スレッドが反復カウンター「i」の値をプログラム全体(関数を含む)でプライベートに運ぶ方法はありますか?