我有一个for循环,可以根据条件使用schedule(static)
或schedule(dynamic, 10)
执行。目前,我的代码是不是DRY(不要重复自己)够了,以适应以前的功能它具有以下的重复:openMP条件编译指示“if else”
boolean isDynamic; //can be true or false
if(isDynamic){
#pragma omp parallel for num_threads(thread_count) default(shared) private(...) schedule(dynamic, 10)
for(...){
//for code inside
}
}else{
#pragma omp parallel for num_threads(thread_count) default(shared) private(...) schedule(static)
for(...){
//SAME for code inside, in fact, this is the EXACT same for as before
}
}
阅读这些线程后,我注意到的OpenMP有#if(expression)
编译:
- OpenMP: conditional use of #pragma
- http://msdn.microsoft.com/en-us/library/5187hzke.aspx
- Choose OpenMP pragma according to condition
- Conditional "pragma omp"
- http://openmp.org/mp-documents/ntu-vanderpas.pdf
不过,虽然我看到很多人与我的问题,似乎缺少一个通用的解决方案。最好的解决方案是将for循环的主体转换为函数,然后调用函数,但这种解决方案对我来说不够好。
所以我想知道,OpenMP是否有#if(expression) else
类型的编译? 喜欢的东西:
#if(isDynamic)pragma omp parallel for num_threads(thread_count) default(shared)
private(...) schedule(dynamic, 10)
else
pragma omp parallel for num_threads(thread_count) default(shared)
private(...) schedule(static)
还是我不得不把我的循环体成一个单独的函数,并调用它的方式?
我假设你正在讨论这个建议(http://stackoverflow.com/questions/4085595/conditional-pragma-omp/4087196#4087196)。 Tbh,我认为即使编译,OMP_FOR也没有定义。至于OMP_SCHEDULE去,我不知道它。我会试着环顾四周,看看我能找到什么,thx! – 2013-03-19 17:43:56