in

Quand le cache d’un processeur est-il vidé dans la mémoire principale?

Si vous commencez tout juste à apprendre comment fonctionnent les processeurs multicœurs, la mise en cache, la cohérence du cache et la mémoire, cela peut sembler un peu déroutant au début. Dans cet esprit, l’article de questions-réponses sur les superutilisateurs d’aujourd’hui a des réponses à la question d’un lecteur curieux.

La question

Le lecteur SuperUser CarmeloS veut savoir quand le cache d’un CPU est rincé dans la mémoire principale:

Si j’ai un processeur avec deux cœurs et que chaque cœur a son propre cache L1, est-il possible que Core1 et Core2 mettent en cache la même partie de la mémoire en même temps? Si c’est possible, quelle sera la valeur de la mémoire principale si Core1 et Core2 ont modifié leurs valeurs dans le cache?

Quand le cache d’un processeur est-il renvoyé dans la mémoire principale?

La réponse

Les contributeurs SuperUser David Schwartz, sleske et Kimberly W ont la réponse pour nous. Tout d’abord, David Schwartz:

Si j’ai un processeur avec deux cœurs et que chaque cœur a son propre cache L1, est-il possible que Core1 et Core2 mettent en cache la même partie de la mémoire en même temps?

Oui, les performances seraient terribles si ce n’était pas le cas. Considérez deux threads exécutant le même code. Vous voulez ce code dans les deux caches L1.

Si c’est possible, quelle sera la valeur de la mémoire principale si Core1 et Core2 ont modifié leurs valeurs dans le cache?

L’ancienne valeur sera dans la mémoire principale, ce qui n’aura pas d’importance car aucun des cœurs ne la lira. Avant d’éjecter une valeur modifiée du cache, elle doit être écrite en mémoire. En règle générale, une variante du Protocole MESI est utilisé. Dans l’implémentation traditionnelle de MESI, si une valeur est modifiée dans un cache, elle ne peut pas être présente du tout dans un autre cache à ce même niveau.

Suivi de la réponse de sleske:

Oui, avoir deux caches cache la même région mémoire peut se produire et c’est en fait un problème qui se produit souvent dans la pratique. Il existe différentes solutions, par exemple:

  • Les deux caches peuvent communiquer pour s’assurer qu’ils ne sont pas en désaccord
  • Vous pouvez avoir une sorte de superviseur qui surveille tous les caches et les met à jour en conséquence
  • Chaque processeur surveille les zones de mémoire qu’il a mises en cache, et lorsqu’il détecte une écriture, il jette son cache (désormais invalide)

Le problème est appelé cohérence du cache et le Article Wikipédia sur le sujet a une belle vue d’ensemble du problème et des solutions possibles.

Et notre réponse finale de Kimberly W:

Pour répondre à la question dans le titre de votre message, cela dépend du protocole de mise en cache. S’il s’agit d’une réécriture, le cache ne sera renvoyé dans la mémoire principale que lorsque le contrôleur de cache n’a pas d’autre choix que de placer un nouveau bloc de cache dans l’espace déjà occupé. Le bloc qui occupait auparavant l’espace est supprimé et sa valeur est réécrite dans la mémoire principale.

L’autre protocole est l’écriture directe. Dans ce cas, à chaque fois que le bloc de cache est écrit au niveau, le bloc correspondant au niveau est mis à jour. Son concept est similaire à celui de remplir un formulaire avec du papier carbone en dessous; tout ce que vous écrivez en haut est copié sur la feuille ci-dessous. C’est plus lent car cela implique évidemment plus d’opérations d’écriture, mais les valeurs entre les caches sont plus cohérentes. Dans le schéma de réécriture, seul le cache de niveau le plus élevé aurait la valeur la plus à jour pour un bloc de mémoire particulier.

Avez-vous quelque chose à ajouter à l’explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d’autres utilisateurs de Stack Exchange férus de technologie? Consultez le fil de discussion complet ici.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Pourquoi votre Kodi Box ne fonctionne pas et quoi utiliser à la place

Pourquoi votre Kodi Box ne fonctionne pas et quoi utiliser à la place

7 Fonctionnalités du gestionnaire de fichiers Ubuntu que vous n'avez peut-être pas remarquées

7 Fonctionnalités du gestionnaire de fichiers Ubuntu que vous n’avez peut-être pas remarquées