1

我刚刚开始学习使用 OpenMP 进行并行编程,学习的是劳伦斯利弗莫尔国家实验室的 Blaise Barney 的 OpenMP 教程。在那里,在许多地方,都规定分支进出平行区域是非法的,但我至少不知道为什么。

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

4

1 回答 1

2

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

如果你要分支到一个平行区域,那么你已经跳过了设置,很难说实际会发生什么。即,线程在哪里?你甚至会在函数调用中,例如 pthread 应该为你调用吗?

如果您要进行分支,您甚至会在代码的非并行部分中吗?如果所有线程都执行这个部分怎么办?比赛条件呢?

因此,因为编译器必须对您的行为做出假设才能正确生成并行代码,所以最好遵守这些假设。

于 2013-06-30T20:30:49.993 回答