1.working-sharing 构件
(1)!$ OMP DO/ !$OMP END DO : 指令对使最近的do循环并行执行;
(2)当循环的每一次迭代都依赖于前一次迭代,也依赖于循环的迭代顺序。此时需要添加ORDERED声明强调顺序执行,如:
!$OMP DO ORDERED
DO I=1,1000
!$OMP ORDERED
A(I)=A(I-1)
!$OMP END ORDERED
ENDDO
!$OMP END DO
此时就不能展现出并行的优势了。
(3). !$OMP SECTIONS/!$OMP END SECTIONS: 允许对每个线程分派完全不同的任务,每段代码仅被一个线程执行一次,语法如下:
!$OMP SECTIONS
!$OMP SECTION
PRINT*, "HELLO"
!$OMP SECTION
PRINT*,"你好!"
!$OMP SECTION
PRINT*, "WAO"
!$OMP END SECTIONS
代码运行结果
(4).!$OMP SINGLE/!$OMP END SINGLE : 指令对包含的代码仅由其中一条线程执行,也就是最先到达!$OMP SINGLE 指令的线程。
(5). !$OMP WORKSHARE/!$OMP END WORKSHARE : 将任务分解为工作单元,并分派给每个线程。
2.Combined parallel work-sharing 构件
指定仅包含一个work-sharing 构件的并行区域的捷径,与!$OMP PARALLEL/!$OMP END PARALLEL 指令中的单一work-sharing 构件的行为是完全一样的,它的存在是为了在OpenMp-implementation 和 OpenMp指令同时出现时,降低冗余开销。
(1)!$OMP PARALLEL DO/!$OMP END PARALLEL DO : 指定一个包含单一!$OMP DO/!$OMP END DO指令的并行区域的快捷方式。
(2)!$OMP PARALLEL SECTIONS/!$OMP END PARALLEL SECTIONS
(3)!$OMP PARALLEL WORKSHARE/!$OMP END PARALLEL WORKSHARE









网友评论