Lo standard OpenMP
Il CASPUR partecipa allo sviluppo dello standard OpenMP (Open specification for Multi-Processing).
OpenMP è un API (Application Program Interface) per la parallelizzazione multi-threaded di codici Fortran, C e C++ su sistemi a memoria condivisa. Si basa su direttive di compilazione che permettono di distribuire il lavoro tra differenti CPU (o core) in maniera semplice, incrementale e portabile.
OpenMP è nato nel 1997 e il CASPUR è stato uno dei primi centri a adottare lo standard, esplorando la sua applicabilità e contribuendo alla sua diffusione.
Nel 2002, il Consorzio ha organizzato The Fourth European Workshop on OpenMP (EWOMP 2002) e, nel 2012, The International Workshop on OpenMP (IWOMP 2012).
Il CASPUR ha partecipato attivamente all'ideazione del modello di tasking dinamico di OpenMP e alla stesura dello standard 3.0, pubblicato nel 2008. Il Consorzio presiede la Tasking subcommitee, uno dei gruppi di lavoro che si occupa dell'evoluzione del linguaggio.
I corsi periodici sul calcolo parallelo e la Scuola Estiva del CASPUR contribuiscono alla diffusione di OpenMP a livello nazionale.
Il CASPUR sviluppa e parallelizza diverse applicazioni, in collaborazione con università, centri di ricerca e industrie, nei campi della chimica computazionale, bioinformatica, fisica computazionale, fluidodinamica e idrodinamica navale, geofisica, scienza dei materiali e finanza, avvalendosi sia del modello di programmazione di OpenMP che della programmazione ibrida OpenMP/MPI (Message Passing Interface).
L’evoluzione dello standard - le cui specifiche sono disponibili sul sito www.openmp.org - è gestita dall’OpenMP Architecture Review Board (ARB), un ente no-profit composto dalle maggiori aziende del settore, da alcuni centri di ricerca e da cOMPunity, l’associazione degli utenti di OpenMP. Gli sviluppi tecnici e la stesura delle specifiche sono affidati a un Language Committee, di cui fanno parte esperti degli enti componenti l’ARB.
Nel 2011 è stata rilasciata la versione 3.1 dello standard e al momento si sta lavorando allo sviluppo della versione 4.0 che includerà:
- supporto per gli acceleratori: in linea con la filosofia di OpenMP e sulla base dell'esperienza di OpenACC, sarà introdotta la possibilità di eseguire parti di codice e di gestire il passaggio di variabili su un diverso device, come ad esempio le GPUs (Graphics Processing Units);
- gestione dell'errore: sarà definito il modo di gestire gli errori a livello di sistema, run-time e utente e la teminazione dell'esecuzione di OpenMP allo scopo di rendere più stabili e robuste le applicazioni;
- thread affinity: la determinazione di dove dovrà essere eseguito un thread OpenMP, sarà direttamente parte del linguaggio; ciò renderà più semplice e portabile la gestione dell'affinità e più performanti le applicazioni che sfruttano hardware eterogeneo;
- estensione dei task: ulteriori estensioni potenzieranno la gestione della sincronizzazione e della dipendenza tra task;
- supporto per il Fortran 2003: sarà esteso il supporto di OpenMP ai nuovi costrutti del Fortran 2003, tra cui l'interoperabilità con il C.
Lo scopo è quello di fornire un linguaggio parallelo di alto livello per lo sviluppo di un numero sempre maggiore di applicazioni, dall'industria automobilistica e aeronautica alle biotecnologie, l'automazione, la robotica e la finanza.
La versione dello standard 4.0 porterà OpenMP nell'era del calcolo eterogeneo, supportando un numero maggiore di sistemi e al tempo stesso rendendolo più robusto.
