Les benchmarks LINPACK sont une mesure de la puissance de calcul en virgule flottante d'un système . Introduits par Jack Dongarra , ils mesurent la vitesse à laquelle un ordinateur résout un système dense n x n d'équations linéaires Ax = b , ce qui est une tâche courante en ingénierie .
La dernière version de ces benchmarks est utilisée pour établir la liste TOP500 , classant les supercalculateurs les plus puissants du monde.
L'objectif est d'estimer la vitesse à laquelle un ordinateur résoudra des problèmes réels. Il s'agit d'une simplification, car aucune tâche de calcul ne peut refléter les performances globales d'un système informatique. Néanmoins, les performances du benchmark LINPACK peuvent fournir une bonne correction par rapport aux performances de pointe fournies par le fabricant. Les performances de pointe sont les performances théoriques maximales qu'un ordinateur peut atteindre, calculées comme la fréquence de la machine, en cycles par seconde, multipliée par le nombre d'opérations par cycle qu'il peut effectuer. Les performances réelles seront toujours inférieures aux performances de pointe. Les performances d'un ordinateur sont une question complexe qui dépend de nombreuses variables interconnectées. Les performances mesurées par le benchmark LINPACK se composent du nombre d' opérations à virgule flottante de 64 bits , généralement des additions et des multiplications, qu'un ordinateur peut effectuer par seconde, également appelées FLOPS . Cependant, les performances d'un ordinateur lors de l'exécution d'applications réelles sont susceptibles d'être bien inférieures aux performances maximales qu'il atteint en exécutant le benchmark LINPACK approprié.
Le nom de ces benchmarks vient du package LINPACK , une collection de sous-routines d'algèbre Fortran largement utilisée dans les années 1980, et initialement étroitement liée au benchmark LINPACK. Le package LINPACK a depuis été remplacé par d'autres bibliothèques.
Histoire
Le rapport de référence LINPACK est apparu pour la première fois en 1979 sous la forme d'une annexe au manuel d'utilisation LINPACK .
LINPACK a été conçu pour aider les utilisateurs à estimer le temps requis par leurs systèmes pour résoudre un problème à l'aide du package LINPACK, en extrapolant les résultats de performances obtenus par 23 ordinateurs différents résolvant un problème de matrice de taille 100.
Cette taille de matrice a été choisie en raison des limitations de mémoire et de processeur à l'époque :
- 10 000 entrées à virgule flottante de -1 à 1 sont générées aléatoirement pour remplir une matrice générale et dense,
- ensuite, la décomposition LU avec pivotement partiel est utilisée pour le timing.
Au fil des années, des versions supplémentaires avec des tailles de problèmes différentes, comme des matrices d'ordre 300 et 1000, et des contraintes ont été publiées, permettant de nouvelles opportunités d'optimisation à mesure que les architectures matérielles commençaient à implémenter des opérations matrice-vecteur et matrice-matrice.
Le traitement parallèle a également été introduit dans le benchmark LINPACK Parallel à la fin des années 1980.
En 1991, le LINPACK a été modifié pour résoudre des problèmes de taille arbitraire, permettant aux ordinateurs hautes performances (HPC) de se rapprocher de leurs performances asymptotiques.
Deux ans plus tard, ce benchmark a été utilisé pour mesurer la performance de la première liste TOP500 .
Les repères
LINPACK 100
LINPACK 100 est très similaire au benchmark original publié en 1979 avec le manuel d'utilisation de LINPACK. La solution est obtenue par élimination gaussienne avec pivotement partiel , avec 2/3n 3 + 2n 2 opérations en virgule flottante où n est 100, l'ordre de la matrice dense A qui définit le problème. Sa petite taille et le manque de flexibilité logicielle ne permettent pas à la plupart des ordinateurs modernes d'atteindre leurs limites de performances. Cependant, il peut toujours être utile de prédire les performances dans du code utilisateur numériquement intensif en utilisant l'optimisation du compilateur.
LINPACK 1000
LINPACK 1000 peut fournir des performances plus proches de la limite de la machine car en plus d'offrir une taille de problème plus importante, une matrice d'ordre 1000, des changements dans l'algorithme sont possibles. Les seules contraintes sont que la précision relative ne peut pas être réduite et que le nombre d'opérations sera toujours considéré comme étant 2/3 n 3 + 2 n 2 , avec n = 1000.
HPLinpack
Les tests précédents ne sont pas adaptés aux tests d'ordinateurs parallèles, et le test de performance de calcul hautement parallèle de Linpack, ou test de performance HPLinpack, a été introduit. Dans HPLinpack, la taille n du problème peut être aussi grande que nécessaire pour optimiser les résultats de performance de la machine. Une fois encore, 2/3n 3 + 2n 2 sera pris comme nombre d'opérations, indépendamment de l'algorithme utilisé. L'utilisation de l' algorithme de Strassen n'est pas autorisée car il déforme le taux d'exécution réel. La précision doit être telle que l'expression suivante soit satisfaite :
où
- n est la taille du problème,
Pour chaque système informatique, les quantités suivantes sont reportées :
- R max : la performance en GFLOPS pour le plus gros problème exécuté sur une machine.
- N max : la taille du plus gros problème exécuté sur une machine.
- N 1/2 : la taille où la moitié du taux d'exécution Rmax est atteinte.
- R peak : le pic théorique de performance GFLOPS pour la machine.
Ces résultats sont utilisés pour établir la liste TOP500 deux fois par an, avec les ordinateurs les plus puissants du monde. TOP500 les mesure au format à virgule flottante double précision (FP64). Le rapport entre R max et R peak est appelé efficacité parallèle ou efficacité HPL. Il est généralement plus faible plus un système possède de nœuds en raison de la surcharge de communication. Par exemple, un Cray Y-MP des années 1990 atteint environ 90 % d'efficacité HPL, tandis que Frontier atteint environ 70 % en 2023.
Implémentations de référence LINPACK
La section précédente décrit les règles de base des tests de performance. L' implémentation réelle du programme peut diverger, certains exemples étant disponibles en Fortran , C ou Java .
HPL
HPL est une implémentation portable de HPLinpack qui a été écrite en C, à l'origine comme ligne directrice, mais qui est désormais largement utilisée pour fournir des données pour la liste TOP500, bien que d'autres technologies et packages puissent être utilisés. HPL génère un système linéaire d'équations d'ordre n et le résout en utilisant la décomposition LU avec pivotement partiel des lignes. Il nécessite des implémentations installées de MPI et de BLAS ou de VSIPL pour fonctionner.
En gros, l’algorithme présente les caractéristiques suivantes :
- distribution cyclique des données en blocs 2D
- Factorisation LU utilisant la variante orientée vers la droite avec différentes profondeurs d'anticipation
- factorisation de panneau récursive
- six variantes de diffusion de panneaux différentes
- algorithme de swap-diffusion réduisant la bande passante
- substitution arrière avec anticipation de la profondeur 1
Critique
Le test LINPACK est censé avoir réussi grâce à l'évolutivité de HPLinpack, au fait qu'il génère un seul nombre, ce qui rend les résultats facilement comparables et à la vaste base de données historiques qui lui est associée. Cependant, peu de temps après sa sortie, le test LINPACK a été critiqué pour avoir fourni des niveaux de performance « généralement inaccessibles à tous, sauf à quelques programmeurs qui optimisent péniblement leur code pour cette machine et cette machine seule », car il ne teste que la résolution de systèmes linéaires denses, qui ne sont pas représentatifs de toutes les opérations habituellement effectuées en calcul scientifique. Jack Dongarra , le principal moteur des tests LINPACK, a déclaré que, bien qu'ils ne mettent l'accent que sur la vitesse de pointe du processeur et le nombre de processeurs, ils n'accordent pas suffisamment d'importance à la bande passante locale et au réseau.
Thom Dunning, Jr. , directeur du National Center for Supercomputing Applications , a déclaré à propos du benchmark LINPACK : « Le benchmark Linpack est l'un de ces phénomènes intéressants – presque tous ceux qui le connaissent se moqueront de son utilité. Ils comprennent ses limites, mais il est apprécié parce que c'est le seul chiffre auquel nous avons tous adhéré au fil des ans. »
Selon Dongarra, « les organisateurs du Top500 cherchent activement à étendre la portée du rapport de référence » car « il est important d'inclure davantage de caractéristiques de performance et de signatures pour un système donné ». L'une des possibilités envisagées pour étendre le benchmark du TOP500 est la HPC Challenge Benchmark Suite. Avec l'avènement des ordinateurs pétascales , les bords traversés par seconde ont commencé à émerger comme une mesure complémentaire aux FLOPS mesurés par LINPACK. Une autre mesure de ce type est le benchmark HPCG , proposé par Dongarra.
Le problème du temps d'exécution
Selon Jack Dongarra , le temps d'exécution nécessaire pour obtenir de bons résultats de performance avec HPLinpack devrait augmenter. Lors d'une conférence tenue en 2010, il a déclaré qu'il s'attendait à des temps d'exécution de 2,5 jours dans « quelques années ».