Mar 012010
 

Dans bien des cas, les opérations mathematiques sont plus rapides que les sauts conditionnels
exemple avec ces deux fonctions.

double foo(bool a, double b)
{   return a*b;
}

double bar(bool a, double b)
{   if ( a == true ) return b;
    else return 0;
}

la fonction foo est plus rapide que bar, ou en tout cas est plus facile à optimiser si on l’apelle un grand nombre de fois.

exemple pour 10 millions d’appels sur un processeur Intel(R) Core(TM)2 6300@1.86GHz

//sans optimisation
FOO temps  : 0.191716 sec
FOO temps  : 0.191693 sec
BAR temps  : 0.208786 sec
BAR temps  : 0.208999 sec
ecart : 8%

//optimisation O1
FOO temps  : 0.123257 sec
FOO temps  : 0.122524 sec
BAR temps  : 0.130222 sec
BAR temps  : 0.129852 sec
ecart : 5%

//optimisation O2
FOO temps  : 0.024811 sec
FOO temps  : 0.025352 sec
BAR temps  : 0.072986 sec
BAR temps  : 0.073545 sec
ecart : 66%


Remarque importante concernant l’optimisation :
Dans un programme digne de ce nom, il est inutile d’optimiser ce qui n’en a pas besoin, surtout si ça nuit à la lisibilité du code.
Généralement, les gains de vitesse proviendront de la complexité de l’algorythme utilisé plutôt que de la qualité du codage.
Généralement 90% des gains de vitesse possibles peuvent être obtennus en optimisant moins de 10% du code.
Aussi, ne réservez ce genre d’astuces qu’a de très petites portions de code et vérifiez que vos modifications ont un impact positif et suffisant pour justifier leur emploi.

Sorry, the comment form is closed at this time.