我是并行计算的新手,我一直在尝试使用 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”有问题,但它在每个线程中都发生了变化。如何在不将“y”声明为函数“test”的参数的情况下并行化这样的代码?
另外,有没有什么方法可以让每个线程在整个程序中(包括通过函数)私下携带迭代计数器“i”的值?