如果我只有一个for循环并行化,并且如果我在并行化时使用#pragma omp critical,那是否会使它等同于串行代码?
答案 0 :(得分:1)
没有
critical
指令指定它所覆盖的代码一次由一个线程执行,但它(最终)将由遇到它的所有线程执行。
single
指令指定它所覆盖的代码只能由一个线程执行,但即使这与编译没有OpenMP的代码完全相同。 OpenMP对可以在并行区域内使用的编程结构施加了一些限制(例如没有跳出它们)。此外,在运行时,即使您并未实际并行运行任何代码,也可能会产生启动OpenMP的开销。