Compilateurs
Dans la boucle ci-dessus, quelle transformation correspond à la réduction de force appliquée au calcul d'indice i * 4 ?
for (i = 0; i < n; i++)
sum += a[i * 4];
- ARemplacer i * 4 par une constante calculée à la compilation
- BDiviser par quatre le nombre d'itérations et recopier quatre fois le corps
- CIntroduire une autre variable et lui ajouter 4 à chaque itération
Afficher la réponse et l'explication
Réponse : C. Introduire une autre variable et lui ajouter 4 à chaque itération
La réduction de force remplace une opération coûteuse par une opération plus légère. Au lieu de calculer i * 4 par multiplication à chaque itération, on part de j = 0 et on fait j += 4 à chaque itération ; la multiplication devient une addition. La valeur changeant avec i, elle ne peut pas être remplacée par une constante. La multiplication par 4 peut aussi être remplacée par un décalage (i << 2), autre forme de réduction de force. La recopie du corps en quatre exemplaires est le déroulage de boucle.