|
Intel Core i7 "Nehalem" Nehalem : caches & contrôleurs mémoire Dans son objectif d’optimiser au maximum le rendement des unités de calcul, Intel a aussi fortement modifié l’architecture des accès mémoires sur Nehalem. Tout d’abord, chaque cœur récupère un cache L2 dédié de 256 Ko, ce qui contraste avec le gros cache L2 de 6 Mo partagé entre les deux cœurs des Penryn. Mais en plus, un cache L3 de 8 Mo, partagé lui, vient s’ajouter à l’ensemble. Pour parfaire le tout, les Core i7 embarquent désormais un contrôleur mémoire intégré – triple canal s’il vous plait ! – afin d’offrir une latence d’accès à la RAM bien inférieure qu’avec les Northbridges traditionnels. Nous allons donc commencer par détailler le fonctionnement de caches L2 et L3 avant de nous intéresser aux contrôleurs mémoires embarqués à même le die. Quid du L1 ? Rien de nouveau de ce côté puisqu’il est similaire à celui des Core 2 Duo : un cache L1 de données de 32 Ko 8-way et un cache L1 d’instructions de 32 Ko.
Les premiers Core 7i « Bloomfield » sont donc équipés de 4 x 256 Ko de cache L2 et d’un cache L3 partagé de 8 Mo. Cette nouvelle répartition a été pensée dans le but de diminuer au maximum les latences d’accès aux données, mais aussi de permettre une efficacité la plus haute possible lors de l’utilisation simultanée des quatre cœurs et même d’un ou plusieurs autres CPUs. L’architecture des caches est désormais inclusive, c'est-à-dire qu’une copie des caches L2 est en permanence présente dans le L3 afin de diminuer les problèmes de cohérence. Petit exemple : les Core 1, 2 et 4 travaillent tous les trois sur les mêmes données. A un instant, le Core 1 a besoin d’une donnée précédemment traitée (et donc présente dans la cache L2) du Core 4. Vu qu’une copie des caches L2 est présente dans le L3, il suffit d’interroger le L3 pour vérifier si l’un des core contient la fameuse donnée dans son cache L2. S’il n’y rien dans le L3, aucun des cores ne dispose de l’information dans son L2. Si elle est présente, quatre bits supplémentaires, présents sur chaque ligne de cache, donnent une indication sur le cœur susceptible de détenir l’information. Avec un cache exclusif, il aurait fallu interroger chaque cœur un par un pour savoir si l’un d’entre eux détenait la donnée dans son L2. Et le problème aurait empiré avec l’augmentation du nombre de cœurs. Une telle architecture permet donc une meilleure latence des caches tout en étant prête pour un plus grand nombre de cœurs. Avant de scruter la bande passante des différents niveaux de caches et de la comparer aux Core 2, intéressons-nous tout d’abord à la latence :
Le cache L1 de donnée, de 32 Ko, reste identique à celui du Penryn malgré une différence d’un cycle « fantôme » sur le graphique. Celle-ci est due au fait que le bout de code utilisé affiche la latence vue de l’extérieur du pipeline et non pas la latence réelle que subit le cœur lorsqu’il interroge le L1. Côté L2, Intel parle de « Very low latency » et, effectivement, on est bien dans ce cas puisque la latence tombe de 15 cycles sur les Core 2 à 10 cycles sur les Core i7, un très gros progrès. Le L3 n’est pas non plus en reste puisqu’il affiche une latence de 33 cycles. A ce sujet, il faut noter que le cache L3 fait partie de l’Uncore que l’Uncore dispose de sa propre horloge, qui peut-être différente de celles des Core. En conséquences, la rapidité (et donc la latence) du cache L3 sera en fonction de la fréquence de l’Uncore.
Ici aussi, une incohérence apparait sur le L1 puisque la vitesse d’écriture est identique à celle de lecture. Ceci est probablement du à une amélioration du prefetcher qui interfère avec le code de test. Côté L2 par contre, les résultats montrent une vitesse de lecture doublée entre le petit cache individuel des Core i7 et le gros cache partagé des Core 2, ce qui est assez compréhensible. L’écriture est ici aussi en très net hausse, passant de 11.8 Go/s à 30.2 Go/s sur des processeurs cadencés à 3.2 GHz. Enfin, le L3 des cores Nehalem montre lui aussi de très bonnes performances puisqu’il est lui-même nettement plus performant que le L2 des Penryn. En fait, tout se passe comme si, avec Nehalem, on disposait d’un cache L0, d’un cache L1 dédié et d’un cache L2 partagé.
Les Core i7 sont officiellement limités à la DDR3-1066 alors qu’il a été conçu pour la DDR3-1333. La raison est simple : ces processeurs fonctionnement parfaitement en DDR3-1333, mais uniquement lors qu’un seul module de mémoire par canal est utilisé. Comme il est très peu probable que les fabricants de carte-mères se limitent à trois slots mémoire sur leurs produits, Intel a choisi de restreindre la fréquence officielle à 533 MHz afin de ne pas complexifier encore plus le design des premières cartes mères. C’est ce que l’on voit clairement ici :
Le contrôleur mémoire supporte la DDR3 classique (Unbuffered) et la DDR3 Registered destiné aux serveurs. Les deux types de mémoires pouvant - ou non - être dotées de la correction d’erreur hardware (ECC). Actuellement, chacun des trois contrôleurs est prévu pour supporter au maximum trois modules de mémoire, soit neuf en tout. Avec de la mémoire classique, on tombe toutefois à deux modules par canal, soit six modules au total. De plus, le placement des modules de mémoire est très important sur Nehalem. Par exemple, il faut remplir les slots correspondant aux canaux mémoire en commençant par le slot le plus éloigné du processeur, puis en se rapprochant successivement du CPU. Bien sûr, les Core i7 sont aussi capables de fonctionner avec deux ou un seul module de mémoire. Dans ce cas, les performances seront nettement en retrait. Nous avons mesuré la bande passante en lecture et en écriture sur Nehalem et nous l’avons comparé à la plateforme précédente, c'est-à-dire un Core 2 Quad monté sur une carte mère doté d’un chipset X48 et équipé de DDR3-1333. Pour les Core i7, nous avons effectué les tests en mode DDR3-1066 et DDR3-1333, ceci en mode 2 et 3 canaux. Voici les résultats :
Non seulement les débits mesurés sont excellents et surpassent de loin ceux obtenus avec un Northbridge « classique », mais en plus le gain en débit semble linéaire par rapport à la fréquence de la mémoire. On constate aussi que l’apport du troisième canal permet d’offrir un surcroit de bande passante qui se mesure aisément. Il faudra même préférer trois modules de mémoire plus lente, comme de la DDR3-1066, plutôt que deux barrettes de DDR3-1333. Au meilleur de sa forme (3 canaux de DDR3-1333), le Core i7 offre même une bande passante quasi-doublée par rapport à la plateforme Penryn/X48. Terminons par la latence de ces contrôleurs mémoires :
La latence est vraiment faible, avec un peu plus de 40 ns nécessaire pour accéder à une donnée située dans la mémoire. Ceci à comparer avec les 67 ns requis pour la même opération sur un Core 2 Quad équipé d’un chipset X48 et même aux 57 ns d’un Phenom X4 d’AMD. Pour l’occasion, nous avons même déterré un Athlon 64 X2 cadencé à 3.2 GHz. Résultat : 48 ns ! Intel a donc effectué un gros travail sur le sous-système mémoire et sur les caches. Gros débit et faible latence sont bien réunis sur l’architecture Nehalem. Que demande le peuple ?
|