为什么分支进入或离开并行区域是非法的?

时间:2013-06-30 20:19:02

标签: openmp

我刚开始学习使用OpenMP tutorial by Blaise Barney at Lawrence Livermore National Laboratory的OpenMP并行编程。在那里,在许多地方指出,分支进出平行区域是非法的,但我至少没有一点线索为什么。

如果有人可以解释为什么会这样,那么熟悉OpenMP将会非常有帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

并行区域需要一些设置和拆卸才能正常运行。例如,进入该区域可能需要产生线程,而退出可能需要同步。编译器生成并行区域“中间”的材料,假设已经发生了这种设置和取下。

如果您要分支到并行区域,那么您已经跳过了设置,很难说实际会发生什么。即,线程在哪里?你是否会参加函数调用,例如,pthread应该为你调用?

如果你要分支,你甚至会在代码的非并行部分吗?如果所有线程都要执行此部分,该怎么办?竞争条件怎么样?

因为编译器必须假设你的行为才能正确生成并行代码,会很好地遵守这些假设。