Il software matematico è una branca della scienza che studia metodi per la risoluzione di problemi matematici con l’uso di calcolatori elettronici; il fine ultimo è sviluppare strumenti software sufficientemente generali, riutilizzabili su diversi computer, che consentano di risolvere classi di problemi matematici in vari domini applicativi (Boisvert Ronald, 2000).
L’introduzione e lo studio di modelli concettuali della realtà sono alla base della ricerca scientifica in ogni dominio applicativo, dai più tradizionali ambiti delle cosiddette STEM – Science, Technology, Engineering, Mathematics, a settori quali finanza, medicina, scienze sociali.
Ruolo del software matematico
La pandemia da SARS-CoV-2 o il recente riconoscimento dell’Accademia svedese, che ha assegnato il premio Nobel 2021 per la fisica all’italiano Giorgio Parisi per i suoi studi sulla comprensione dei sistemi complessi, hanno confermato in modo inequivocabile la pervasività e il ruolo dei modelli matematici nella comprensione dei fenomeni reali.
Il modello matematico introduce relazioni funzionali tra variabili e dati ed è generalmente rappresentato da un insieme di equazioni di qualche tipo, che una volta risolte forniscono informazioni per una migliore comprensione dei fenomeni.
Il calcolo scientifico si occupa di definire gli algoritmi e realizzare il software per risolvere i modelli matematici con i computer, al fine di effettuare le simulazioni che consentono la previsione e il controllo di tali fenomeni.
Il ruolo del software matematico nel calcolo scientifico è determinante: oggi si lavora per utilizzarlo all’interno del supercalcolatori che operano al ritmo di 1018 operazioni aritmetiche al secondo.
Green Computing: tutte le sfide per costruire supercalcolatori a ridotto impatto energetico
Il software matematico per migliorare la produzione di energia rinnovabile
Lo European Green Deal[3] si propone di ridurre le emissioni di gas a effetto serra in atmosfera del 55% rispetto ai livelli attuali entro il 2030. La realizzazione di tale obiettivo dipende in larga parte dalla capacità di migliorare ed aumentare lo sviluppo delle tecnologie per la produzione
L’energia eolica è una delle maggiori fonti di energia rinnovabile in Europa e si stima la necessità di triplicare[4] i livelli attuali di produzione, al fine di realizzare gli obiettivi del Green Deal.
L’industria dell’energia eolica fonda le proprie capacità di migliorare la tecnologia e l’efficienza delle pale eoliche sull’uso di strumenti di simulazione computazionale capaci di combinare modelli matematici della struttura e della dinamica delle pale eoliche con modelli matematici di fluidodinamica, al fine di analizzare gli effetti della velocità del vento sull’efficienza nella produzione dell’energia.
Figura 1: Simulazione della velocità del vento in un parco eolico (fonte: Herbert Owen, Barcellona Supercomputing Center) di energia da fonti rinnovabili
In questo contesto, il Barcellona Supercomputing Center[5] si propone di utilizzare il software di simulazione Alya[6] per simulare la capacità di produzione di energia di parchi eolici costituiti da centinaia di pale eoliche, utilizzando moderni supercalcolatori capaci di eseguire milioni di miliardi (1015) di operazioni al secondo.
A questo scopo, è necessario essere in grado di risolvere un modello matematico che possa simulare la velocità del vento in prossimità delle singole pale eoliche con estrema accuratezza.
Un tale modello si basa sulle leggi fisiche del moto turbolento di un fluido ed è rappresentato da un insieme di equazioni denominate equazioni di Navier-Stokes (NS).
La risoluzione delle equazioni di NS è basata su metodi di approssimazione numerica che richiedono algoritmi efficienti e accurati per la risoluzione di alcuni tipi di sistemi di equazioni algebriche lineari con un numero di equazioni e di incognite che può superare i mille miliardi (1012).
Questo tipo di sistemi di equazioni algebriche lineari è comune a molti modelli matematici di fenomeni di fluidodinamica e si ritrova anche in modelli matematici di altri fenomeni fisici o, più in generale, di rappresentazione della realtà.
Per tale ragione, essi vengono considerati un nucleo di calcolo fondamentale del calcolo scientifico e la loro risoluzione efficiente e accurata rappresenta oggetto di studio preminente nel settore del software matematico.
La capacità di definire algoritmi per la risoluzione di sistemi di equazioni algebriche lineari e implementare tali algoritmi in moduli di software, utilizzabili come componenti costituitivi per software di simulazione come Alya, rappresenta un elemento critico per realizzare simulazioni affidabili e concretamente utili nella progettazione di innovazioni tecnologiche in molti settori.
Il software matematico IA per identificare gli oggetti
Un altro esempio di identificazione di componenti di software matematico fondamentale, da cui deriva la capacità di risolvere modelli di rappresentazione della realtà, proviene dalle moderne tecniche di Intelligenza Artificiale.
Figura 2: Classificazione di una immagine (fonte: Jinchao Xu, Penn State University)
Una delle più diffuse applicazioni di Intelligenza Artificiale è rappresentata dal problema della classificazione di immagini digitali (o più in generale di insiemi di informazioni digitali).
L’idea di base è che esista un metodo di calcolo che consenta l’identificazione automatica di oggetti rappresentati in immagini digitali, ad esempio che consenta di distinguere il cane, dal gatto e dal coniglio, riportati nella Figura 2.
È evidente che le applicazioni di classificazione di immagini spaziano in settori scientifici e tecnologici che vanno dalle automobili a guida autonoma, alla diagnostica medica, ai sistemi di videosorveglianza, solo per citarne alcuni.
Una immagine digitale è un insieme di dati numerici, la cui dimensione dipende dal numero di pixel che compongono l’immagine e dalla modalità di rappresentazione del colore di ogni pixel (detto modello cromatico).
Il problema matematico alla base del riconoscimento dell’immagine in Figura 2 è quello di determinare una funzione che consenta di separare adeguatamente i dati numerici in tre differenti sottoinsiemi, ognuno dei quali rappresenta uno specifico animale dell’immagine[7].
Si impone che la funzione abbia una forma opportuna, ovvero si sceglie la cosiddetta classe di funzioni, ad esempio nel caso delle tecniche di Deep Learning, le funzioni sono le cosiddette deep neural network, reti neurali profonde o a più livelli (Higham Catherine, 2019).
Esse si basano sulla composizione di una semplice funzione, detta percettrone, che esemplifica il funzionamento di un neurone nel cervello umano, e la cui definizione dipende da un insieme di parametri che vanno determinati a seconda del problema da risolvere.
La determinazione di tali parametri, e quindi la definizione univoca della funzione, è un procedimento di calcolo che viene denominato network training, addestramento della rete.
Tale procedimento è basato sull’utilizzo di un certo insieme di immagini assegnate (training set), di cui è noto il contenuto, e sulla capacità di classificazione accurata del contenuto di queste immagini da parte della funzione individuata.
Dal punto di vista matematico, un tale problema appartiene alla classe dei problemi di ottimizzazione numerica e corrisponde a determinare il minimo di un’altra funzione, nota come funzione obiettivo (o funzione costo), definita come una misura dell’errore che la rete neurale commette nella classificazione delle immagini disponibili.
La capacità di risolvere in modo accurato ed efficiente tali problemi di ottimizzazione, per quantità di dati molto elevate, è anch’esso oggetto di studio centrale nell’ambito del software matematico.
La disponibilità di algoritmi e moduli software, che consentano il training di reti neurali in tempi rapidi e con sufficiente accuratezza, per quantità di dati dell’ordine delle migliaia di petabytes (1015 bytes), è un elemento critico nello sviluppo di applicazioni di Intelligenza Artificiale affidabili e utilmente praticabili (Chen Xue-Wen, 2014).
Software matematico: le metodologie e gli strumenti
La ricerca nel settore del software matematico è definita da principi e metodologie che traggono origine negli ambiti disciplinari della matematica e dell’informatica.
Le varie articolazioni delle attività di ricerca includono (Boisvert Ronald, 2000):
- lo sviluppo e l’analisi di algoritmi per la risoluzione di problemi matematici che ricorrono in svariate applicazioni (si pensi agli esempi forniti nei paragrafi precedenti);
- l’implementazione degli algoritmi sui computer disponibili e lo studio dell’interazione degli algoritmi con una specifica architettura hardware/software;
- la definizione e la realizzazione di ambienti di programmazione per algoritmi numerici, come i sistemi aritmetici, i linguaggi e i relativi strumenti software;
- la definizione di metodologie di ingegneria del software per specifici contesti matematici, che consentano da un lato un’ampia portabilità del software matematico su diversi calcolatori elettronici, nascondendo i dettagli implementativi, e dall’altra l’uso di interfacce che espongano un formalismo tipico dell’applicazione;
- la definizione e lo sviluppo di metodologie di valutazione delle prestazioni, inclusi i modelli di prestazione e i benchmark di riferimento;
- la definizione e la realizzazione di metodologie per la documentazione, l’aggiornamento e la diffusione del software matematico.
È importante chiarire che, diversamente da altri contesti applicativi, il software per il Calcolo Scientifico pone un insieme di problematiche specifiche che hanno un impatto determinante sullo sviluppo del software, l’affidabilità e la riproducibilità dei risultati, la velocità di esecuzione, la resilienza rispetto ad errori tipici del calcolo numerico.
Ad esempio, un elemento critico degli algoritmi per la risoluzione di un problema matematico con un calcolatore elettronico è l’uso dell’aritmetica floating-point, che introduce l’errore di arrotondamento (round-off) nella rappresentazione dei numeri e nella maggior parte delle operazioni aritmetiche.
Ogni algoritmo numerico che non sia “naïve” deve poter controllare gli errori di arrotondamento e introdurre tecniche di calcolo che ne riducano l’accumulo e/o diano opportune segnalazioni lì dove gli errori sono inevitabili.
D’altra parte, il concetto di approssimazione sottende molti algoritmi numerici che originano da processi infiniti, che ottengono il risultato finale come concetto matematico di limite, ad esempio la somma di una serie infinita di termini o il limite di una successione o di rapporti incrementali di una funzione.
In questo contesto, la determinazione di criteri attendibili per stabilire l’accuratezza e l’affidabilità di un risultato, la capacità di riconoscere un processo non convergente, così come la definizione di algoritmi che consentano di ottenere procedure rapidamente convergenti, richiede sforzi di ricerca significativi. L’interazione tra queste problematiche specifiche degli algoritmi numerici e le varie architetture e gli ambienti di programmazione dei calcolatori elettronici rappresenta un tema rilevante nella ricerca sul software matematico.
Figura 3: processo traslazionale nel software matematico (Dongarra J., 2021)
Ogni nuova generazione di architettura di calcolatori elettronici induce nuove problematiche nel settore del software matematico e richiede lo sviluppo di nuovi approcci algoritmici e nuovi ambienti e strumenti di programmazione, che possano consentire la realizzazione e la diffusione di componenti di software matematico utili nelle moderne sfide applicative per la Scienza Computazionale e dei Dati.
Questa centralità dell’interazione bi-direzionale tra le nuove architetture dei calcolatori e la ricerca nel software matematico e nelle sue applicazioni è stato recentemente identificato con il concetto di processo traslazionale (Dongarra Jack G. M., 2021) già noto in discipline dove la ricerca di base e le applicazioni sono interconnesse, si pensi alla Medicina Traslazionale.
Dongarra e i suoi co-autori evidenziano (Figura 3) come la ricerca di base venga motivata dall’esigenza di fornire nuovi algoritmi stabili ed efficienti per le nuove architetture dei calcolatori. Da questa ricerca di base vengono sviluppate nuove componenti e librerie di software matematico che risultano portabili su varie architetture e sono ben documentate e testate. Le applicazioni usano le componenti di software matematico, che spesso vengono ottimizzate per specifiche architetture dai vari produttori di calcolatori e incluse nel loro software di sistema, generando processi di standardizzazione e ampliando la platea degli utilizzatori. Una tale interazione crea un processo virtuoso di feedback tra gli scienzati dei vari settori e conduce a innovazioni scentifiche e tecnologiche.
La storia del software matematico e l’evoluzione dei computer
L’esigenza del software matematico è emersa sin dalla fine degli anni ’40 del secolo scorso, quando le prime applicazioni dell’uso dei computer nella risoluzione di problemi scientifici evidenziarono il ruolo preminente di una matematica del calcolo e di competenze specifiche di strumenti di programmazione nel favorire lo sviluppo di un nuovo modo di fare scienza, attualmente noto come “scienza computazionale e dei dati” o “calcolo scientifico”.
La prima pubblicazione di un programma di calcolo scientifico è probabilmente quella relativa al codice per la risoluzione di una equazione differenziale alle derivate parziali utilizzando il computer UNIVAC nel 1949, mentre una delle prime librerie di calcolo scientifico data al 1951 (Boisvert Ronald, 2000).
Dopo un periodo pionieristico, lo sviluppo del software matematico e la co-evoluzione delle architetture di calcolo ha una forte accelerazione a partire dagli anni ‘70. Dalla introduzione di linguaggi di programmazione più convenienti, quali Algol e Fortran prima, seguiti poi da C e C++, all’introduzione dei co-processori vettoriali, dei processori RISC e delle reti di calcolatori (cluster), la correlazione tra software e sviluppo hardware diviene sempre più stretta.
La comunità del software matematico si è riunita per la prima volta nell’aprile 1970 in occasione di in un simposio organizzato da John Rice[8], professore emerito di informatica e professore di matematica all’università di Purdue (USA).
In quell’occasione, è stata evidenziata la necessità di una nuova area di studi specialistici e della nascita di una rivista scientifica dedicata al software matematico: grazie al lavoro del comitato presieduto da Rice, il primo volume di “ACM Transactions on Mathematical Software”, tuttora rivista scientifica di riferimento nel settore, è stato pubblicato nel 1975.
Durante gli anni ’70 sono stati sviluppati inoltre progetti di ricerca per l’implementazione di software matematico affidabile ed efficiente secondo chiari criteri di qualità, oltre a librerie di software che hanno orientato la ricerca nelle nuove architetture per calcolatori elettronici.
Una delle grandi tappe è stato lo sviluppo della libreria scientifica LINPACK (LINear algebra PACKage), che fornisce una serie di componenti software per la risoluzione di sistemi di equazioni algebriche lineari; il nome LINPACK è tuttora associato a uno dei programmi di benchmark più popolari, appunto il LINPACK HPC benchmark, che ha influenzato fortemente gli sforzi dei ricercatori e quelli dei produttori di hardware.
Il benchmark LINPACK è utilizzato per stilare la lista Top 500[9], l’elenco delle 500 installazioni di computer più veloci al mondo, pubblicata due volte l’anno a partire dal giugno 1993.
Il LINPACK HPC benchmark consiste nella risoluzione di un sistema in cui il numero di equazioni e di incognite viene fatto crescere fino a raggiungere le prestazioni migliori possibili per il computer in esame.
LINPACK è stato probabilmente il progetto più influente nell’ambito del software matematico per la scelta di basare il suo sviluppo sui nuclei BLAS- Basic Linear Algebra Subprograms, che rappresentano uno standard “de facto” per il calcolo scientifico.
Lo sviluppo di software matematico corretto e anche efficiente è infatti un problema complesso, e un processo di standardizzazione di nuclei computazionali di base comporta un forte risparmio in quanto consente il riuso di soluzioni già sviluppate da esperti.
Gli standard “de facto” BLAS forniscono una serie di operazioni che, in un certo senso, estendono il linguaggio di programmazione usato, includendo operatori per l’esecuzione di calcoli su vettori (BLAS 1), calcoli che coinvolgono matrici bidimensionali dense (ovvero matrici in cui la maggior parte dei valori è non nulla) e vettori, ad esempio il prodotto matrice-vettore (BLAS 2), oppure calcoli tra matrici dense, come il prodotto di due matrici (BLAS 3).
Questi operatori hanno seguito l’evoluzione delle piattaforme di calcolo; lo standard BLAS 1 era stato sviluppato per sfruttare le capacità vettoriali dei computer degli anni ‘70, ma l’uso efficiente di tali capacità vettoriali si è potuto realizzare solo con gli operatori di BLAS 2; infine, la classe degli operatori di BLAS 3 incorpora nel progetto l’esperienza e le tecniche necessarie per l’effettivo sfruttamento dei processori RISC con gerarchie di memoria e memorie cache.
Gli standard BLAS di livello 2 e 3 sono al cuore di LAPACK- Linear Algebra PACKage, evoluzione di LINPACK negli anni ‘90. Tale evoluzione ha determinato un processo di revisione degli algoritmi numerici per i nuclei di calcolo dell’Algebra Lineare con matrici dense, che ha posto al centro della scena versioni a blocchi dei metodi di base, definendo nuove problematiche in termini di analisi della stabilità numerica e di efficienza di diverse versioni di tali algoritmi.
Una simile evoluzione si è avuta anche nell’uso dei computer paralleli a memoria distribuita, con la definizione di PBLAS-Parallel BLAS, l’equivalente degli operatori dei 3 livelli di BLAS per architetture a memoria distribuita ampiamente utilizzati nel progetto ScaLAPACK- Scalable LAPACK (Dongarra Jack W. D., 1995).
La diffusione delle librerie scientifiche basate sull’uso degli operatori dei vari livelli di BLAS ha stimolato negli anni lo sviluppo di implementazioni efficienti di tali operatori, sia in contesti di ricerca, si pensi alle librerie ATLAS e OpenBLAS, sia ad opera dei produttori di hardware, si pensi alle librerie Intel-MKL, IBM ESSL, Cray SciLib, NVIDIA CuBLAS; si tratta quindi di un esempio, forse il più valido ad oggi, di applicazione del processo traslazionale discusso in precedenza.
Finora abbiamo citato degli esempi relativi alla risoluzione di sistemi di equazioni algebriche lineari rappresentati da matrici dense; d’altra parte nelle applicazioni del calcolo scientifico è molto comune trovarsi ad affrontare problemi che coinvolgono matrici sparse, ossia matrici i cui valori sono in gran parte nulli.
Questi problemi richiedono metodologie di risoluzione specifiche sia dal punto di vista algoritmico sia dal punto di vista implementativo, la cui importanza ha stimolato la definizione del benchmark HPCG, a complemento del benchmark LINPACK per definire la lista Top500. HPCG risolve un sistema di equazioni lineari algebriche, la cui matrice dei coefficienti è sparsa, attraverso il noto metodo del gradiente coniugato, ottenendo dei risultati prestazionali diversi dal benchmark LINPACK e più vicini ad alcune tipologie di applicazioni.
Il metodo del gradiente coniugato appartiene ad una più ampia classe di metodi, noti come metodi iterativi, in cui gli operatori fondamentali si possono identificare in operazioni tra vettori (somme e prodotti scalari) e prodotti tra una matrice sparsa e un vettore.
La necessità di utilizzare strutture dati “ad hoc” per la memorizzazione efficiente di tali matrici, e l’impatto che l’uso di tali strutture dati hanno sull’efficienza di esecuzione delle operazioni su diverse architetture di computer hanno indotto a uno sviluppo analogo a quello di BLAS, indirizzando la ricerca verso la definizione di operatori “standard” per i nuclei di base dell’Algebra Lineare con matrici sparse (Sparse BLAS) (Duff Iain, 2002).
Lo sviluppo di applicazioni di calcolo scientifico può beneficiare grandemente dalla disponibilità di implementazioni efficienti di tali operatori, che richiedono però metodologie di sviluppo software avanzate per la loro realizzazione.
Un esempio interessante è costituito dagli ultimi sviluppi del software Alya già citato in precedenza; nell’ambito del progetto EoCoE[10], che vede la collaborazione tra matematici, informatici ed esperti di fluidodinamica, il software Alya è stato rivisitato al fine di utilizzare moduli di una libreria scientifica basata su un’implementazione degli operatori di Sparse BLAS per architetture parallele con nodi ibridi dotati di acceleratori GPU, ottenendo nello stesso tempo tre obiettivi: l’identificazione dei metodi e delle strutture dati più adeguati per la risoluzione dei problemi di Algebra Lineare coinvolti nel processo di risoluzione; il netto miglioramento dell’efficienza del calcolo; lo sfruttamento ottimale degli acceleratori di tipo GPU.
Software matematico: i nodi attuali della ricerca sui supercalcolatori
L’obiettivo di questi anni è di riuscire a realizzare progetti di software matematico che siano in grado di utilizzare efficientemente supercomputer che operano al ritmo di 1018 operazioni aritmetiche al secondo.
I computer in cima alla lista Top500 sono infatti vicini a questo obiettivo: il primo nella classifica di novembre 2021 esegue 4.4×1017 operazioni aritmetiche al secondo.
D’altra parte, l’uso diffuso di tali supercalcolatori nelle moderne applicazioni richiede lo sviluppo di nuovi approcci algoritmici e nuovi modelli di sviluppo di software matematico in grado di affrontare varie criticità.
Tra quelle a impatto più elevato citiamo le seguenti:
- i tempi di trasferimento dei dati tra i vari livelli di memoria gerarchica e/o tra vari processori superano ampiamente I tempi necessari a fare operazioni su dati reali; è quindi necessario ripensare agli algoritmi numerici, al fine di ridurre gli accessi in memoria e le comunicazioni di dati tra diversi processori e, lì dove possibile, di sovrapporre il calcolo con la comunicazione dei dati;
- gli acceleratori (GPU, FPGA, co-processori) sono sempre più diffusi e l’esigenza di utilizzarli al meglio spesso richiede di sostituire metodi più accurati con controparti che consentano di esporre maggiore parallelismo, perchè calcoli aggiuntivi sono spesso preferibili ad accessi frequenti e irregolari alla memoria;
- unità aritmetiche che operano molto efficientemente su dati reali a precisione bassa, originariamente pensate per applicazioni di Intelligenza Artificiale, sono disponibili su vari acceleratori, si pensi alle GPU NVIDIA Tensor Core. L’uso di un’aritmetica a bassa accuratezza è auspicabile per accelerare le procedure di calcolo scientifico anche in contesti applicativi diversi dall’analisi dei dati; si pongono tuttavia problematiche di stabilità numerica e di sviluppo di algoritmi che possano ottenere risultati finali con accuratezza sufficientemente elevata, sfruttando opportunamente un’aritmetica ad accuratezza ridotta.
Le criticità citate richiedono la collaborazione sempre più intensa tra matematici, informatici ed esperti delle applicazioni e definiscono sempre di più le caratteristiche di un approccio scientifico traslazionale nell’ambito della Scienza Computazionale e dei Dati. Tale approccio è al centro di iniziative di finanziamento alla ricerca sia negli USA[11] sia nell’Unione Europea[12].
________________________________________
Bibliografia
Boisvert Ronald. (2000), “Mathematical Software: Past, Present, and Future”, Mathematics and Computers in Simulation, Vol. 54, 227–241.
Chen Xue-Wen, L. X. (2014), “Big Data Deep Learning: Challenges and Perspectives”, IEEE Access, Vol. 2, 514-525.
Dongarra Jack, G. M. (2021), “Translational Process: Mathematical Software Perspective”, Vol. 52, N.101216. Journal of Computational Science.
Dongarra Jack, W. D. (1995), “Software Libraries for Linear Algebra Computations on High Performance Computers”, SIAM Review, 37, 151-180.
Duff Iain, H. M. (2002), “An Overview of the Sparse Basic Linear Algebra Subprograms; the New Standard from the BLAS Technical Forum”. ACM Transactions on Mathematica Software, 28, 239-267.
Higham Catherine, H. D. (2019), “Deep Learning: An Introduction for Applied Mathematicians”. SIAM Review, Vol. 61, 860-891.
_________________________________________
Note
- EU economy and society to meet climate ambitions (europa.eu) ↑
- Microsoft Word – 210930_Fit for 55 position paper_Board approved_revised_final (windeurope.org) ↑
- BSC-CNS | Barcelona Supercomputing Center – Centro Nacional de Supercomputacion ↑
- Wind for Energy – EoCoE 2 ↑
- Slides_2021JuneCUHK_HK1.pdf ↑
- Purdue University – Department of Computer Science – John R. Rice ↑
- http://www.top500.org ↑
- EoCoE 2 – Energy Oriented Center of Excellence: toward exascale for energy ↑
- Home Page – Exascale Computing Project (exascaleproject.org) ↑
- Focus CoE (hpccoe.eu) ↑