Page d'accueil » comment » Quand le cache d'un processeur est-il vidé de nouveau dans la mémoire principale?

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

    Si vous commencez tout juste à apprendre comment fonctionnent les processeurs multicœurs, la mise en cache, la cohérence de la mémoire cache et la mémoire, cela peut sembler un peu déroutant au début. En gardant cela à l'esprit, le post de SuperUser d'aujourd'hui répond aux questions d'un lecteur curieux.

    La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..

    La question

    Le lecteur superutilisateur CarmeloS souhaite savoir quand le cache d'un processeur est vidé 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 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 vidé dans la mémoire principale??

    La réponse

    Les contributeurs du super-utilisateur David Schwartz, Sleske et Kimberly W ont la solution 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 mémoire en même temps??

    Oui, la performance serait terrible si ce n'était pas le cas. Considérons deux threads exécutant le même code. Vous voulez ce code dans les deux caches L1.

    Si 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 importera peu puisque ni le noyau ne la lira. Avant d'éjecter une valeur modifiée du cache, celle-ci doit être écrite en mémoire. En règle générale, certaines variantes du protocole MESI sont utilisées. Dans l'implémentation traditionnelle de MESI, si une valeur est modifiée dans un cache, elle ne peut pas être présente dans aucun autre cache au même niveau..

    Suivi de la réponse de sleske:

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

    • Les deux caches peuvent communiquer pour s’assurer qu’elles 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 (maintenant non valide).

    Le problème s'appelle la cohérence du cache et l'article de Wikipedia sur le sujet donne un bon aperçu 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 écriture en retour, le cache n'est vidé 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 précédemment l’espace est supprimé et sa valeur est écrite dans la mémoire principale..

    L'autre protocole est en écriture. Dans ce cas, chaque fois que le bloc de cache est écrit au niveau n, le bloc correspondant au niveau n + 1 Est mis à jour. Son concept est similaire à celui de remplir un formulaire avec du papier carbone en dessous; tout ce que vous écrivez dessus est copié sur la feuille ci-dessous. Ceci 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 récente pour un bloc de mémoire particulier.


    Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.

    Crédit d'image: Lemsipmatt (Flickr)