Il consorzio Khronos, responsabile dello sviluppo delle specifiche della famiglia OpenGL, Vulkan e OpenCL, annuncia il completamento dello sviluppo delle specifiche OpenCL 3.0, che definiscono l'API e le estensioni del linguaggio C per l'organizzazione di calcoli paralleli cross-platform utilizzando CPU multi-core, GPU, FPGA, DSP e altri chip specializzati, dai chip utilizzati nei supercomputer e nei server cloud, a quelli che si possono trovare in dispositivi mobili e in tecnologie embedded. Lo standard OpenCL è completamente aperto e non richiede alcun pagamento di diritti d'autore. Aziende come IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments e Toshiba hanno partecipato alla realizzazione dello standard.
Nella fase attuale, la specifica ha il status di provvisoria, il che implica la possibilità di ulteriori modifiche basate sui feedback inviati tramite . Dopo che i commenti saranno presi in considerazione, la specifica otterrà il status di finale e sarà pubblicato un set di test finale per verificare la compatibilità delle implementazioni esistenti.
Le caratteristiche più notevoli :
- L'API OpenCL 3.0 ora copre tutte le versioni di OpenCL (1.2, 2.x), senza fornire specifiche separate per ciascuna versione. OpenCL 3.0 prevede la possibilità di estendere la funzionalità principale attraverso l'integrazione di ulteriori specifiche, che saranno sovrapposte sotto forma di opzioni, senza compromettere la natura monolitica di OpenCL 1.2/2.X.
- È stata dichiarata obbligatoria solo la funzionalità corrispondente a OpenCL 1.2, mentre tutte le possibilità offerte nelle specifiche OpenCL 2.x sono state classificate come non obbligatorie. Questo approccio semplificherà la creazione di implementazioni specializzate compatibili con OpenCL 3.0 e allargherà la gamma di dispositivi su cui può essere utilizzato OpenCL 3.0. Ad esempio, i produttori possono implementare il supporto per OpenCL 3.0 senza implementare funzionalità specifiche di OpenCL 2.x. Per accedere alle funzionalità non obbligatorie del linguaggio, in OpenCL 3.0 è stato aggiunto un sistema di verifiche di richiesta, che consente di valutare il supporto di singoli elementi dell'API, così come macro speciali.
- L'unificazione con le specifiche precedentemente rilasciate semplifica la traduzione delle applicazioni su OpenCL 3.0. Le applicazioni OpenCL 1.2 potranno funzionare su dispositivi con supporto OpenCL 3.0 senza modifiche. Anche le applicazioni OpenCL 2.x non richiederanno modifiche al codice, ma se l'ambiente OpenCL 3.0 fornisce le funzionalità necessarie (per garantire la portabilità in futuro, si raccomanda alle applicazioni OpenCL 2.x di aggiungere richieste di verifica per valutare il supporto delle funzionalità utilizzate in OpenCL 2.x). Gli sviluppatori di driver con implementazioni OpenCL potranno facilmente aggiornare i propri prodotti a OpenCL 3.0, aggiungendo solo la gestione delle richieste per la presenza di determinate chiamate API e, nel tempo, aumentando progressivamente la funzionalità.
- La specifica OpenCL 3.0 è stata allineata con l'ambiente, le estensioni e le specifiche della rappresentazione intermedia universale SPIR-V, che è utilizzata anche nell'API Vulkan. Il supporto per la specifica SPIR-V 1.3 è stato incluso nel nucleo di OpenCL 3.0 come funzionalità opzionale. Attraverso l'uso della rappresentazione intermedia per i nuclei computazionali è stato aggiunto il supporto per le operazioni sulle sottogruppi.
- È stato aggiunto il supporto per l'estensione per l'esecuzione di operazioni DMA asincrone (Asynchronous DMA), supportata su chip simili a DSP con accesso diretto alla memoria. L'Asynchronous DMA consente di utilizzare transazioni DMA per trasferire dati tra memoria globale e locale in modalità asincrona, parallelamente ai calcoli o ad altre operazioni di trasferimento dati.
- La specifica delle estensioni di programmazione parallela per il linguaggio C è stata aggiornata alla , mentre lo sviluppo delle estensioni linguistiche OpenCL per C++ è stato interrotto a favore del progetto 'C++ for OpenCL'. C++ for OpenCL è un compilatore basato su Clang/LLVM e i nuclei in C++ e OpenCL C nella rappresentazione intermedia SPIR-V o nel codice macchina di basso livello. Attraverso la traduzione in SPIR-V è stata inoltre organizzata l'assemblaggio di applicazioni C++ che utilizzano la libreria di modelli SYCL, semplificando la creazione di applicazioni parallele.
- Per la traduzione di OpenCL attraverso l'API Vulkan sono stati proposti un compilatore , che trasforma i nuclei OpenCL nella rappresentazione Vulkan SPIR-V, e un'interfaccia per garantire il funzionamento dell'API OpenCL sopra Vulkan.
Fonte: opennet.ru
