SYCL и OpenCL для AMD gpu
У меня есть графический процессор AMD 5700XT, и я пытаюсь изучить SYCL, но у меня много сомнений по поводу текущего состояния стеков драйверов AMD для графических процессоров. Судя по тому, что я читал, для AMD gpus существует несколько стеков драйверов: mesa, amdgpu и amdgpu-pro. Если я правильно понимаю, у mesa есть собственная реализация opencl, и есть другая реализация для драйверов amdgpu.
Кроме того, у amd есть ROCm, другая реализация OpenCL, HIP, что-то вроде CUDA и некоторые инструменты, верно?
Существует как минимум 2 реализации, ComputeCpp и hipSYCL, которые могут запускать SYCL на AMD GPU. Разве реализация clang не должна работать и на AMD gpus, поскольку, согласно образу, она работает с устройствами OpenCL и SPIR-V?
Насколько я понимаю, есть также oneAPI, который является реализацией SYCL (DPC ++) с некоторыми расширениями (SYCL 2020) и некоторыми библиотеками поверх этой реализации SYCL (что-то вроде того, что cuBLAS или cuSPARSE относятся к CUDA). Можно ли запускать одну библиотеку API поверх другой реализации SYCL?
И, наконец, если я использую mesa для графики (OpenGL и Vulkan), можно ли запустить ROCm поверх этого? Как реализация ROCm и OpenCL mesa взаимодействует с графическими драйверами mesa?
Как видите, у меня большая путаница по поводу всей экосистемы. Может кто-нибудь пролить свет на это?
Ответы
Насколько я понимаю, существует единственный драйвер ядра, amdgpu. Mesa живет в пользовательском пространстве и является реализацией OpenGL. amdgpu-pro предоставляет альтернативные пользовательские библиотеки с закрытым исходным кодом (OpenGL, OpenCL и т. д.).
clover - это реализация OpenCL поверх Mesa. Я не уверен, в каком состоянии он находится (у меня сложилось впечатление, что какое-то время он не очень хорошо поддерживался и разработка застопорилась), но я сомневаюсь, что он сможет запускать программы SYCL.
ROCm - это больше, чем реализация OpenCL. Это платформа AMD GPGPU, предоставляющая платформу AI, ускоренные библиотеки, инструменты и компиляторы. Он также содержит реализацию OpenCL. HIP - это не реализация OpenCL, это фактически реализация AMD модели программирования CUDA.
Насколько мне известно, к сожалению, ни одна из недавних реализаций AMD OpenCL не может запускать программы SYCL, поскольку AMD не поддерживает ни SPIR, ни SPIR-V. AMD OpenCL никогда не поддерживал SPIR-V, поэтому DPC ++ / clang работать не будет. ComputeCpp также может работать с SPIR, но его поддержка некоторое время назад была удалена из реализации AMD OpenCL.
Что касается поддержки SYCL для AMD, обычно подходит hipSYCL. К сожалению, AMD не поддерживает ваш конкретный графический процессор в ROCm (на котором построен hipSYCL), потому что они фокусируют поддержку ROCm на чипах, которые также используются в картах центров обработки данных. Подробнее см. Здесь:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI - это общий термин Intel для их вычислительной платформы, предоставляющей библиотеки, инструменты и компиляторы (аналогично ROCm). DPC ++ / LLVM SYCL / Intel SYCL является частью oneAPI. Все эти термины относятся к одному и тому же, а именно к реализации Intel стандарта Khronos SYCL 2020. Практически все расширения Intel были объединены в спецификацию SYCL 2020, поэтому не думайте о DPC ++ как об отдельном языке.
Можно добавить дополнительные серверные модули в библиотеки oneAPI, например, Codeplay сделал это для NVIDIA. Также в принципе возможно перенести их в другую реализацию SYCL. Мы работаем над некоторыми подготовками, чтобы потенциально двигаться в этом направлении с hipSYCL, улучшая совместимость между hipSYCL и DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
Невозможно запустить ROCm поверх mesa. Это полностью независимый стек для вычислений на GPU. Насколько я знаю, взаимодействия между ROCm и мезой нет.