我有一个大型的C ++项目(Windows VC ++ 13),其中我有一个代价高昂的循环。循环是昂贵的,因为一个语句(这是另一个函数调用)非常昂贵。我想让那一行平行。我的意思是,我不希望每个人都等到完成。来到那一行,我想把它作为一个单独的线程旋转。迭代结束我希望所有线程都加入,然后我想继续执行。那可能吗?我正在解决的问题的简化版本是,
for(int i =0 ; i<limit; i++)
{
//some processing and getting some value into a variable say x
<value to use> += <costly function which taken in x as parameter>
//some more processing
}
我想要做的是,当它遇到调用代价高昂的函数的行时,我希望它能脱离一个线程。在循环结束时,我会等待加入所有线程并继续执行。我显然不能在openMP中为循环执行parallel for
,因为这会搞砸x的计算并将相同的x发送给函数的多个调用。我也更喜欢使用OpenMP。有人可以帮忙吗?