常用制导指令



Parallel

!设置线程数

!$OMP PARALLEL NUM_THREADS(64)

并行区域

!$OMP END PARALLEL


Do

!对do/for循环并行化

!$OMP DO

并行区域

!$OMP END DO


Sections

!对多个没有依赖关系(没有顺序因果关系)的代码块并行化

!$OMP SECTIONS

!$OMP section

并行代码1(与代码2、代码3同时执行)

!$OMP section

并行代码2

!$OMP section

并行代码3

!$OMP END SECTIONS


Single

!代码块仅由单个线程执行,该线程为最快到达 Omp Single 指令的线程

!其他线程在 !$Omp End Single 等待

!结束子句可为NOWAIT子句或者COPYPRIVATE子句,二者选其一,不可同时存在

!$OMP SINGLE

代码块

!$OMP END SINGLE


Master

!代码块仅主线程执行,与 !$Omp Single + Nowait 子句类似

!$OMP MASTER

代码块

!$OMP END MASTER


Critical

!代码块每次仅允许一个线程进入,相当于临界区加锁,其他线程被阻塞至 !$Omp Critical 或者 !$Omp End Critical

!$OMP CRITICAL

代码块

!$OMP END CRITICAL


Barrier

! 显示同步,等待所有线程都到达该点

代码行

!$OMP BARRIER


Ordered

! 只用于 Do/For 循环,使指令区域的执行按顺序执行,在前面迭代完成前,无线程可进入指令区域;

! 注:每个循环域中的每次迭代只能有一个 Ordered 块可见(如存在 If 语句中可能会有多个Ordered块);

!$OMP ORDERED

代码块

!$OMP END ORDERED


Workshare

! Workshare将代码块分解为共享单位并分配给一组线程

!$OMP WORKSHARE

代码块

!$OMP END WORKSHARE


Atomic

! Atomic仅对其后的一条语句生效,效果与 Critical 相似

!$OMP ATOMIC

代码行


Flush

! Flush 将线程可见的变量从寄存器写回内存

!$OMP FLUSH

代码行


"指令-子句"表

OpenMP:基本制导指令(Fortran)

相关文章:

  • 2022-12-23
  • 2021-11-22
  • 2021-11-29
  • 2021-11-28
  • 2021-04-05
  • 2021-06-28
  • 2021-08-04
猜你喜欢
  • 2022-12-23
  • 2021-12-31
  • 2021-08-24
  • 2021-09-12
  • 2021-05-15
  • 2021-08-24
相关资源
相似解决方案