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;
  1. ALa multiplication et l’addition sont regroupées en une seule instruction, ce qui divise par deux la quantité de calcul
  2. Ba[i] peut être utilisé juste après son écriture, ce qui évite de relire le tableau a depuis la mémoire principale
  3. 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.

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

Autres questions sur Hiérarchie mémoire

  1. Quelle combinaison de cause et de remède typique est correcte pour expliquer les nombreux défauts de cache lors de la transposition d’une grande matrice (b[j][i] = a[i][j]) ?
  2. Dans la hiérarchie mémoire d’un ordinateur classique, quelle propriété est vérifiée par les niveaux supérieurs (plus proches du CPU) ?
  3. Pourquoi faut-il comparer les caches selon le temps moyen d’accès mémoire, et pas seulement selon le taux de défauts ?
  4. Exécuter alternativement deux programmes sur le même cœur peut les rendre plus lents que s’ils étaient exécutés seuls. Quelle est l’explication la plus appropriée du point de vue du cache ?
  5. Quel est l’exemple le plus représentatif de la localité temporelle ?

Comparatifs sur ce thème