Oracle® Developer Studio 12.5:OpenMP API 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

3.1 OpenMP 执行模型

OpenMP 使用 fork-join(派生-连接)并行执行模型。线程遇到并行构造时,就会创建由其自身及其他一些额外(可能为零个)辅助线程组成的线程组。遇到并行构造的线程成为新组中的主线程。所有组成员都执行并行区域中的代码。如果某个线程完成了其在并行区域内的工作,它就会在并行区域末尾的隐式屏障处等待。当所有组成员都到达该屏障时,这些线程就可以离开该屏障了。主线程继续执行程序中并行构造之后的用户代码,而辅助线程则等待被召集加入到其他组。

OpenMP 并行区域之间可以互相嵌套。如果禁用嵌套并行操作,则执行嵌套并行区域的组仅由一个线程(遇到嵌套 parallel 构造的线程)组成。如果启用嵌套并行操作,则新组可以包含多个线程。

OpenMP 运行时库维护一个辅助线程池,该线程池可用于处理并行区域。当线程遇到并行构造并请求包含多个线程的线程组时,该线程将检查该池,从池中获取空闲线程,将其作为组的一部分。如果池中未包含足够数量的空闲线程,遇到该构造的线程获得的辅助线程可能会比它请求的要少。组完成执行并行区域时,辅助线程就会返回到池中。