Skip to content

Suppression consignes superflues optimisation

GRASLAND Hadrien requested to merge fix-consiges-partie2 into master

J'ai eu le temps de tester mes optimisations complémentaires, et malheureusement elles n'ont pas autant d'effet que j'espérais, car le code n'est en réalité pas limité par le switch du std::variant. Il est limité par le trafic mémoire généré par le style fonctionnel.

Expériences réalisées pour arriver à cette conclusion:

  1. Supprimer le std::variant
  2. Utiliser le même RNG en objet qu'en fonctionnel
  3. Supprimer la récursion de l'évolution
  4. Remplacer l'ancienne version de la particule par la nouvelle dans le vecteur
  5. Muter le RNG en place
  6. Modifier les particules en place dans evolue()

De très loin, c'est 4 et 6 qui ont le plus d'effet, et il reste une différence de perf à la fin, ce qui signifie que C++11 ou pas, x = f( x ) est beaucoup moins efficace qu'une fonction qui mute x en place sur les compilateur actuels.

De plus, il reste une différence de perf, liée je pense au retour d'un std::optional. Clairement, remplir un vecteur en paramètre est plus efficace que tester un optionnel à chaque itération, sans doute du fait des branches supplémentaires et d'une convention d'appel pas optimale.

Merge request reports