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