Dopo tre anni di sviluppo, è stata pubblicata una serie di specifiche OpenMP 6.0 (Open Multi-Processing), che definiscono l'API e i metodi di applicazione della programmazione parallela per i linguaggi C, C++ e Fortran su sistemi multicore e ibridi (CPU+GPU/DSP) con memoria condivisa e blocchi di vettorizzazione (SIMD). Si prevede che il supporto iniziale per alcune funzionalità di OpenMP 6.0 sarà incluso nelle versioni di LLVM/Clang 20 e GCC 15.
Le principali novità in OpenMP 6.0:
- Semplificato il processo di programmazione delle attività (task), che definisce parti indipendenti del programma che possono essere eseguite in parallelo con altre parti.
- È stata aggiunta la possibilità di eseguire attività in thread free-agent, non legati a gruppi di thread (teams), che eseguono regioni parallele (parallel region, blocco di codice eseguito in più thread).
- È stato garantito il supporto per la conservazione del grafo delle attività (taskgraph), che definisce le dipendenze tra le attività e l'ordine di esecuzione delle attività, per migliorare l'efficienza delle riproduzioni successive.
- È stato implementato un meccanismo di task trasparenti per semplificare la gestione delle dipendenze e l'automazione dell'esecuzione dei task secondari.
- Aumentato il supporto per i dispositivi di calcolo utilizzabili per l'esecuzione di task in parallelo (CPU, GPU, DSP, ecc.).
- Introdotto un nuovo syntax per array che permette di utilizzare la direttiva «workdistribute» per suddividere l'elaborazione degli array tra diverse unità di lavoro.
- Ampliate le capacità di gestione dell'allocazione della memoria, semplificando la gestione delle variabili per le quali la memoria è allocata dinamicamente.
- Espanso il supporto per gli attributi che definiscono la distribuzione dei dati tra i dispositivi per impostazione predefinita.
- Semplificata la scrittura del codice per trasferimenti dati asincroni a dispositivi di calcolo aggiuntivi (GPU).
- Migliorata la gestione della memoria e della sua associazione con i dispositivi di calcolo.
- Aggiunta la direttiva «groupprivate» per l'assegnazione della memoria a un gruppo di thread eseguiti su un determinato dispositivo di calcolo.
- Programmabilità semplificata di alcuni tipi di trasformazione dei cicli, come la fusione di più cicli, la modifica dell'ordine dei cicli annidati e la reversibilità dei cicli.
- Aggiunta una nuova operazione di induzione per la gestione del parallelismo nei cicli di semplici calcoli aritmetici e nelle operazioni personalizzate, che dipendono da valori precedenti.
- Supporto completo per il parallelismo nei programmi scritti secondo gli standard C23 (inclusa la sintassi degli attributi), Fortran 2023 e C++23. Aggiunti nuovi attributi per C/C++.
- Espanse le capacità di gestione dello storage e della memoria. Aggiunti nuovi attributi per controllare come deve essere allocata e utilizzata la memoria. Aggiunta un'API per definire e richiedere spazi di memoria.
- Rimosse le funzionalità dichiarate obsolescenti nelle specifiche OpenMP 5.0, 5.1 e 5.2.
Fonte: opennet.ru
