Intel Pentium 4 660 et EE 3.73 GHz

Publié le 21/02/2005 par
Imprimer
Enhanced Memory 64 Technology
L’EM64T est en fait un équivalent de l’AMD64 ISA. Il s’agit donc d’une extension aux 64 bits du jeu d’instruction x86. Ainsi, les registres généraux, des petites zones mémoires qui stockent de manière temporaire les adresses mémoires et les entiers, passent de 32 à 64 bits.

Le fait de traiter des données 64 bits n’est pas en soit une nouveauté. Ainsi, depuis son introduction, le x87 qui se charge des calculs en virgule flottante va jusqu’à travailler en 80 bits en interne. De plus, certaines instructions MMX/SSE/SSE2 permettaient également de travailler sur des entiers 64 bits. Toutefois l’usage de ce type de donnée est désormais généralisé à toutes les données stockées dans les GPR procure deux avantages :

- Une accélération des calculs sur les nombres entiers. En effet, dans les applications nécessitant des calculs sur des entiers très importants (la limite est tout de même de 4.29e9 en 32 bits, et atteint 1.84e19 en 64 bits), le fait de coder l´entier sur 64 bits permet au processeur de pouvoir manipuler plus simplement et plus rapidement ce type de nombre, sans avoir à doubler le nombre de registres et de cycles d´horloges nécessaires aux calculs. Ceci ne devrait toutefois concerner que des applications bien spécifiques comme l’encryptage de données ou les calculs scientifiques.

- Le fait de stocker les adresses mémoire en 64 bits permet de dépasser la limite de 4 Go liée au codage binaire sur 32 bits pour la passer à 256 Teraoctet du fait d’une "limitation" à 48 bits du codage de la mémoire virtuelle. On notera toutefois qu’Intel a de son côté pu outrepasser cette limite de 4 Go sur ces Xeon pour atteindre 64 Go, même si ce mode à des limitations. Là encore, ceci ne sera pas vraiment utile pour le commun des mortels.





En fait le principal intérêt de l’EM64T comme de l’AMD64, c’est le nombre de registres. En effet, en mode x86, les processeurs disposent de 8 registres x87 80 bits, de 8 registres généraux 32 bits et de 8 registres SSE 128 bits. Avec l’AMD64 et l’EM64T, on reste à 8 registres x87 80 bits, par contre on passe à 16 registres généraux 64 bits et 16 registres SSE 128 bits. L’augmentation du nombre de registres disponibles permet de limiter le nombre d’instructions destinées à libérer ces derniers et à les copier en mémoire, et donc d’augmenter les performances.

Enfin, l’arrivée de l’EM64T et de l’AMD64 permet de faire une rupture avec la sacro sainte compatibilité x86. De nombreux exécutables sont encore compilés de manière à être compatible avec le jeu d’instruction x86 tel qu’il était avec le 386. Il a connu des améliorations depuis, qui ne sont pas forcément utilisées par les développeurs lors de la compilation. Désormais, la question ne se posera plus, qui dit EM64T ou AMD64 dit Athlon 64 ou Pentium 4 !


En pratique, les gains de performances offerts par cette nouvelle fonctionnalité sont très variables, d’autant qu’ils dépendent de compilateurs qui ne sont pas forcément encore au point. Afin d’évaluer les performances de la bête, nous avons utilisé la dernière version de testzlib de Gilles Vollant  (que nous remercions au passage) qui permet de mesurer les performances de son portage Windows de la librairie de compression Zlib (merci à lui pour le temps passé sur le sujet). Compilée à l’aide de Visual C++ 2005 beta, elle est disponible en 4 versions :

- x86 32 bits, uniquement C
- x86 32 bits, C + Optimisation assembleur
- x86 64 bits, uniquement C
- x86 64 bits, C + Optimisation assembleur

Voici les résultats que nous avons obtenus, exprimés en Mo /s, sous la dernière version de Windows XP Professional x64 Edition, la v1433 (Release Candidate 2) – la version définitive étant prévu pour ce printemps :


Sur Athlon 64, le gain n’est ici que de 1% au niveau du compilateur pour les versions non optimisées via des routines assembleurs. Sur Pentium 4 660, on enregistre même une baisse de performances ! Bien entendu ceci n’est en rien normal et la faute revient probablement au compilateur.

La version assembleur, utilisant une routine initialement mise au point pour le Pentium Pro mais qui a été adaptée au x86-64, permet de remettre un peu les choses en l’ordre même si on n’arrive au final qu’a à un exécutable 1.3% plus rapide que sa version 32 bits. La version assembleur 64 bits est par contre 7.8% plus rapide que la version assembleur 32 bits, ce qui est plus que notable. Pour le moment, il est toutefois impossible de tirer quelconque conclusion de résultats 64 bits.

Les gains trop importants proviennent généralement d’exécutables 32 bits mal optimisés, et lorsque l’on enregistre des pertes notables il y’a clairement des soucis provenant des compilateurs pour le moment. Le support de l’EM64T sur les nouveaux Pentium 4 est un plus, mais un plus encore difficile à évaluer.
Vos réactions

Top articles