1

有没有办法使用 C 中的函数来更改循环中的schedule类型?pragma omp for我试图setenv("OMP_SCHEDULE", "guided", 1);在并行语句之前做,但我不完全确定它是否有效,因为我从代码中得到的时间非常相似。我想要做的是使用for循环更改计划类型来比较时间,给予dynamicauto等作为setenv函数中的字符串。

4

2 回答 2

2

您可以使用 schedule(runtime) 并设置 OMP_SCHEDULE。

来自https://computing.llnl.gov/tutorials/openMP/

RUNTIME 环境变量 OMP_SCHEDULE 将调度决策推迟到运行时。为该子句指定块大小是非法的。

让我引用 Hristo Iliev 的话,因为他已经在这里说得最好了 OpenMP: for schedule

由于预编译代码可以在各种平台上运行,如果最终用户可以控制调度,那就太好了。这就是 OpenMP 提供特殊 schedule(runtime) 子句的原因。对于运行时调度,类型取自环境变量 OMP_SCHEDULE 的内容。这允许在不重新编译应用程序的情况下测试不同的调度类型,并且还允许最终用户针对他或她的平台进行微调。

于 2014-02-28T08:38:47.250 回答
0

没有标准的方法可以做到这一点,但如果您使用的是英特尔的库,则可以使用该kmp_set_defaults()扩展。这需要一个由字符分隔的选项字符串|,并覆盖默认的 OpenMP 行为。在你的例子中,kmp_set_defaults("OMP_SCHEDULE=guided")应该完成你想要的。

于 2014-02-28T02:52:47.827 回答