SYCL y OpenCL para AMD gpu
Tengo una gpu AMD 5700XT y estoy tratando de aprender SYCL, pero tengo muchas dudas sobre el estado actual de las pilas de controladores AMD gpu. Según lo que leí, hay varias pilas de controladores para AMD gpus: mesa, amdgpu y amdgpu-pro. Si entiendo correctamente, mesa tiene su propia implementación opencl y hay otra implementación para los controladores amdgpu.
Además, amd tiene ROCm, que es otra implementación de OpenCL, HIP, algo como CUDA y algunas herramientas, ¿verdad?
Hay al menos 2 implementaciones, ComputeCpp y hipSYCL, que posiblemente podrían ejecutar SYCL en AMD gpus. ¿No debería la implementación de clang poder ejecutarse también en AMD gpus, ya que de acuerdo con la imagen se ejecuta con dispositivos OpenCL y SPIR-V?
Entiendo correctamente, también hay oneAPI, que es una implementación de SYCL (DPC ++) con algunas extensiones (SYCL 2020) y algunas bibliotecas además de esa implementación SYCL (algo así como cuBLAS o cuSPARSE son para CUDA). ¿Debería ser posible ejecutar bibliotecas oneAPI sobre otra implementación SYCL?
Fonalmente, si uso mesa para gráficos (OpenGL y Vulkan), ¿es posible ejecutar ROCm además de eso? ¿Cómo interactúa la implementación de mesa de ROCm y OpenCL con los controladores gráficos de mesa?
Como puede ver, tengo una gran confusión sobre todo el ecosistema. ¿Alguien puede aclararlo?
Respuestas
Tengo entendido que hay un solo controlador de kernel, amdgpu. Mesa vive en la tierra de los usuarios y es una implementación de OpenGL. amdgpu-pro proporciona bibliotecas alternativas de campo de usuario de código cerrado (OpenGL, OpenCL, etc.).
clover es una implementación de OpenCL sobre Mesa. No estoy seguro de en qué estado se encuentra (mi impresión es que no se mantuvo muy bien durante algún tiempo y el desarrollo se ha estancado), pero dudo que pueda ejecutar programas SYCL.
ROCm es más que una implementación de OpenCL. Es la plataforma GPGPU de AMD, que proporciona una plataforma de inteligencia artificial, bibliotecas, herramientas y compiladores acelerados. También contiene una implementación de OpenCL. HIP no es una implementación de OpenCL, es efectivamente la implementación de AMD del modelo de programación CUDA.
Que yo sepa, desafortunadamente, ninguna implementación reciente de AMD OpenCL puede ejecutar programas SYCL porque AMD no es compatible con SPIR ni SPIR-V. AMD OpenCL nunca ha admitido SPIR-V, por lo que DPC ++ / clang no funcionará. ComputeCpp también puede funcionar con SPIR, pero el soporte para eso ya se eliminó hace algún tiempo de la implementación OpenCL de AMD.
En lo que respecta al soporte SYCL para AMD, hipSYCL suele ser el camino a seguir. Desafortunadamente, AMD no es compatible con su GPU específica en ROCm (en el que se construye hipSYCL) porque enfocan la compatibilidad con ROCm en chips que también se utilizan en tarjetas de centros de datos. Vea aquí para más detalles:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI es el término genérico de Intel para su plataforma informática, que proporciona bibliotecas, herramientas y compiladores (de manera similar a ROCm). DPC ++ / LLVM SYCL / Intel SYCL es parte de oneAPI. Todos esos términos se refieren a lo mismo, a saber, la implementación de Intel del estándar Khronos SYCL 2020. Prácticamente todas las extensiones de Intel se han fusionado en la especificación SYCL 2020, así que no piense en DPC ++ como un lenguaje separado.
Es posible agregar backends adicionales a las bibliotecas oneAPI, por ejemplo, Codeplay lo ha hecho para NVIDIA. En principio, también es posible trasladarlos a otra implementación SYCL. Estamos trabajando en algunas bases para avanzar potencialmente en esa dirección con hipSYCL mejorando la compatibilidad entre hipSYCL y DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
No es posible ejecutar ROCm en la parte superior de la mesa. Es una pila totalmente independiente para la computación de GPU. Hasta donde yo sé, no hay interacción entre ROCm y mesa.