SYCL: programmazione eterogenea in C++

Con il nostro team di ricerca e sviluppo abbiamo condotto uno studio approfondito su SYCL, lo standard aperto del Khronos Group per la programmazione parallela in C++.
L’obiettivo è esplorare come questa tecnologia possa migliorare la portabilità, le prestazioni e la scalabilità delle applicazioni su architetture eterogenee, come CPU, GPU, FPGA e acceleratori personalizzati.

SYCL è una specifica standard aperta pubblicata dal Khronos Group. Non è un linguaggio di programmazione autonomo, ma un’estensione del C++. Definisce uno strato di programmazione a sorgente singolo che consente agli sviluppatori di utilizzare le moderne funzionalità del C++ su una vasta gamma di dispositivi eterogenei.

Grazie al supporto di OpenCL e altri backend, SYCL permette l’esecuzione parallela su diversi tipi di hardware, inclusi CPU, GPU, DSP, FPGA e chip personalizzati, fornendo le basi per creare librerie middleware e applicazioni portabili ed efficienti.

Obiettivi del nostro studio:

  • Analizzare le caratteristiche e i vantaggi del modello SYCL rispetto ad altri framework di calcolo parallelo.
  • Valutare le prestazioni di diverse implementazioni SYCL su hardware eterogeneo.
  • Approfondire il funzionamento interno della SYCL runtime, del device compiler e dei backend (OpenCL, CUDA).
  • Sperimentare casi d’uso pratici, come la parallelizzazione di algoritmi personalizzati e la migrazione di codice esistente verso SYCL.

SEMPLICITÀ

Programmazione eterogenea a sorgente singolo utilizzando C++ standard.

OTTIMIZZAZIONE

Il compilatore ottimizza il codice C++ per OpenCL, CUDA, FPGA, ecc.

FACILE CAMBIO DI BACKEND

Supporto robusto da parte di grandi fornitori come Intel e Xilinux, etc...

LICENZA GRATUITA

Licenza gratuita software Apache 2.0.

SEMPLICITÀ NEL DEBUG

Possibilità di eseguire il debug utilizzando il backend CPU.

ORIENTAMENTO

Il modello di programmazione SYCL può indirizzare qualsiasi dispositivo supportato dal suo backend e supporta diversi backend come OpenCL, CUDA, HIP, OpenMP, e altri.

DPC++: la nostra esperienza con l’implementazione Intel

Nel corso dello studio abbiamo utilizzato Data Parallel C++ (DPC++), l’implementazione open di SYCL sviluppata da Intel all’interno del framework oneAPI.
DPC++ consente di sviluppare applicazioni C++ portabili su diverse architetture (CPU, GPU, FPGA) con un singolo codice sorgente, semplificando il processo di ottimizzazione e di debug.
Abbiamo inoltre sperimentato l’uso del DPC++ Compatibility Tool (SYCLomatic) per la conversione automatica di codice CUDA in SYCL, con risultati promettenti in termini di efficienza e manutenibilità.

sullo studio SYCL.

CASO STUDIO

CPU: Intel Core i7-8750H (Single-Thread): 105ms

CPU: Intel Core i7-8750H (Backend OpenCl): 2,38ms

GPU: Intel UHD Graphics 630 (Backend OpenCL): 2,18ms

GPU: NVIDIA GeForce GTX 1050 (Backend CUDA): 0,63ms

Conclusioni

Lo studio ha confermato che SYCL rappresenta un approccio solido e scalabile per la programmazione eterogenea in C++.
Grazie alla sua architettura aperta, alla compatibilità con C++17 e alla possibilità di operare su diversi backend, SYCL offre un modello di sviluppo unificato, portabile e performante, in linea con le esigenze delle applicazioni scientifiche e industriali di nuova generazione.

Approfondimento tecnico

Questo studio rientra nelle nostre attività di ricerca su tecnologie di programmazione ad alte prestazioni (HPC) e calcolo parallelo.
Continuiamo a esplorare soluzioni aperte e standard per migliorare la portabilità del codice, la scalabilità delle prestazioni e la sostenibilità dei processi di sviluppo.

📎 In allegato sono disponibili le slide di approfondimento

Caso Studio