0
在我的OpenMP項目中,我在一個線程子程序「工具」上使用了一個do循環,並且僅限於將一個單變量函數傳遞給線程子程序「工具」。但是,在我的數學模型中,函數必須再多一個參數,所以我需要將第二個線程相關變量提供給相應的線程。是否存在OpenMP指令THREADPRIVATE的OpenACC對應部分?
對於我需要的功能,我只需添加指令「!$ OMP THREADPRIVATE(i)」,它的功能非常完美。我想知道如何將此代碼移植到OpenACC。
在我看來,新的OpenACC 2.0標準可以處理這個問題,但我找不到任何有關Internet示例代碼的詳細教程,以說明使用諸如「例程」之類的新指令來調用線程 - 並行區域內的相關函數或子例程。
謝謝。
李
main.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
MODEL.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