我刚开始学习使用OpenMP tutorial by Blaise Barney at Lawrence Livermore National Laboratory的OpenMP并行编程。在那里,在许多地方指出,分支进出平行区域是非法的,但我至少没有一点线索为什么。
如果有人可以解释为什么会这样,那么熟悉OpenMP将会非常有帮助。谢谢!
答案 0 :(得分:2)
并行区域需要一些设置和拆卸才能正常运行。例如,进入该区域可能需要产生线程,而退出可能需要同步。编译器生成并行区域“中间”的材料,假设已经发生了这种设置和取下。
如果您要分支到并行区域,那么您已经跳过了设置,很难说实际会发生什么。即,线程在哪里?你是否会参加函数调用,例如,pthread应该为你调用?
如果你要分支,你甚至会在代码的非并行部分吗?如果所有线程都要执行此部分,该怎么办?竞争条件怎么样?
因为编译器必须假设你的行为才能正确生成并行代码,你会很好地遵守这些假设。