вот код из #1899432
Предлагайте ваши варианты по оптимизации.
-----------------------------------------
void calcParticles()
{
	#ifdef USE_OPENMP
#pragma omp parallel for
	#endif
	for (int i = 0; i < pVecSz; i++)
	{
		Particle &p = particleVec[i];
		float sqrs = sqrt((X-p.x)*(X-p.x)+(Y-p.y)*(Y-p.y)+(Z-p.z)*(Z-p.z)	);
		 float f = G*((p.M*M)/sqrt(rs));
		float f = G*((p.M*M)/1.0);
		float a = f/p.M;
		float cosx = (X-p.x)/sqrs;
		float cosy = (Y-p.y)/sqrs;
		float cosz = (Z-p.z)/sqrs;
		float ax = a*cosx;
		float ay = a*cosy;
		float az = a*cosz;
		p.vx += ax*1/invFPS;
		p.vy += ay*1/invFPS;
		p.vz += az*1/invFPS;
		p.x += p.vx;
		p.y += p.vy;
		p.z += p.vz;
	}	
}
------------------------------------------
Сам думаю:
1. Вынести за пределы цикла:
    float f = G*((p.M*M)/1.0);
    float a = f/p.M;
2. Заюзать pthreads (вдруг полущ будет)
3. Заюзать SSE3 для извлечения квадратного корня и подсчетса направляющих косинусов.
