Leap + TW: Получение работающего OpenCL на железе AMD через AMD ROCm

Итак, есть железо от 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

Получил:

  1. Удаляем пакеты OpenCL от Mesa 3D, если есть. Он обычно не работает и иногда сбоит.
    Ryzen 3200G c драйверами Mesa 3D 20.0 - LibreOffice 6.3/6.4 подвешивает ОС.

  2. Ставим DKMS из Main или Bumblebee.
    Из Bumblebee - поновее.

  3. Добавляем репозиторий ROCm, без проверок GPG - чтоб установщик не спрашивал каждый раз о подписях - их нет.

https://repo.radeon.com/rocm/zyp/zypper/


sudo zypper addrepo --no-gpgcheck https://repo.radeon.com/rocm/zyp/zypper/ rocm
  1. Ставим пакеты:

rocm-opencl
rocm-opencl-devel
rocminfo

Добавятся

hsa-rocr-dev
hsakmt-roct
comgr

Отдельно выбираем для rocminfo:

rocm-smi-lib64

Итого: 7 шт.

Если брать пакеты без номеров, то будет одна версия ROCm, которая будет обновляться.
Если брать пакеты с номерами, то поставится номерная версия, и можно будет добавить другие без удаления установленных. Пути нужно будет руками добавлять.

  1. Добавляем пользователя в группу “video”.

  2. Добавляем файл

/etc/udev/rules.d/70-kfd.rules

В нём пишем строку

SUBSYSTEM=="kfd", KERNEL=="kfd", TAG+="uaccess", GROUP="video"
  1. Перезагружаемся.

  2. Проверка - вводим в командной строке:


/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

Устанавливая драйвера rock-dkms от AMD можно налететь на ошибку: https://forums.opensuse.org/showthread.php/539742-With-AMD-Picasso-APU-system-hangs-during-boot-with-kernel-5-6-2-(5-6-0-works)
При загрузке видеоядра заданиями OpenCL другая работа - например, отрисовка интерфейса - будет сильно тормозить.
Программа SVP не видит OpenCL на APU Ryzen 3 3200G.

LuxMark часто виснет - не может перейти от вычислений к отображению окна, сообщающего об окончании прогона.
В clpeak данные по ПСП около 12,7 GBPS, ожидал в разы больше.
Т.ч. вроде OpenCL работает, но всё не очень.

AMD ROCm на APU либо тормозит, либо не работает.
Берите драйвера OpenCL от amdgpu-pro: https://forums.opensuse.org/showthread.php/548515-OpenCL-на-AMD-APU-и-картах-с-драйверами-Mesa-3D

AMD сделала ROCm средством для узкого рынка профессионалов.
Начиная с ROCm 4.0 заявляется поддержка только GCN5 (Vega) и ейной наследницы CDNA, только отдельные карты, без встроек.
Облажались как ATI. Хорошее железо, плохущий софт.

ROCm можно поставить по этому руководству: https://www.clarenceho.net/2019/05/rocm-opencl-with-opensuse-tumbleweed.html .
Есть патчи](https://bruhnspace.com/en/bruhnspace-rocm-for-amd-apus/) для получения полных возможностей на встройке, но для ROCm 3.3, у которого нет поддержки работы с изображениями, и т.д.

Для разработок с OpenCL пользуйтесь nVidia или Intel.