L’elaborazione eterogenea richiede la parallelizzazione dei dati: SYCL e DPC++ sono un buon inizio

L’elaborazione eterogenea richiede la parallelizzazione dei dati: SYCL e DPC++ sono un buon inizio

Mi piace dire che “è tutta una questione di XPU“.

Viviamo in un’epoca meravigliosa in cui l’innovazione hardware sta portando a un’esplosione di CPU, GPU, FPGA, DSP, ASIC e simili – che abbrevierò semplicemente in XPU. XPUs è un’abbreviazione per “qualsiasi tipo di unità di elaborazione”, qualsiasi hardware che può aiutare un’applicazione a calcolare.

Come sviluppatori, l’assalto delle XPU significa che siamo sempre più sfidati a codificare per una più grande collezione di unità di elaborazione diverse. Dobbiamo considerare il tempo extra (e il costo) per riscrivere e testare il codice per migliorare le prestazioni delle applicazioni per le nuove architetture. 

Più che mai, per preservare la nostra sanità mentale e la manutenibilità del nostro codice, è essenziale che il codice che scriviamo sia applicabile al maggior numero possibile di XPU. 

Il passaggio a modelli di cross-architettura per lo sviluppo di applicazioni ha dimostrato che può far risparmiare alle organizzazioni molto tempo e denaro, e questo sta diventando una preoccupazione ancora più pressante con l’aumento del computing eterogeneo.

Oggi, stiamo ripensando il nostro mondo, perché sta rapidamente diventando un mondo di XPUs che alla fine trasformerà tutto l’IT.

XPUs: reinventare il software per il calcolo accelerato

  • CUDA, un sistema di programmazione software proprietario ampiamente utilizzato, è stato progettato ed è efficace per le GPU NVIDIA.
  • OpenCL ha adottato un approccio aperto e ha raggiunto un certo livello di supporto multi-vendor. Ma aveva i suoi difetti, in particolare l’essere C-centrico e non affrontare i bisogni del C++.

CUDA e OpenCL hanno servito bene il loro scopo. In futuro, gli sviluppatori avranno bisogno di un approccio veramente aperto e multi-vendor per mantenere la promessa delle XPU.

Perché SYCL e Data Parallel C++ (DPC++) sono la soluzione migliore?

Le lezioni apprese da CUDA e OpenCL hanno aperto la strada all’emergere di una soluzione veramente popolare e aperta per il parallelismo di dati basato su C++ su sistemi eterogenei. 

Questa soluzione è SYCL, un modello di programmazione di livello superiore progettato per migliorare la produttività della programmazione su più acceleratori hardware. 

Ha guadagnato rapidamente il supporto di molti venditori, l’interesse generale e il sostegno di diversi progetti di compilatori seri.

SYCL è importante perché una programmazione efficace nel nostro mondo sempre più eterogeneo richiede un accesso efficiente per tutte le XPU. Solo un approccio veramente aperto può raggiungere questo obiettivo.

SYCL è uno standard aperto per la programmazione di dati paralleli in C++ single-source per hardware eterogeneo, o XPU. 

SYCL permette una compilazione single-source in C++ per indirizzare più dispositivi su un sistema, piuttosto che usare C++ per l’host e uno o più linguaggi kernel specifici per i dispositivi.

SYCL porta la programmazione simile al kernel in C++ e un meccanismo per localizzare, interrogare e usare gli acceleratori in un sistema. 

La programmazione basata sul kernel è uno stile di programmazione importante per sfruttare il parallelismo dei dati, che è stato anche supportato da OpenCL e CUDA. La capacità di enumerare e accedere agli acceleratori in modo standard era già stata introdotta da OpenCL.

Date anche un’occhiata a DPC++ (Data Parallel C++), che fornisce un’implementazione aperta alla comunità LLVM, con l’ambizione di integrare tutto a monte nei compilatori LLVM C++. DPC++ mira ad implementare SYCL con alcune estensioni. 

DPC++ è stato il pioniere di molte delle caratteristiche che sono ora in SYCL 2020, e quindi ha avuto un vantaggio nell’implementazione di gran parte di SYCL 2020 prima ancora che l’inchiostro fosse asciutto sullo standard. 

C’è ancora del lavoro da fare per completare l’allineamento con l’intera specifica SYCL 2020; tutto il lavoro è facile da vedere nel repository open source molto attivo.

DPC++ è usato da Intel per indirizzare CPU Intel, GPU e FPGA.

DPC++ è anche usato da Codeplay per indirizzare le GPU NVIDIA.

Un altro compilatore SYCL, hipSYCL, supporta le CPU e le GPU AMD collegandosi a AMD HIP/ROCm.

Avere diversi compilatori open source per SYCL è fantastico per la comunità e dimostra che SYCL ha un supporto ampio, vario e aperto.

Nel corso del 2019 e 2020, ho lavorato con un piccolo team dedicato per creare il primo libro su SYCL e DPC++. Potete scaricare una copia gratuita dal sito web di Apress.

Poco dopo la sua pubblicazione, Khronos Group ha annunciato le specifiche finalizzate di SYCL 2020.

La recente ratifica della specifica SYCL 2020 è un passo importante. È veramente una specifica aperta con un futuro luminoso. Questa specifica è il risultato di anni di sviluppo da parte di molte persone dedicate all’industria. Basato su C++17, SYCL 2020 rende più facile accelerare le applicazioni standard C++ e avvicinarsi alla roadmap ISO C++. 

Khronos Group ha evidenziato una serie di caratteristiche in SYCL 2020 nel suo annuncio, tra cui il supporto per la memoria condivisa unificata (USM), riduzioni integrate, uso esteso di CTAD e operazioni atomiche che si allineano con le operazioni atomiche standard C++.

Le XPU sono il futuro, teniamole aperte per beneficiare della diversità delle XPU e della sicurezza della programmazione.

SYCL e DPC++ ci aiuteranno ad usare efficacemente le XPU. Fanno parte di un movimento più ampio per supportare le XPU che si estende alle librerie e a tutti gli strumenti di sviluppo del software, costruendo sulle ambizioni di SYCL e dei suoi compilatori. 

Questa è l’origine dell’iniziativa industriale oneAPI, che mi appassiona molto e nella quale sono stato felice di essere coinvolto quando sono tornato in Intel.

Il supporto per questo argomento, che mira a facilitare l’uso aperto di tutte le XPU, sta generando interesse in SYCL e oneAPI

Un buon esempio è l’uso della libreria oneAPI: Deep Neural Network (oneDNN), inizialmente altamente ottimizzata per i processori Intel, che accelera il computer più veloce del mondo (con processori ARM). 

Come risultato, oneDNN ha ora un forte supporto per i processori ARM. L’apertura delle librerie e degli strumenti SYCL e oneAPI aiuta a inaugurare una nuova era di apertura e prestazioni per darci un accesso utile alla programmazione per tutte le XPU.

Insieme, la comunità di sviluppo del software ha l’opportunità di creare standard, tra cui SYCL, che servono l’intero settore e sostengono fortemente l’adozione della programmazione eterogenea (XPU) e del moderno C++ che abbraccia il parallelismo.

SYCL offre uno standard aperto con un ampio supporto, molte opportunità di partecipazione, molteplici implementazioni open-source e possibilità apparentemente infinite. 

DPC++ fornisce un compilatore aperto basato su LLVM per ridurre lo sforzo di supportare SYCL e per incoraggiare una forte compatibilità tra le XPU. 

oneAPI fornisce un forum per discutere e promuovere un accesso aperto ed efficiente alle XPU in tutti gli aspetti dello sviluppo del software.

Spero che coglierete l’opportunità di imparare di più su SYCL, DPC++ e oneAPI, poiché le XPU sono il futuro dell’informatica

Dovremmo modellare il supporto XPU insieme, in modo trasparente, e sfruttare l’enorme diversità delle XPU disponibili per una programmazione efficace.

Tradotto da RITME