7

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

  1. 当我没有指定 chunk_size 时,schedule(DYNAMIC)和之间有区别schedule(GUIDED)吗?

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

我了解到,如果没有指定调度方案,则默认schedule(STATIC)使用。因此,如果我不修改OMP_SCHEDULE变量并schedule(RUNTIME)在我的程序中使用,调度方案会schedule(STATIC)一直存在,还是 OpenMP 有一些智能方法来动态设计调度策略并不时更改它?

4

1 回答 1

5
  1. 是的,如果您不指定块大小,那么 DYNAMIC 将使所有块的大小为 1。但 GUIDED 将使最小块大小为 1,但其他块大小将取决于实现。也许您可以通过运行一些实验或阅读文档来了解您的情况。

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

于 2010-06-18T17:28:57.000 回答