Как настроить OpenCL на видеокарте AMD с драйвером с открытым исходным кодом?
Я прочитал эту ссылку - 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 в качестве водителя:
Вы наверняка используете wheezy 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.
Эта программа работает нормально на процессоре:
$ 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
Как заставить это работать?
2 ответа
В конце концов я включил бесплатный стек OpenCL и столкнулся с очень похожими проблемами. Я предоставлю вам краткий обзор некоторых соответствующих пакетов.
Тот libopencl1-mesa
это просто время выполнения ICD, которое загружается в общий ocl-icd-libopencl1
, затем libclc
используется libopencl1-mesa
разобраться с ядрами OpenCL. Используя специфичный для чипсета LLVM бэкэнд, libclc
генерирует инструкции. Вам не хватает специфического клея для чипсета GPU, который предоставляется отсутствующим .bc
, Это значительно упрощается, но для этой проблемы этого должно быть достаточно, но хорошая диаграмма очень поможет.
В вашем конкретном примере .bc
будет предоставлено libclc-r600
Однако я не вижу ничего для вашего чипсета "Готово" на этой странице Freedesktop.org GalliumCompute. Похоже, самым низким поддерживаемым чипсетом является Evergreen (серия HD5000).
* пожалуйста, перепроверьте GalliumCompute, если вы прочитаете это после 02-04-2014.
Не уверен, что "несвободные" драйверы являются открытым исходным кодом.
Тогда, если вы посмотрите на:
OpenGL renderer string: Gallium 0.4 on AMD RV770
Похоже, для рендеринга используется Gallium LLVM (не родной GPU), поэтому нет гарантии, что OpenGL ускоряется GPU. В любом случае, если вы используете несвободные драйверы, я советую загрузить самые последние драйверы с сайта AMD и использовать их вместо установленных на данный момент.
Кроме того, недавно выпущенный AMD APP SDK (начиная с версии 2.8, если память мне подходит) поставляется отдельно от драйвера графического процессора, поэтому вы можете попробовать использовать его вместо открытого пакета. Это работает как минимум на Ubuntu 12.04 (драйверы AMD из репозитория + AMD APP SDK с сайта AMD)