Optimisation
| Quand | Ou | Comment |
Quand optimiser ?
"premature optimization is the root of all evil"
Dr. Donald Knuth
REGLE A RESPECTER OBLIGATOIREMENT :
Optimiser un programme n´a lieu qu´en dernier recours, une fois que le programme s´exécute et donne le résultat escompte.
Ensuite SEULEMENT, et SEULEMENT SI la vitesse est un problème, optimiser, mais SEULEMENT le code qui en a réellement besoin.
Corollaire 1: Optimiser le code qui ne marche pas est inutile.
Corollaire 2: Optimiser le code qui ne pose pas de problème de vitesse est inutile.
Axiome de base des cette règle : Un code optimise est beaucoup, beaucoup plus dur a maintenir. Et en general c´est la source des bogues.
Ou optimiser ?
Détecter la lenteur
D´abord et avant tout, il faut trouver les bouts de code et les goulot d´étranglement du code, pour savoir ce qu´il faut optimiser
Plusieurs solutions:
- D´abord ne pas etre en mode de Debug (assertions, verifications memoires)
- Utiliser des outils de profiling : oprof, dynaprof, Vtune, CodeAnalyst, gcc -pg, gprof, valgrind-cachegrind, etc.
- Utiliser des bancs de mesures en appelant les fonctions suspecte un grand nombre de fois en mesurant le temps global avec des outils systèmes (time)
- Utiliser des Timers ultra-précis pour compter les temps d´exécution. (GetTickCount() n´est précis qu´a 10 ms près, mieux vaut utiliser gettimeofday() sous linux, et QueryPerformanceCounter pour Win32)
Comment Optimiser ?
Quel type d´optimisation appliquer?
En premier lieu, il faut apporter le plus grand soin aux algorithmes choisi, utiliser des implentations de référence ou se plonger dans les livres de D. Knuth. Au besoin, il faut pouvoir prouver mathématiquement son choix. Vérifier son analyse du probleme et l´adéquation de sa solution.
Il faut ensuite trouver et definir les structures adaptees (conteneurs).
Puis il faut tester les optimisation du compilateur.
Le codage optimisé pour inconvénient principal qu´il défigure le code source, rendant beaucoup plus difficile sa lecture et sa maintenance.
La "règle" est que l´on peut peux gagner un facteur 1000 avec un bon algorithme et au maximum un facteur 10 avec du codage optimisé.
Connaitre ses Opérations Lentes
- Ouvrir un fichier
- Écrire un fichier (particulièrement dans un ordre non-linéaire),
- Lire beaucoup de données (particulièrement dans un ordre non-linéaire),
- Créer un nouveau processus,
- Rechercher,
- Trier,
- Opérations globales sur des tableaux
- Copier des gros paquets de données
- Écrire directement a l´écran.
- Opérations multiples et répétées sur des variables globales ou statiques
Et ses Opérations Rapides
- Assigner une variable
- ajouter des entiers
- de-référencer un pointeur