SYCL et OpenCL pour GPU AMD
J'ai un GPU AMD 5700XT et j'essaie d'apprendre SYCL mais j'ai beaucoup de doutes sur l'état actuel des piles de pilotes GPU AMD. D'après ce que j'ai lu, il existe plusieurs piles de pilotes pour les gpus AMD: mesa, amdgpu et amdgpu-pro. Si je comprends bien, mesa a sa propre implémentation opencl et il existe une autre implémentation pour les pilotes amdgpu.
En outre, amd a ROCm, qui est une autre implémentation OpenCL, HIP, qui quelque chose comme CUDA et certains outils, non?
Il existe au moins 2 implémentations, ComputeCpp et hipSYCL, qui pourraient éventuellement exécuter SYCL sur les gpus AMD. L'implémentation de clang ne devrait-elle pas être capable de fonctionner également sur les GPus AMD, car selon l'image, elle fonctionne avec les périphériques OpenCL et SPIR-V?
Dans Je comprends bien, il y a aussi oneAPI, qui est une implémentation de SYCL (DPC ++) avec quelques extensions (SYCL 2020) et des bibliothèques en plus de cette implémentation SYCL (un peu ce que sont cuBLAS ou cuSPARSE pour CUDA). Doit-il être possible d'exécuter des bibliothèques oneAPI par-dessus une autre implémentation SYCL?
En fait, si j'utilise mesa pour les graphiques (OpenGL et Vulkan), est-il possible d'exécuter ROCm en plus de cela? Comment l'implémentation ROCm et OpenCL mesa interagit-elle avec les pilotes graphiques mesa?
Comme vous pouvez le voir, j'ai une grande confusion sur tout l'écosystème. Quelqu'un peut-il éclairer cela?
Réponses
Je crois comprendre qu'il existe un seul pilote de noyau, amdgpu. Mesa vit dans le userland et est une implémentation OpenGL. amdgpu-pro fournit des bibliothèques utilisateur alternatives à source fermée (OpenGL, OpenCL, etc.).
clover est une implémentation OpenCL au-dessus de Mesa. Je ne sais pas dans quel état il se trouve (j'ai l'impression qu'il n'a pas été très bien entretenu pendant un certain temps et que le développement est au point mort), mais je doute qu'il puisse exécuter les programmes SYCL.
ROCm est plus qu'une implémentation OpenCL. C'est la plate-forme GPGPU d'AMD, fournissant une plate-forme d'IA, des bibliothèques accélérées, des outils et des compilateurs. Il contient également une implémentation OpenCL. HIP n'est pas une implémentation OpenCL, c'est effectivement l'implémentation par AMD du modèle de programmation CUDA.
À ma connaissance, malheureusement, aucune implémentation récente d'AMD OpenCL n'est capable d'exécuter des programmes SYCL car AMD ne prend en charge ni SPIR ni SPIR-V. AMD OpenCL n'a jamais pris en charge SPIR-V, donc DPC ++ / clang ne fonctionnera pas. ComputeCpp peut également fonctionner avec SPIR, mais sa prise en charge a déjà été supprimée il y a quelque temps de l'implémentation OpenCL d'AMD.
En ce qui concerne le support SYCL pour AMD, hipSYCL est généralement la voie à suivre. Malheureusement, AMD ne prend pas en charge votre GPU spécifique sur ROCm (sur lequel hipSYCL est construit) car ils concentrent le support ROCm sur les puces également utilisées dans les cartes de centre de données. Voir ici pour plus de détails:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI est le terme générique d'Intel pour leur plate-forme de calcul, fournissant des bibliothèques, des outils et des compilateurs (comme ROCm). DPC ++ / LLVM SYCL / Intel SYCL fait partie de oneAPI. Tous ces termes font référence à la même chose, à savoir l'implémentation par Intel de la norme Khronos SYCL 2020. Presque toutes les extensions d'Intel ont été fusionnées dans la spécification SYCL 2020, alors ne pensez pas à DPC ++ comme un langage séparé.
Il est possible d'ajouter des backends supplémentaires aux bibliothèques oneAPI, par exemple Codeplay l'a fait pour NVIDIA. Il est également en principe possible de les porter vers une autre implémentation SYCL. Nous travaillons sur des bases pour potentiellement avancer dans cette direction avec hipSYCL en améliorant la compatibilité entre hipSYCL et DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
Il n'est pas possible d'exécuter ROCm sur mesa. C'est une pile entièrement indépendante pour le calcul GPU. Autant que je sache, il n'y a pas d'interaction entre ROCm et mesa.