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