安全地并行化包含向量的for循环

时间:2017-11-22 05:27:38

标签: c++ openmp

在我的代码的一部分中,我有一个缓慢的for循环,我希望并行。但是,我对使用openmp并不是很有经验,我担心如果我将循环并行的方式有任何错误。任何有经验的人都可以告诉我这段代码中是否有任何错误?任何帮助都非常感谢。

#pragma omp parallel for num_threads(5)
for(int i = 0; i < N; i++)
            {
            double sum_sin = 0.0, sum_cos = 0.0;

            for (vector<int>::iterator it = box_neighbors[bx[i]].begin(); it != box_neighbors[bx[i]].end(); ++it)
                {
                for (vector<int>::iterator itp = box_particles[*it].begin(); itp != box_particles[*it].end(); ++itp)
                     {
                     if(dist(x[i], y[i], x[*itp], y[*itp], L) < R0_two)
                        {
                        sum_sin+= sin(theta[*itp]);
                        sum_cos+= cos(theta[*itp]);  
                        }
                     }
                }
            theta_new[i] = atan(sum_sin/sum_cos);
            if (sum_cos < 0 && sum_sin < 0) //theta should be in (-pi,pi)
                {
                theta_new[i]-= pi;
                }
            else if (sum_cos < 0 && sum_sin > 0)
                {
                theta_new[i] = pi + theta_new[i];
                }
            }

0 个答案:

没有答案