Compilateurs

Quel est le principal effet du déroulage de boucle (loop unrolling) ?

  1. ALe coût des tests de comptage et des branchements diminue, et les instructions sont plus faciles à réordonner
  2. BLe corps de la boucle se réduit à une seule copie et le code du programme diminue
  3. CLa boucle est extraite en fonction pour pouvoir être appelée ailleurs
Afficher la réponse et l'explication

Réponse : A. Le coût des tests de comptage et des branchements diminue, et les instructions sont plus faciles à réordonner

Le déroulage de boucle recopie par exemple quatre fois le corps de la boucle et divise par quatre le nombre d'itérations. Les instructions de test et de branchement diminuent, et les instructions des corps recopiés peuvent être combinées et réordonnées, ce qui permet de mieux masquer les latences des opérations. En contrepartie, le code grossit et peut saturer le cache d'instructions. Un corps réduit à une copie avec un code plus petit décrit l'inverse, et l'extraction de la boucle en fonction est une autre transformation.

S'entraîner sur ce thème Retour au thème

Autres questions sur Compilateurs

  1. Dans la boucle ci-dessus, quel calcul est concerné par le déplacement d'expression invariante de boucle (sortie de la boucle) ? (x et y ne sont pas modifiés dans la boucle)
  2. Dans la boucle ci-dessus, quelle transformation correspond à la réduction de force appliquée au calcul d'indice i * 4 ?
  3. Quelle est la principale raison pour laquelle la boucle ci-dessus est difficile à vectoriser avec des instructions SIMD ?
  4. Dans la fonction ci-dessus, pourquoi le compilateur ne peut-il pas, en l'état, sortir de la boucle la lecture de *b ?
  5. Pour l'allocation de registres par coloration du graphe d'interférence, quelle combinaison de ce que représentent nœuds et arêtes est correcte ?

Comparatifs sur ce thème