Chapter 11.1 : Introduction



Depuis que la fréquence de fonctionnement du matériel de calcul stagne, pour des raisons de dissipation thermique, les fabricants rivalisent d'imagination pour multiplier et spécialiser les cœurs à l'infini. La programmation de ce matériel devient une affaire de spécialistes et l'offre technologique explose. Nos physiciens ne peuvent plus écrire leurs applications de façon candide, en faisant mine d'avoir une simple machine de von Neumann, séquentielle avec une mémoire agréablement uniforme. Il faut prendre en compte le matériel hétérogène sous-jacent, combiner différentes approches parallèles, et arracher des gains de performances en optimisant le code de façon agressive. Car malgré la nouvelle donne, les concepteurs des instruments de physique persistent à réclamer un gain d'un ordre de grandeur à chaque nouvelle génération informatique.

Or, optimiser le code, c'est généralement nuire à sa lisibilité, à sa portabilité, et à sa maintenabilité à long terme. Il convient donc, en théorie, de le faire le moins et le plus tard possible, en s'appuyant sur des profilages fins permettant de circonscrire l'optimisation aux portions de code les plus impactantes sur la performance globale. Malheureusement, en pratique, certaines optimisations ne peuvent plus être faites si on n'a pas opté pour les bons choix dès le début, notamment en ce qui concerne les structures de données. Pire, ces bons choix en amont sont souvent assez différents selon les technologies d'optimisation finalement utilisées. Et nous parlons de "technologies" au pluriel, parce qu'aucune ne saurait tout faire, et qu'il faut absolument les cumuler au sein d'un même programme, avec une programmation dite "hybride".

C'est un des objectifs principaux du groupe Reprises, que d'évaluer les technologies en concurrence, et de rechercher le juste équilibre entre performance, portabilité et facilité d'écriture et de maintenance, ce que l'on qualifie à présent de Performance, Portability and Productivity dans l'un des nouveaux ateliers de la conférence SuperComputing (https://p3hpc2018.lbl.gov/). À ces trois "P", nous ajoutons celui de la précision numérique. En effet, une des potentialités de gain de performance réside dans la réduction de cette précision, lorsqu'elle est inutilement élevée. Encore faut-il reprendre le contrôle de nos erreurs de calcul flottant, dont on fait trop peu de cas dans notre communauté.

Dans ce document, nous tentons de faire le bilan de notre expérience dans ces différents sujets, en mêlant des considérations générales sur l'optimisation, des chapitres dédiés aux thèmes clefs du moment (vectorisation, GPU, FPGA), ou des thèmes qui nous paraissent importants (précision). L'inévitable guerre des langages de programmation est également abordée. En conclusion, nous essayons d'en tirer des enseignements à destination des chercheurs, et des recommandations à destination des décideurs de l'institut.