【发布时间】:2014-04-02 08:04:04
【问题描述】:
如果我只有一个用于并行化的 for 循环,并且如果我在并行化时使用 #pragma omp critical,这是否会使其等同于串行代码?
【问题讨论】:
标签: parallel-processing openmp
如果我只有一个用于并行化的 for 循环,并且如果我在并行化时使用 #pragma omp critical,这是否会使其等同于串行代码?
【问题讨论】:
标签: parallel-processing openmp
没有。
critical 指令指定它所覆盖的代码一次由一个线程执行,但它(最终)将由遇到它的所有线程执行。
single 指令指定它所涵盖的代码将仅由一个线程执行,但这与在没有 OpenMP 的情况下编译代码并不完全相同。 OpenMP 对可以在并行区域内使用的编程结构施加了一些限制(例如不能跳出它们)。此外,在运行时,即使您实际上没有并行运行任何代码,也可能会产生启动 OpenMP 的开销。
【讨论】: