OpenMP Fortran API 2.0支持的数据环境说明语句如下:
・ private
・ shared
・ default
・ firstprivate
・ lastprivate
・ reduction
・ copyin
・ copyprivate
PRIVATE/SHARED/DEFAULT的基本含义和用法在DO指导语句的部分已经讲过。需要注意的是,对DO,PARALLEL
DO来说,循环的索引变量会自动的被设置为private属性。
FIRSTPRIVATE/LASTPRIVATE是与PRIVATE有关的两个语句,它们申明的变量都是PRIVATE变量。FIRSTPRIVATE申明的变量为线程私有,但它的初始值由对应的共享变量的值给出(由主线程在创建工作线程时进行,初始值为此时共享变量的值);而LASTPRIVATE申明的变量还需要在对应的并行任务结束的时候把自己的私有变量的值赋给对应的共享变量(具体由哪个线程来完成要看具体情形:对DO/PARALLEL
DO是完成最后一个循环迭代的线程,对SECTIONS是执行最后一个SECTION(源程序顺序)的线程)。
下面是一个简单的关于FIRSTPRIVATE/LASTPRIVATE的例子
J = 10
!$OMP PARALLEL
!$OMP DO FIRSTPRIVATE(J) LASTPRIVATE(I)
!现在每个线程中的私有的J的值都为10,去掉这个说明,则J的初始值不确定
DO I = 1, 1000, 1
do_body
END DO
!$OMP END DO
!现在共享变量I的值为1000
!$OMP END PARALLEL
COPYIN和COPYPRIVATE属性和THREADPRIVATE变量有关,本文中不加以介绍,请阅读标准。
|