Optimisation: lecture itérative d'un grand vecteur
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 ?
Code:
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:
Code:
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));
} |
avec une structure
Code:
1 2
| struct Point2D //Helper to stock 2D locations.
{ double x; double y; }; |
Merci par avance,
Bien à vous,
Grass