Micro-optimisation

L'ensemble des modifications locales du code dans le but de persuader le compilateur de générer du code un peu plus efficace s'appelle la micro-optimisation. Elle n'est pas souvent rentable et ceci pour plusieurs raisons.

D'abord, la micro-optimisation a tendance à rendre le code considérablement moins lisible et donc moins maintenable. Elle peut donc conduire à un logiciel dont le coût de développement et de maintenance est très élévé. De plus, les tentatives de micro-optimisation sont souvent inefficaces. En effet la micro-optimisation nécessite une connaissance assez profonde de la chaîne langage-compilateur-processeur, connaissance que la plupart des programmeurs d'aujourd'hui ne possèdent pas. Le plus souvent, les programmeurs sous-estiment les capacités du compilateur (et des techniques de compilation en général) et en viennent à effecter des transformations du code source que le compilateur sait faire et aurait fait automatiquement de lui-même. Le résultat est un code aussi rapide mais moins lisible !

Le premier réflexe doit être de chercher d'abord un algorithme performant avant de s'attaquer, éventuellement, à la micro-optimisation. Si on a choisi d'utiliser un mauvais algorithme alors il est probable qu'on en viendra à la micro-optimisation. Par exemple, on trouve souvent la situation paradoxale suivante : on micro-optimise un code dont la complexité est $O(n^2)$ ou $O(n \texttt{log} n)$ alors qu'il existe en fait un algorithme linéaire.

Finalement, la micro-optimisation est spécifique à un couple compilateur-processeur. Souvent, le résultat est sous-optimal sur un couple différent. Un logiciel portable doit fonctionner avec une multitude de compilateurs et une multitude de processeurs. Même un logiciel non portable peut être concerné si une nouvelle génération de processeur ou une nouvelle version du compilateur est utilisée.

Irene DURAND
2011-10-14