我有一个想要优化的代码,它应该在各种线程中运行。在我的 for 循环中使用不同的调度技术运行一些测试后,我得出的结论是,最适合的方法是在只有一个线程时执行动态调度,否则进行引导。这在 openMP 中可能吗?
更准确地说,我希望能够执行以下操作:
if(omp_get_max_threads()>1)
#pragma omp parallel for .... scheduling(guided)
else
#pragma omp parallel for .... scheduling(dynamic)
for(.....){
...
}
如果有人可以帮助我,我将不胜感激。另一种解决方案是编写两次 for 循环并使用 if 条件。但如果可能的话,我想避免这种情况。
可能的解决方案是将循环复制到 if 语句中并将循环体“提取”到函数中以避免中断DRY http://en.wikipedia.org/wiki/Don't_repeat_yourself原则。那么以后如果需要修改这段代码的话,就只有一处需要修改了:
void foo(....)
{
...
}
if(omp_get_max_threads()>1)
{
#pragma omp parallel for .... scheduling(guided)
for (.....)
foo(....);
}
else
{
#pragma omp parallel for .... scheduling(dynamic)
for (.....)
foo(....);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)