Nel mondo dell'high performance computing (HPC), la portabilità delle prestazioni è un obiettivo perseguito da molti sviluppatori. Tuttavia, con la diversificazione delle piattaforme informatiche, questo obiettivo si scontra con numerose sfide. La portabilità delle prestazioni non riguarda solo la possibilità di far funzionare un'applicazione su diverse piattaforme hardware, ma, cosa ancora più importante, come mantenerne la compatibilità senza compromettere le prestazioni. Ad oggi non esiste uno standard universale per quantificare e valutare la portabilità delle prestazioni, il che rende difficile per gli sviluppatori progettare software.
La portabilità delle prestazioni rappresenta il presupposto che la singola base di codice di uno sviluppatore funzionerà bene su nuove architetture e manterrà limiti di prestazioni accettabili su una varietà di architetture attuali che non sono ancora state testate.
La definizione e la misurazione della portabilità delle prestazioni sono oggetto di accesi dibattiti. Alcuni sostengono che il problema sia principalmente la portabilità delle applicazioni, mentre altri insistono sul fatto che la chiave sia la portabilità del codice sorgente. Soprattutto nell'attuale situazione in cui l'hardware cambia ogni giorno di più, gli sviluppatori devono valutare come consentire ai loro prodotti di continuare a funzionare su più piattaforme. Il programma di supercalcolo (ECP) del Dipartimento dell'Energia degli Stati Uniti sottolinea questo punto poiché è necessario creare un ecosistema informatico compatibile per diverse architetture hardware.
Si ritiene generalmente che "un codice possa funzionare bene su più architetture, il che è sinonimo di portabilità delle prestazioni".
Quando si valuta la portabilità delle prestazioni, gli sviluppatori solitamente prendono in considerazione due fattori: portabilità e prestazioni. La portabilità può essere misurata esaminando le righe di codice utilizzate su diverse architetture, mentre le prestazioni possono essere determinate confrontando le versioni ottimizzate per la piattaforma con le versioni portabili. Nonostante questi metodi di misurazione, nel settore mancano ancora standard trasparenti, il che rende difficile per gli sviluppatori comprendere chiaramente come ottenere la migliore portabilità delle prestazioni.
Alla conferenza sulla portabilità del DOE (Dipartimento dell'Energia degli Stati Uniti) del 2016, i partecipanti si sono impegnati in un acceso dibattito sulla portabilità delle prestazioni. Molti noti sviluppatori e scienziati hanno partecipato all'incontro per condividere nuove intuizioni e requisiti per la portabilità delle prestazioni. Vale la pena notare che c'è chi ritiene che la portabilità delle prestazioni offerta dai futuri modelli di programmazione parallela sarà più significativa di quella che le applicazioni stesse possono offrire.
Come accennato durante la riunione, "Un codice è portabile quando il team dell'applicazione lo considera portabile".
Di fronte a piattaforme hardware così diverse, gli sviluppatori devono trovare un framework adatto a supportare il loro codice. Framework noti come OpenCL, SYCL e OpenMP sostengono di facilitare la portabilità delle funzionalità. Questi framework supportano la programmazione parallela su più piattaforme, consentendo agli sviluppatori di programmare in più linguaggi. Tuttavia, oltre ai framework, esistono anche soluzioni non framework, come linguaggi self-tuning e linguaggi specifici di dominio, che possono contribuire a migliorare la portabilità delle prestazioni.
In breve, la questione della portabilità delle prestazioni sta diventando sempre più importante nell'elaborazione ad alte prestazioni perché influisce direttamente sull'efficienza del lavoro dello sviluppatore e sullo sviluppo sostenibile delle applicazioni. Poiché le esigenze informatiche cambieranno in futuro e la tecnologia informatica progredirà rapidamente, come dovrebbero gli sviluppatori adattarsi e affrontare queste sfide?