Pentium 4 : Voyage au cœur du CPU
By Franck
Sommaire:

 

Les unités de calculs flottants

 

La FPU du Pentium 4 prend en charge les calculs flottants classiques (jeu d'instruction x87) ainsi que les instructions SSE et SSE2. Le Pentium 4 a la réputation d'être très lent en calcul flottant (surtout en x87), nous allons essayer d'en déterminer les raisons en étudiant sa FPU.

Trois facteurs ont une influence importante sur les performances en calcul :

  • Le nombre d'unités de calcul ;
  • Pour chaque unité, le nombre de cycles nécessaire à l'exécution des instructions ;
  • Le temps d'accès de ces unités vers la mémoire cache L1 ;

Comme on peut le voir sur le tableau de la page précédente, le Pentium 4 possède deux unités de calcul sur les flottants, alors que le Pentium !!! n'en possède qu'une seule. Mais ces deux unités ne sont pas identiques, la première est dédiée aux opérations de déplacements (registre et mémoire) et la seconde est en charge des calculs proprement dits. Ainsi, le Pentium 4 ne possède en réalité qu'une seule unité de calcul sur les flottants, et en ce sens il présente les mêmes capacités de calcul que le Pentium !!!.

Regardons maintenant les performances de cette unité de calcul. Les tableaux qui suivent comparent les performances théoriques du Pentium 4 face au Pentium !!! sur les opérations flottantes courantes, ou tout du moins les plus utilisées : déplacement, addition, multiplication et division.

Pour chaque type d'opération, deux chiffres sont donnés :

  • La latence, exprimée en cycles processeurs, est le temps minimum nécessaire à l'exécution de l'instruction.
  • Le débit correspond au nombre minimum de cycles entre deux instructions successives sortant du pipeline.

A titre d'exemple, pour un flot d'instructions possédant toutes une latence de 5 cycles et un débit de 1 cycle, la première instruction sera terminée en 5 cycles et toutes les suivantes ne nécessiteront qu'un cycle (en conditions optimales, c'est-à-dire sans interruption du pipeline).

Voyons les résultats en calcul flottant x87 :

Opération flottante x87 Pentium !!! Pentium 4
Addition (FADD) Latence : 3 cycles
Débit : 1 cycle
Latence : 5 cycles
Débit : 1 cycle
Multiplication (FMUL) Latence : 5 cycles
Débit : 2 cycles
Latence : 7 cycles
Débit : 2 cycles
Division (FDIV)
(double précision)
Latence : 32 cycles
Débit : 32 cycles *
Latence : 38 cycles
Débit : 38 cycles *


* Instruction non pipelinée.

Nous remarquons que le Pentium 4 possède des temps de latence beaucoup plus élevés que ceux du Pentium !!!, ce qui s'explique en partie par la profondeur de son pipeline. En revanche, les débits sont les mêmes, sauf pour la division.
En pratique, cela signifie que dans un cas optimal ou le flux d'instructions est constant, le Pentium 4 sera au mieux aussi performant que le Pentium !!! pour les opérations de type addition ou multiplication. Mais en cas de cassure dans le flux, le Pentium 4 subira des pénalités importantes du fait de ses latences élevées. La division flottante n'est pas pipelinée tout comme sur le Pentium !!! (alors qu'elle l'est sur l'Athlon, avec un débit de 17 cycles), et elle nécessite encore plus de cycles.

Regardons maintenant les latences et les débits du même type d'opérations avec les instructions SSE :

Opération flottante SSE Pentium !!! Pentium 4
Addition (ADDPS) Latence : 4 cycles
Débit : 2 cycles
Latence : 4 cycles
Débit : 2 cycles
Multiplication (MULPS) Latence : 5 cycles
Débit : 2 cycles
Latence : 6 cycles
Débit : 2 cycles
Division (DIVPS) Latence : 36 cycles
Débit : 36 cycles *
Latence : 32 cycles
Débit : 32 cycles *
Lecture (MOVAPS) Latence : 4 cycles
Débit : 2 cycles
Latence : 6 cycles
Débit : 1 cycle

* Instruction non pipelinée.


Regardons ces chiffres de plus près :

  • L'addition sur Pentium 4 a les mêmes latence et débit que sur Pentium !!!. La multiplication est un peu plus lente, et la division plus rapide.

  • La lecture a une latence supérieure, mais en revanche, le débit n'est que de 1 cycle sur Pentium 4. L'unité flottante dédiée aux déplacements permet en effet de lire 128 bits (soit 16 octets) chaque cycle, alors que le Pentium !!! nécessite 2 cycles pour lire ces mêmes 16 octets. En pratique, à fréquence égale, cela double le débit en lecture du Pentium 4 par rapport au Pentium !!!. Le débit, toujours le débit !! Nous reviendrons sur cette particularité lorsque nous étudierons les débits des mémoires caches.

En résumé, ces chiffres nous révèlent que les performances théoriques de la FPU du Pentium 4 sont assez proches de celles du Pentium !!! : légèrement inférieures sur le jeu d'instruction x87, et légèrement supérieures sur le jeu d'instruction SSE.

Le dernier point de comparaison important concerne le temps d'accès des unités de calcul flottant au cache de données L1, d'où elles retirent les données utilisées par les instructions. Cette latence, appelée « load-to-use latency», correspond au nombre de cycles entre la requête de la donnée depuis le L1 et sa disponibilité effective.

La FPU du Pentium 4 nécessite 6 cycles pour accéder aux données présentes dans le cache L1, soit deux fois plus que sur le Pentium !!! qui n'a besoin que de 3 cycles. Cette latence peut s'avérer très pénalisante dans le cas de l'utilisation d'instructions x87, pour lesquelles les accès mémoire sont nombreux. Une fois de plus, les calculs x87 subissent de nombreux états d'attente, ce qui diminue encore davantage les performances.
En revanche, une telle latence est moins pénalisante dans le cas d'instructions SIMD (SSE et SSE2), où un seul accès mémoire permet de charger jusqu'à quatre flottants en simple précision.

En conclusion, les calculs x87 sont nettement le gros point faible du Pentium 4. Intel semble en être conscient, car le design original du Pentium 4 prévoyait deux unités complètes de calculs FPU, mais le coût engendré en ressources hardware (nombre de transistors) a nécessité de revoir les prétentions à la baisse.

En revanche, la technologie SIMD s'accommode parfaitement de l'architecture à haut débit du Pentium 4, et l'utilisation du jeu d'instruction SSE permet de donner des performances en calcul flottant dignes de ce nom au Pentium 4. Hélas, la majorité des applications actuelles sont écrites en code x87, et la transition vers le SSE est beaucoup plus lente qu'Intel ne l'avait prévu.


 

 

Suite ( Les unités de calculs entiers )

Close