È stata appena rilasciata la nuova versione 1.6 del progetto PoCL (Portable Computing Language OpenCL) . Tra le novità principali della versione 1.6 figurano la compatibilità con Clang/LLVM 11.0, il miglioramento delle prestazioni e delle funzionalità CUDA, una maggiore compatibilità con PowerPC e funzionalità di debug OpenCL ottimizzate.
Per chi non ha familiarità con PoCL, si tratta di un'implementazione open-source portatile (con licenza MIT) dello standard OpenCL (versione 1.2 con alcune funzionalità compatibili con la 2.0). Oltre ad essere un'implementazione OpenCL open-source altamente portatile e multi-dispositivo (veramente eterogenea) , uno degli obiettivi principali di questo progetto è migliorare l'interoperabilità di diversi dispositivi compatibili con OpenCL integrandoli in un'unica piattaforma centralizzata.
Inoltre, uno degli obiettivi chiave a lungo termine è migliorare la portabilità delle prestazioni dei programmi OpenCL su tipi di dispositivi che utilizzano tecniche di runtime e di compilazione.
Il compilatore del kernel OpenCL è basato su LLVM e Clang viene utilizzato come interfaccia per OpenCL C.Per fornire portabilità e prestazioni adeguate, il compilatore del kernel OpenCL può generare funzioni combinate che possono utilizzare varie risorse hardware per parallelizzare l'esecuzione del codice, come VLIW, superscalare , SIMD, SIMT, multi-core e multi-thread. È disponibile il supporto per i driver ICD (Installable Client Driver). Ci sono backend per fornire lavoro tramite CPU, ASIP (TCE / TTA), GPU basata su architettura HSA e GPU NVIDIA (CUDA).
Principali novità di PoCL 1.6
Questa nuova versione di PoCL 1.6 evidenzia la possibilità di compilare questa implementazione con i driver di dispositivo abilitati al momento della compilazione, così come la disponibilità del dispositivo verrà verificata all'avvio (in precedenza, i sistemi su cui è costruito ed eseguito PoCL avrebbero dovuto avere lo stesso supporto del controller). Implementata la possibilità di utilizzare il gestore di pacchetti conda per distribuire pacchetti binari PoCL con supporto CUDA per sistemi Linux-x86_64 e Linux-ppc64le.
Un altro cambiamento che spicca è il supporto per LLVM 11 insieme alle possibilità estese per il debug del codice OpenCL quando si utilizza il controller della CPU.
Inoltre, si evidenzia che è stata effettuata l'ottimizzazione delle prestazioni del backend CUDA, che ha consentito di velocizzare notevolmente le operazioni legate all'utilizzo della memoria locale (FFT, GEMM).
I benchmark che utilizzano i benchmark SHOC (che ora vengono continuamente testati mostrano che queste ottimizzazioni hanno portato a prestazioni molto migliori, in particolare per i benchmark che coinvolgono la memoria locale come FFT e GEMM, rispetto a una corsa di riferimento precedente. PoCL ora raggiunge spesso prestazioni competitive con OpenCL proprietario di Nvidia conducente). Accogliamo con favore i contributi per identificare ed eliminare le cause profonde delle restanti aree problematiche. Accogliamo con favore anche i contributi per migliorare la copertura delle funzionalità per gli standard OpenCL 1.2 / 3.0.

- Le prestazioni PoCL in molti test sono ora vicine al driver OpenCL proprietario di NVIDIA.
- Aggiunto il parametro di compilazione HARDENING_ENABLE per abilitare le opzioni del compilatore per generare una libpocl.so più sicura al costo del degrado delle prestazioni.
- Restituito il supporto per i sistemi PowerPC 8/9, per i quali il livello di implementazione OpenCL quando si utilizzano dispositivi pthread e CUDA corrisponde al livello CUDA sui sistemi x86_64.
- ABI modificato per i kernel CUDA che utilizzano blocchi locali __. Dopo l'aggiornamento, gli utenti devono svuotare la cache di pocl.
- Il supporto per l'opzione di compilazione SINGLE_LLVM_LIB è stato rimosso, invece di usare STATIC_LLVM e llvm-config per definire a quali librerie collegarsi.
Infine, se desiderate maggiori informazioni su questa nuova versione, potete consultare i dettagli nell'annuncio originale.
Chi fosse interessato ad approfondire l'argomento può consultare il sito web ufficiale , dove troverà documentazione e file scaricabili.
Il codice del progetto è distribuito sotto licenza MIT e il lavoro è supportato su piattaforme X86_64, MIPS32, ARM v7, AMD HSA APU e vari processori TTA specializzati con architettura VLIW.