Как настроить OpenCL на видеокарта AMD с драйвером opensource?

Я прочитал эту ссылку - https://wiki.debian.org/ru/AtiHowTo и решите настроить OpenCL.

драйверу r600g по-прежнему приходится загружать собственный микрокод в графический процессор для ускорения аппаратного ускорения. Эта прошивка обычно включается в ядро, но упаковано отдельно в Debian.

Итак, я установил прошивку:

# apt-show-versions firmware-linux-nonfree firmware-linux
firmware-linux-nonfree:all/sid 0.40 uptodate
firmware-linux:all/sid 0.40 uptodate

Затем я обновляю версию ядра:

uname -v
#1 SMP PREEMPT RT Debian 3.12.8-1 (2014-01-19)

и проверили флаги ядра:

grep DRM_RADEON /boot/config-$(uname -r)
CONFIG_DRM_RADEON=m
# CONFIG_DRM_RADEON_UMS is not set
grep AGP /boot/config-$(uname -r)
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=y
CONFIG_AGP_SIS=y
CONFIG_AGP_VIA=y

Также я устанавливаю версию xserver достаточно недавно:

# apt-show-versions xorg
xorg:amd64/sid 1:7.7+5 uptodate

Я выбираю radeon в качестве драйвера:

Вы, безусловно, используете хедзи-xserver-xorg-core, который не больше не предоставляйте xorg-video-abi-6.0, а radeonhd недоступен для новый xorg-video-abi, поскольку он был удален из Debian

# apt-show-versions xserver-xorg-video-radeon
xserver-xorg-video-radeon:amd64/sid 1:7.3.0-1 uptodate

Это дает мне работу OpenGL:

$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD RV770
OpenGL core profile version string: 3.1 (Core Profile) Mesa 10.1.0-devel (git-81144c0 saucy-oibaf-ppa+curaga)
OpenGL core profile shading language version string: 1.40
OpenGL core profile context flags: (none)
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.1.0-devel (git-81144c0 saucy-oibaf-ppa+curaga)
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:

Я пытаюсь использовать приложение, которое работает с OpenCL.

Эти программы работают нормально на CPU:

$ mono scallion/bin/Debug/scallion.exe parallax
Cooking up some delicions scallions...
Putting 1 patterns into 1 buckets.
Using kernel optimized from file kernel.cl (Optimized4)
Using work group size 1
Compiling kernel... done.
LoopIteration:10  HashCount:167.77MH  Speed:7.8MH/s  Runtime:00:00:21
Predicted:19:38:20
Stopping and shutting down...

LoopIteration:11  HashCount:184.55MH  Speed:7.8MH/s  Runtime:00:00:23
Predicted:19:36:58  init: 2687ms / 1 (2687ms, 0.37/s)
generate key: 153ms / 6 (25.5ms, 39.22/s)
cpu precompute: 7ms / 6 (1.17ms, 857.14/s)
total without init: 23706ms / 1 (23706ms, 0.04/s)
set buffers: 0ms / 11 (0ms, 0/s)
write buffers: 0ms / 11 (0ms, 0/s)
read results: 23699ms / 11 (2154.45ms, 0.46/s)
check results: 0ms / 11 (0ms, 0/s)

7.78 million hashes per second

Stopping and shutting down...

Но я не могу обнаружить GPU:

$ mono scallion/bin/Debug/scallion.exe
Usage: scallion [OPTIONS]+ regex [regex]+
Options:
      -l, --listdevices          Lists the devices that can be used.
      -d, --device=VALUE         Specifies the opencl device that should be used.

В списке устройств нет графического процессора:

$ mono scallion/bin/Debug/scallion.exe -l
Id:0 Name:Intel(R) Core(TM)2 Quad CPU    Q9650  @ 3.00GHz
    PreferredGroupSizeMultiple:1 ComputeUnits:4 ClockFrequency:2000
    MaxConstantBufferSize:65536 MaxConstantArgs:8 MaxMemAllocSize:2147483648

Я не могу найти инструкции по настройке OpenCL:

apt-get install libclc-r600

apt-show-versions libclc-r600 ocl-icd-libopencl1
libclc-r600:all/saucy 0~git20140101-1~gd~s uptodate
ocl-icd-libopencl1:amd64/sid 2.1.3-2 uptodate

и после запуска приложения появляется сообщение об ошибке:

~/github.com/lachesis/scallion$ mono ./scallion/bin/Debug/scallion.exe -l

Unhandled Exception:
System.InvalidOperationException: ErrorCode:'-1001'
at scallion.CLDeviceInfo.CheckError (Int32 err) [0x00000] in :0
at scallion.CLDeviceInfo.GetPlatformIds () [0x00000] in :0
at scallion.CLDeviceInfo.GetDeviceIds () [0x00000] in :0
at scallion.CLRuntime.GetDevices () [0x00000] in :0
at scallion.Program.ListDevices () [0x00000] in :0
at scallion.Program.Main (System.String[] args) [0x00000] in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidOperationException:
ErrorCode:'-1001'
at scallion.CLDeviceInfo.CheckError (Int32 err) [0x00000] in :0
at scallion.CLDeviceInfo.GetPlatformIds () [0x00000] in :0
at scallion.CLDeviceInfo.GetDeviceIds () [0x00000] in :0
at scallion.CLRuntime.GetDevices () [0x00000] in :0
at scallion.Program.ListDevices () [0x00000] in :0
at scallion.Program.Main (System.String[] args) [0x00000] in :0

Значения кода ошибки определены в opencl.h Похоже, что ваша платформа настроена неправильно. CL_PLATFORM_NOT_FOUND_KHR (-1001) ошибка от clGetPlatformID. Это потому, что у вас есть диспетчер, но нет реальных драйверов OpenCL. "

После

sudo apt-get install libopencl1-mesa

$ find / -iname «libMesaOpenCL.so*» 2>/dev/null
/usr/lib/x86_64-linux-gnu/libMesaOpenCL.so
/usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1

В файле конфигурации должно быть

cat /etc/OpenCL/vendors/mesa.icd
libMesaOpenCL.so

Ошибка

fatal error: cannot open file '/usr/lib/clc/rv770-r600--.bc': No such file or directory

Как это сделать?

Ответ 1

В конечном итоге я включил бесплатный стек OpenCL и столкнулся с очень похожими проблемами. Я предоставлю краткий обзор некоторых соответствующих пакетов.

Это libopencl1-mesa - это только время выполнения ICD, которое загружается в общий ocl-icd-libopencl1. Тогда libclc используется libopencl1-mesa для работы с ядрами OpenCL. Используя базовый компонент набора микросхем LLVM, libclc генерирует инструкции. Вам не хватает определенного набора микросхем для графического чипа, который предоставляется отсутствующим .bc. Это значительно упрощается, но для этой проблемы это должно быть достаточно, но хорошая диаграмма поможет очень.

В вашем конкретном примере .bc будет предоставлен libclc-r600 Однако я ничего не вижу для вашего чипсета "DONE", на этом Freedesktop.org GalliumCompute. Похоже, самый низкий поддерживаемый чипсет - Evergreen (серия HD5000).

* повторите проверку GalliumCompute, если вы прочтете это после 02-04-2014.

Ответ 2

Не уверен, что драйверы "без сбоев" являются открытыми.

Затем, если вы посмотрите на:

OpenGL renderer string: Gallium 0.4 on AMD RV770

Похоже, что Gallium LLVM используется для рендеринга (не встроенного графического процессора), поэтому не гарантируется, что OpenGL ускоряется GPU. В любом случае, если вы используете несвободные драйверы, мой совет - загрузить самые последние драйверы с сайта AMD и использовать их вместо установленных на данный момент.

Кроме того, недавний AMD APP SDK (с 2,8 в, если память мне подходит) поставляется отдельно от драйвера графического процессора, поэтому вы можете попытаться использовать его вместо открытого пакета. Он работает по крайней мере на Ubuntu 12.04 (драйверы AMD из репозитория + AMD APP SDK с сайта AMD)