program main
use a
use b
implicit none
!
do i=1,100
call sub
enddo
end program
subroutine sub()
use a
use b
end
---------------------------------------------------
目标:并行名为sub的子程序,在主程序和子程序中都会调用外部的module。
方法:
module是fortran中一种非常方便的来定义全局变量的方法。fortran中变量分为全局变量和局部变量,而在openmp中分为共有变量和私有变量。如果并行的子程序需要调用全局变量,比较好的处理方法是把全局变量变为各个线程的私有变量,主要的方法是通过threadprivate实现全局变量变线程私有变量。因为threadprivate只是复制变量给子线程,但是到子线程的变量并没有继承主线程的值。所以需要用copyin来把主线程的值发给子线程从而实现全局变量私有并赋值。