【发布时间】:2016-12-14 09:57:15
【问题描述】:
如何正确并行化内循环:
int found = -1;
#pragma omp parallel for ordered schedule(dynamic, 1) shared(found)
for (long i = 0; i < big_number; ++i)
{
if( function() )
{
#pragma omp ordered
if( found == -1 )
{
found = i;
}
}
}
bool function()
{
for(int i =0; i < another_big_number; i++)
{
if( some_condition)
{
return true;
}
}
}
我无法发布整个代码,但我保留了大部分似乎对这个问题很有必要的部分。第一个循环的想法是找到函数返回 true 的最低迭代。
编辑:当然,任何关于改进并行化的想法都值得赞赏,但是,我的问题更多是关于如何使用外部 for 循环来提高 function() 本身的性能嵌套方法。
请注意,我知道折叠子句,但是我不能使用它(感谢不支持更高版本的 openMP 的 Visual Studio)。
任何改进整个并行循环的想法都值得赞赏。 :)
您认为通过在 function() 中并行化 for 循环会提高性能吗?
【问题讨论】:
标签: c++ multithreading parallel-processing openmp