在我的代码的一部分中,我有一个缓慢的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];
}
}