Dans une question connexe, j'ai demandé l'avantage d'un système à double processeur en termes de doublement du cache L3.
Cependant, j'ai remarqué que la série de processeurs Xeon E5-2600 a exactement 2,5 Mo de cache L3 par cœur .
Cela m'amène à croire que le système d'exploitation réserve 2,5 Mo de cache L3 par cœur. Cependant, j'ai également l'impression contradictoire que le cache L3 est partagé entre tous les cœurs. Il y a étonnamment peu d'informations ou de discussions à ce sujet.
Ma principale préoccupation est de savoir si les applications d'arrière-plan à faible priorité peuvent "monopoliser" le cache L3 et ralentir les performances des applications de premier plan à priorité plus élevée. Deux problèmes de performances spécifiques que j'ai motiver cette question.
Compiler un certain programme C ++ nécessite 25 minutes sur mon système de développement actuel dans VS 2008, tandis que sur un autre système, il va beaucoup plus vite, ne nécessitant que 5 minutes sur VS 2008 avec des paramètres identiques - malgré le fait que j'ai un i7 presque haut de gamme. 970 CPU et RAM suffisante.
Les programmes prennent souvent jusqu'à 20 secondes pour s'exécuter (c'est-à-dire afficher leur fenêtre principale) sur mon système; et sur une note connexe, le shell Windows nécessite jusqu'à 10 secondes pour afficher le menu contextuel de l'Explorateur Windows (et les comportements associés prennent également environ aussi longtemps), malgré mes tentatives pour limiter les entrées du menu contextuel (il y a actuellement peut-être 10 supplémentaires au-delà le défaut).
Mon système est certainement chargé d'un très grand nombre d'applications que j'ai installées (et désinstallées) au fil des ans, mais je fais néanmoins de mon mieux pour rationaliser le système.
J'ai également de nombreuses applications d'arrière-plan à faible priorité en cours d'exécution; en particulier les logiciels de sauvegarde en nuage redondants tels que CrashPlan, qui s'additionnent généralement pour utiliser environ 25% de l'utilisation totale du processeur sur ce système à 12 cœurs à 6 cœurs.
J'obtiendrai un nouvel ordinateur. Je sais que je continuerai à exécuter de nombreuses applications en arrière-plan et à installer / désinstaller de nombreux programmes. Si je pensais qu'obtenir un système à double processeur qui double non seulement les cœurs mais le cache L3 aiderait à surmonter les horribles performances du compilateur C ++ et le ralentissement général du système, je le ferais avec plaisir.
Il ne devrait y avoir aucune raison pour laquelle un système haut de gamme fonctionne si lentement, même avec de nombreux programmes et applications d'arrière-plan. Mais si mes problèmes se produisent, quelle que soit la puissance du processeur et le cache L3 que je donne au système, simplement parce que j'ai tellement de programmes et d'applications d'arrière-plan installés et en cours d'exécution, je ne veux pas gaspiller 2500 dollars supplémentaires sur un double processeur système qui n'aidera pas à résoudre mon problème.
Toutes les suggestions, en particulier en ce qui concerne ma question de savoir si le cache L3 est partagé entre tous les cœurs (de sorte que les applications d'arrière-plan à faible priorité pourraient concevablement monopoliser le cache L3, ralentir les programmes à priorité plus élevée), ou plutôt s'il est lié à un individu noyaux, serait apprécié.
la source
Réponses:
Sur ces processeurs, chaque cœur physique possède son propre cache L2. Le cache L3 est partagé par tous les cœurs et est inclusif - c'est-à-dire que toutes les données qui résident dans le cache L2 de n'importe quel noyau résident également sur le cache L3.
Bien que cela puisse sembler un gaspillage d'espace L3, cela rend en fait le L3 inestimable pour accélérer les opérations de mémoire intercœur. Le principal objectif du cache L3 est de servir de standard et de zone de transit pour les cœurs. Par exemple, si un cœur souhaite savoir si une région de mémoire peut être mise en cache par un autre cœur, il peut vérifier le cache L3. Si les informations ont été traitées par un cœur et doivent être traitées par un autre cœur, elles les transmettent via le cache L3 plutôt que la mémoire hors puce plus lente. Au-delà de cela, son impact sur les performances n'est pas grand-chose sauf pour les algorithmes inhabituels - le cache L2 est assez grand pour les petites choses et le cache L3 est trop petit pour les grandes choses.
Ainsi, alors que chaque cœur a son propre cache L2 de 256 Ko et effectivement 256 Ko réservés dans le cache L3, le solde est partagé par tous les cœurs. Une activité moins importante dans d'autres cœurs peut nuire aux performances d'une tâche plus importante qui bénéficie de l'utilisation de l'espace L3. Mais pour les raisons que j'ai mentionnées, ce n'est généralement pas un effet significatif dans la pratique et cela ne vaut généralement pas la peine de s'inquiéter au-delà de l'optimisation des opérations de "données en masse" (telles que la compression et l'analyse) pour minimiser la pollution du cache. (Par exemple, en utilisant des opérations non temporelles.)
la source
Je crois comprendre que tous les niveaux de cache sont implémentés directement sur la puce et que L2 et L3 sont un dans la même (que seul Intel reconnaît la différence, AMD les combine.). Dans cet esprit, j'imagine que le cache L3 sur les processeurs n'est pas partagé entre les processeurs sur une carte mère à double connecteur. Cela est également logique en gardant à l'esprit qu'il est typique de voir des canaux de mémoire distincts pour la RAM par CPU.
Quelqu'un me corrige si je me trompe.
la source