在我的 OpenMP 项目中,我在线程子例程“工具”上使用 do 循环,并且仅限于将单变量函数传递给线程子例程“工具”。但是,在我的数学模型中,该函数必须再接受一个参数,因此我需要将第二个线程相关变量提供给各个线程。
对于我需要的函数,我只需添加指令“!$OMP THREADPRIVATE(i)”,它就可以完美运行。我想知道如何将此代码移植到 OpenACC。
在我看来,新的 OpenACC 2.0 标准可以处理这个问题,但是我在 Internet 上找不到任何详细的示例代码教程来说明如何使用新指令(例如“例程”)来调用线程相关的函数或子例程平行区内。
谢谢。
李
主.F90
program main use toolbox real :: a(5),c(5) integer :: j a = [((j),j=1,9,2)] b = [((j),j=2,10,2)] !$OMP PARALLEL DO SHARED(b) do j=1,5 i=j call tool(fun1,a(j),c(j)) enddo !$OMP END PARALLEL DO write(6,'5(f3,x)') c end program main
型号.F90
module toolbox integer :: i !$OMP THREADPRIVATE(i) real :: b(5) contains subroutine tool(func,e,f) interface real function func(x) real :: x end function func end interface real :: e,f f=func(e) end subroutine tool function fun1(z) real :: fun1,z fun1=z+b(i) end function fun1 end module toolbox