Geo*_*kas 4 c optimization scheduling openmp
我有一个我想要优化的代码,应该在一系列线程ammount中运行.在我所使用的for循环中使用不同的调度技术运行一些测试后,我得出的结论是,当我只有一个线程并以其他方式引导时,最适合的是执行动态调度.这在openMP中甚至可能吗?
更确切地说,我希望能够执行以下操作:
if(omp_get_max_threads()>1)
#pragma omp parallel for .... scheduling(guided)
else
#pragma omp parallel for .... scheduling(dynamic)
for(.....){
...
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我会很感激.另一种解决方案是将for循环写入两次并使用if条件.但我想避免这种情况,如果有可能的话.
可能的解决方案是将循环复制到if语句中并将循环体"提取"到函数中以避免破坏DRY原则.然后,如果您将来需要更改此代码,则只有一个地方需要更改此代码:
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(....);
}
Run Code Online (Sandbox Code Playgroud)