根据条件选择 OpenMP 编译指示

2024-01-01

我有一个想要优化的代码,它应该在各种线程中运行。在我的 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(使用前将#替换为@)

根据条件选择 OpenMP 编译指示 的相关文章

随机推荐