!$OMP BARRIER
为工作组的所有线程声明一个障碍同步点,组内所有线程在此等待只到所有线程到达这一点。
!$OMP ATOMIC
将下一条语句中某个变量(下面的x)在存储器中的更新声明为原子操作。它对紧跟它的语句有效,这条语句必须具有下面的形式:
● x = x operator expr
● x = expr operator x
● x = intrinsic_procedure_name( x, expr_list )
● x = intrinsic_procedure_name( expr_list, x )
其中,x是一个基本数据类型的标量变量,
operator是归约操作符,它可以取如下的值:
● +
● -
● *
● /
● .AND.
● .OR.
● .EQV.
● .NEQV.
expr为一个标量表达式,在expr中不能再出现归约x;
intrinsic_procedure_name是intrinsic函数名称,它可以是如下的操作:
● MAX
● MIN
● IAND
● IOR
● IEOR
expr_list是一个逗号分割的,非空的标量表达式列表,其中的表达式不能再包含x,当intrinsic_procedure_name为IAND,
IOR或者IEOR的时候,expr_list中只能出现一个表达式。
!$FLUSH[(list)]
对变量列表中的变量进行flush操作,操作完成后,所有的工作线程所看到的存储器中的变量都具有相同的值。当list缺省时,对所有变量进行flush操作。
!$OMP ORDERED
block
!$OMP ORDERED
这组指导语句只能出现在标记有ORDERED子句的DO或者PARALLEL DO的内容中。它确保block中的语句的执行次序与串行次序一致。同一个DO/PARALLEL
DO最多只能出现一个ORDERED语句,而且,这个ORDERED语句必须确保在循环体中只被执行一次。
下面是一个例子
!$OMP PARALLEL DO ORDERED
do i=1,4,1
!$OMP ORDERED
print *,"This is ", i
!$OMP END ORDERED
!$OMP END PARALLEL DO
它的结果为:
This is 1
This is 2
This is 3
This is 4
如果去掉ORDERED/END ORDERED,它的结果可能为:
This is 1
This is 4
This is 3
This is 2
|