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