2014-02-27 34 views
1

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

+1

使用schedule(运行时)并设置OMP_SCHEDULE。看到这个答案的最后一段http://stackoverflow.com/questions/10850155/openmp-for-schedule/10852852#10852852 –

回答

2

您可以使用schedule(运行时)并设置OMP_SCHEDULE。

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

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

且让我举里斯托·利维,因为他已经在这里说 OpenMP: for schedule

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

+0

是否日程安排(运行时)保证环境变量将被读取每次循环被调用,或运行时可能会在启动时读取一次变量? – pburka

0

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