有没有办法改变 schedule 输入一个 pragma omp for 循环,使用 C 中的函数?我试图做 setenv("OMP_SCHEDULE", "guided", 1); 在并行语句之前,但我不完全确定它是否有效,因为我从代码中获得的时间非常相似。我想做的是使用 for 循环更改计划类型以比较时间,给出 dynamic, auto , ETC。作为字符串中的 setenv 功能。

有帮助吗?

解决方案

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

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

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

让我引用赫里斯托·伊利耶夫的话,因为他已经在这里说得最好了开放MP:对于时间表

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top