Bonsoir � toutes et tous,
J'ai �cris un petit programme en C++ pour simuler un mod�le, que je fais tourner en local pour le moment avec un vieux compilateur (Parall�lisation & le compilateur efficace & ex�cution sur cluster pr�vus par la suite). J'ai r�alis� un petit profilage et clairement ce qui prends beaucoup (j'insiste!) de temps de calcul est une simple op�ration de parcours d'un 'grand' (de l'ordre de 10^14 voire beaucoup plus) vecteur de double.
Ce vecteur 'double * L_positions' est index� lin�airement et contient des localisations spatiales (2D). Je cherche � trouver la localisation 'loc' qui est la plus proche de 'pos'.
Je r�p�te cette op�ration un grand nombre de fois (de l'ordre de 10^7 environ voire plus).
Je ne suis pas un expert en C++, mais voici ce que j'ai r�alis� pour le moment, que me conseilleriez-vous de faire en particulier pour en am�liorer la rapidit� d'ex�cution ?
avec:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 double min_dis = L_size *1.41421356237 +1; for(int i=0; i < n; i++) if(Tools().eucli_distance(pos->x ,pos->y, L_positions[i], L_positions[i+n]) < min_dis) { loc->x = L_positions[i]; loc->y = L_positions[i+n]; min_dis = Tools().eucli_distance(pos->x ,pos->y, L_positions[i], L_positions[i+n]); }
avec une structure
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 double Tools::eucli_distance(const double x1, const double y1, const double x2, const double y2) { return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); }
Merci par avance,
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 struct Point2D //Helper to stock 2D locations. { double x; double y; };
Bien � vous,
Grass
Partager