我有一个循环,我试图与OpenMP并行化。我在代码中的构造是这个,
for(int x = 0; x < <condition>; x++)
{
aggregate += <return value from very costly function(param1)>;
}
我正在尝试将其并行化,如下所示,
#pragma omp parallel for
for(int x = 0; x < <condition>; x++)
{
#pragma omp parallel private(param1)
aggregate += <return value from very costly function(param1)>;
}
如果因为所有线程使用相同的内存而不使param1成为私有,它会崩溃。但是我总是得到聚合的值为0.我明白这是因为我没有减少它来计算每个线程的本地计算的聚合值。我对此感到困惑,我该怎么做才能总结线程中的所有值?
这是在Visual Studio 13 C ++中。