Etude des caches :
Débits & Latences
Après avoir vu son fonctionnement, intéressons nous maintenant
à ses performances par le biais de tests de latence et de débits
:
1) Etude des débits
Les tests de débit consistent à mesurer le temps de lecture
de buffers de taille croissante, de 1 Ko à plusieurs Mo. Les lectures
s'effectuent en 32 bits (integer), 64 bits (MMX) et 128 bits (SSE), en
utilisant pour chacun d'eux l'instruction de lecture la plus rapide. Les
résultats nous fournissent de nombreuses informations sur le processeur,
notamment sur les caches de données, les unités de chargement,
et également sur le bus mémoire.
Afin de mettre en évidence les améliorations apportées
au K8, nous avons comparé les résultats d'un Opteron 244
(cadencé à 1,8GHz)
à ceux d'un Athlon XP de même fréquence, le 2200+.
Regardons dans un premier temps le résultat obtenu en lecture 32
bits.
Voyons ce que l'on peut déduire de ces courbes.
- La forme générale de la courbe de l'Opteron met en évidence
son cache de données L1 de 64 Ko, ainsi que les 1024 Ko du cache
L2. Remarquons que la courbe s'étend jusqu'à 1088 Ko,
soit 1024 + 64. On voit donc là de façon concrète
la relation exclusive entre les caches, dont les tailles
s'additionnent. Il en est de même sur la courbe de l'Athlon XP,
dont les 64 Ko du L1 s'ajoutent aux 256 Ko du L2, portant ainsi la quantité
de cache à 320 Ko.
- L'Athlon XP offre un débit de 5,2 octets par cycle (10000 Mo/s)
et l'Opteron un débit de presque 7 octets par cycle (12500 Mo/s).
Le test 32 bits consiste à lire 4 octets par instruction, ce
qui signifie que le K8 est capable de traiter deux opérations
par cycle. Ceci est possible grâce à l'unité de
lecture/écriture (Load-Store Unit, ou LSU), qui est capable d'effectuer
deux opérations de lecture ou écriture 64 bits par cycle.
Pour alimenter la LSU, le cache L1 est, comme nous l'avons évoqué
plus haut, de type Dual Ported, ce qui veut dire qu'il
est également capable de supporter deux opérations de
lecture et/ou écriture 64 bits par cycle. A 1,8GHz, ceci confère
au couple LSU/L1 un débit maximal de 2 ops x 8 octets x 1800MHz
= 28800 Mo/s en 64 bits, ou encore 2 ops x 4 octets
x 1800MHz = 14400 Mo/s en 32 bits.
L'Athlon XP affiche un débit 10000 Mo/s,
ce qui réprésente 70% du débit maximal théorique
calculé plus haut. Avec un débit de 12500 Mo/s,
l'Opteron affiche près de 87% du débit maximal théorique,
et s'avère donc plus performant que l'Athlon XP. Ceci reflète
les améliorations apportées dans le pipeline du K8,
et notamment la meilleure répartition des instructions vers
les unités de calcul. Le noyau du K8 exploite ainsi mieux les
unités de calcul par rapport à l'Athlon XP, ce que révèle
clairement ce test.
- Le cache L2 de l'Opteron offre un débit de 6530 Mo/s
et celui de l'Athlon XP un débit de 5000 Mo/s.
Le cache L2 de ces deux processeurs n'est pas dual-ported, ils ne peuvent
donc traiter qu'une opération par cycle, ce qui nous donne un
débit maximal théorique de 1 op x 4 octets x 1800MHz =
7200Mo/s. Le cache L2 de l'Opteron offre une valeur
très proche de ce maximum théorique.
Voyons maintenant les résultats obtenus en 64 bits :
- Comme nous l'avons calculé plus haut, le cache L1 offre un
débit de 28800Mo/s en 64 bits. L'Athlon XP affiche 18800 Mo/s
(soit 65% du débit maximal théorique) et l'Opteron 22700Mo/s
(soit 79% du débit maximal). Ces résultats confirment
ceux obtenus en 32 bits.
- Le cache L2 de l'Opteron offre un débit de 8260 Mo/s
et celui de l'Athlon XP un débit de 5700 Mo/s.
Nous sommes loin du maximum théorique de 1 op x 8 octets x 1800MHz
= 14400Mo/s. Les lectures 64 bits saturent le cache
L2 des deux processeurs, et ceux-ci offrent le débit maximal
qu'ils peuvent fournir. Par rapport aux transferts 32 bits, l'augmentation
de debit est de 26% pour l'Opteron et de 14% pour l'Athlon XP. Cet écart
s'explique par le bus L2 plus large de l'Opteron, ce qui lui permet
d'offrir une bande passante plus élevée que celle de l'Athlon
XP.
Regardons maintenant en mode 128 bits, obtenu en utilisant le jeu d'instructions
SSE.
Le débit obtenu sur le cache L1 des deux processeurs est de l'ordre
de 14200Mo/s, ce qui est inférieur au mode 64 bits. Nous voyons
là une des limites de la LSU : si elle supporte deux opérations
64 bits par cycle, elle n'est en revanche capable d'effectuer qu'une seule
lecture 128 bits à la fois, et cette lecture nécessite deux
cycles ! Ce qui porte alors son débit théorique à
16x1800/2 = 14400Mo/s. Les deux processeurs offrent des débits
pratiques très proches de cette valeur, car la LSU joue alors le
rôle de facteur limitant.
Les résultats sur le L2 sont les mêmes que ceux obtenus en
64 bits, preuve que les caches saturent dès que les lectures sont
faites en 64 bits.
2) Etude des latences
Le temps de latence d'un cache est le temps, exprimé en cycles
processeurs, séparant une requête en lecture du moment où
la donnée requise est effectivement disponible. Elle permet de
donner une estimation de la vitesse de réaction d'un cache.
En effet une mémoire cache, comme toute mémoire, ne réagit
pas de façon instantanée. Dans la pratique, ce temps de
latence peut être en partie masqué par le flux des instructions
dans le pipeline, mais l'algorithme qui permet de le calculer correspond
au cas le pire, c'est-à-dire qu'on utilise la donnée juste
après la requête de lecture.
Regardons, à titre de rappel, les résultats obtenus sur
un Athlon XP 2200+ :
stride 4 8 16 32 64 128 256 512 size (Kb) 1 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 3 3 8 3 3 3 3 3 3 3 3 16 3 3 3 3 3 3 3 3 32 3 3 3 3 3 3 3 3 64 3 3 3 3 3 3 3 3 128 4 6 9 18 20 20 20 20 256 4 6 9 18 20 20 20 20 512 27 48 96 195 360 359 358 359 1024 28 48 97 193 359 359 359 359 2048 27 49 98 194 360 361 361 362 4096 28 48 97 193 359 360 361 362 8192 28 49 98 193 360 361 360 363 16384 27 49 98 192 360 360 362 363 32768 27 48 97 193 360 362 359 364
2 cache levels detected
Level 1 size = 64Kb latency = 3 cycles
Level 2 size = 256Kb latency = 20 cycles (17 cycles for this only
level)
|
La latence du L1 est conforme à ce qu'annonce AMD pour ce processeur,
à savoir 3 cycles. La latence du cache L2 est en revanche mesurée
à 17 cycles, alors qu'AMD annonce entre 8 et 11 cycles. La raison
de cette différence, et le constructeur s'en explique dans un document,
tient dans la pénalité due au Victim Buffer. En effet, l'algorithme
de mesure de la latence provoque un débordement constant du VB,
et le temps mesuré inclut la vidange du VB dans le cache L2, et
correspond donc au cas le pire en terme de performances. Ainsi, sur les
17 cycles mesurés, 8 cycles correspondent à la phase de
vidange du VB, ce qui porte la latence réelle du L2 à une
valeur de l'ordre de 9 cycles.
Voyons maintenant les résultats du même test mené
sur un Opteron 244 :
stride 4 8 16 32 64 128 256 512 size (Kb) 1 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 3 3 8 3 3 3 3 3 3 3 3 16 3 3 3 3 3 3 3 3 32 3 3 3 3 3 3 3 3 64 3 3 3 3 3 3 3 3 128 4 6 8 16 16 16 16 16 256 4 6 8 16 16 16 16 16 512 4 6 8 16 16 16 16 16 1024 4 6 8 16 16 16 16 16 2048 10 17 34 61 112 113 116 121 4096 10 17 34 61 112 112 115 120 8192 10 17 34 61 112 113 115 119 16384 10 17 34 61 112 113 115 119 32768 10 17 34 61 112 113 115 119
2 cache levels detected
Level 1 size = 64Kb latency = 3 cycles
Level 2 size = 1024Kb latency = 16 cycles (13 cycles for this only
level)
|
La latence du cache L1 n'a pas changé par rapport au K7, en revanche
celle du L2 a perdu pas moins de 4 cycles. Si l'on applique le même
raisonnement en ce qui concerne le VB, on obtient une latence réelle
du cache L2 de 5 cycles. Mais difficile de dire si la phase de vidange
du VB n'a pas été elle-même améliorée.
Quoiqu'il en soit, et les tests précédents l'ont aussi démontré,
le cache L2 du K8 est globalement beaucoup plus performant que celui du
K7.
Ce test nous permet également de comparer les latences mesurées
depuis la mémoire, une fois passés les caches L2. L'Opteron
affiche 120 cycles, à comparer aux 360 cycles de l'Athlon XP (cadencé
à la même fréquence, ce qui donne des rapports en
temps absolu identiques). Cette différence s'explique bien entendu
par le contrôleur mémoire intégré du K8, qui
permet d'obtenir des latences mémoire près de trois fois
plus faibles que celles obtenues par une architecture classique avec contrôleur
externe.
Suite ( 32
vs 64 bits : Explications ) |