병렬화의 OpenMP를 사용 :C++ 코드 나는 아래의 OpenMP를 사용하여 내 C++ 코드를 병렬 근래
이....//some code
double S_theta = 0.0, S_x = 0.0, S_y = 0.0;
#pragma omp parallel for private(dx,dy,theta_new) reduction(+ : S_x,S_y,S_theta)
for(int j = 0; j < N; j++)
{
if (j==i) continue;
double delta_x = x[i]-x[j],
for(int ky = -1; ky<= 1; ky++)
{
for(int kx = -1; kx<= 1; kx++)
{
if (r_ij_square > l0_two)
{
double r_ij = sqrt(r_ij_square);
r_x_ij/= r_ij;
r_y_ij/= r_ij;
double rdote = r_x_ij * e_x[j] + r_y_ij * e_y[j];
S_theta += e_dot_e * (e_cross_e - rdote * (e_x[i] * r_y_ij - e_y[i] * r_x_ij))/(r_ij_square * r_ij);
double S = rdote /r_ij_square;
S_x += r_x_ij * S;
S_y += r_y_ij * S;
}
}
}
double zeta = -eta/2.0 ;
theta_new[i] += zeta + dt * dlthet;
}
....//some code
하지만 결과는 내가 그것을 실행할 때마다 변경을! 이 줄을 제거하면
#pragma omp parallel for reduction(+ : S_x,S_y,S_theta)
결과가 다른 실행에서 동일합니다. 내 코드에 어떤 문제가 있습니까?
'S'란 무엇입니까? 'S_x','S_y','S_theta'가 제대로 초기화되어 있습니까? – 1201ProgramAlarm
나는 그들을 지금 추가했다. @ 1201ProgramAlarm –
'}'를 놓치지 않았다면, 들여 쓰기가 매우 잘못된 것이다. 먼저 수정하십시오. –