Rientro atmosferico su Marte della capsula che trasporta il rover Perseverance, previsioni meteorologiche, simulazione numerica di un crash automobilistico, calcolo delle prestazioni aerodinamiche di un aereo… La realizzazione di qualsiasi simulazione numerica passa anzitutto attraverso una fase di modellazione (fisica, meccanica, biologica o di altro tipo), che conduce in genere a elaborate equazioni matematiche. Risolvere «a mano» queste equazioni è impossibile, salvo casi scolastici, e occorre ricorrere ad algoritmi di risoluzione numerica, che a loro volta fanno uso della matematica. Così, un calcolo di aerodinamica esterna attorno a un’automobile richiede a ogni istante la risoluzione di un sistema formato da milioni di equazioni, con tempi di calcolo di ore anche su una macchina potente.
Il calcolo ad alte prestazioni -----------------------------
All’inizio degli anni 2000, il calcolo ad alte prestazioni (o HPC, da high performance computing), detto anche calcolo intensivo, era ancora riservato a pochi centri di ricerca nazionali o a grandi imprese. Un «supercalcolatore» era allora sempre una macchina virtuale costituita da centinaia di macchine (dette nodi di calcolo) collegate tra loro da una rete molto veloce. Un sistema informatico di questo tipo era ovviamente molto costoso, dall’investimento iniziale alle esigenze permanenti di manutenzione, passando per i sistemi di raffreddamento. La simulazione numerica veniva quindi distribuita fra i diversi processori dei nodi di calcolo. Si parla di calcolo parallelo.
Negli ultimi vent’anni, le prestazioni dei processori (CPU, acronimo di central processing units) e la capacità di memoria sono migliorate notevolmente, rendendo i nostri computer personali già molto più potenti. Oggi una CPU può essere composta a sua volta da più nuclei di calcolo (tipicamente quattro, otto, sedici o persino venti nuclei) e ciascun nucleo può raggiungere una potenza di 10 GFlops (dieci miliardi di operazioni in virgola mobile al secondo). Per una CPU a venti nuclei si può dunque raggiungere una potenza teorica, già impressionante, di 200 GFlops (trascurando gli effetti di cache, latenza e trasferimento dei dati e supponendo una distribuzione ideale delle operazioni tra i vari nuclei).