Index

Savoir

Faire

Miscellaneous

Calcul scientifique

 

Bien que l'actualité micro-informatique porte souvent principalement sur les possibilités que les nouvelles machines offrent aux joueurs, les ordinateurs sont souvent utilisés pour venir à bout de calculs complexes. Cette page illustre modestement une application de ce genre, en tentant de quantifier à la fois la qualité mais aussi la rapidité de quelques configurations disponibles actuellement sur le marché.

Introduction
La première partie du travail consiste à évaluer la qualité du travail exécuté par la machine. En effet, il ne sert à rien d'avoir rapidement un résultat faux ou approximatif, il vaut mieux avoir un résultat valable en un peu plus de temps. Cette étape est à faire une fois, pour chaque couple matériel-compilateur.
La deuxième étape est spécifique à notre problème. On discrétise un objet dans l'espace, et effectue des tests sur des coupes de cet objet. Évidemment, plus la discrétisation est fine, meilleurs sont les résultats, mais plus la place mémoire occupée est importante. Une fois les résultats obtenus, ils n'ont généralement pas besoin d'être recalculés, sauf pour de nouvelles formes d'objets.
La troisième et dernière étape utilise un algorithme génétique pour estimer de manière probabiliste l'adéquation entre un cas pratique, mesuré physiquement, et les cas théoriques issus de l'étape précédente. Cette étape est la plus importante pour la performance, car elle doit être répétée à chaque mesure physique.

Qualité des résultats
Les travaux de l'IEEE sur la norme IEEE 754, ainsi que les nombreux articles de William Kahan, pour ne citer qu'eux, montrent que le respect de certaines règles est essentiel pour obtenir des résultats de qualité, et éviter les calculs numériquement instables.
Les machines testées ont été des stations Alpha, des Macintosh PowerPC ainsi que des PC à processeur x86. En général, la qualité des compilateurs est au rendez-vous, que ce soit avec des outils gratuits ou commerciaux (un seul compilateur, pourtant commercial et très répandu, a donné des résultats quasiment inacceptables, mais trop longs à détailler ici...). Il est quasi-systématiquement possible d'obtenir le respect des conventions de l'IEEE 754 à l'aide d'options de compilation.
Notons toutefois que les compilateurs commerciaux pour processeurs x86, contrairement à gcc, snobent le format
long double et les 80 bits de précision disponibles sur ces processeurs, pour se contenter des formats classiques 32 et 64 bits, présents sur les autres processeurs.

Calculs sur un objet discrétisé
Bien que ce test manipule, de manière fortement aléatoire, de grandes quantités de données (16,2 Mo au total), la part la plus importante du temps passé l'est dans des routines de calcul pur. Le graphique suivant, réalisé sur un PowerPC G3 et un Celeron, tous deux à 400 MHz, montre que la performance diminue peu avec l'augmentation de la taille des données manipulées.

Évidemment, une mémoire cache de taille importante, cadencée rapidement, aide à diminuer la perte de performance liée aux accès mémoire. Cependant, le code de calcul de ce programme permet aux processeurs globalement performants de s'exprimer pleinement : de nombreux calculs en virgule flottante sont exécutés, et mêlés à des tests ainsi qu'à des calculs d'adresse mémoire. Ce test est donc l'opposé de celui qui sert à qualifier les unités de calcul des processeurs, prises une à une.

Les systèmes testés sont les suivants :

Système

Processeur

Fréquence CPU

Cache L2

Fréquence cache

Compaq Alpha

Alpha 264

600 MHz

8 Mo

?

Apple PowerBook

PowerPC G3

400 MHz

1 Mo

160 MHz

PC Athlon

Athlon 1re génération

600 MHz

512 ko

300 MHz

Portable Celeron

Celeron

400 MHz

128 ko

400 MHz

PC Pentium II

Pentium II

350 MHz

512 ko

175 MHz

Les différences de taille de mémoire cache empêchent de conclure de manière catégorique, mais on peut probablement dire que ces résultats sont tout de même significatifs de la puissance de calcul brute que développe chaque processeur. L'Alpha 600 MHz reste intouchable, même par un hypothétique Athlon 1500 MHz, et il possède encore de la marge (833 MHz actuellement). L'Athlon reste cependant leader des x86 (en attendant le test d'un rarissime Pentium4 ?), avec une marge confortable due non seulement à son architecture mais aussi à sa fréquence de fonctionnement élevée. Il est aussi probable que les x86 haut de gamme, quels qu'ils soient, devancent nettement les G3/G4 haut de gamme.

Algorithme génétique
Ce test manipule une quantité de données relativement faible (820 ko), mais accédées aléatoirement par paquets d'un peu moins d'une centaine d'octets. La plus grosse partie du travail consiste à lire et à écrire des données en mémoire, et dans une moindre mesure à effectuer des calculs sur des entiers et sur des flottants (principalement le calcul d'une racine carrée).

On peut constater, sur le graphique suivant, l'influence de la taille des données sur la rapidité de calcul du programme, pour un système donné. Sur la courbe liée au G3 (en rouge), l'influence de chaque niveau de cache (32 ko de niveau 1, 1 Mo de niveau 2) , puis la mémoire RAM, est symbolisée par des approximations linéaires (en noir).

Ce programme est donc favorisé par les machines comportant beaucoup de cache rapide. Cependant, toutes les machines sont incapables de contenir les 820 ko de données dans du cache intégré sur puce. Les systèmes testés étant les mêmes que précédemment, on constate que :
- l'Alpha et le PowerPC sont capables de contenir les données dans leur cache de niveau 2, la majorité des données est donc accédée à la vitesse du bus mémoire-cache ;
- l'Athlon, le PII et le Celeron sont obligés d'accéder à la mémoire RAM pour manipuler toutes les données ; ces accès ont lieu en moyenne 1 fois sur 3 pour les deux premiers, et 5 fois sur 6 pour le troisième.
Les configurations mémoire répondent à des choix à la fois techniques et commerciaux. Ces choix sont plus ou moins heureux pour répondre à notre problème, qui n'a pas la prétention d'être universellement représentatif. La figure suivante présente les résultats obtenus par nos configurations précédentes. Il est évident qu'avec la forte dépendance du test vis-à-vis du cache et de la RAM, il n'est pas question d'extrapoler linéairement les résultats à des fréquences CPU différentes de celles testées ici.

L'Athlon ravit la place du G3, et le PII celle du Celeron. L'Alpha reste leader.
Remarquons comment l'échange de beaucoup de cache externe avec moins de mémoire cache mais plus rapide est pénalisant dans notre cas. C'est pourquoi la tendance actuelle, qui veut que l'on mette de plus en plus souvent une quantité relativement faible de cache sur puce, est loin d'être la panacée pour résoudre tous les problèmes de performance. Les Thunderbird et PentiumIII, à fréquence égale, devraient se comporter moins favorablement que les Athlon et PentiumII.

Conclusion
Obtenir du code de qualité sur des programmes de calcul scientifique est chose relativement aisée. Il suffit de faire la vérification une fois, et le cas échéant de détecter les options de compilation qui conviennent.
L'Alpha, architecture équilibrée par excellence, se joue de tous nos programmes. Même s'il ne se détache pas particulièrement lorsque l'on teste séparément ses unités de calcul (voir les résultats de
l'observatoire), celles-ci sont apparemment prévues pour fonctionner harmonieusement ensemble. Le fait qu'il existe des configurations encore bien plus puissantes que celle que nous avons testée vient conforter ce point de vue.
L'Athlon est probablement le meilleur second choix, ou le premier choix pour le commun des mortels (pour qui une station Alpha reste un rêve inaccessible :-). Même s'il reste légèrement derrière le G3 sur le premier test, c'est de peu. Et comme le second test est le plus critique au niveau de la performance, car il doit être répété à chaque mesure, l'avantage de l'Athlon est net sur ses concurrents.

On trouve des Athlon/Thunderbird et des PentiumIII à des fréquences nettement supérieures et dans des configurations mémoire bien plus performantes que celles testées. C'est aussi le cas, mais dans une moindre mesure, pour le G3 à 400 MHz. Et le Celeron se heurtera toujours au goulot d'étranglement de la mémoire, et n'obtiendra jamais de performance mirobolante.
L'Athlon conforte ainsi sa seconde place (et probablement la première, au rapport performance/prix). Le choix entre un G3/G4 haut de gamme et un PentiumIII haut de gamme est à notre sens beaucoup plus difficile, et doit faire appel à d'autres critères que la performance.

Merci à Jérôme et Hermès pour leur aide dans l'obtention des résultats présentés ici.