Итак, есть железо от AMD и хочется использовать OpenCL.
Что поддерживает железо - см. здесь: https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units
И здесь про APU: https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units
Для поддержки всех возможностей лучше ставить драйвера от AMD.
Они выпускаются для SLE, что почти равно Leap.
Для TW они могут подойти, но у TW ядро быстро становится слишком новым => неподдерживаемым.
Наличие поддержки AMD зависит от времени, прошедшего с выпуска товара.
При этом ещё есть поколения архитектур: Terascale 1-2-3, GCN 1-5, RDNA…
Поддержку Terascale AMD уже бросила, GCN1 - бросает.
Для AMD Radeon R7 240 который GCN1 поддержка есть: https://www.amd.com/ru/support/graphics/amd-radeon-r7-series/amd-radeon-r7-200-series/amd-radeon-r7-240
А для AMD Radeon HD 7790 который GCN2 поддержки нет: https://www.amd.com/ru/support/graphics/amd-radeon-hd/amd-radeon-hd-7000-series/amd-radeon-hd-7790
У RDNA OpenCL вроде как ещё не поддерживается: https://www.amd.com/ru/support/graphics/amd-radeon-5700-series/amd-radeon-rx-5700-series/amd-radeon-rx-5700-xt#amd_support_product_spec
Если нет драйверов от AMD, то можно поставить Mesa 3D.
Они работают по большей части хорошо, но с OpenCL у них плохо - либо не работает, либо ОС виснет: https://forums.opensuse.org/showthread.php/539315-LibreOfiice-hangs-AMD-CPU-Raven2-system-when-trying-to-use-OpenCL-from-Mesa-3D
Можно использовать Mesa 3D для графики OpenGL, Vulkan, VA-API, вывода изображения, **и при этом **для OpenCL установить драйвера от AMD.
Отмечу, что если у вас железо GCN1 и старее, то вроде как можно использовать Mesa 3D + для OpenCL взять нужное ПО из rpm драйверов AMDGPU-PRO / ATI FireGL.
Для GCN2 и новее (но пока что без RDNA) AMD предлагает ROCm:
https://github.com/RadeonOpenCompute/ROCm
https://rocm-documentation.readthedocs.io/en/latest/
Как ставить написано здесь: https://rocm-documentation.readthedocs.io/en/latest/Installation_Guide/Installation-Guide.html#sles-15-service-pack-1
Но не всё так просто.
Инструкция от AMD по установке AMD ROCm написана для дискретной видеокарты + SLES 15 Service Pack 1, что соответствует Leap 15.1 со стандартным ядром.
Если ядро новое, то - AMD ROCm “Not currently supported on kernels newer than 5.4”.
Также AMD ROCm при обычной установке не предназначен для APU (можно сделать полную установку со сторонними патчами).
Доработав это: https://www.clarenceho.net/2019/05/rocm-opencl-with-opensuse-tumbleweed.html
Получил:
-
Удаляем пакеты OpenCL от Mesa 3D, если есть. Он обычно не работает и иногда сбоит.
Ryzen 3200G c драйверами Mesa 3D 20.0 - LibreOffice 6.3/6.4 подвешивает ОС. -
Ставим DKMS из Main или Bumblebee.
Из Bumblebee - поновее. -
Добавляем репозиторий ROCm, без проверок GPG - чтоб установщик не спрашивал каждый раз о подписях - их нет.
https://repo.radeon.com/rocm/zyp/zypper/
sudo zypper addrepo --no-gpgcheck https://repo.radeon.com/rocm/zyp/zypper/ rocm
- Ставим пакеты:
rocm-opencl
rocm-opencl-devel
rocminfo
Добавятся
hsa-rocr-dev
hsakmt-roct
comgr
Отдельно выбираем для rocminfo:
rocm-smi-lib64
Итого: 7 шт.
Если брать пакеты без номеров, то будет одна версия ROCm, которая будет обновляться.
Если брать пакеты с номерами, то поставится номерная версия, и можно будет добавить другие без удаления установленных. Пути нужно будет руками добавлять.
-
Добавляем пользователя в группу “video”.
-
Добавляем файл
/etc/udev/rules.d/70-kfd.rules
В нём пишем строку
SUBSYSTEM=="kfd", KERNEL=="kfd", TAG+="uaccess", GROUP="video"
-
Перезагружаемся.
-
Проверка - вводим в командной строке:
/opt/rocm-3.3.0/bin/rocminfo
/opt/rocm-3.3.0/opencl/bin/x86_64/clinfo
clinfo
Номера “-3.3.0” - для версии 3.3.0.
Вроде всё.
Итог: с OpenCL работает LibreOffice и LuxMark.
FAHBench-2.3.2-Linux: на CPU - работает, на OpenCL - вылетает.
Пишет:
libGL error: MESA-LOADER: failed to open radeonsi (search paths /usr/lib64/dri)
libGL error: failed to load driver: radeonsi
libGL error: MESA-LOADER: failed to open radeonsi (search paths /usr/lib64/dri)
libGL error: failed to load driver: radeonsi
libGL error: MESA-LOADER: failed to open swrast (search paths /usr/lib64/dri)
libGL error: failed to load driver: swrast