« Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 25 :
On peut préciser le processeur de destination en configurant certains registres du IO-APIC, afin que celui-ci redirige la demande d'interruption d'un local APIC vers celui sélectionné. Cela se fait avec l'aide d'un registre de 64 bits nommé l'''Interrupt Command Register''. Pour simplifier le mécanisme complet, chaque processeur se voit attribuer un Id au démarrage qui permet de l'identifier (en fait, cet Id est attribué au local APIC de chaque processeur). Certains bits de ce registre permettent de préciser quel est le type de transfert : doit-on envoyer l'interruption au processeur émetteur, à tous les autres processeurs, à un processeur particulier. Dans le dernier cas, certains bits du registre permettent de préciser l'Id du processeur qui va devoir recevoir l'interruption. À charge de l'APIC de faire ce qu'il faut en fonction du contenu de ce registre.
 
==PartageLe partage des caches==
 
Quand on conçoit un processeur multicœur, il ne faut pas oublier ce qui arrive à la pièce maitresse de tout processeur actuel : le cache ! Il est possible d'utiliser des '''caches dédiés''', à savoir que chaque cœur possède son propre cache, ou bien de partager un cache entre plusieurs cœurs, ce qui donne un '''cache partagé'''. Ces deux méthodes ont des inconvénients et des avantages.
 
{|
|[[File:Caches dédiés.png|vignette|upright=1.25|Caches dédiés.]]
|[[File:Caches partagés.png|vignette|upright=2.01|Caches partagés.]]
|}
 
===CachesLes dédiésavantages et inconvénients des caches dédiés/partagés===
 
Avant toute chose, il faut savoir que laLa quantité de mémoire cache que l'on peut placer surdans uneun surface donnéeprocesseur est limitée :par on ne peut pas mettrele autantnombre de cache que l'on veut dans un processeurtransistors. Et le cache prend unebeaucoup très grandede place, dansprès notre processeur : environde la moitié, voire 60% des circuits de notredu processeur servent à intégrer la mémoire cache ! Autant vous dire que le cache est une ressource précieuse. Et cela pose un problème pour les architectures qui utilisent des caches séparés pour chaque cœur : ceux-ci seront individuellement assez petits. Le principal défaut des architectures à cache dédiés vient de là. Si on exécute un programme prévu pour n'utiliser qu'un seul cœur, celui-ci n'aura accès qu'à unsavoir seuldes cachecaches :individuellement celui dédié au cœur sur lequel il va s’exécuter. Alors qu'est-ce qui est le mieux : plein de caches plustrès petits, ou un unique cache aussi gros que la sommevient de touslà. lesEn caches séparés ? Vu que la quantité de cache est limitéeconséquence, on peut se demander s'il vaut mieux un petit cache pour chaque processeur ou un gros cache partagé. UnAlors '''cache partagé''' répartit le cache de manière optimale :certes, un programme gourmand peut utiliser autant degros cache qu'ilpartagé veut,sera laissantplus juste celent qu'il faut à l'autre programme. Par contre, plusieurs programmes peuvent entrer en compétition pour leun cache, quedédié ceplus soit pour y placer des données ou pour les accès mémoirepetits. De plus,Mais les caches partagés ont undes tempsavantages d'accèsà nettement plusfaire élevévaloir.
 
Un cache partagé répartit le cache de manière optimale : un programme gourmand peut utiliser autant de cache qu'il veut, laissant juste ce qu'il faut à l'autre programme. Par contre, plusieurs programmes peuvent entrer en compétition pour le cache, que ce soit pour y placer des données ou pour les accès mémoire. De plus, les caches partagés ont un temps d'accès nettement plus élevé.
[[File:Cache partagé contre cache dédié.png|centre|Cache partagé contre cache dédié]]
 
[[File:Cache partagé contre cache dédié.png|centre|vignette|upright=2|Cache partagé contre cache dédié]]
Qui plus est, si une donnée est utilisée par deux cœurs et est présente dans le cache, les processeurs à caches partagé ont un gros avantage. Sur un processeur à cache séparé, si une donnée présente dans plusieurs caches est modifiée, il faudra gérer la mise à jour des caches (nous détaillerons ce point plus tard). Avec les processeurs à cache partagé, il y a juste à mettre à jour la donnée dans le cache unique, et puis c'est tout : pas de mise à jour des données dans les caches des autres cœurs, ni rien d'autre.
 
QuiDe plus est, sila unecohérence donnéedes est utilisée par deux cœurs etcaches est présenteplus danssimple le cache,sur les processeurs à caches partagé ont un gros avantagepartagés. Sur un processeur à cache séparé, si une donnée présente dans plusieurs caches est modifiée, il faudra gérer la mise à jour des caches (nous détaillerons ce point plus tard). Avec les processeurs à cache partagé, il y a juste à mettre à jour la donnée dans le cache unique, et puis c'est tout : pas de mise à jour des données dans les caches des autres cœurs, ni rien d'autre.
===Architecture hybride===
 
===Les architectures hybrides===
 
[[File:Dual Core Generic.svg|vignette|Partage des caches sur un double cœurs.]]
 
Dans la réalité, il faut nuancer un tout petit peu les choses : un processeur multicœur ne contient pas qu'un seul cache,. etLes onprocesseurs seactuels retrouve avecont une organisation assez hybride, dans laquelle certains caches sont partagés et pas d'autres. Généralement, on trouve deux à trois caches dans un processeur (multicœurs ou non) : le L1, le L2, et le L3. Le L2 et le L3 sont souvent partagés, tandis que le L1 n'est jamais partagé ! La raison à cela tient dans le faitest que ce cache doit avoir une latence très faible, etce quequi partageraugmente un cache n'est jamais vraiment innocent en termes deles temps d'accès. Partager le cache L1 serait parfaitement possible, mais rendrait celui-ci tellementtrop lent qu'on aurait l'impression que nos programmes tourneraientpour ausa ralentitâche. Par contre, rien n’empêche de partager les autres caches, comme le L2 ou le L3 sans trop pourrirnuire à leur temps d'accès.
 
On peut décider de partager un cache entre tous les cœurs, voire limiter ce partage à quelques cœurs particuliers pour des raisons de performances. Ainsi, rien n’empêche pour un processeur quad-core d'avoir deux caches L2, chacun partagés avec deux cœurs, et le cache L3 partagé entre tous les cœurs.