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 : 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:
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));
}
avec une structure
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
struct Point2D          //Helper to stock 2D locations.
{ double x; double y; };
Merci par avance,

Bien � vous,

Grass