Rentrée atmosphérique sur Mars de la capsule transportant le rover Perseverance, prévisions météorologiques, simulation numérique de crash automobile, calcul des performances aérodynamiques d’un avion… La réalisation de toute simulation numérique passe d’abord par une phase de modélisation (physique, mécanique, biologique ou autre) aboutissant, en général, à des équations mathématiques élaborées. La résolution « à la main » de ces équations est, sauf cas d’école, impossible et il faut passer par des algorithmes de résolution numérique, faisant appel eux-mêmes à des mathématiques. Ainsi, un calcul d’aérodynamique externe autour d’une automobile demande la résolution d’un système constitué de millions d’équations à chaque instant, nécessitant des heures de calcul même sur une machine performante.
Le calcul à haute performance
-----------------------------
Au début des années 2000, le calcul à haute performance (ou HPC pour high performance computing), encore appelé calcul intensif, était encore réservé à quelques centres de recherche nationaux ou à de grandes entreprises. Un « supercalculateur » était alors toujours une machine virtuelle constituée de centaines de machines (appelées nœuds de calcul) connectées entre elles par un réseau très rapide. Un tel système informatique est évidemment très coûteux, de l’investissement initial aux besoins permanents de maintenance en passant par les systèmes de refroidissement. La simulation numérique est alors répartie sur les différents processeurs des nœuds de calcul. On parle de calcul parallèle.
Durant les vingt dernières années, la performance des processeurs (CPU, acronyme de central processing units) et des capacités de mémoire s’est considérablement améliorée, rendant nos machines personnelles déjà bien plus performantes. Aujourd’hui, un CPU peut être lui-même composé de plusieurs cœurs de calcul (typiquement quatre, huit, seize voire vingt cœurs) et chaque cœur peut atteindre la puissance de 10 GFlops (dix milliards d’opérations flottantes par seconde). Pour un CPU à vingt cœurs, on peut donc atteindre une puissance théorique déjà impressionnante de 200 GFlops (hors effets de cache, de latence et de transferts de données, et supposant une répartition idéale des opérations sur les différents cœurs).