У меня есть простой код реализации nbody. Короче говоря, я убрал лишний код в randomizeBodies()
.
typedef struct
{
float x;
float y;
float z;
float w;
} Point4;
n=16384;
Point4 positions [n];
Point4 velocities [n];
Point4 acceleration[n];
float E_pot [n];
#pragma acc declare device_resident(positions,velocities,
acceleration,E_pot,n)
void randomizeBodies()
{
float K=0;
#pragma acc data copy(K)
#pragma acc parallel loop reduction(+:K)
for(int i=0;i<n; ++i)
{
...
Point4 velocity=...;
K+=1;
K+=velocity.y*velocity.y;
K+=velocity.z*velocity.z;
velocities[i].x = velocity.x ;
velocities[i].y = velocity.y ;
velocities[i].z = velocity.z ;
}
printf("K=%f",K);
}
Здесь veleocity.x
, velocity.y
, velocity.z
являются плавающими. Я вызываю randomizeBodies()
в main()
и не понимаю, почему вывод пишет "K=0". Что-то не так с этим кодом?