当前位置:  开发笔记 > 编程语言 > 正文

OpenMP:foo()和bar()之间有什么区别

如何解决《OpenMP:foo()和bar()之间有什么区别》经验,为你挑选了1个好方法。



1> vladr..:

他们并不等同.

foo()将按fprintf顺序执行这两个(部分). bar()可以并行执行它们.

有关详尽的参考,您可以参考IBM编译器文档.

本质上,在foo()单个工作线程处理的情况下first part,然后完成并与主线程重新同步(barrier顺便说一下,隐含在single构造的末尾.)新的工作线程然后处理second part,完成和重新同步与主线程.

在这种情况下bar(),一个单独的工作线程处理每个部分(第一部分first part,是一个隐式部分.)工作线程并行完成工作.

#pragma omp parallel

omp parallel指令显式指示编译器并行化所选的代码块.当遇到并行区域时,形成一个逻辑的线程团队.除了工作共享结构之外,团队中的每个线程都执行并行区域内的所有语句.工作共享结构中的工作分布在团队中的线程中.

在循环可以并行化之前,循环迭代必须是独立的.在并行化语句块的末尾存在隐含的障碍.

嵌套的并行区域始终是序列化的.

#pragma omp单身

omp single指令标识必须由单个可用线程运行的代码段.

除非指定了nowait子句,否则在并行化语句块的末尾存在隐含的障碍.

#pragma omp section,#pragma omp sections

omp sections指令在绑定到定义的并行区域的线程之间分配工作.

对于omp sections指令内的第一个程序代码段,omp section指令是可选的.以下段必须以omp section指令开头.所有omp节指令必须出现在与omp sections指令关联的程序源代码段的词法结构中.

当程序执行到达omp sections指令时,由以下omp section指令定义的程序段被分发用于在可用线程之间并行执行.除非指定了nowait子句,否则在与omp sections指令关联的较大程序区域的末尾隐式定义屏障.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有