SYCL i OpenCL dla AMD GPU
Mam procesor AMD 5700XT i próbuję nauczyć się SYCL, ale mam wiele wątpliwości co do aktualnego stanu stosów sterowników AMD GPU. Zgodnie z tym, co przeczytałem, istnieje kilka stosów sterowników dla procesorów graficznych AMD: mesa, amdgpu i amdgpu-pro. Jeśli dobrze rozumiem, mesa ma własną implementację opencl i jest jeszcze jedna implementacja dla sterowników amdgpu.
Ponadto amd ma ROCm, który jest kolejną implementacją OpenCL, HIP, która jest czymś w rodzaju CUDA i trochę narzędzi, prawda?
Istnieją co najmniej 2 implementacje, ComputeCpp i hipSYCL, które mogłyby prawdopodobnie uruchomić SYCL na procesorach AMD. Czy implementacja Clang nie powinna działać również na procesorach graficznych AMD, ponieważ zgodnie z obrazem działa z urządzeniami OpenCL i SPIR-V?
Jak dobrze rozumiem, jest też oneAPI, które jest implementacją SYCL (DPC ++) z niektórymi rozszerzeniami (SYCL 2020) i kilkoma bibliotekami na szczycie tej implementacji SYCL (rodzaj cuBLAS lub cuSPARSE dla CUDA). Czy powinno być możliwe uruchamianie bibliotek oneAPI na innej implementacji SYCL?
Fonally, jeśli używam mesa do grafiki (OpenGL i Vulkan), czy jest możliwe uruchomienie na tym ROCm? W jaki sposób implementacja ROCm i OpenCL mesa współdziała ze sterownikami graficznymi mesa?
Jak widać, mam duże zamieszanie co do całego ekosystemu. Czy ktoś może rzucić na to trochę światła?
Odpowiedzi
Rozumiem, że istnieje jeden sterownik jądra, amdgpu. Mesa mieszka w przestrzeni użytkownika i jest implementacją OpenGL. amdgpu-pro zapewnia alternatywne biblioteki środowiska użytkownika o zamkniętym kodzie źródłowym (OpenGL, OpenCL itp.).
clover to implementacja OpenCL na szczycie Mesa. Nie jestem pewien, w jakim jest stanie (mam wrażenie, że przez jakiś czas nie był dobrze utrzymywany i program się zatrzymał), ale wątpię, czy będzie w stanie uruchamiać programy SYCL.
ROCm to więcej niż implementacja OpenCL. To platforma GPGPU AMD, zapewniająca platformę AI, przyspieszone biblioteki, narzędzia i kompilatory. Zawiera również implementację OpenCL. HIP nie jest implementacją OpenCL, jest to faktycznie implementacja modelu programowania CUDA przez AMD.
O ile mi wiadomo, niestety żadna niedawna implementacja AMD OpenCL nie jest w stanie uruchomić programów SYCL, ponieważ AMD nie obsługuje SPIR ani SPIR-V. AMD OpenCL nigdy nie obsługiwał SPIR-V, więc DPC ++ / clang nie będzie działać. ComputeCpp może również współpracować ze SPIR, ale obsługa tego została usunięta już jakiś czas temu z implementacji OpenCL AMD.
Jeśli chodzi o obsługę SYCL dla AMD, hipSYCL zwykle jest najlepszym rozwiązaniem. Niestety, AMD nie obsługuje twojego konkretnego GPU na ROCm (na którym buduje hipSYCL), ponieważ koncentruje obsługę ROCm na chipach, które są również używane w kartach centrów danych. Więcej informacji znajdziesz tutaj:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI to ogólny termin firmy Intel określający ich platformę obliczeniową, dostarczającą biblioteki, narzędzia i kompilatory (podobnie jak ROCm). DPC ++ / LLVM SYCL / Intel SYCL jest częścią oneAPI. Wszystkie te określenia odnoszą się do tego samego, a mianowicie implementacji przez firmę Intel standardu Khronos SYCL 2020. Prawie wszystkie rozszerzenia Intela zostały włączone do specyfikacji SYCL 2020, więc nie myśl o DPC ++ jako osobnym języku.
Możliwe jest dodanie dodatkowych backendów do bibliotek oneAPI, na przykład Codeplay zrobił to dla NVIDIA. Zasadniczo możliwe jest również przeniesienie ich do innej implementacji SYCL. Pracujemy nad pewnymi podstawami, aby potencjalnie pójść w tym kierunku z hipSYCL, poprawiając kompatybilność między hipSYCL i DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
Nie można uruchomić ROCm na szczycie mesa. Jest to w pełni niezależny stos do obliczeń GPU. O ile wiem, nie ma interakcji między ROCm a mesa.