SYCL e OpenCL per AMD gpu
Ho una GPU AMD 5700XT e sto cercando di imparare SYCL ma ho molti dubbi sullo stato attuale degli stack di driver della GPU AMD. Secondo quanto ho letto, ci sono diversi stack di driver per le GPU AMD: mesa, amdgpu e amdgpu-pro. Se ho capito bene, mesa ha la propria implementazione di opencl e c'è un'altra implementazione per i driver amdgpu.
Inoltre, amd ha ROCm, che è un'altra implementazione di OpenCL, HIP, che qualcosa come CUDA e alcuni strumenti, giusto?
Esistono almeno 2 implementazioni, ComputeCpp e hipSYCL, che potrebbero eseguire SYCL su GPU AMD. L'implementazione clang non dovrebbe essere in grado di funzionare anche su GPU AMD, poiché secondo l'immagine funziona con dispositivi OpenCL e SPIR-V?
In Ho capito bene, c'è anche oneAPI, che è un'implementazione di SYCL (DPC ++) con alcune estensioni (SYCL 2020) e alcune librerie in cima a quell'implementazione SYCL (tipo di cosa sono cuBLAS o cuSPARSE per CUDA). Dovrebbe essere possibile eseguire le librerie oneAPI su un'altra implementazione SYCL?
Fonalmente, se uso mesa per la grafica (OpenGL e Vulkan), è possibile eseguire ROCm oltre a quello? In che modo l'implementazione di ROCm e OpenCL mesa interagisce con i driver grafici di mesa?
Come puoi vedere ho una grande confusione su tutto l'ecosistema. Qualcuno può fornire un po 'di luce su di esso?
Risposte
La mia comprensione è che esiste un singolo driver del kernel, amdgpu. Mesa vive nel territorio degli utenti ed è un'implementazione OpenGL. amdgpu-pro fornisce librerie userland alternative closed-source (OpenGL, OpenCL ecc.).
clover è un'implementazione OpenCL in cima a Mesa. Non sono sicuro in quale stato si trovi (la mia impressione è che non sia stato mantenuto molto bene per un po 'di tempo e lo sviluppo si sia bloccato), ma dubito che sarà in grado di eseguire programmi SYCL.
ROCm è più di un'implementazione OpenCL. È la piattaforma GPGPU di AMD, che fornisce una piattaforma AI, librerie accelerate, strumenti e compilatori. Contiene anche un'implementazione OpenCL. HIP non è un'implementazione OpenCL, è effettivamente l'implementazione di AMD del modello di programmazione CUDA.
Per quanto ne so, sfortunatamente nessuna recente implementazione AMD OpenCL è in grado di eseguire programmi SYCL perché AMD non supporta né SPIR né SPIR-V. AMD OpenCL non ha mai supportato SPIR-V, quindi DPC ++ / clang non funzionerà. ComputeCpp può funzionare anche con SPIR, ma il supporto è stato rimosso già da tempo dall'implementazione OpenCL di AMD.
Per quanto riguarda il supporto SYCL per AMD, hipSYCL di solito è la strada da percorrere. Sfortunatamente, AMD non supporta la tua GPU specifica su ROCm (su cui hipSYCL si basa) perché focalizza il supporto ROCm su chip che vengono utilizzati anche nelle schede del data center. Vedi qui per maggiori dettagli:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI è il termine generico di Intel per la piattaforma di elaborazione, che fornisce librerie, strumenti e compilatori (in modo simile a ROCm). DPC ++ / LLVM SYCL / Intel SYCL fa parte di oneAPI. Tutti questi termini si riferiscono alla stessa cosa, vale a dire l'implementazione di Intel dello standard Khronos SYCL 2020. Praticamente tutte le estensioni di Intel sono state unite nella specifica SYCL 2020, quindi non pensare a DPC ++ come a un linguaggio separato.
È possibile aggiungere backend aggiuntivi alle librerie oneAPI, ad esempio Codeplay lo ha fatto per NVIDIA. In linea di principio è anche possibile portarli su un'altra implementazione SYCL. Stiamo lavorando su alcune basi per muoverci potenzialmente in quella direzione con hipSYCL migliorando la compatibilità tra hipSYCL e DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
Non è possibile eseguire ROCm su mesa. È uno stack completamente indipendente per il calcolo della GPU. Per quanto ne so non c'è interazione tra ROCm e mesa.