Hiérarchie mémoire
Pourquoi la fusion des deux boucles ci-dessus en une seule (fusion de boucles) accélère-t-elle généralement le traitement lorsque N est grand ?
for (i = 0; i < N; i++) a[i] = b[i] * 2;
for (i = 0; i < N; i++) c[i] = a[i] + 1;
- ALa multiplication et l’addition sont regroupées en une seule instruction, ce qui divise par deux la quantité de calcul
- Ba[i] peut être utilisé juste après son écriture, ce qui évite de relire le tableau a depuis la mémoire principale
- CLe nombre d’itérations passe de N à 2N, ce qui remplit plus facilement le pipeline
Afficher la réponse et l'explication
Réponse : B. a[i] peut être utilisé juste après son écriture, ce qui évite de relire le tableau a depuis la mémoire principale
Avec des boucles séparées, si le tableau a écrit par la première boucle ne tient pas entièrement dans le cache, la deuxième boucle provoque des défauts en le relisant depuis le début. Après fusion, a[i] est utilisé dans la même itération, juste après son écriture ; la donnée est réutilisée tant qu’elle se trouve dans le cache ou un registre, et le trafic avec la mémoire principale diminue. La quantité de calcul ne change pas, et le nombre d’itérations passe de 2N à N.