Déroulage de boucle

Définition, exemples et bonnes pratiques

À retenir

  • Réduit le nombre de vérifications de la condition de sortie de boucle.
  • Améliore l'utilisation du processeur en lui donnant plus d'instructions à traiter d'un coup.
  • Augmente légèrement la taille du programme final.

Le déroulage de boucle est une technique d'optimisation qui consiste à réduire le nombre de répétitions d'une boucle en effectuant plusieurs opérations à chaque passage. Imaginez que vous deviez monter 10 marches : au lieu de lever le pied 10 fois (une marche à la fois), vous montez deux marches par deux marches pour arriver plus vite en haut en faisant moins de mouvements de contrôle.

Étymologie

Traduction directe de l'anglais loop unrolling ou loop unwinding. Le terme illustre l'idée de mettre à plat (dérouler) une structure circulaire pour la transformer en une suite d'instructions linéaires.

Exemples d'usage

  • Au lieu d'une boucle for qui additionne 100 nombres un par un, on crée une boucle qui additionne les nombres 4 par 4 (25 passages au lieu de 100).
  • Remplacer une petite boucle de 3 itérations par l'écriture explicite des 3 lignes de code correspondantes.

Cas d'usage

On utilise cette technique dans le développement de jeux vidéo, le traitement de signal, l'intelligence artificielle ou tout domaine nécessitant une vitesse d'exécution maximale. Elle intervient souvent lors de la phase de compilation du code source.

Bonnes pratiques

La règle d'or est de laisser le compilateur s'en occuper. Dérouler manuellement une boucle rend le code difficile à lire et peut saturer la mémoire cache de l'ordinateur, ce qui produirait l'effet inverse de celui recherché en ralentissant le programme.

Synonymes

expansion de boucle loop unrolling

Antonymes

factorisation boucle compacte

Conseil

Si vous optimisez du code, ne le faites jamais au hasard. Utilisez un outil de mesure (profiler) pour vérifier si une boucle est réellement un goulot d'étranglement avant de tenter de la dérouler.

Questions fréquentes

Pourquoi le code va-t-il plus vite ?

Parce que le processeur perd moins de temps à vérifier si la boucle est finie et à 'sauter' au début du bloc d'instructions.

Est-ce risqué ?

Le risque principal est le 'code bloat' (gonflement du code), qui peut rendre le logiciel plus gourmand en mémoire vive.