在OpenMP中,当您未指定任何循环迭代策略时(在代码pragma中或通过环境变量OMP_SCHEDULE),specs(第2.3.2节)明确指出默认循环迭代策略是实现 - 定义和实现可能会也可能不会暴露它。
是否有解决方法来获取此政策?为了明确,我想得到规范中定义的内部控制变量 def-sched-var 的值。
我在POWER8架构上使用GCC 4.9和OpenMP 4.0。
答案 0 :(得分:-1)
首先,我从未见过任何默认调度类型不是static
的实现,但这并不意味着它们都默认使用静态。
但是,从您的评论中,我推断您要在代码的性能和使用的调度类型之间建立关联。
您可以使用各种类型的调度(即静态,动态和引导)来运行代码。这将告诉您性能如何随调度策略而变化。也许这会马上告诉你一些东西,但我会尝试不同的东西,比如查看每个并行循环并测量其性能。发布主循环,以便我们可以告诉您是否还有其他内容。
简而言之,我怀疑改变调度类型会快速解决糟糕的性能问题。