Bonjour,
Je suis en train d'implémenter un algorithme de Monte Carlo, initialement en C, en C++. Malheureusement, les performances de mon code sont désastreuses, et un profiling avec Valgrind a révélé que je passe environ la moitié du temps à allouer et désallouer de la mémoire. Le nombre d'appels à malloc est absolument colossal (environ 23 000 000, contre 900 000 dans le code original dans une situation supposée produire les mêmes résultats).
J'ai donc tenté d'alléger mon code au maximum, notamment en faisant des saletés comme rendre tous les attributs de mes classes publics. J'ai gagné un peu, mais c'est largement insuffisant. L'une de mes fonctions génère la moitié de ces appels, mais je n'y crée strictement rien :
Quelqu'un aurait-il une idée de ce qui peut être la cause de mon problème ? Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 bool montecarlo_dots_pointInTrans(std::vector<double> point, Medium myMedium) { if ( myMedium.getMediumTypeIndex() == 0 ) { for (std::vector<Sphere>::iterator it = ((myMedium.m_SphereField).m_sphereList).begin(); it != ((myMedium.m_SphereField).m_sphereList).end(); ++it) { if ( distanceNorm2(point, (*it).m_center) < (*it).m_radius ) { return true; } } } return false; }
PS : je compile avec GCC 3.4.5.
Partager