La réponse à ces deux questions est oui. La seconde est plus simple, alors commençons par là - le principal avantage du cache L3 est qu'il est partagé. Le but de ce partage est de vous permettre d'utiliser plus de capacité de cache par un seul thread en cas de besoin que si vous deviez partager les mêmes ressources entre les cœurs au lieu de les partager. En d'autres termes, si tous les N coeurs sont actifs et équilibrés et que les données sont réparties uniformément (c'est-à-dire sans problème d'alignement), vous obtenez exactement le même partage (1/N) de LLC par cœur. Cependant, si un noyau a plus de mémoire cache, il peut se développer au détriment des autres qui sont actuellement moins liés au cache. Dans le cas extrême bien sûr, vous pouvez utiliser l'ensemble de la L3 par un seul processus, sans tenir compte des cas où l'architecture décide de conserver un sous-ensemble de la L3 dédié à une tâche (assez courante) ou un noyau (beaucoup moins commun). Comme pour la première question - si le L3 est inclusif (comme c'est le cas dans la plupart des processeurs courants, principalement pour un filtrage efficace de snoop), l'un des threads devient dominant et prend tout le contrôle, puis les données par les autres cœurs (les moins actifs) devront être expulsés vers la mémoire, et afin de renforcer l'inclusivité - ces lignes devront également être expulsées des L1 et L2 des coeurs respectifs. Si vous gardez les données là (rupture d'inclusivité), vous perdrez la cohérence.
Sur les systèmes où le L3 n'est pas inclus, ce comportement ne se produira pas, et le noyau le moins actif sera capable de conserver ses données en interne dans le L1/L2. Cependant, de tels systèmes peuvent utiliser un filtre snoop inclusif, qui peut souffrir du même problème (et des expulsions de force à nouveau) - en fonction du protocole de cache exact.