SYCL e OpenCL para AMD gpu
Eu tenho uma GPU AMD 5700XT e estou tentando aprender SYCL, mas tenho muitas dúvidas sobre o estado atual das pilhas de driver GPU da AMD. De acordo com o que li, existem várias pilhas de drivers para AMD gpus: mesa, amdgpu e amdgpu-pro. Se bem entendi, mesa tem sua própria implementação do opencl e há outra implementação para os drivers amdgpu.
Além disso, o amd tem ROCm, que é outra implementação OpenCL, HIP, que é algo como CUDA e algumas ferramentas, certo?
Há pelo menos 2 implementações, ComputeCpp e hipSYCL, que podem rodar SYCL no AMD gpus. A implementação do clang não deveria ser capaz de rodar também em AMD gpus, de acordo com a imagem que roda em dispositivos OpenCL e SPIR-V?
Pelo que entendi corretamente, há também um API, que é uma implementação de SYCL (DPC ++) com algumas extensões (SYCL 2020) e algumas bibliotecas em cima dessa implementação de SYCL (tipo de o que cuBLAS ou cuSPARSE são para CUDA). Deve ser possível executar uma biblioteca de API em cima de outra implementação de SYCL?
Fonally, se eu usar mesa para gráficos (OpenGL e Vulkan), é possível rodar ROCm em cima disso? Como a implementação do ROCm e do OpenCL mesa interage com os drivers gráficos mesa?
Como você pode ver, tenho uma grande confusão sobre todo o ecossistema. Alguém pode fornecer alguma luz sobre isso?
Respostas
Meu entendimento é que existe um único driver de kernel, amdgpu. Mesa vive na área do usuário e é uma implementação OpenGL. amdgpu-pro fornece bibliotecas alternativas de ambiente de usuário de código-fonte fechado (OpenGL, OpenCL etc).
clover é uma implementação OpenCL no topo do Mesa. Não tenho certeza de em que estado ele está (minha impressão é que não foi muito bem mantido por algum tempo e o desenvolvimento parou), mas duvido que consiga executar programas SYCL.
O ROCm é mais do que uma implementação OpenCL. É a plataforma GPGPU da AMD, fornecendo uma plataforma de IA, bibliotecas aceleradas, ferramentas e compiladores. Ele também contém uma implementação OpenCL. HIP não é uma implementação OpenCL, é efetivamente a implementação da AMD do modelo de programação CUDA.
Que eu saiba, infelizmente nenhuma implementação AMD OpenCL é capaz de executar programas SYCL porque a AMD não suporta SPIR nem SPIR-V. AMD OpenCL nunca suportou SPIR-V, então DPC ++ / clang não funcionará. ComputeCpp também pode trabalhar com SPIR, mas o suporte para isso já foi removido há algum tempo da implementação do OpenCL da AMD.
No que diz respeito ao suporte SYCL para AMD, o hipSYCL geralmente é o caminho a percorrer. Infelizmente, a AMD não oferece suporte a sua GPU específica no ROCm (no qual o hipSYCL é construído) porque eles concentram o suporte ROCm em chips que também são usados em placas de data center. Veja aqui para mais detalhes:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI é o termo genérico da Intel para sua plataforma de computação, fornecendo bibliotecas, ferramentas e compiladores (semelhante ao ROCm). DPC ++ / LLVM SYCL / Intel SYCL faz parte de umAPI. Todos esses termos se referem à mesma coisa, ou seja, a implementação da Intel do padrão Khronos SYCL 2020. Quase todas as extensões da Intel foram incorporadas à especificação SYCL 2020, portanto, não pense no DPC ++ como uma linguagem separada.
É possível adicionar back-ends adicionais a uma biblioteca de API, por exemplo, o Codeplay fez isso para NVIDIA. Em princípio, também é possível portá-los para outra implementação SYCL. Estamos trabalhando em algumas bases para mover potencialmente nessa direção com hipSYCL, melhorando a compatibilidade entre hipSYCL e DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
Não é possível executar o ROCm no topo da mesa. É uma pilha totalmente independente para computação GPU. Pelo que eu sei, não há interação entre ROCm e mesa.