Hiérarchie mémoire

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]) ?

  1. ACause : la quantité de calcul ; remède : remplacer les flottants par des entiers
  2. BCause : les lectures sont dispersées ; remède : rendre contiguës uniquement les écritures
  3. CCause : la lecture ou l’écriture se fait par colonne ; remède : la transposition par blocs
Afficher la réponse et l'explication

Réponse : C. Cause : la lecture ou l’écriture se fait par colonne ; remède : la transposition par blocs

Dans une transposition, lire a par ligne revient à écrire b par colonne, et écrire b par ligne revient à lire a par colonne ; l’un des deux accès est forcément dispersé. On découpe donc la matrice en petits blocs tenant dans le cache et on transpose à l’intérieur de chaque bloc : les lignes chargées sont entièrement utilisées avant de passer à la suite, et les défauts diminuent fortement. Rendre contiguës uniquement les écritures ne fait que disperser les lectures, sans résoudre le fond du problème. Il ne s’agit pas non plus d’une question de quantité de calcul.

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

Autres questions sur Hiérarchie mémoire

  1. 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) ?
  2. Pourquoi faut-il comparer les caches selon le temps moyen d’accès mémoire, et pas seulement selon le taux de défauts ?
  3. 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 ?
  4. Quel est l’exemple le plus représentatif de la localité temporelle ?
  5. Parcourir le tableau à deux dimensions a[i][j] du langage C avec j dans la boucle interne, comme ci-dessus, est généralement plus rapide qu’avec i dans la boucle interne. Pour quelle raison ?

Comparatifs sur ce thème