OpenMP中的Schedule子句

时间:2010-06-16 17:23:15

标签: openmp

我有一段代码(它是应用程序的一部分),我正在尝试使用OpenMP进行优化,我正在尝试各种调度策略。在我的例子中,我注意到schedule(RUNTIME)子句比其他子句有优势(我没有指定chunk_size)。我有两个问题:

  1. 如果我没有指定chunk_size,schedule(DYNAMIC)schedule(GUIDED)之间是否存在差异?

  2. OpenMP如何确定存储在OMP_SCHEDULE变量中的默认特定于实现的调度?

  3. 我了解到如果没有指定调度方案,则默认使用schedule(STATIC)。因此,如果我不修改OMP_SCHEDULE变量,并在我的程序中使用schedule(RUNTIME),那么调度方案是否始终为schedule(STATIC),或者OpenMP是否有一些智能方法来动态设计安排策略并不时改变它?

1 个答案:

答案 0 :(得分:5)

  1. 是的,如果你没有指定块大小,那么DYNAMIC将使所有块的大小为1.但GUIDED将使最小块大小为1,但其他块大小将依赖于实现。也许你可以通过运行一些实验或阅读文档来弄清楚你的情况。

  2. 据我了解情况:如果未设置环境变量OMP_SCHEDULE,则运行时调度与实现有关。我认为,如果没有为每次执行该计划选择相同的时间表,那将是非常奇怪的。我不认为OpenMP是一组编译时指令,它可以了解程序的运行时性能并根据这些信息选择计划。